patches/gcc/4.2.3/250-softfloat-fix.patch
author Johannes Stezenbach <js@sig21.net>
Thu Jul 29 19:47:16 2010 +0200 (2010-07-29)
changeset 2045 fdaa6c7f6dea
parent 431 8bde4c6ea47a
permissions -rw-r--r--
cc/gcc: add option to compile against static libstdc++, for gcc-4.4 and newer

Idea and know-how taken from CodeSourcery build script.

Normal build:
$ ldd arm-unknown-linux-uclibcgnueabi-gcc
linux-gate.so.1 => (0xb77f3000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb76e8000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75a1000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb757a000)
/lib/ld-linux.so.2 (0xb77f4000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb755c000)

CC_STATIC_LIBSTDCXX=y:
$ ldd arm-unknown-linux-uclibcgnueabi-gcc
linux-gate.so.1 => (0xb7843000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb76e6000)
/lib/ld-linux.so.2 (0xb7844000)

I made CC_STATIC_LIBSTDCXX default=y since I think
it is always desirable.

Signed-off-by: Johannes Stezenbach <js@sig21.net>
yann@313
     1
This patch (C) 2007 Yann E. MORIN
yann@313
     2
Licensed under GPL v2.
yann@313
     3
yann@313
     4
First hunk of this patch solves compiling uClibc:
yann@313
     5
yann@313
     6
make[1]: Entering directory `/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/build-libc'
yann@313
     7
  LD libuClibc-0.9.29.so
yann@313
     8
libc/libc_so.a(difftime.os): In function `difftime':
yann@313
     9
difftime.c:(.text+0x8): undefined reference to `__floatsidf'
yann@313
    10
difftime.c:(.text+0x2c): undefined reference to `__subdf3'
yann@313
    11
libc/libc_so.a(_fpmaxtostr.os): In function `_fpmaxtostr':
yann@313
    12
_fpmaxtostr.c:(.text+0xd4): undefined reference to `__nedf2'
yann@313
    13
_fpmaxtostr.c:(.text+0xf8): undefined reference to `__eqdf2'
yann@313
    14
_fpmaxtostr.c:(.text+0x114): undefined reference to `__divdf3'
yann@313
    15
_fpmaxtostr.c:(.text+0x120): undefined reference to `__ltdf2'
yann@313
    16
_fpmaxtostr.c:(.text+0x1c4): undefined reference to `__muldf3'
yann@313
    17
_fpmaxtostr.c:(.text+0x388): undefined reference to `__gedf2'
yann@313
    18
_fpmaxtostr.c:(.text+0x430): undefined reference to `__adddf3'
yann@313
    19
libc/libc_so.a(__psfs_do_numeric.os): In function `__psfs_do_numeric':
yann@313
    20
__psfs_do_numeric.c:(.text+0x520): undefined reference to `__truncdfsf2'
yann@313
    21
libc/libc_so.a(strtof.os): In function `strtof':
yann@313
    22
strtof.c:(.text+0x1c): undefined reference to `__extendsfdf2'
yann@313
    23
/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/cc_core_prefix/lib/gcc/arm-linux-uclibc/4.1.1/libgcc.a(_fixunsdfsi.o):
yann@313
    24
In function `__fixunsdfsi':
yann@313
    25
libgcc2.c:(.text+0x34): undefined reference to `__fixdfsi'
yann@313
    26
make[2]: *** [lib/libc.so] Error 1
yann@313
    27
make[1]: *** [lib/libc.so.0] Error 2
yann@313
    28
make[1]: Leaving directory `/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/build-libc'
yann@313
    29
make: *** [/home/ymorin/x-tools/build/armeb-unknown-linux-uclibc/gcc-4.1.1-uClibc-0.9.28.1/build-libc/lib/libc.a]
yann@313
    30
Error 2
yann@313
    31
yann@313
    32
The second hunk fixes building final gcc because soft-float implies using -lfloat (which we don't have).
yann@313
    33
yann@313
    34
yann@313
    35
diff -dur gcc-4.2.0.orig/gcc/config.gcc gcc-4.2.0/gcc/config.gcc
yann@313
    36
--- gcc-4.2.0.orig/gcc/config.gcc	2007-07-15 11:24:18.000000000 +0200
yann@313
    37
+++ gcc-4.2.0/gcc/config.gcc	2007-07-15 11:26:02.000000000 +0200
yann@313
    38
@@ -721,7 +721,7 @@
yann@313
    39
 	    default_use_cxa_atexit=yes
yann@313
    40
 	    ;;
yann@313
    41
 	*)
yann@313
    42
-	    tmake_file="$tmake_file arm/t-linux"
yann@313
    43
+	    tmake_file="$tmake_file arm/t-linux arm/t-arm-elf"
yann@313
    44
 	    ;;
yann@313
    45
 	esac
yann@313
    46
 	tm_file="$tm_file arm/aout.h arm/arm.h"
yann@313
    47
diff -dur gcc-4.2.0.orig/gcc/config/arm/linux-elf.h gcc-4.2.0/gcc/config/arm/linux-elf.h
yann@313
    48
--- gcc-4.2.0.orig/gcc/config/arm/linux-elf.h	2007-07-15 11:24:18.000000000 +0200
yann@313
    49
+++ gcc-4.2.0/gcc/config/arm/linux-elf.h	2007-07-15 11:26:02.000000000 +0200
yann@313
    50
@@ -63,7 +63,7 @@
yann@313
    51
    %{shared:-lc} \
yann@313
    52
    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
yann@313
    53
 
yann@313
    54
-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
yann@313
    55
+#define LIBGCC_SPEC "-lgcc"
yann@313
    56
 
yann@313
    57
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
yann@313
    58