[U-Boot] [PATCH] arm: Handle .gnu.hash section in ldscripts

Lukasz Majewski
2014-03-13T15:43:09Z

Hi Albert, Andreas,

> Hi Andreas,
>
> On Sun, 09 Mar 2014 21:52:44 +0100, Andreas F?rber <afaerber@suse.de>
> wrote:
>
> > Hi,
> >
> > Am 09.03.2014 21:34, schrieb Albert ARIBAUD:
> > > On Sun, 09 Mar 2014 21:22:34 +0100, Andreas F?rber
> > > <afaerber@suse.de> wrote:
> > >> Am 09.03.2014 21:05, schrieb Albert ARIBAUD:
> > >>> On Mon, 3 Mar 2014 08:00:52 +0100, Albert ARIBAUD
> > >>> <albert.u.boot@aribaud.net> wrote:
> > >>>> On Sun, 02 Mar 2014 23:00:19 +0100, Andreas F?rber
> > >>>> <afaerber@suse.de> wrote:
> > >>>>> Am 02.03.2014 21:57, schrieb Andreas F?rber:
> > >>>>>> Am 02.03.2014 20:15, schrieb Albert ARIBAUD:
> > >>>>>>> On Sun, 02 Mar 2014 18:57:14 +0100, Andreas F?rber
> > >>>>>>> <afaerber@suse.de> wrote:
> > >>>>>>>> Am 22.02.2014 14:27, schrieb Albert ARIBAUD:
> > >>>>>>>>> On Thu, 13 Feb 2014 12:39:07 +0100, Albert ARIBAUD
> > >>>>>>>>> <albert.u.boot@aribaud.net> wrote:
> > >>>>>>>>>
> > >>>>>>>>>> Can you point me to the toolchain you are using, and if
> > >>>>>>>>>> you are not building mainline code, can you make this
> > >>>>>>>>>> code available to me somehow?
> > >>>>>> [...]
> > >>>>>>>> Our latest GCC 4.8.2 can be found here:
> > >>>>>>>> https://build.opensuse.org/package/show/openSUSE:Factory:ARM/gcc48
> > >>>>>>>>
> > >>>>>>>> Matching binutils 2.24 are here:
> > >>>>>>>> https://build.opensuse.org/package/show/openSUSE:Factory:ARM/binutils
> > >>>>>>>>
> > >>>>>>>> Our latest U-Boot tarball and patches:
> > >>>>>>>> https://build.opensuse.org/package/show/Base:System/u-boot
> > >>>>>>>> Build logs can be found in the u-boot-* packages in the
> > >>>>>>>> same project, with underscores stripped, e.g.:
> > >>>>>>>> https://build.opensuse.org/package/show/Base:System/u-boot-am335xevm
> > >>>>>>>
> > >>>>>>> Thanks for your reply. Apparently, the problem does not
> > >>>>>>> appear for the boards in mainline U-Boot which I listed
> > >>>>>>> above with the source code from our v2014.01 tag and using
> > >>>>>>> gcc 4.8.1 from Linaro. I can install 4.8.2, but meanwhile,
> > >>>>>>> can you try to build v2014.01 for these boards with your
> > >>>>>>> setup?
> > >>>>>>>
> > >>>>>>> am335x_evm colibri_t20_iris highbank mx53loco omap3_beagle
> > >>>>>>> omap4_panda paz00 rpi_b
> > >>>>>>
> > >>>>>> I have commented out the patch in:
> > >>>>>> https://build.opensuse.org/project/show/home:a_faerber:branches:Base:System
> > >>>>>>
> > >>>>>> While there are apparently frequent rebuilds scheduled ATM,
> > >>>>>> it seemed like the colibri_t20_iris config intermittently
> > >>>>>> built OK without it. Maybe some gcc 4.8 stable branch update
> > >>>>>> [1] resolved it ... will keep an eye on the build status to
> > >>>>>> confirm. If everything builds, I'm happy.
> > >>>>>
> > >>>>> Nah, still fails without the patch:
> > >>>>>
> > >>>>> [ 178s] gcc -E -g -Os -ffunction-sections -fdata-sections
> > >>>>> -fno-common -ffixed-r9 -msoft-float -D__KERNEL__
> > >>>>> -DCONFIG_SYS_TEXT_BASE=0x0010E000
> > >>>>> -I/home/abuild/rpmbuild/BUILD/u-boot-2014.01/include
> > >>>>> -I/home/abuild/rpmbuild/BUILD/u-boot-2014.01/arch/arm/include
> > >>>>> -fno-builtin -ffreestanding -nostdinc -isystem
> > >>>>> /usr/lib/gcc/armv7hl-suse-linux-gnueabi/4.8/include -pipe
> > >>>>> -DCONFIG_ARM -D__ARM__ -marm -mno-thumb-interwork
> > >>>>> -mabi=aapcs-linux -mword-relocations -march=armv7-a -include
> > >>>>> /home/abuild/rpmbuild/BUILD/u-boot-2014.01/include/u-boot/u-boot.lds.h
> > >>>>> -DCPUDIR=arch/arm/cpu/armv7 -ansi -D__ASSEMBLY__ -P -
> > >>>>> </home/abuild/rpmbuild/BUILD/u-boot-2014.01/arch/arm/cpu/u-boot.lds
> > >>>>>> u-boot.lds
> > >>>>> [ 178s] cd /home/abuild/rpmbuild/BUILD/u-boot-2014.01 &&
> > >>>>> ld.bfd -pie -T u-boot.lds --gc-sections -Bstatic -Ttext
> > >>>>> 0x0010E000 arch/arm/cpu/armv7/start.o --start-group
> > >>>>> arch/arm/cpu/armv7/built-in.o
> > >>>>> arch/arm/cpu/armv7/tegra20/built-in.o arch/arm/cpu/built-in.o
> > >>>>> arch/arm/lib/built-in.o
> > >>>>> board/toradex/colibri_t20_iris/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/input/built-in.o drivers/mmc/built-in.o
> > >>>>> drivers/mtd/built-in.o drivers/mtd/nand/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/battery/built-in.o
> > >>>>> drivers/power/built-in.o drivers/power/fuel_gauge/built-in.o
> > >>>>> drivers/power/mfd/built-in.o drivers/power/pmic/built-in.o
> > >>>>> drivers/serial/built-in.o drivers/spi/built-in.o
> > >>>>> drivers/usb/eth/built-in.o drivers/usb/gadget/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
> > >>>>> lib/libfdt/built-in.o net/built-in.o test/built-in.o
> > >>>>> --end-group /home/abuild/rpmbuild/BUILD/u-boot-2014.01/arch/arm/lib/eabi_compat.o
> > >>>>> -L /usr/lib/gcc/armv7hl-suse-linux-gnueabi/4.8 -lgcc -Map
> > >>>>> u-boot.map -o u-boot [ 178s] ld.bfd: u-boot: could not find
> > >>>>> output section .gnu.hash [ 178s] ld.bfd: final link failed:
> > >>>>> Nonrepresentable section on output [ 178s] Makefile:556:
> > >>>>> recipe for target 'u-boot' failed [ 178s] make: *** [u-boot]
> > >>>>> Error 1
> > >>>>
> > >>>> You are trying this with your codebase, right? If so, can you
> > >>>> try and build vanilla v2014.01 with the exact same build
> > >>>> environment?
> > >>
> > >> Commented out all our patches at:
> > >> https://build.opensuse.org/project/show/home:a_faerber:branches:Base:System
> > >>
> > >> Failure of any sunxi-added targets is to be expected, of course.
> > >
> > > Not sure I'm getting this: if you build vanilla v2014.01, there
> > > shouldn't be any sunxi target built at all, should it?

I can report the same issue with OBS build of u-boot.

When u-boot is build with qemu emulated environment with gcc-4.8.2
(native armv7l toolchain) in the OBS it needs patch prepared by Andreas.

However I can build the same code from u-boot directory (without this
patch) with following toolchain:
arm-v7a-linux-gnueabi-gcc (OSELAS.Toolchain-2013.12.0
linaro-4.8-2013.11) 4.8.3 20131111

Any ideas how to solve this?

> >
> > I removed the patches from the spec file in our build service. That
> > doesn't drop the packages for those no longer patched-in targets, so
> > failures of those targets are to be expected. I am not building
> > locally.
> >
> > Here's a vanilla "highbank" target failing:
> > https://build.opensuse.org/package/live_build_log/home:a_faerber:branches:Base:System/u-boot-highbank/openSUSE_Factory_ARM/armv7l
> >
> > >>> If it
> > >>>> builds fine, then can you tell me which changes your patch(es)
> > >>>> made to linker scripts in your tree wrt 2014.01?
> > >>>
> > >>> Ping.
> > >>
> > >> I had previously pointed to our patches and explained that they
> > >> do not touch on any existing linker scripts. They merely change
> > >> CONFIG_ options, tweak environment settings and add the sunxi
> > >> targets.
> > >
> > > I am not asking about changing linker scripts; I am asking about
> > > trying your build environment on the pristine v2014.01 codebase,
> > > e.g. build all mainline ARM targets with your toolchains.
> >
> > You did ask above "which changes" our patches "made to linker
> > scripts". And the answer is: None, apart from the already
> > commented-out gnuhash.patch, which corresponds to this very patch
> > under discussion.
>
> Understood -- my question about linker script changes was conditioned
> to succeeding in building pristine v2014.01, so I had mentally put it
> aside until v2014.01 build results are known.
>
> > >> As for the other open question, OBS does not package build
> > >> intermediaries of failed builds, so I'll need to reproduce it
> > >> locally. ATM I'm lacking time because QEMU is about to enter
> > >> Hard Freeze for 2.0.
> > >
> > > Could you just run this in a git clone of U-Boot with v2014.01
> > > checked out?
> > >
> > > ARCH=arm CROSS_COMPILE=your-toolchain-prefix- ./MAKEALL
> > > -a arm
> > >
> > > It would build all targets unattended using your toolchain
> > > (assuming it is in your PATH of course).
> >
> > My local ARM machines are all 13.1, not Factory, but I can try
> > running that command there later.
>
> Thanks!
>
> > Amicalement,
> > Andreas
>
> Amicalement,

--
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group