coldfire and soft-float
Luigi 'Comio' Mantellini
luigi.mantellini@idf-hit.com
Thu Jun 19 07:35:00 GMT 2008
Kay, Thanks for your support.
this is the config.gcc (part of):
...
m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux
# with uClibc, using the new GNU/Linux-style
# ABI.
default_m68k_cpu=68020
default_cf_cpu=5206
tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h flat.h m68k/linux.h m68k/uclinux.h ./sysroot-suffix.h"
tm_defines="${tm_defines} MOTOROLA=1 UCLIBC_DEFAULT=1"
extra_options="${extra_options} linux.opt"
tmake_file="m68k/t-floatlib m68k/t-uclinux m68k/t-mlibs"
use_fixproto=no
;;
m68k-*-linux*) # Motorola m68k's running GNU/Linux
# with ELF format using glibc 2
# aka the GNU/Linux C library 6.
default_m68k_cpu=68020
default_cf_cpu=5475
tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h m68k/linux.h"
extra_options="${extra_options} m68k/ieee.opt"
tm_defines="${tm_defines} MOTOROLA=1"
# if not configured with --enable-sjlj-exceptions, bump the
# libgcc version number
if test x$sjlj != x1; then
tmake_file="$tmake_file m68k/t-slibgcc-elf-ver"
fi
;;
...
The target m68k-*-linux* doesn't set any tmake_file... I think that the
following should be added :
tmake_file="m68k/t-floatlib m68k/t-mlibs m68k/t-m68kbare"
Thanks
luigi
On gio, 2008-06-19 at 01:41 +0300, Kai Ruottu wrote:
> 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...
>
Industrie Dial Face S.p.A.
Luigi Mantellini
R&D - Software
Industrie Dial Face S.p.A.
Via Canzo, 4
20068 Peschiera Borromeo (MI), Italy
Tel.: +39 02 5167 2813
Fax: +39 02 5167 2459
E-mail: luigi.mantellini@idf-hit.com
GPG fingerprint: 3DD1 7B71 FBDF 6376
1B4A
B003 175F E979 907E
1650
More information about the Gcc-help
mailing list