Bombing U-Boot on ARMv4, any hints?

Michael Hope michael.hope at linaro.org
Mon Mar 5 23:01:33 UTC 2012


On Tue, Mar 6, 2012 at 11:52 AM, Linus Walleij <linus.walleij at linaro.org> wrote:
> Hi toolchain folks,
>
> I have a problem with U-boot compiled for an ARMv4 system (Integrator)
> using Linaro 2012.02-20120222, it just crashes. Compiling the same
> U-Boot with CodeSourcery 2010-q1 works fine.
>
> Symptom:
> Resetting CPU ...
>
> undefined instruction
> pc : [<07fdecd4>]          lr : [<07fdeb34>]
> sp : 07f91380  ip : 00000000     fp : 00000001
> r10: 010258fc  r9 : 00000000     r8 : 07f94f64
> r7 : 07f94eb0  r6 : 00989680     r5 : 000186a0  r4 : 000186a0
> r3 : 000003e8  r2 : 000f423f     r1 : 000f4240  r0 : 05f5e100
> Flags: nzCv  IRQs on  FIQs on  Mode SVC_32
>
> (repeated ad nauseam)
>
> The only hint I have is the constant 000186a0, which appears
> here in the put_dec() routine from U-boots vsprintf(), which is
> nothing special, it's Douglas Jones' binary to decimal conversion
> code from the Linux kernel, but the compiles objects DOES
> contain calls to __aeabi_uidivmod, __udivsi3, __div64_32.
>
> Do we know of any potential trouble in these helpers on ARMv4?
>
> The file containing these functions is compiled like this:
>
> arm-linux-gnueabi-gcc -M -g  -Os   -fno-common -ffixed-r8 -msoft-float
>  -D__KERNEL__ -DCONFIG_SYS_TEXT_BASE=0x01000000
> -I/var/linus/u-boot/build-integrator/include2
> -I/var/linus/u-boot/build-integrator/include
> -I/var/linus/u-boot/include -fno-builtin -ffreestanding -nostdinc
> -isystem /home/linus/src/gcc-linaro-arm-linux-gnueabi-2012.02-20120222_linux/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/include
> -pipe  -DCONFIG_ARM -D__ARM__ -marm -mabi=aapcs-linux
> -mno-thumb-interwork -march=armv4   -MQ
> /var/linus/u-boot/build-integrator/lib/vsprintf.o vsprintf.c
>>/var/linus/u-boot/build-integrator/lib/.depend.vsprintf

Hi Linus.  Is this the arm-linux-gnueabi-gcc from the Ubuntu binary
package?  If so then the libgcc is an ARMv7 Thumb-2 VFP binary which
won't run on an ARMv4.  The kernel gets around this by providing its
own helper routines.  Does u-boot do the same?

The CodeSourcery toolchain is surviving as it targets ARMv5 by default
and includes multilibs for earlier architectures?

What instructions are at or near 0x07fdecd4 and 07fdeb34?

-- Michaels



More information about the linaro-toolchain mailing list