This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: coldfire and soft-float


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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]