patches/gcc/4.1.2/210-softfloat-fix.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Fri Jan 27 13:31:16 2012 +0100 (2012-01-27)
changeset 2854 a70abdbfa342
parent 136 22b5ef41df97
permissions -rw-r--r--
complibs/cloog: fix linking with libm

In Ubuntu 11.04 and 11.10, the default options for ld have changed.
--no-copy-dt-needed-entries and --as-needed are now enabled by default, which
causes errors like:

[EXTRA] Checking CLooG/ppl
[DEBUG] ==> Executing: 'make' '-j3' '-s' 'check'
[ALL ] Making check in .
[ALL ] config.status: creating include/cloog/cloog-config.h
[ALL ] config.status: include/cloog/cloog-config.h is unchanged
[ALL ] libtool: link: i686-build_pc-linux-gnu-gcc -Wall -fomit-frame-pointer
-pipe -o cloog cloog.o -L/<snip>/build/static/lib ./.libs/libcloog.a -lm
/<snip>/build/static/lib/libppl_c.a /<snip>/build/static/lib/libpwl.a
/<snip>/build/static/lib/libppl.a /<snip>/build/static/lib/libgmpxx.a
/<snip>/build/static/lib/libgmp.a -lstdc++
[ALL ] /usr/bin/ld: /<snip>/build/static/lib/libppl.a(MIP_Problem.o):
undefined reference to symbol 'sqrt@@GLIBC_2.0'
[ALL ] /usr/bin/ld: note: 'sqrt@@GLIBC_2.0' is defined in DSO
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libm.so so try adding
it to the linker command line
[ALL ] /usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libm.so:
could not read symbols: Invalid operation
[ALL ] collect2: ld returned 1 exit status
[ERROR] make[2]: *** [cloog] Error 1
[ERROR] make[1]: *** [check-recursive] Error 1

See:
https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition

This patch fixes these errors by placing '-lm' at the right place on the command
line as libppl requires libm when linking cloog.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
yann@136
     1
This patch (C) 2007 Yann E. MORIN
yann@136
     2
Licensed under GPL v2.
yann@136
     3
yann@136
     4
First hunk of this patch solves compiling uClibc-0.9.28{,.1} :
yann@136
     5
yann@136
     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@136
     7
  LD libuClibc-0.9.29.so
yann@136
     8
libc/libc_so.a(difftime.os): In function `difftime':
yann@136
     9
difftime.c:(.text+0x8): undefined reference to `__floatsidf'
yann@136
    10
difftime.c:(.text+0x2c): undefined reference to `__subdf3'
yann@136
    11
libc/libc_so.a(_fpmaxtostr.os): In function `_fpmaxtostr':
yann@136
    12
_fpmaxtostr.c:(.text+0xd4): undefined reference to `__nedf2'
yann@136
    13
_fpmaxtostr.c:(.text+0xf8): undefined reference to `__eqdf2'
yann@136
    14
_fpmaxtostr.c:(.text+0x114): undefined reference to `__divdf3'
yann@136
    15
_fpmaxtostr.c:(.text+0x120): undefined reference to `__ltdf2'
yann@136
    16
_fpmaxtostr.c:(.text+0x1c4): undefined reference to `__muldf3'
yann@136
    17
_fpmaxtostr.c:(.text+0x388): undefined reference to `__gedf2'
yann@136
    18
_fpmaxtostr.c:(.text+0x430): undefined reference to `__adddf3'
yann@136
    19
libc/libc_so.a(__psfs_do_numeric.os): In function `__psfs_do_numeric':
yann@136
    20
__psfs_do_numeric.c:(.text+0x520): undefined reference to `__truncdfsf2'
yann@136
    21
libc/libc_so.a(strtof.os): In function `strtof':
yann@136
    22
strtof.c:(.text+0x1c): undefined reference to `__extendsfdf2'
yann@136
    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@136
    24
In function `__fixunsdfsi':
yann@136
    25
libgcc2.c:(.text+0x34): undefined reference to `__fixdfsi'
yann@136
    26
make[2]: *** [lib/libc.so] Error 1
yann@136
    27
make[1]: *** [lib/libc.so.0] Error 2
yann@136
    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@136
    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@136
    30
Error 2
yann@136
    31
yann@136
    32
The second hunk fixes building final gcc because soft-float implies using -lfloat (which we don't have).
yann@136
    33
yann@136
    34
yann@136
    35
diff -dur gcc-4.1.1.no-softfloat-fix/gcc/config.gcc gcc-4.1.1/gcc/config.gcc
yann@136
    36
--- gcc-4.1.1.no-softfloat-fix/gcc/config.gcc	2007-02-01 21:57:17.000000000 +0100
yann@136
    37
+++ gcc-4.1.1/gcc/config.gcc	2007-02-01 22:11:06.000000000 +0100
yann@136
    38
@@ -690,7 +690,7 @@
yann@136
    39
 	    default_use_cxa_atexit=yes
yann@136
    40
 	    ;;
yann@136
    41
 	*)
yann@136
    42
-	    tmake_file="$tmake_file arm/t-linux"
yann@136
    43
+	    tmake_file="$tmake_file arm/t-linux arm/t-arm-elf"
yann@136
    44
 	    ;;
yann@136
    45
 	esac
yann@136
    46
 	tm_file="$tm_file arm/aout.h arm/arm.h"
yann@136
    47
diff -dur gcc-4.1.1.-lfloat/gcc/config/arm/linux-elf.h gcc-4.1.1/gcc/config/arm/linux-elf.h
yann@136
    48
--- gcc-4.1.1.-lfloat/gcc/config/arm/linux-elf.h	2007-02-01 21:57:17.000000000 +0100
yann@136
    49
+++ gcc-4.1.1/gcc/config/arm/linux-elf.h	2007-02-01 23:00:42.000000000 +0100
yann@136
    50
@@ -63,7 +63,7 @@
yann@136
    51
    %{shared:-lc} \
yann@136
    52
    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
yann@136
    53
 
yann@136
    54
-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"
yann@136
    55
+#define LIBGCC_SPEC "-lgcc"
yann@136
    56
 
yann@136
    57
 #ifdef USE_UCLIBC
yann@136
    58
 #define LINUX_TARGET_INTERPRETER "/lib/ld-uClibc.so.0"