Tim Dodge wrote: > Hi, > > I'm attempting to build an arm-xscale-linux-uclibc toolchain that uses > soft-float, so that I can build a version of gentoo for my zaurus c860. > > Without soft-float, everything seems to be okay - I've managed to build > a 2.6 kernel that boots into a minimal root fs. > > I have managed to build a soft-float version of the toolchain, but now > nothing will link, I'm getting undefined references to the float > functions like so: > > configure:1644: checking for C compiler default output > configure:1647: arm-xscale-linux-uclibc-gcc -Os -pipe > -march=armv5te -mtune=xscale conftest.c >&5 > > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__eqdf2' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__floatsidf' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__ltdf2' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__extendsfdf2' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__adddf3' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__fixdfsi' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__divdf3' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__muldf3' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__truncdfsf2' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__nedf2' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__gedf2' > /usr/lib/gcc/arm-xscale-linux-uclibc/3.4.3-20050110/../../../../arm-xscale-linux-uclibc/lib/libc.so: > undefined reference to `__subdf3' > collect2: ld returned 1 exit status > > I'm using gcc-3.4.3.20050110-r2.ebuild and uclibc-0.9.27.ebuild. > > I was under the impression that the soft-float routines had been added > to gcc since v3.4, and that libfloat is no longer required. > > Any idea what I'm doing wrong? > > Cheers, > Tim
I've managed to successfully build the soft-float toolchain using these two patches from openembedded. I needed to alter the uclibc ebuild to also unset HAS_FPU, and build gcc using EXTRA_ECONF="--with-float=soft". Cheers, Tim
# Fixes errors like the following when building glibc (or any other executable # or shared library) when using gcc 3.4.0 for ARM with softfloat: # # .../libc_pic.os(.text+0x15834): In function `__modf': undefined reference to `__subdf3' # .../libc_pic.os(.text+0x158b8): In function `__modf': undefined reference to `__subdf3' # .../libc_pic.os(.text+0x1590c): In function `scalbn': undefined reference to `__muldf3' # .../libc_pic.os(.text+0x15e94): In function `__ldexpf': undefined reference to `__eqsf2' # .../libc_pic.os(.text+0xcee4c): In function `monstartup': undefined reference to `__fixsfsi' diff -urNd gcc-3.4.0-orig/gcc/config/arm/t-linux gcc-3.4.0/gcc/config/arm/t-linux --- gcc-3.4.0-orig/gcc/config/arm/t-linux 2003-09-20 23:09:07.000000000 +0200 +++ gcc-3.4.0/gcc/config/arm/t-linux 2004-05-01 20:31:59.102846400 +0200 @@ -4,7 +4,10 @@ LIBGCC2_DEBUG_CFLAGS = -g0 LIB1ASMSRC = arm/lib1funcs.asm -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ + _fixsfsi _fixunssfsi # MULTILIB_OPTIONS = mhard-float/msoft-float # MULTILIB_DIRNAMES = hard-float soft-float
# Dimitry Andric <[EMAIL PROTECTED]>, 2004-05-01 # # * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed # anymore. (The required functions are now in libgcc.) # # Fixes errors like # arm-softfloat-linux-gnu/3.4.0/../../../../arm-softfloat-linux-gnu/bin/ld: cannot find -lfloat # collect2: ld returned 1 exit status # make[2]: *** [arm-softfloat-linux-gnu/gcc-3.4.0-glibc-2.3.2/build-glibc/iconvdata/ISO8859-1.so] Error 1 # when building glibc-2.3.3 with gcc-3.4.0 for arm-softfloat diff -urNd gcc-3.4.0-orig/gcc/config/arm/linux-elf.h gcc-3.4.0/gcc/config/arm/linux-elf.h --- gcc-3.4.0-orig/gcc/config/arm/linux-elf.h 2004-01-31 07:18:11.000000000 +0100 +++ gcc-3.4.0/gcc/config/arm/linux-elf.h 2004-05-01 19:19:06.935979200 +0200 @@ -55,7 +73,7 @@ %{shared:-lc} \ %{!shared:%{profile:-lc_p}%{!profile:-lc}}" -#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc" +#define LIBGCC_SPEC "-lgcc" /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add the GNU/Linux magical crtbegin.o file (see crtstuff.c) which