[PATCH 4/4] efi_loader: use include in ARM EFI linker script

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Wed Jan 15 09:53:00 CET 2025


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.

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