[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