* [PATCH v2] arch: Add explicit linker script for u-boot-elf
@ 2020-03-30 11:58 Michal Simek
2020-03-30 23:30 ` Tom Rini
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Michal Simek @ 2020-03-30 11:58 UTC (permalink / raw)
To: u-boot
Commit f4dc714aaa2d ("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: Michal Simek <michal.simek@xilinx.com>
---
Changes in v2:
- Use preprocessor and Kconfig entry for passing different PLATFORM_ENTRY
Suggested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
- I kept u-boot.elf.lds in origin location because most of lds are in arch/
folder
Changes in v1:
- Compare to RFC
- MIPS has different elf entry point that's why I replaced simple cat with
sed to setup proper entry point
Sadanand, Mahesh: Please correct my description if I am wrong based on our
internal discussion about this issue.
Tom: I have been told that it is GCC issue but I found that commit in
binutils.
I am not doing these makefile stuff that's why I expect this should be
changed a little bit. Also arch/u-boot-elf.lds is likely incorrect location
but didn't find any better.
---
Kconfig | 5 +++++
Makefile | 11 +++++------
arch/mips/config.mk | 1 -
arch/u-boot-elf.lds | 9 +++++++++
4 files changed, 19 insertions(+), 7 deletions(-)
create mode 100644 arch/u-boot-elf.lds
diff --git a/Kconfig b/Kconfig
index 66148ce47790..dc23c35000f2 100644
--- a/Kconfig
+++ b/Kconfig
@@ -298,6 +298,11 @@ config ERR_PTR_OFFSET
pointer values - up to 'MAX_ERRNO' bytes below this value must be
unused/invalid addresses.
+config PLATFORM_ELFENTRY
+ string
+ default "__start" if MIPS
+ default "_start"
+
endmenu # General setup
menu "Boot images"
diff --git a/Makefile b/Makefile
index be1513227361..c1dc185e5c0e 100644
--- a/Makefile
+++ b/Makefile
@@ -1648,18 +1648,17 @@ OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
$(call if_changed,pad_cat)
-# Create a new ELF from a raw binary file.
-ifndef PLATFORM_ELFENTRY
- PLATFORM_ELFENTRY = "_start"
-endif
quiet_cmd_u-boot-elf ?= LD $@
cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
- --defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
+ -T u-boot-elf.lds --defsym=$(CONFIG_PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
-Ttext=$(CONFIG_SYS_TEXT_BASE)
-u-boot.elf: u-boot.bin
+u-boot.elf: u-boot.bin u-boot-elf.lds
$(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
$(call if_changed,u-boot-elf)
+u-boot-elf.lds: arch/u-boot-elf.lds prepare FORCE
+ $(call if_changed_dep,cpp_lds)
+
# MediaTek's ARM-based u-boot needs a header to contains its load address
# which is parsed by the BootROM.
# If the SPL build is enabled, the header will be added to the spl binary,
diff --git a/arch/mips/config.mk b/arch/mips/config.mk
index 9d3a84539a7d..527fd6a2fd92 100644
--- a/arch/mips/config.mk
+++ b/arch/mips/config.mk
@@ -36,7 +36,6 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0xffffffff80200000
endif
PLATFORM_CPPFLAGS += -D__MIPS__
-PLATFORM_ELFENTRY = "__start"
PLATFORM_ELFFLAGS += -B mips $(OBJCOPYFLAGS)
#
diff --git a/arch/u-boot-elf.lds b/arch/u-boot-elf.lds
new file mode 100644
index 000000000000..1666027e3635
--- /dev/null
+++ b/arch/u-boot-elf.lds
@@ -0,0 +1,9 @@
+ENTRY(CONFIG_PLATFORM_ELFENTRY)
+SECTIONS
+{
+ . = CONFIG_PLATFORM_ELFENTRY;
+
+ .data : {
+ *(.data*)
+ }
+}
--
2.26.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2] arch: Add explicit linker script for u-boot-elf
2020-03-30 11:58 [PATCH v2] arch: Add explicit linker script for u-boot-elf Michal Simek
@ 2020-03-30 23:30 ` Tom Rini
2020-04-02 9:28 ` Daniel Schwierzeck
2020-04-05 23:04 ` Tom Rini
2 siblings, 0 replies; 5+ messages in thread
From: Tom Rini @ 2020-03-30 23:30 UTC (permalink / raw)
To: u-boot
On Mon, Mar 30, 2020 at 01:58:59PM +0200, Michal Simek wrote:
> Commit f4dc714aaa2d ("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: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200330/0b5889d2/attachment.sig>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] arch: Add explicit linker script for u-boot-elf
2020-03-30 11:58 [PATCH v2] arch: Add explicit linker script for u-boot-elf Michal Simek
2020-03-30 23:30 ` Tom Rini
@ 2020-04-02 9:28 ` Daniel Schwierzeck
2020-04-02 12:49 ` Álvaro Fernández Rojas
2020-04-05 23:04 ` Tom Rini
2 siblings, 1 reply; 5+ messages in thread
From: Daniel Schwierzeck @ 2020-04-02 9:28 UTC (permalink / raw)
To: u-boot
+cc ?lvaro
Am 30.03.20 um 13:58 schrieb Michal Simek:
> Commit f4dc714aaa2d ("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: Michal Simek <michal.simek@xilinx.com>
> ---
>
> Changes in v2:
> - Use preprocessor and Kconfig entry for passing different PLATFORM_ENTRY
> Suggested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
> - I kept u-boot.elf.lds in origin location because most of lds are in arch/
> folder
>
> Changes in v1:
> - Compare to RFC
> - MIPS has different elf entry point that's why I replaced simple cat with
> sed to setup proper entry point
?lvaro, could you test for regressions on BMIPS platform? Thanks.
Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
>
> Sadanand, Mahesh: Please correct my description if I am wrong based on our
> internal discussion about this issue.
>
> Tom: I have been told that it is GCC issue but I found that commit in
> binutils.
> I am not doing these makefile stuff that's why I expect this should be
> changed a little bit. Also arch/u-boot-elf.lds is likely incorrect location
> but didn't find any better.
>
> ---
> Kconfig | 5 +++++
> Makefile | 11 +++++------
> arch/mips/config.mk | 1 -
> arch/u-boot-elf.lds | 9 +++++++++
> 4 files changed, 19 insertions(+), 7 deletions(-)
> create mode 100644 arch/u-boot-elf.lds
>
> diff --git a/Kconfig b/Kconfig
> index 66148ce47790..dc23c35000f2 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -298,6 +298,11 @@ config ERR_PTR_OFFSET
> pointer values - up to 'MAX_ERRNO' bytes below this value must be
> unused/invalid addresses.
>
> +config PLATFORM_ELFENTRY
> + string
> + default "__start" if MIPS
> + default "_start"
> +
> endmenu # General setup
>
> menu "Boot images"
> diff --git a/Makefile b/Makefile
> index be1513227361..c1dc185e5c0e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1648,18 +1648,17 @@ OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
> u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
> $(call if_changed,pad_cat)
>
> -# Create a new ELF from a raw binary file.
> -ifndef PLATFORM_ELFENTRY
> - PLATFORM_ELFENTRY = "_start"
> -endif
> quiet_cmd_u-boot-elf ?= LD $@
> cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
> - --defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
> + -T u-boot-elf.lds --defsym=$(CONFIG_PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
> -Ttext=$(CONFIG_SYS_TEXT_BASE)
> -u-boot.elf: u-boot.bin
> +u-boot.elf: u-boot.bin u-boot-elf.lds
> $(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
> $(call if_changed,u-boot-elf)
>
> +u-boot-elf.lds: arch/u-boot-elf.lds prepare FORCE
> + $(call if_changed_dep,cpp_lds)
> +
> # MediaTek's ARM-based u-boot needs a header to contains its load address
> # which is parsed by the BootROM.
> # If the SPL build is enabled, the header will be added to the spl binary,
> diff --git a/arch/mips/config.mk b/arch/mips/config.mk
> index 9d3a84539a7d..527fd6a2fd92 100644
> --- a/arch/mips/config.mk
> +++ b/arch/mips/config.mk
> @@ -36,7 +36,6 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0xffffffff80200000
> endif
>
> PLATFORM_CPPFLAGS += -D__MIPS__
> -PLATFORM_ELFENTRY = "__start"
> PLATFORM_ELFFLAGS += -B mips $(OBJCOPYFLAGS)
>
> #
> diff --git a/arch/u-boot-elf.lds b/arch/u-boot-elf.lds
> new file mode 100644
> index 000000000000..1666027e3635
> --- /dev/null
> +++ b/arch/u-boot-elf.lds
> @@ -0,0 +1,9 @@
> +ENTRY(CONFIG_PLATFORM_ELFENTRY)
> +SECTIONS
> +{
> + . = CONFIG_PLATFORM_ELFENTRY;
> +
> + .data : {
> + *(.data*)
> + }
> +}
>
--
- Daniel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] arch: Add explicit linker script for u-boot-elf
2020-04-02 9:28 ` Daniel Schwierzeck
@ 2020-04-02 12:49 ` Álvaro Fernández Rojas
0 siblings, 0 replies; 5+ messages in thread
From: Álvaro Fernández Rojas @ 2020-04-02 12:49 UTC (permalink / raw)
To: u-boot
Hi Daniel,
Tested on Netgear DGND3700v2 (bmips/bcm6362) with no regressions.
Tested-By: ?lvaro Fern?ndez Rojas <noltari@gmail.com>
> El 2 abr 2020, a las 11:28, Daniel Schwierzeck <daniel.schwierzeck@gmail.com> escribi?:
>
> +cc ?lvaro
>
> Am 30.03.20 um 13:58 schrieb Michal Simek:
>> Commit f4dc714aaa2d ("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: Michal Simek <michal.simek@xilinx.com>
>> ---
>>
>> Changes in v2:
>> - Use preprocessor and Kconfig entry for passing different PLATFORM_ENTRY
>> Suggested-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
>> - I kept u-boot.elf.lds in origin location because most of lds are in arch/
>> folder
>>
>> Changes in v1:
>> - Compare to RFC
>> - MIPS has different elf entry point that's why I replaced simple cat with
>> sed to setup proper entry point
>
> ?lvaro, could you test for regressions on BMIPS platform? Thanks.
>
> Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck at gmail.com <mailto:daniel.schwierzeck@gmail.com>>
>
>>
>> Sadanand, Mahesh: Please correct my description if I am wrong based on our
>> internal discussion about this issue.
>>
>> Tom: I have been told that it is GCC issue but I found that commit in
>> binutils.
>> I am not doing these makefile stuff that's why I expect this should be
>> changed a little bit. Also arch/u-boot-elf.lds is likely incorrect location
>> but didn't find any better.
>>
>> ---
>> Kconfig | 5 +++++
>> Makefile | 11 +++++------
>> arch/mips/config.mk | 1 -
>> arch/u-boot-elf.lds | 9 +++++++++
>> 4 files changed, 19 insertions(+), 7 deletions(-)
>> create mode 100644 arch/u-boot-elf.lds
>>
>> diff --git a/Kconfig b/Kconfig
>> index 66148ce47790..dc23c35000f2 100644
>> --- a/Kconfig
>> +++ b/Kconfig
>> @@ -298,6 +298,11 @@ config ERR_PTR_OFFSET
>> pointer values - up to 'MAX_ERRNO' bytes below this value must be
>> unused/invalid addresses.
>>
>> +config PLATFORM_ELFENTRY
>> + string
>> + default "__start" if MIPS
>> + default "_start"
>> +
>> endmenu # General setup
>>
>> menu "Boot images"
>> diff --git a/Makefile b/Makefile
>> index be1513227361..c1dc185e5c0e 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -1648,18 +1648,17 @@ OBJCOPYFLAGS_u-boot-img-spl-at-end.bin := -I binary -O binary \
>> u-boot-img-spl-at-end.bin: u-boot.img spl/u-boot-spl.bin FORCE
>> $(call if_changed,pad_cat)
>>
>> -# Create a new ELF from a raw binary file.
>> -ifndef PLATFORM_ELFENTRY
>> - PLATFORM_ELFENTRY = "_start"
>> -endif
>> quiet_cmd_u-boot-elf ?= LD $@
>> cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
>> - --defsym=$(PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
>> + -T u-boot-elf.lds --defsym=$(CONFIG_PLATFORM_ELFENTRY)=$(CONFIG_SYS_TEXT_BASE) \
>> -Ttext=$(CONFIG_SYS_TEXT_BASE)
>> -u-boot.elf: u-boot.bin
>> +u-boot.elf: u-boot.bin u-boot-elf.lds
>> $(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
>> $(call if_changed,u-boot-elf)
>>
>> +u-boot-elf.lds: arch/u-boot-elf.lds prepare FORCE
>> + $(call if_changed_dep,cpp_lds)
>> +
>> # MediaTek's ARM-based u-boot needs a header to contains its load address
>> # which is parsed by the BootROM.
>> # If the SPL build is enabled, the header will be added to the spl binary,
>> diff --git a/arch/mips/config.mk b/arch/mips/config.mk
>> index 9d3a84539a7d..527fd6a2fd92 100644
>> --- a/arch/mips/config.mk
>> +++ b/arch/mips/config.mk
>> @@ -36,7 +36,6 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0xffffffff80200000
>> endif
>>
>> PLATFORM_CPPFLAGS += -D__MIPS__
>> -PLATFORM_ELFENTRY = "__start"
>> PLATFORM_ELFFLAGS += -B mips $(OBJCOPYFLAGS)
>>
>> #
>> diff --git a/arch/u-boot-elf.lds b/arch/u-boot-elf.lds
>> new file mode 100644
>> index 000000000000..1666027e3635
>> --- /dev/null
>> +++ b/arch/u-boot-elf.lds
>> @@ -0,0 +1,9 @@
>> +ENTRY(CONFIG_PLATFORM_ELFENTRY)
>> +SECTIONS
>> +{
>> + . = CONFIG_PLATFORM_ELFENTRY;
>> +
>> + .data : {
>> + *(.data*)
>> + }
>> +}
>>
>
> --
> - Daniel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] arch: Add explicit linker script for u-boot-elf
2020-03-30 11:58 [PATCH v2] arch: Add explicit linker script for u-boot-elf Michal Simek
2020-03-30 23:30 ` Tom Rini
2020-04-02 9:28 ` Daniel Schwierzeck
@ 2020-04-05 23:04 ` Tom Rini
2 siblings, 0 replies; 5+ messages in thread
From: Tom Rini @ 2020-04-05 23:04 UTC (permalink / raw)
To: u-boot
On Mon, Mar 30, 2020 at 01:58:59PM +0200, Michal Simek wrote:
> Commit f4dc714aaa2d ("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: Michal Simek <michal.simek@xilinx.com>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
> Tested-By: ?lvaro Fern?ndez Rojas <noltari@gmail.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200405/61c83e8f/attachment.sig>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-04-05 23:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-30 11:58 [PATCH v2] arch: Add explicit linker script for u-boot-elf Michal Simek
2020-03-30 23:30 ` Tom Rini
2020-04-02 9:28 ` Daniel Schwierzeck
2020-04-02 12:49 ` Álvaro Fernández Rojas
2020-04-05 23:04 ` Tom Rini
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.