[yocto] [meta-rockchip][PATCH] u-boot-rockchip: fix for binutils-2.28
Khem Raj
raj.khem at gmail.com
Wed Mar 8 21:33:18 PST 2017
On 17-03-09 00:01:12, Trevor Woerner wrote:
> On Wed 2017-03-08 @ 04:51:04 PM, Khem Raj wrote:
> > On 17-03-08 19:01:05, Tom Rini wrote:
> > > On Wed, Mar 08, 2017 at 03:42:00PM -0800, Khem Raj wrote:
> > > > On 17-03-08 18:28:21, Tom Rini wrote:
> > > > > On Wed, Mar 08, 2017 at 12:31:47PM -0500, Trevor Woerner wrote:
> > > > >
> > > > > > openembedded-core updated bintuils from 2.27 to 2.28 which causes u-boot to
> > > > > > fail to compile:
> > > > > >
> > > > > > arm-oe-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try linking with -N
> > > > > >
> > > > > > Building with -N does fix the issue, so this patch simply adds that flag to
> > > > > > the build so it succeeds.
> > > > > >
> > > > > > This has been build-tested, as well as run-tested on the firefly.
> > > > > >
> > > > > > Signed-off-by: Trevor Woerner <twoerner at gmail.com>
> > > > >
> > > > > Unless there's an immediate need I would ask holding off on this for a
> > > > > bit, I want to track down why this is happening.
> > > >
> > > > perhaps linker map files from 2.27 and 2.28 binutils will help to
> > > > understand it
> > >
> > > Nothing is standing out yet:
> > > https://lists.denx.de/pipermail/u-boot/2017-March/283278.html
> > > https://lists.denx.de/pipermail/u-boot/2017-March/283286.html
> >
> > I see that .data.rel.ro are generated eventhough they are empty they
> > appear to be in final link this section will hold constant variables
> > that gcc sees and needs dynamic relocation, that probably is not
> > relevant to u-boot since its linked stand-alone
> >
> > Can you try to do just the final link with 2.28 and all built with 2.27
> > and see if it still happens, want to rule out assembler
>
> Okay.
>
> Building with 2.28 (and letting it fail), then repeating the final link step
> with 2.27 succeeds!
OK thats good. Can you post the output of readelf -e on final good and bad binaries
>
> $ arm-oe-linux-gnueabi-ld.bfd -v
> GNU ld (GNU Binutils) 2.27.0.20160806
>
> $ arm-oe-linux-gnueabi-ld.bfd -pie --gc-sections -Bstatic -Ttext 0x00000000 -o u-boot \
> -T u-boot.lds arch/arm/cpu/armv7/start.o --start-group arch/arm/cpu/built-in.o \
> arch/arm/cpu/armv7/built-in.o arch/arm/lib/built-in.o arch/arm/mach-rockchip/built-in.o \
> board/firefly/firefly-rk3288/built-in.o cmd/built-in.o common/built-in.o disk/built-in.o \
> drivers/built-in.o drivers/dma/built-in.o drivers/gpio/built-in.o drivers/i2c/built-in.o \
> drivers/mmc/built-in.o drivers/mtd/built-in.o drivers/mtd/onenand/built-in.o \
> drivers/mtd/spi/built-in.o drivers/net/built-in.o drivers/net/phy/built-in.o \
> drivers/pci/built-in.o drivers/power/built-in.o drivers/power/battery/built-in.o \
> drivers/power/domain/built-in.o drivers/power/fuel_gauge/built-in.o drivers/power/mfd/built-in.o \
> drivers/power/pmic/built-in.o drivers/power/regulator/built-in.o drivers/serial/built-in.o \
> drivers/spi/built-in.o drivers/usb/common/built-in.o drivers/usb/dwc3/built-in.o \
> drivers/usb/emul/built-in.o drivers/usb/eth/built-in.o drivers/usb/gadget/built-in.o \
> drivers/usb/gadget/udc/built-in.o drivers/usb/host/built-in.o drivers/usb/musb-new/built-in.o \
> drivers/usb/musb/built-in.o drivers/usb/phy/built-in.o drivers/usb/ulpi/built-in.o fs/built-in.o \
> lib/built-in.o net/built-in.o test/built-in.o test/dm/built-in.o --end-group \
> arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot.map
> $ echo $?
> 0
>
> Looking at the top couple lines of a diff between the map files of a
> binutils-2.27 build and this frankenbuild (both with SPL, neither with -N)
> gives:
>
> --- 2.27-without-N/u-boot.map 2017-03-08 13:26:26.966147350 -0500
> +++ build-with-2.28-link-with-2.27/u-boot.map 2017-03-08 23:48:43.593173398 -0500
> @@ -5442,7 +5442,7 @@
> .iplt 0x00000000000301a4 0x0 arch/arm/cpu/armv7/start.o
> 0x00000000000301a4 . = ALIGN (0x4)
>
> -.rodata 0x00000000000301a8 0x134dc
> +.rodata 0x00000000000301a8 0x134b8
> *(SORT(.rodata*))
> .rodata.efi_boot_services
> 0x00000000000301a8 0xc8 lib/built-in.o
> @@ -5859,4836 +5859,4836 @@
> .rodata.cb_erase.str1.1
> 0x0000000000033745 0x60 drivers/usb/gadget/built-in.o
> .rodata.cb_getvar.str1.1
> - 0x00000000000337a5 0xfc drivers/usb/gadget/built-in.o
> - 0x10c (size before relaxing)
> + 0x00000000000337a5 0xea drivers/usb/gadget/built-in.o
> + 0xfa (size before relaxing)
It will be interesting to see what changed in .rodata.cb_getvar.str1.1 section here but I think that might not be the cause of the issue here. Can you go into drivers/usb/gadget/ and do
readelf -a built-in.o
More information about the yocto
mailing list