[PATCH 1/1] efi_loader: set IMAGE_FILE_LARGE_ADDRESS_AWARE

Ilias Apalodimas ilias.apalodimas at linaro.org
Fri Dec 23 08:30:19 CET 2022


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?

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