diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2015-12-16 12:57:14 +0000 |
---|---|---|
committer | abiesheuvel <abiesheuvel@Edk2> | 2015-12-16 12:57:14 +0000 |
commit | e7e120133d5f5fa7871d20d3995da87826f172e6 (patch) | |
tree | db2bfd553d52f59fead4b70317feacb73da520ab /ArmPkg | |
parent | 850ba6a953f4a3502f98de872d86a23892b9dfec (diff) | |
download | edk2-e7e120133d5f5fa7871d20d3995da87826f172e6.tar.gz edk2-e7e120133d5f5fa7871d20d3995da87826f172e6.tar.bz2 edk2-e7e120133d5f5fa7871d20d3995da87826f172e6.zip |
ArmPkg: rewrite vector table population macros
Unfortunately, Clang does not support the use of symbol references in .org
directives, and bails with the following error message when it encounters
them:
<...>:error: expected assembly-time absolute expression
.org DebugAgentVectorTable + 0x000
So replace the .org arguments with absolute values, and move the whole
vector table into a subsection with the appropriate alignment, and
starting at .org 0x0. This gives the same protection with respect to
entries that exceed 128 bytes, in a way that Clang supports as well.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19303 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg')
-rw-r--r-- | ArmPkg/Include/Chipset/AArch64.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/ArmPkg/Include/Chipset/AArch64.h b/ArmPkg/Include/Chipset/AArch64.h index 5e1653bcb6..e53605f641 100644 --- a/ArmPkg/Include/Chipset/AArch64.h +++ b/ArmPkg/Include/Chipset/AArch64.h @@ -119,15 +119,18 @@ #define ARM_VECTOR_LOW_A32_SERR 0x780
#define VECTOR_BASE(tbl) \
+ .section .text.##tbl##,"ax"; \
.align 11; \
+ .org 0x0; \
GCC_ASM_EXPORT(tbl); \
ASM_PFX(tbl): \
#define VECTOR_ENTRY(tbl, off) \
- .org ASM_PFX(tbl) + off
+ .org off
#define VECTOR_END(tbl) \
- .org ASM_PFX(tbl) + 0x800
+ .org 0x800; \
+ .previous
VOID
EFIAPI
|