[PATCH 4/4] efi_loader: use include in ARM EFI linker script
Ilias Apalodimas
ilias.apalodimas at linaro.org
Wed Jan 15 10:34:53 CET 2025
On Wed, 15 Jan 2025 at 10:53, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> On 15.01.25 09:06, Ilias Apalodimas wrote:
> > Hi Heinrich
> >
> >
> > On Tue, 14 Jan 2025 at 12:30, Heinrich Schuchardt
> > <heinrich.schuchardt at canonical.com> wrote:
> >>
> >> Use the same include as arm64 for the linker script.
> >>
> >> Adjust the 32-bit ARM PE-COFF header accordingly and harmonize it with the
> >> 64-bit ARM header.
> >>
> >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> >> ---
> >> arch/arm/lib/crt0_arm_efi.S | 37 ++++++++++---------
> >> arch/arm/lib/elf_arm_efi.lds | 71 +-----------------------------------
> >> 2 files changed, 20 insertions(+), 88 deletions(-)
> >>
> >> diff --git a/arch/arm/lib/crt0_arm_efi.S b/arch/arm/lib/crt0_arm_efi.S
> >> index b5dfd4e3819..590fcf515da 100644
> >> --- a/arch/arm/lib/crt0_arm_efi.S
> >> +++ b/arch/arm/lib/crt0_arm_efi.S
> >> @@ -14,11 +14,11 @@
> >> /*
> >> * Magic "MZ" signature for PE/COFF
> >> */
> >> - .globl image_base
> >> -image_base:
> >> + .globl ImageBase
> >> +ImageBase:
> >> .short IMAGE_DOS_SIGNATURE /* 'MZ' */
> >> .skip 58 /* 'MZ' + pad + offset == 64 */
> >> - .long pe_header - image_base /* Offset to the PE header */
> >> + .long pe_header - ImageBase /* Offset to the PE header */
> >> pe_header:
> >> .long IMAGE_NT_SIGNATURE /* 'PE' */
> >> coff_header:
> >> @@ -38,16 +38,16 @@ optional_header:
> >> .short IMAGE_NT_OPTIONAL_HDR32_MAGIC /* PE32 format */
> >> .byte 0x02 /* MajorLinkerVersion */
> >> .byte 0x14 /* MinorLinkerVersion */
> >> - .long _edata - _start /* SizeOfCode */
> >> + .long _etext - _start /* SizeOfCode */
> >
> > Was that an error all along? Or the boundaries changed by using the
> > include file?
>
> According to https://learn.microsoft.com/en-us/windows/win32/debug/pe-format
>
> SizeOfCode:
> "The size of the code (text) section, or the sum of all code sections if
> there are multiple sections."
>
> We only have one code section.
>
> Looking at EDK2's Shell.efi SizeOfCode equals the VirtualSize of the
> .text section. It does not include the .data section.
>
Hmm that's interesting. gnu-efi includes .data AFAICT.
Looking at the pe/coff spec there's SizeOfCode and
SizeOfInitializedData (for .data) and SizeOfUninitializedData (for
.bss).
But in both gnu-efi and U-Boot we define those two as 0 though. So I
think we should either keep SizeOfData as is, or define it as you
propose and also define SizeOfInitializedData and
SizeOfUninitializedData correctly -- and I don't know if the latter
will have any implication on loaders.
Cheers
/Ilias
> Best regards
>
> Heinrich
>
> >
> >> .long 0 /* SizeOfInitializedData */
> >> .long 0 /* SizeOfUninitializedData */
> >> - .long _start - image_base /* AddressOfEntryPoint */
> >> - .long _start - image_base /* BaseOfCode */
> >> + .long _start - ImageBase /* AddressOfEntryPoint */
> >> + .long _start - ImageBase /* BaseOfCode */
> >> .long 0 /* BaseOfData */
> > [...]
> >
> > Other than that it looks ok
> >
> > Thanks for cleaning this up!
> > /Ilias
>
More information about the U-Boot
mailing list