diff --git a/gnuefi/elf_aarch64_efi.lds b/gnuefi/elf_aarch64_efi.lds index 65b584d..d017669 100644 --- a/gnuefi/elf_aarch64_efi.lds +++ b/gnuefi/elf_aarch64_efi.lds @@ -22,12 +22,12 @@ SECTIONS } _etext = .; _text_size = _etext - _text; - . = ALIGN(4096); + . = ALIGN(65536); .reloc : { KEEP (*(.reloc)) } - . = ALIGN(65536); + . = ALIGN(4096); .dynamic : { *(.dynamic) } . = ALIGN(4096); .data : diff --git a/gnuefi/elf_arm_efi.lds b/gnuefi/elf_arm_efi.lds index ec09eb0..cae55ea 100644 --- a/gnuefi/elf_arm_efi.lds +++ b/gnuefi/elf_arm_efi.lds @@ -27,7 +27,7 @@ SECTIONS } =0 _reloc_vsize = _evreloc - _reloc; _reloc_size = _ereloc - _reloc; - . = ALIGN(65536); + . = ALIGN(4096); _data = .; .dynamic : { *(.dynamic) } . = ALIGN(4096); diff --git a/inc/aarch64/efisetjmp_arch.h b/inc/aarch64/efisetjmp_arch.h index d960706..74e1f87 100644 --- a/inc/aarch64/efisetjmp_arch.h +++ b/inc/aarch64/efisetjmp_arch.h @@ -29,6 +29,6 @@ typedef struct { UINT64 D13; UINT64 D14; UINT64 D15; -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_AARCH64_SETJMP_H */ diff --git a/inc/arm/efisetjmp_arch.h b/inc/arm/efisetjmp_arch.h index 17f5dc0..b809453 100644 --- a/inc/arm/efisetjmp_arch.h +++ b/inc/arm/efisetjmp_arch.h @@ -16,6 +16,6 @@ typedef struct { UINT32 R12; UINT32 R13; UINT32 R14; -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_ARM_SETJMP_H */ diff --git a/inc/eficompiler.h b/inc/eficompiler.h index 8818747..6f6ff7d 100644 --- a/inc/eficompiler.h +++ b/inc/eficompiler.h @@ -39,9 +39,19 @@ Abstract: #endif #ifdef _MSC_EXTENSIONS -#define ALIGN(x) __declspec(align(x)) +#define EFI_ALIGN(x) __declspec(align(x)) #else -#define ALIGN(x) __attribute__((__aligned__(x))) +#define EFI_ALIGN(x) __attribute__((__aligned__(x))) +#endif + +#ifndef ALIGN +#define ALIGN(x) EFI_ALIGN(x) +#endif + +#ifdef _MSC_EXTENSIONS +#define EFI_NORETURN __declspec(noreturn) +#else +#define EFI_NORETURN __attribute__((noreturn)) #endif /* Also add a catch-all on __attribute__() for MS compilers */ diff --git a/inc/efisetjmp.h b/inc/efisetjmp.h index de69194..4037688 100644 --- a/inc/efisetjmp.h +++ b/inc/efisetjmp.h @@ -5,6 +5,6 @@ #include "efisetjmp_arch.h" extern UINTN setjmp(jmp_buf env) __attribute__((returns_twice)); -extern VOID longjmp(jmp_buf env, UINTN value) __attribute__((noreturn)); +extern VOID longjmp(jmp_buf env, UINTN value) EFI_NORETURN; #endif /* GNU_EFI_SETJMP_H */ diff --git a/inc/ia32/efisetjmp_arch.h b/inc/ia32/efisetjmp_arch.h index a5c1a81..f65432e 100644 --- a/inc/ia32/efisetjmp_arch.h +++ b/inc/ia32/efisetjmp_arch.h @@ -10,6 +10,6 @@ typedef struct { UINT32 Ebp; UINT32 Esp; UINT32 Eip; -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_IA32_SETJMP_H */ diff --git a/inc/ia64/efisetjmp_arch.h b/inc/ia64/efisetjmp_arch.h index ceda448..7b674f6 100644 --- a/inc/ia64/efisetjmp_arch.h +++ b/inc/ia64/efisetjmp_arch.h @@ -42,6 +42,6 @@ typedef struct { UINT64 Predicates; UINT64 LoopCount; UINT64 FPSR; -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_IA64_SETJMP_H */ diff --git a/inc/loongarch64/efisetjmp_arch.h b/inc/loongarch64/efisetjmp_arch.h index 18aefaf..41ff410 100644 --- a/inc/loongarch64/efisetjmp_arch.h +++ b/inc/loongarch64/efisetjmp_arch.h @@ -18,6 +18,6 @@ typedef struct { UINT64 S6; UINT64 S7; UINT64 S8; -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_LOONGARCH64_SETJMP_H */ diff --git a/inc/mips64el/efisetjmp_arch.h b/inc/mips64el/efisetjmp_arch.h index 2b8f756..e241284 100644 --- a/inc/mips64el/efisetjmp_arch.h +++ b/inc/mips64el/efisetjmp_arch.h @@ -29,6 +29,6 @@ typedef struct { UINT64 F30; UINT64 F31; #endif -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_MIPS64EL_SETJMP_H */ diff --git a/inc/riscv64/efisetjmp_arch.h b/inc/riscv64/efisetjmp_arch.h index 9288c1f..bb6f467 100644 --- a/inc/riscv64/efisetjmp_arch.h +++ b/inc/riscv64/efisetjmp_arch.h @@ -35,6 +35,6 @@ typedef struct { UINT64 fs9; UINT64 fs10; UINT64 fs11; -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_RISCV64_SETJMP_H */ diff --git a/inc/x86_64/efisetjmp_arch.h b/inc/x86_64/efisetjmp_arch.h index b1ad1fe..8d100ae 100644 --- a/inc/x86_64/efisetjmp_arch.h +++ b/inc/x86_64/efisetjmp_arch.h @@ -17,6 +17,6 @@ typedef struct { UINT64 Rip; UINT64 MxCsr; UINT8 XmmBuffer[160]; // XMM6 - XMM15 -} ALIGN(JMPBUF_ALIGN) jmp_buf[1]; +} EFI_ALIGN(JMPBUF_ALIGN) jmp_buf[1]; #endif /* GNU_EFI_X86_64_SETJMP_H */ diff --git a/lib/ctors.S b/lib/ctors.S index 8aa36dc..4a66a4e 100644 --- a/lib/ctors.S +++ b/lib/ctors.S @@ -9,34 +9,29 @@ * have NULLs which aren't guaranteed to be at the end. */ .section .init_array,"aw",%init_array - .p2align 3, 0 + .p2align 4, 0 .globl __init_array_start __init_array_start: - .p2align 3, 0 .globl __init_array_end __init_array_end: .section .ctors,"aw",%progbits - .p2align 3, 0 + .p2align 4, 0 .globl __CTOR_LIST__ __CTOR_LIST__: - .p2align 3, 0 .globl __CTOR_END__ __CTOR_END__: .section .dtors,"aw",%progbits - .p2align 3, 0 + .p2align 4, 0 .globl __DTOR_LIST__ __DTOR_LIST__: - .p2align 3, 0 .globl __DTOR_END__ __DTOR_END__: .section .fini_array,"aw",%fini_array - .p2align 3, 0 + .p2align 4, 0 .globl __fini_array_start __fini_array_start: - .p2align 3, 0 .globl __fini_array_end __fini_array_end: - .p2align 3, 0 #if defined(__ELF__) && defined(__linux__) .section .note.GNU-stack,"",%progbits