From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
To: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Cc: u-boot@lists.denx.de
Subject: Re: [PATCH 1/1] efi_loader: fix building aarch64 EFI binaries
Date: Wed, 4 Jan 2023 12:08:32 +0200 [thread overview]
Message-ID: <Y7VQIIOswmekxCkV@hades> (raw)
In-Reply-To: <20221231110345.72250-1-heinrich.schuchardt@canonical.com>
Hi Heinrich
On Sat, Dec 31, 2022 at 12:03:45PM +0100, Heinrich Schuchardt wrote:
> 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)
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> ---
> arch/arm/lib/crt0_aarch64_efi.S | 35 ++++++++++++++++++++++----------
> arch/arm/lib/elf_aarch64_efi.lds | 6 ++++--
> 2 files changed, 28 insertions(+), 13 deletions(-)
>
> diff --git a/arch/arm/lib/crt0_aarch64_efi.S b/arch/arm/lib/crt0_aarch64_efi.S
> index b4fc263adf..52b2482efe 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 */
> @@ -107,18 +107,31 @@ section_table:
> .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 */
> + .long 0x60000020 /* Characteristics (section flags) */
Can we replace the 0x60000020 magic here with defines from
include/asm-generic/pe.h?
>
> - .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) */
Same here
>
> - .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
>
Regards
/Ilias
prev parent reply other threads:[~2023-01-04 10:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-31 11:03 [PATCH 1/1] efi_loader: fix building aarch64 EFI binaries Heinrich Schuchardt
2023-01-03 17:02 ` Simon Glass
2023-01-04 10:08 ` Ilias Apalodimas [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y7VQIIOswmekxCkV@hades \
--to=ilias.apalodimas@linaro.org \
--cc=heinrich.schuchardt@canonical.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox