* [PATCH v2 0/2] efi_loader: fix building aarch64 EFI binaries @ 2023-01-04 11:44 Heinrich Schuchardt 2023-01-04 11:44 ` [PATCH v2 1/2] efi_loader: defines for PE-COFF section flags Heinrich Schuchardt 2023-01-04 11:44 ` [PATCH v2 2/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt 0 siblings, 2 replies; 5+ messages in thread From: Heinrich Schuchardt @ 2023-01-04 11:44 UTC (permalink / raw) To: Ilias Apalodimas; +Cc: u-boot, Heinrich Schuchardt While our EFI binaries execute without problems on EDK II they crash on a Lenovo X13s. Let our binaries look more like what EDK II produces: * move all writable data to a .data section * align sections to 4 KiB boundaries (matching EFI page size) * remove IMAGE_SCN_LNK_NRELOC_OVFL from .reloc section flags Provide constants for the section flags used by binaries. v2: use constants for section flags remove IMAGE_SCN_LNK_NRELOC_OVFL from .reloc section flags Heinrich Schuchardt (2): efi_loader: defines for PE-COFF section flags efi_loader: fix building aarch64 EFI binaries arch/arm/lib/crt0_aarch64_efi.S | 48 +++++++++++++++++++++++--------- arch/arm/lib/elf_aarch64_efi.lds | 6 ++-- include/asm-generic/pe.h | 13 +++++++++ 3 files changed, 52 insertions(+), 15 deletions(-) -- 2.37.2 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] efi_loader: defines for PE-COFF section flags 2023-01-04 11:44 [PATCH v2 0/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt @ 2023-01-04 11:44 ` Heinrich Schuchardt 2023-01-04 11:58 ` Ilias Apalodimas 2023-01-04 11:44 ` [PATCH v2 2/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt 1 sibling, 1 reply; 5+ messages in thread From: Heinrich Schuchardt @ 2023-01-04 11:44 UTC (permalink / raw) To: Ilias Apalodimas; +Cc: u-boot, Heinrich Schuchardt Provide constants for the section flags used by binaries. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- v2: new patch --- include/asm-generic/pe.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/asm-generic/pe.h b/include/asm-generic/pe.h index a1df747134..b9d674b6da 100644 --- a/include/asm-generic/pe.h +++ b/include/asm-generic/pe.h @@ -51,6 +51,19 @@ #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 #define IMAGE_SUBSYSTEM_EFI_ROM 13 +/* Section flags */ +#define IMAGE_SCN_CNT_CODE 0x00000020 +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 +#define IMAGE_SCN_CNT_UNINITIALIZED_ DATA 0x00000080 +#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 +#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 +#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 +#define IMAGE_SCN_MEM_SHARED 0x10000000 +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 +#define IMAGE_SCN_MEM_READ 0x40000000 +#define IMAGE_SCN_MEM_WRITE 0x80000000 + #define LINUX_ARM64_MAGIC 0x644d5241 #endif /* _ASM_PE_H */ -- 2.37.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] efi_loader: defines for PE-COFF section flags 2023-01-04 11:44 ` [PATCH v2 1/2] efi_loader: defines for PE-COFF section flags Heinrich Schuchardt @ 2023-01-04 11:58 ` Ilias Apalodimas 0 siblings, 0 replies; 5+ messages in thread From: Ilias Apalodimas @ 2023-01-04 11:58 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: u-boot On Wed, 4 Jan 2023 at 13:44, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > Provide constants for the section flags used by binaries. > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > v2: > new patch > --- > include/asm-generic/pe.h | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/include/asm-generic/pe.h b/include/asm-generic/pe.h > index a1df747134..b9d674b6da 100644 > --- a/include/asm-generic/pe.h > +++ b/include/asm-generic/pe.h > @@ -51,6 +51,19 @@ > #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 > #define IMAGE_SUBSYSTEM_EFI_ROM 13 > > +/* Section flags */ > +#define IMAGE_SCN_CNT_CODE 0x00000020 > +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 > +#define IMAGE_SCN_CNT_UNINITIALIZED_ DATA 0x00000080 > +#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 > +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 > +#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 > +#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 > +#define IMAGE_SCN_MEM_SHARED 0x10000000 > +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 > +#define IMAGE_SCN_MEM_READ 0x40000000 > +#define IMAGE_SCN_MEM_WRITE 0x80000000 > + > #define LINUX_ARM64_MAGIC 0x644d5241 > > #endif /* _ASM_PE_H */ > -- > 2.37.2 > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] efi_loader: fix building aarch64 EFI binaries 2023-01-04 11:44 [PATCH v2 0/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt 2023-01-04 11:44 ` [PATCH v2 1/2] efi_loader: defines for PE-COFF section flags Heinrich Schuchardt @ 2023-01-04 11:44 ` Heinrich Schuchardt 2023-01-04 12:01 ` Ilias Apalodimas 1 sibling, 1 reply; 5+ messages in thread From: Heinrich Schuchardt @ 2023-01-04 11:44 UTC (permalink / raw) To: Ilias Apalodimas; +Cc: u-boot, Heinrich Schuchardt While our EFI binaries execute without problems on EDK II they crash on a Lenovo X13s. Let our binaries look more like what EDK II produces: * move all writable data to a .data section * align sections to 4 KiB boundaries (matching EFI page size) * remove IMAGE_SCN_LNK_NRELOC_OVFL from .reloc section flags Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- v2: use constants for section flags remove IMAGE_SCN_LNK_NRELOC_OVFL from .reloc section flags --- arch/arm/lib/crt0_aarch64_efi.S | 48 +++++++++++++++++++++++--------- arch/arm/lib/elf_aarch64_efi.lds | 6 ++-- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/arch/arm/lib/crt0_aarch64_efi.S b/arch/arm/lib/crt0_aarch64_efi.S index b4fc263adf..da8db43828 100644 --- a/arch/arm/lib/crt0_aarch64_efi.S +++ b/arch/arm/lib/crt0_aarch64_efi.S @@ -25,7 +25,7 @@ pe_header: .long IMAGE_NT_SIGNATURE /* 'PE' */ coff_header: .short IMAGE_FILE_MACHINE_ARM64 /* AArch64 */ - .short 2 /* nr_sections */ + .short 3 /* nr_sections */ .long 0 /* TimeDateStamp */ .long 0 /* PointerToSymbolTable */ .long 0 /* NumberOfSymbols */ @@ -40,7 +40,7 @@ optional_header: .short IMAGE_NT_OPTIONAL_HDR64_MAGIC /* PE32+ format */ .byte 0x02 /* MajorLinkerVersion */ .byte 0x14 /* MinorLinkerVersion */ - .long _edata - _start /* SizeOfCode */ + .long _etext - _start /* SizeOfCode */ .long 0 /* SizeOfInitializedData */ .long 0 /* SizeOfUninitializedData */ .long _start - ImageBase /* AddressOfEntryPoint */ @@ -48,7 +48,7 @@ optional_header: extra_header_fields: .quad 0 /* ImageBase */ - .long 0x200 /* SectionAlignment */ + .long 0x1000 /* SectionAlignment */ .long 0x200 /* FileAlignment */ .short 0 /* MajorOperatingSystemVersion */ .short 0 /* MinorOperatingSystemVersion */ @@ -100,25 +100,47 @@ section_table: .long 0 /* PointerToLineNumbers */ .short 0 /* NumberOfRelocations */ .short 0 /* NumberOfLineNumbers */ - .long 0x42100040 /* Characteristics (section flags) */ - + /* Characteristics (section flags) */ + .long (IMAGE_SCN_MEM_READ | \ + IMAGE_SCN_MEM_DISCARDABLE | \ + IMAGE_SCN_CNT_INITIALIZED_DATA) .ascii ".text" .byte 0 .byte 0 .byte 0 /* end of 0 padding of section name */ - .long _edata - _start /* VirtualSize */ + .long _etext - _start /* VirtualSize */ .long _start - ImageBase /* VirtualAddress */ - .long _edata - _start /* SizeOfRawData */ + .long _etext - _start /* SizeOfRawData */ .long _start - ImageBase /* PointerToRawData */ + .long 0 /* PointerToRelocations */ + .long 0 /* PointerToLineNumbers */ + .short 0 /* NumberOfRelocations */ + .short 0 /* NumberOfLineNumbers */ + /* Characteristics (section flags) */ + .long (IMAGE_SCN_MEM_READ | \ + IMAGE_SCN_MEM_EXECUTE | \ + IMAGE_SCN_CNT_CODE) - .long 0 /* PointerToRelocations (0 for executables) */ - .long 0 /* PointerToLineNumbers (0 for executables) */ - .short 0 /* NumberOfRelocations (0 for executables) */ - .short 0 /* NumberOfLineNumbers (0 for executables) */ - .long 0xe0500020 /* Characteristics (section flags) */ + .ascii ".data" + .byte 0 + .byte 0 + .byte 0 /* end of 0 padding of section name */ + .long _data_size /* VirtualSize */ + .long _data - ImageBase /* VirtualAddress */ + .long _data_size /* SizeOfRawData */ + .long _data - ImageBase /* PointerToRawData */ + .long 0 /* PointerToRelocations */ + .long 0 /* PointerToLineNumbers */ + .short 0 /* NumberOfRelocations */ + .short 0 /* NumberOfLineNumbers */ + .long 0xc0000040 /* Characteristics (section flags) */ + /* Characteristics (section flags) */ + .long (IMAGE_SCN_MEM_WRITE | \ + IMAGE_SCN_MEM_READ | \ + IMAGE_SCN_CNT_INITIALIZED_DATA) - .align 9 + .align 12 _start: stp x29, x30, [sp, #-32]! mov x29, sp diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds index c0604dad46..ffc6f6e604 100644 --- a/arch/arm/lib/elf_aarch64_efi.lds +++ b/arch/arm/lib/elf_aarch64_efi.lds @@ -18,11 +18,13 @@ SECTIONS *(.gnu.linkonce.t.*) *(.srodata) *(.rodata*) + . = ALIGN(16); + *(.dynamic); . = ALIGN(512); } _etext = .; _text_size = . - _text; - .dynamic : { *(.dynamic) } + . = ALIGN(4096); .data : { _data = .; *(.sdata) @@ -48,11 +50,11 @@ SECTIONS _bss_end = .; _edata = .; } + _data_size = _edata - _data; .rela.dyn : { *(.rela.dyn) } .rela.plt : { *(.rela.plt) } .rela.got : { *(.rela.got) } .rela.data : { *(.rela.data) *(.rela.data*) } - _data_size = . - _etext; . = ALIGN(4096); .dynsym : { *(.dynsym) } -- 2.37.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] efi_loader: fix building aarch64 EFI binaries 2023-01-04 11:44 ` [PATCH v2 2/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt @ 2023-01-04 12:01 ` Ilias Apalodimas 0 siblings, 0 replies; 5+ messages in thread From: Ilias Apalodimas @ 2023-01-04 12:01 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: u-boot Hi Heinrich > + .short 0 /* NumberOfRelocations */ > + .short 0 /* NumberOfLineNumbers */ > + .long 0xc0000040 /* Characteristics (section flags) */ You probably forgot to remove this line > + /* Characteristics (section flags) */ > + .long (IMAGE_SCN_MEM_WRITE | \ > + IMAGE_SCN_MEM_READ | \ > + IMAGE_SCN_CNT_INITIALIZED_DATA) > > - .align 9 > + .align 12 > _start: > stp x29, x30, [sp, #-32]! > mov x29, sp > diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds > index c0604dad46..ffc6f6e604 100644 > --- a/arch/arm/lib/elf_aarch64_efi.lds > +++ b/arch/arm/lib/elf_aarch64_efi.lds > @@ -18,11 +18,13 @@ SECTIONS > *(.gnu.linkonce.t.*) > *(.srodata) > *(.rodata*) > + . = ALIGN(16); > + *(.dynamic); > . = ALIGN(512); > } > _etext = .; > _text_size = . - _text; > - .dynamic : { *(.dynamic) } > + . = ALIGN(4096); > .data : { > _data = .; > *(.sdata) > @@ -48,11 +50,11 @@ SECTIONS > _bss_end = .; > _edata = .; > } > + _data_size = _edata - _data; > .rela.dyn : { *(.rela.dyn) } > .rela.plt : { *(.rela.plt) } > .rela.got : { *(.rela.got) } > .rela.data : { *(.rela.data) *(.rela.data*) } > - _data_size = . - _etext; > > . = ALIGN(4096); > .dynsym : { *(.dynsym) } > -- > 2.37.2 > with that fix Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-01-04 12:01 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-04 11:44 [PATCH v2 0/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt 2023-01-04 11:44 ` [PATCH v2 1/2] efi_loader: defines for PE-COFF section flags Heinrich Schuchardt 2023-01-04 11:58 ` Ilias Apalodimas 2023-01-04 11:44 ` [PATCH v2 2/2] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt 2023-01-04 12:01 ` Ilias Apalodimas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox