[U-Boot] Please pull u-boot-sunxi master

Tom Rini
2015-06-11T15:08:44Z

On Thu, Jun 11, 2015 at 03:44:10PM +0200, Hans de Goede wrote:
> Hi,
>
> On 11-06-15 14:56, Tom Rini wrote:
> >On Thu, Jun 11, 2015 at 09:41:29AM +0200, Hans de Goede wrote:
> >>Hi,
> >>
> >>On 11-06-15 04:49, Simon Glass wrote:
> >>>Hi,
> >>>
> >>>On 10 June 2015 at 08:56, Tom Rini <trini@konsulko.com> wrote:
> >>>>On Wed, Jun 10, 2015 at 04:54:50PM +0200, Hans de Goede wrote:
> >>>>
> >>>>>Hi Tom,
> >>>>>
> >>>>>Please pull u-boot-sunxi/master into master for 2 small bug-fixes:
> >>>>>
> >>>>>The following changes since commit 3d0158ae18bef2ac89979f4c90419d3add436c71:
> >>>>>
> >>>>> Prepare v2015.07-rc2 (2015-06-08 17:48:33 -0400)
> >>>>>
> >>>>>are available in the git repository at:
> >>>>>
> >>>>> http://git.denx.de/u-boot-sunxi.git master
> >>>>>
> >>>>>for you to fetch changes up to 0751b138064db28f0866f0c2439afb8b3975180c:
> >>>>>
> >>>>> sunxi: Enable CONFIG_SYS_64BIT_LBA when AHCI is used (2015-06-10 16:52:12 +0200)
> >>>>>
> >>>>
> >>>>Applied to u-boot/master, thanks!
> >>>
> >>>I don't see this patch on the mailing list or I would reply there.
> >>
> >>Hmm, I asked the submitter to Cc the list when he suggested this patch on irc,
> >>I guess he only send it to me and I did not notice.
> >>
> >>>But for my toolchain I get errors:
> >>>
> >>>crosfw -b Orangepi_mini -w
> >>>#
> >>># configuration written to .config
> >>>#
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-ld.bfd:
> >>>error: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(bpabi.o)
> >>>uses VFP register arguments, u-boot does not
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-ld.bfd:
> >>>failed to merge target specific data of file
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(bpabi.o)
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-ld.bfd:
> >>>error: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_divdi3.o)
> >>>uses VFP register arguments, u-boot does not
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-ld.bfd:
> >>>failed to merge target specific data of file
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_divdi3.o)
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-ld.bfd:
> >>>error: /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)
> >>>uses VFP register arguments, u-boot does not
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-ld.bfd:
> >>>failed to merge target specific data of file
> >>>/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)
> >>>make[1]: *** [u-boot] Error 1
> >>>make[1]: *** Waiting for unfinished jobs....
> >>
> >>I'm not sure what todo about this, it works for me, and supporting disks
> >>larger then 2TB seems like a desirable feature in this time and age.
> >
> >Ug. Yes, but you have to use do_div and friends and we've got another
> >case where something snuck past not using those helpers. I forget the
> >right incantation to use on either nm or objdump to figure out just
> >which function/file is doing it wrong.
>
> Ok, so hopefully someone reading the list remembers and can provide us with a list of
> culprits. I can probably make some time to fix this even if the problem is not in sunxi
> code (all the commit does is enable CONFIG_SYS_64BIT_LBA which AFAIK does not directly
> influence any sunxi code).
>
> So for now lets keep this in master and try to get it fixed, if it is not fixed in say
> 2 rc-s from now then we should probably revert the sunxi commit (and break large
> disks again).
>

OK, so I dug out the magic again (since there's a few other boards that
fail on different toolchain with the same type of problem but another
place).
First:
$ arm-linux-gnueabihf-nm /opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a | grep -A 4 _udivdi3.o
This will show you all of the functions provided there.
Second:
$ for F in `find output-dir -name *.o`;do arm-linux-gnueabihf-nm $F 2>&1
| grep -q THATSYMBOL && echo $F;done

This will show you what object files have the function in question.
Third:
arm-linux-gnueabihf-objdump -d ONE/OBJ/FILE.o | $PAGER
And hunt around for what function(s) here are calling the incorrect math
function.
Fourth: Examine the C in question until you spot the "bad" division,
correct to use a helper from include/linux/math64.h (and yes we have
some other helpers too that are home grown but I am in favor of using
the kernel ones).

--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150611/9c928190/attachment.sig>