On 09/26/2018 08:03 AM, Bin Meng wrote:
> Per Microsoft PE Format documentation [1], PointerToSymbolTable and
> NumberOfSymbols should be zero for an image in the COFF file header.
> Currently the COFF file header is hardcoded on ARM and these two
> members are not zero.
> 
> This updates the hardcoded structure to clear these two members, as
> well as setting the flag IMAGE_FILE_LOCAL_SYMS_STRIPPED so that we
> can generate compliant *.efi images.
> 
> [1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format
> 
> Signed-off-by: Bin Meng <bmeng...@gmail.com>
> ---
> 
>  arch/arm/lib/crt0_aarch64_efi.S | 7 ++++---
>  arch/arm/lib/crt0_arm_efi.S     | 6 +++---
>  2 files changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/arm/lib/crt0_aarch64_efi.S b/arch/arm/lib/crt0_aarch64_efi.S
> index 0db4360..a489d05 100644
> --- a/arch/arm/lib/crt0_aarch64_efi.S
> +++ b/arch/arm/lib/crt0_aarch64_efi.S
> @@ -28,13 +28,14 @@ coff_header:
>       .short  2                               /* nr_sections */
>       .long   0                               /* TimeDateStamp */
>       .long   0                               /* PointerToSymbolTable */
> -     .long   1                               /* NumberOfSymbols */
> +     .long   0                               /* NumberOfSymbols */
>       .short  section_table - optional_header /* SizeOfOptionalHeader */
>       /*
>        * Characteristics: IMAGE_FILE_DEBUG_STRIPPED |
> -      * IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LINE_NUMS_STRIPPED
> +      * IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LINE_NUMS_STRIPPED |
> +      * IMAGE_FILE_LOCAL_SYMS_STRIPPED
>        */
> -     .short  0x206
> +     .short  0x20e

I think your code misses to set IMAGE_FILE_32BIT_MACHINE in dependence
of the bitness of the system.

I would prefer if these constants were defined in asm-generic/pe.h:

#define IMAGE_FILE_RELOCS_STRIPPED              0x0001
#define IMAGE_FILE_EXECUTABLE_IMAGE             0x0002
#define IMAGE_FILE_LINE_NUMS_STRIPPED           0x0004
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED          0x0008
#define IMAGE_FILE_AGGRESSIVE_WS_TRIM           0x0010
#define IMAGE_FILE_LARGE_ADDRESS_AWARE          0x0020
/* Reserved                                     0x0040 */
#define IMAGE_FILE_BYTES_REVERSED_LO            0x0080
#define IMAGE_FILE_32BIT_MACHINE                0x0100
#define IMAGE_FILE_DEBUG_STRIPPED               0x0200
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP      0x0400
#define IMAGE_FILE_NET_RUN_FROM_SWAP            0x0800
#define IMAGE_FILE_SYSTEM                       0x1000
#define IMAGE_FILE_DLL                          0x2000
#define IMAGE_FILE_UP_SYSTEM_ONLY               0x4000
#define IMAGE_FILE_BYTES_REVERSED_HI            0x8000

Best regards

Heinrich

>  optional_header:
>       .short  0x20b                           /* PE32+ format */
>       .byte   0x02                            /* MajorLinkerVersion */
> diff --git a/arch/arm/lib/crt0_arm_efi.S b/arch/arm/lib/crt0_arm_efi.S
> index 23db49f..5330578 100644
> --- a/arch/arm/lib/crt0_arm_efi.S
> +++ b/arch/arm/lib/crt0_arm_efi.S
> @@ -27,14 +27,14 @@ coff_header:
>       .short  2                               /* nr_sections */
>       .long   0                               /* TimeDateStamp */
>       .long   0                               /* PointerToSymbolTable */
> -     .long   1                               /* NumberOfSymbols */
> +     .long   0                               /* NumberOfSymbols */
>       .short  section_table - optional_header /* SizeOfOptionalHeader */
>       /*
>        * Characteristics: IMAGE_FILE_32BIT_MACHINE |
>        * IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE |
> -      * IMAGE_FILE_LINE_NUMS_STRIPPED
> +      * IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_LOCAL_SYMS_STRIPPED
>        */
> -     .short  0x306
> +     .short  0x30e
>  optional_header:
>       .short  0x10b                           /* PE32+ format */
>       .byte   0x02                            /* MajorLinkerVersion */
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to