* [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
* [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 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
* 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