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 <[email protected]>
---
 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 */
        .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 */
 
 extra_header_fields:
-       .long   0                               /* image_base */
-       .long   0x200                           /* SectionAlignment */
+       .long   0                               /* ImageBase */
+       .long   0x1000                          /* SectionAlignment */
        .long   0x200                           /* FileAlignment */
        .short  0                               /* MajorOperatingSystemVersion 
*/
        .short  0                               /* MinorOperatingSystemVersion 
*/
@@ -57,14 +57,14 @@ extra_header_fields:
        .short  0                               /* MinorSubsystemVersion */
        .long   0                               /* Win32VersionValue */
 
-       .long   _edata - image_base             /* SizeOfImage */
+       .long   _edata - ImageBase              /* SizeOfImage */
 
        /*
         * Everything before the kernel image is considered part of the header
         */
-       .long   _start - image_base             /* SizeOfHeaders */
+       .long   _start - ImageBase              /* SizeOfHeaders */
        .long   0                               /* CheckSum */
-       .short  IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
+       .short  IMAGE_SUBSYSTEM_EFI_APPLICATION /* Subsystem */
 #if CONFIG_VENDOR_EFI
        .short  0                               /* DllCharacteristics */
 #else
@@ -84,6 +84,7 @@ extra_header_fields:
        .quad   0                               /* CertificationTable */
        .quad   0                               /* BaseRelocationTable */
 
+       /* Section table */
 section_table:
 
        /*
@@ -111,10 +112,10 @@ section_table:
        .byte   0
        .byte   0
        .byte   0                       /* end of 0 padding of section name */
-       .long   _text_size              /* VirtualSize */
-       .long   _start - image_base     /* VirtualAddress */
-       .long   _text_size              /* SizeOfRawData */
-       .long   _start - image_base     /* PointerToRawData */
+       .long   _etext - _start         /* VirtualSize */
+       .long   _start - ImageBase      /* VirtualAddress */
+       .long   _etext - _start         /* SizeOfRawData */
+       .long   _start - ImageBase      /* PointerToRawData */
        .long   0                       /* PointerToRelocations */
        .long   0                       /* PointerToLineNumbers */
        .short  0                       /* NumberOfRelocations */
@@ -129,9 +130,9 @@ section_table:
        .byte   0
        .byte   0                       /* end of 0 padding of section name */
        .long   _data_size              /* VirtualSize */
-       .long   _data - image_base      /* VirtualAddress */
+       .long   _data - ImageBase       /* VirtualAddress */
        .long   _data_size              /* SizeOfRawData */
-       .long   _data - image_base      /* PointerToRawData */
+       .long   _data - ImageBase       /* PointerToRawData */
        .long   0                       /* PointerToRelocations */
        .long   0                       /* PointerToLineNumbers */
        .short  0                       /* NumberOfRelocations */
@@ -148,7 +149,7 @@ _start:
        adr             r1, .L_DYNAMIC
        ldr             r0, [r1]
        add             r1, r0, r1
-       adrl            r0, image_base
+       adrl            r0, ImageBase
        bl              _relocate
        teq             r0, #0
        bne             0f
diff --git a/arch/arm/lib/elf_arm_efi.lds b/arch/arm/lib/elf_arm_efi.lds
index 41440594aa6..eb16fae74cf 100644
--- a/arch/arm/lib/elf_arm_efi.lds
+++ b/arch/arm/lib/elf_arm_efi.lds
@@ -8,73 +8,4 @@
 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
 OUTPUT_ARCH(arm)
 
-PHDRS
-{
-       data PT_LOAD FLAGS(3); /* PF_W | PF_X */
-}
-
-ENTRY(_start)
-SECTIONS
-{
-       .text 0x0 : {
-               _text = .;
-               *(.text.head)
-               *(.text)
-               *(.text.*)
-               *(.gnu.linkonce.t.*)
-               *(.srodata)
-               *(.rodata*)
-               . = ALIGN(16);
-               *(.dynamic);
-               . = ALIGN(512);
-       }
-       _etext = .;
-       _text_size = . - _text;
-       . = ALIGN(4096);
-       .data : {
-               _data = .;
-               *(.sdata)
-               *(.data)
-               *(.data1)
-               *(.data.*)
-               *(.got.plt)
-               *(.got)
-
-               /*
-                * The EFI loader doesn't seem to like a .bss section, so we
-                * stick it all into .data:
-                */
-               . = ALIGN(16);
-               _bss = .;
-               *(.sbss)
-               *(.scommon)
-               *(.dynbss)
-               *(.bss)
-               *(.bss.*)
-               *(COMMON)
-               . = ALIGN(512);
-               _bss_end = .;
-               _edata = .;
-       } :data
-       _data_size = . - _data;
-
-       /DISCARD/ : {
-               /*
-                * We don't support relocations. These would have to be
-                * translated from ELF to PE format and added to the .reloc
-                * section.
-                */
-               *(.rel.dyn)
-               *(.rel.plt)
-               *(.rel.got)
-               *(.rel.data)
-               *(.rel.data*)
-               *(.rel.reloc)
-               *(.eh_frame)
-               *(.note.GNU-stack)
-               *(.dynsym)
-               *(.dynstr)
-               *(.note.gnu.build-id)
-               *(.comment)
-       }
-}
+INCLUDE lib/efi_loader/elf_efi.ldsi
-- 
2.47.1

Reply via email to