[PATCH 1/1] efi_loader: set IMAGE_FILE_LARGE_ADDRESS_AWARE

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Sat Dec 24 11:17:16 CET 2022


On 12/23/22 08:30, Ilias Apalodimas wrote:
> Hi Heinrich,
> 
> On Fri, 23 Dec 2022 at 03:20, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> For the 64bit EFI binaries that we create set the
>> IMAGE_FILE_LARGE_ADDRESS_AWARE characteristic in the PE-COFF header
>> to indicate that they can handle addresses above 2 GiB.
>>
> 
> Does that flag affect 64bit as well?  I was under the impression it's
> only needed for 32bit?

Please, have a look at the code comment in 
BaseTools/Source/C/GenFw/Elf64Convert.c, line 1669ff. The flag is 
related to 64bit code.

EDK II sets the following flags on arm64 Shell.efi:

Characteristics: 0x002e
   * The file is executable.
   * COFF line numbers were stripped from the file.
   * COFF symbol table entries were stripped from file.
   * The application can handle addresses larger than 2 GiB.

Microsoft sets the following flags on bootaa64.efi:

Characteristics: 0x2022
   * The file is executable.
   * The application can handle addresses larger than 2 GiB.
   * The image is a dynamic link library (DLL).

Best regards

Heinrich

> 
> Thanks
> /Ilias
>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>> ---
>>   arch/arm/lib/crt0_aarch64_efi.S |  1 +
>>   arch/riscv/lib/crt0_riscv_efi.S | 17 ++++++++++++-----
>>   2 files changed, 13 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch/arm/lib/crt0_aarch64_efi.S b/arch/arm/lib/crt0_aarch64_efi.S
>> index 59fc3ed02d..d31b2b5fe9 100644
>> --- a/arch/arm/lib/crt0_aarch64_efi.S
>> +++ b/arch/arm/lib/crt0_aarch64_efi.S
>> @@ -34,6 +34,7 @@ coff_header:
>>          .short  (IMAGE_FILE_EXECUTABLE_IMAGE | \
>>                   IMAGE_FILE_LINE_NUMS_STRIPPED | \
>>                   IMAGE_FILE_LOCAL_SYMS_STRIPPED | \
>> +                IMAGE_FILE_LARGE_ADDRESS_AWARE | \
>>                   IMAGE_FILE_DEBUG_STRIPPED)
>>   optional_header:
>>          .short  IMAGE_NT_OPTIONAL_HDR64_MAGIC   /* PE32+ format */
>> diff --git a/arch/riscv/lib/crt0_riscv_efi.S b/arch/riscv/lib/crt0_riscv_efi.S
>> index a01e08a3c6..793eefdd88 100644
>> --- a/arch/riscv/lib/crt0_riscv_efi.S
>> +++ b/arch/riscv/lib/crt0_riscv_efi.S
>> @@ -16,12 +16,23 @@
>>   #define LOAD_LONG(reg, idx)    ld      reg, (idx*SIZE_LONG)(sp)
>>   #define PE_MACHINE     IMAGE_FILE_MACHINE_RISCV64
>>   #define PE_MAGIC    IMAGE_NT_OPTIONAL_HDR64_MAGIC
>> +#define IMG_CHARACTERISTICS \
>> +       (IMAGE_FILE_EXECUTABLE_IMAGE | \
>> +        IMAGE_FILE_LINE_NUMS_STRIPPED | \
>> +        IMAGE_FILE_LOCAL_SYMS_STRIPPED | \
>> +        IMAGE_FILE_LARGE_ADDRESS_AWARE | \
>> +        IMAGE_FILE_DEBUG_STRIPPED)
>>   #else
>>   #define SIZE_LONG      4
>>   #define SAVE_LONG(reg, idx)    sw      reg, (idx*SIZE_LONG)(sp)
>>   #define LOAD_LONG(reg, idx)    lw      reg, (idx*SIZE_LONG)(sp)
>>   #define PE_MACHINE     IMAGE_FILE_MACHINE_RISCV32
>>   #define PE_MAGIC    IMAGE_NT_OPTIONAL_HDR32_MAGIC
>> +#define IMG_CHARACTERISTICS \
>> +       (IMAGE_FILE_EXECUTABLE_IMAGE | \
>> +        IMAGE_FILE_LINE_NUMS_STRIPPED | \
>> +        IMAGE_FILE_LOCAL_SYMS_STRIPPED | \
>> +        IMAGE_FILE_DEBUG_STRIPPED)
>>   #endif
>>
>>
>> @@ -47,11 +58,7 @@ coff_header:
>>          .long   0                               /* PointerToSymbolTable */
>>          .long   0                               /* NumberOfSymbols */
>>          .short  section_table - optional_header /* SizeOfOptionalHeader */
>> -       /* Characteristics */
>> -       .short  (IMAGE_FILE_EXECUTABLE_IMAGE | \
>> -                IMAGE_FILE_LINE_NUMS_STRIPPED | \
>> -                IMAGE_FILE_LOCAL_SYMS_STRIPPED | \
>> -                IMAGE_FILE_DEBUG_STRIPPED)
>> +       .short  IMG_CHARACTERISTICS             /* Characteristics */
>>   optional_header:
>>          .short  PE_MAGIC                        /* PE32(+) format */
>>          .byte   0x02                            /* MajorLinkerVersion */
>> --
>> 2.37.2
>>



More information about the U-Boot mailing list