For qemu-x86_64_defconfig on Debian Stretch
ld 2.28 creates a .got and a .got.plt section in
u-boot-spl.

If we do not ignore these sections objcopy generates an
u-boot-spl-nodtb.bin file of 4 GiB which leads to
subsequent failure of the build process.

According to
https://sourceware.org/bugzilla/show_bug.cgi?id=22120#c2
objcopy can not generate files with holes.

With the patch we can run qemu with the generated u-boot.rom.

Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
---
I ran the Travis CI tests with no error reported:
https://travis-ci.org/xypron2/u-boot/builds/274042004

It is unclear to me why on Debian Stretch the .got and .got.plt sections
are generated. The problem does not exist on Debian Jessie which uses
binutils 2.25.

I found this comment in the BFD code which describes under which
circumstances the .got.plt section is not generated:

https://sourceware.org/viewvc/src/bfd/elf64-x86-64.c?view=markup#l2921

Don't allocate .got.plt section if there are no GOT nor PLT
entries and there is no reference to _GLOBAL_OFFSET_TABLE_.
---
 scripts/Makefile.spl | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index dd8065d87d..3b2d79d562 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -286,7 +286,8 @@ quiet_cmd_objcopy = OBJCOPY $@
 cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
 
 OBJCOPYFLAGS_$(SPL_BIN)-nodtb.bin = $(SPL_OBJCFLAGS) -O binary \
-               $(if $(CONFIG_SPL_X86_16BIT_INIT),-R .start16 -R .resetvec)
+               $(if $(CONFIG_SPL_X86_16BIT_INIT), \
+               -R .start16 -R .resetvec -R .got -R .got.plt)
 
 $(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE
        $(call if_changed,objcopy)
-- 
2.11.0

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

Reply via email to