Re: coldfire and soft-float

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Luigi 'Comio' Mantellini wrote:

- If it doesn't, why you think that the default for Coldfire isn't
   using the '-msoft-float' and including the base soft-float routines
   into the 'libgcc' ?

I'm confused.. this the error:

rm -f lib/libc.so lib/libc.so.0 lib/libuClibc-0.9.29.so
m68k-linux-uclibc-ld  -shared --warn-common --warn-once
> /mnt/devel/openwrt/OpenWRT.git/staging_dir/toolchain-m68k_gcc4.3.1/lib/gcc/m68k-linux-uclibc/4.3.1/libgcc.a
libc/libc_so.a(difftime.os): In function `difftime':
difftime.c:(.text+0xe): undefined reference to `__floatsidf'
difftime.c:(.text+0x2a): undefined reference to `__subdf3'

Maybe there is some bug with Linux versus uClinux things. Linux uses
glibc and at least in the PPC case this has those soft-float routines.
Linux-uClibc uses uClibc and maybe this hasn't those routines but the
'libgcc.a' should have them...

In any case the first step would be to compare the config templates
for 'm68k-linux-gnu' and 'm68k-linux-uclibc' in 'gcc/config.gcc' and
see whether the latter has the 'm68k/t-softfp' or something like that
'target makefile fragment' added to the 'linux-uclibc' one... They may
differ in other things too but for this problem those target makefile
fragments ('t-files') in 'gcc/config/m68k' would be the key. I haven't
the gcc-4.3.1 sources available for looking just now so I cannot look
what the proper 't-file' was. Basically between these two Linux variations there shouldn't be very much differences.

In any case it would be useful to learn the GCC config chain from the
target template in 'gcc/config.gcc' to those config files in the
'gcc/config/<CPU>' and see what the problem could be. In this case I
would expect the target template requiring 'case handling' for the different 'm68k' (m68020/m68881) and 'mcf' (Coldfire) CPU cases, the
latter adding the required soft-float routines into the resulting
'libgcc.a' via the proper 'tmake-file' addition...  The Linux/m68k
configuration probably expects a m68881/m68882 FPU always being on
the target system.

libc/libc_so.a(_fpmaxtostr.os): In function `_fpmaxtostr':
_fpmaxtostr.c:(.text+0x8a): undefined reference to `__nedf2'
_fpmaxtostr.c:(.text+0x18c): undefined reference to `__eqdf2'
_fpmaxtostr.c:(.text+0x1aa): undefined reference to `__divdf3'
_fpmaxtostr.c:(.text+0x1be): undefined reference to `__ltdf2'
_fpmaxtostr.c:(.text+0x212): undefined reference to `__floatunsidf'
_fpmaxtostr.c:(.text+0x238): undefined reference to `__muldf3'
_fpmaxtostr.c:(.text+0x656): undefined reference to `__gedf2'

Checking that the :

...../lib/gcc/m68k-linux-uclibc/4.3.1/libgcc.a

really hasn't these symbols in it, using the 'm68k-linux-uclibc-nm'
for it, would though be the first task. Compiling those 'm68k/float.c'
etc things should add them...


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux