• M
    arch: Add explicit linker script for u-boot-elf · e14ba8a5
    Michal Simek 提交于
    Commit f4dc714a ("arm64: Turn u-boot.bin back into an ELF file after
    relocate-rela")
    introduce REMAKE_ELF option to recreate u-boot.elf from u-boot ->
    u-boot.bin + DT -> u-boot.elf.
    
    The best is to ilustrate it from make V=1 output
      cat u-boot-nodtb.bin dts/dt.dtb > u-boot-dtb.bin
      cp u-boot-dtb.bin u-boot.bin
    aarch64-linux-gnu-objcopy -I binary -B aarch64 -O elf64-littleaarch64  u-boot.bin u-boot-elf.o
      aarch64-linux-gnu-ld.bfd u-boot-elf.o -o u-boot.elf --defsym="_start"=0x8000000 -Ttext=0x8000000
    
    Last command has no explicit linker script passed that's why toolchain
    internal linker script is used.
    In Binutils 2.32 case it contains SIZEOF_HEADERS symbol which has changed
    behavior by commit
    https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=64029e93683a266c38d19789e780f3748bd6a188
    which result in situation that program headers has changed from
    (xilinx_zynqmp_mini_defconfig)
    
    Program Headers:
      Type           Offset             VirtAddr           PhysAddr
                     FileSiz            MemSiz              Flags  Align
      LOAD           0x0000000000010000 0x00000000fffc0000 0x00000000fffc0000
                     0x0000000000018918 0x0000000000018918  RW     0x10000
    
    to
    
    Program Headers:
      Type           Offset             VirtAddr           PhysAddr
                     FileSiz            MemSiz              Flags  Align
      LOAD           0x0000000000000000 0x00000000fffb0000 0x00000000fffb0000
                     0x0000000000028918 0x0000000000028918  RW     0x10000
    
    Xilinx tools like XSDB or Bootgen are using program headers for loading ELF
    to the right location and by above binutils change ELF is loaded to
    incorrect location.
    
    The patch is explicitly use u-boot-elf.lds (just cat now) for u-boot.elf
    recreation which is called when REMAKE_ELF is setup.
    By purpose u-boot-elf.lds doesn't contain OUTPUT_FORMAT/OUTPUT_ARCH to be
    able to use by all archs.
    Signed-off-by: NMichal Simek <michal.simek@xilinx.com>
    Reviewed-by: NTom Rini <trini@konsulko.com>
    Reviewed-by: NDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
    Tested-By: NÁlvaro Fernández Rojas <noltari@gmail.com>
    e14ba8a5
Kconfig 21.7 KB