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

Reply via email to