Remove any reference to libfloat. That has gone once and for all.
Rationale:
Most of the time, soft-float problems are caused by this sucker of gcc:
it has support for soft float for all of the targets I've tried so far,
but does not activate this code until you dwelve into half a dozen of
files to make it accept to build and link the support code...
So, yes: gcc has soft-float support. And again, yes: gcc is a sucker.
1.1 --- a/COPYING Mon Jul 30 19:35:39 2007 +0000
1.2 +++ b/COPYING Mon Jul 30 20:02:13 2007 +0000
1.3 @@ -12,8 +12,6 @@
1.4 patches/uClibc/*/*.patch : available under the LGPL v2.1
1.5 patches/glibc/*/*.patch : ditto
1.6 patches/dmalloc/*/*.patch : ditto
1.7 - patches/libfloat/*/*.patch: Seems to be some BSD-like license; see the
1.8 - full source.
1.9 patches/*/*/*.patch not covered by any license above:
1.10 GPL v2 (some are GPL v2 or later, see the
1.11 full source).
2.1 --- a/config/target.in Mon Jul 30 19:35:39 2007 +0000
2.2 +++ b/config/target.in Mon Jul 30 20:02:13 2007 +0000
2.3 @@ -20,7 +20,6 @@
2.4 bool
2.5 prompt "arm"
2.6 select ARCH_SUPPORTS_BOTH_ENDIAN
2.7 - select ARCH_SUPPORTS_LIBFLOAT
2.8
2.9 config ARCH_MIPS
2.10 bool
2.11 @@ -30,7 +29,6 @@
2.12 config ARCH_x86
2.13 bool
2.14 prompt "x86"
2.15 - select ARCH_SUPPORTS_LIBFLOAT
2.16
2.17 config ARCH_x86_64
2.18 bool
2.19 @@ -183,30 +181,6 @@
2.20
2.21 endchoice
2.22
2.23 -config ARCH_SUPPORTS_LIBFLOAT
2.24 - bool
2.25 - default n
2.26 -
2.27 -config ARCH_FLOAT_SW_LIBFLOAT
2.28 - bool
2.29 - prompt "Use libfloat"
2.30 - default n
2.31 - depends on ARCH_FLOAT_SW && ARCH_SUPPORTS_LIBFLOAT
2.32 - help
2.33 - For those targets upporting it, you can use libfloat for the software
2.34 - floating point emulation.
2.35 -
2.36 - Note that some versions of gcc have support code that supersedes libfloat,
2.37 - while others don't. Known version of gcc that don't have support code are
2.38 - versions prior to 3.0, and version above 4.0.
2.39 -
2.40 - You should check gcc before deciding to use libfloat.
2.41 -
2.42 -config LIBFLOAT_VERSION
2.43 - string
2.44 - default "990616.orig"
2.45 - depends on ARCH_FLOAT_SW_LIBFLOAT
2.46 -
2.47 config TARGET_CFLAGS
2.48 string
2.49 prompt "Target CFLAGS"
3.1 --- a/patches/gcc/4.0.4/801-arm-softfloat.patch Mon Jul 30 19:35:39 2007 +0000
3.2 +++ b/patches/gcc/4.0.4/801-arm-softfloat.patch Mon Jul 30 20:02:13 2007 +0000
3.3 @@ -1,4 +1,5 @@
3.4 -Enable building a pure soft-float compiler without the need for libfloat.
3.5 +Enable building a pure soft-float compiler without the need for a software
3.6 +floating point library.
3.7
3.8 diff -dur gcc-4.0.4.orig/gcc/config.gcc gcc-4.0.4/gcc/config.gcc
3.9 --- gcc-4.0.4.orig/gcc/config.gcc 2007-02-02 19:12:28.000000000 +0100
4.1 --- a/patches/libfloat/990616.orig/100-libfloat_990616-3-lib-versioning.patch Mon Jul 30 19:35:39 2007 +0000
4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
4.3 @@ -1,48 +0,0 @@
4.4 -This patch comes from the Debian archive:
4.5 - ftp://ftp.de.debian.org/debian/pool/main/libf/libfloat/libfloat_990616-3.diff.gz
4.6 -
4.7 -It was stripped of all Debian-related hunks.
4.8 -Kept is the library versioning.
4.9 -
4.10 ---- libfloat-990616.orig/Makefile
4.11 -+++ libfloat-990616/Makefile
4.12 -@@ -4,15 +4,15 @@
4.13 - #CC=gcc -g -O2 -freg-struct-return -D__LIBFLOAT__
4.14 - AR=ar
4.15 -
4.16 --all: libfloat.a libfloat.so
4.17 -+all: libfloat.a libfloat.so.1
4.18 -
4.19 - libfloat.a: softfloat.o fplib_glue.o
4.20 - rm -f libfloat.a
4.21 - $(AR) cq libfloat.a softfloat.o fplib_glue.o
4.22 -
4.23 --libfloat.so: softfloat.os fplib_glue.os
4.24 -- rm -f libfloat.so
4.25 -- gcc -shared softfloat.os fplib_glue.os -o libfloat.so
4.26 -+libfloat.so.1: softfloat.os fplib_glue.os
4.27 -+ rm -f libfloat.so.1
4.28 -+ gcc -shared -Wl,-soname,libfloat.so.1 softfloat.os fplib_glue.os -o libfloat.so.1
4.29 -
4.30 - softfloat.o: softfloat/bits64/softfloat.c
4.31 - $(CC) -c -o softfloat.o -Isoftfloat/bits64/ARM-gcc softfloat/bits64/softfloat.c
4.32 -@@ -26,14 +26,14 @@
4.33 - fplib_glue.os: fplib_glue.S
4.34 - $(CC) -fpic -c -o fplib_glue.os fplib_glue.S
4.35 -
4.36 --install: libfloat.a libfloat.so
4.37 -- cp -a libfloat.a /usr/lib
4.38 -- cp -a libfloat.so /usr/lib
4.39 -- ldconfig
4.40 -+install: libfloat.a libfloat.so.1
4.41 -+ cp -a libfloat.a $(DESTDIR)/usr/lib
4.42 -+ cp -a libfloat.so.1 $(DESTDIR)/usr/lib
4.43 -+ cd $(DESTDIR)/usr/lib; ln -s libfloat.so.1 libfloat.so
4.44 -
4.45 - clean:
4.46 - rm -f *.o
4.47 - rm -f *.os
4.48 - rm -f libfloat.a
4.49 -- rm -f libfloat.so
4.50 -+ rm -f libfloat.so.1
4.51 - rm -f *~
5.1 --- a/patches/libfloat/990616.orig/200-cross_compile.patch Mon Jul 30 19:35:39 2007 +0000
5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
5.3 @@ -1,63 +0,0 @@
5.4 -When linking, call directly ld in place of the gcc wrapper, because the wrapper
5.5 -will try to link with -lfloat, which we don't have right now...
5.6 -
5.7 -Simplify CFLAGS to stay ABI compliant (ot so I guess)...
5.8 -
5.9 -diff -dur libfloat.orig/Makefile libfloat/Makefile
5.10 ---- libfloat.orig/Makefile 2007-02-16 19:38:55.000000000 +0100
5.11 -+++ libfloat/Makefile 2007-02-16 19:46:23.000000000 +0100
5.12 -@@ -1,8 +1,11 @@
5.13 - # Makefile for the Linux soft-float library
5.14 -
5.15 --CC=gcc -O2 -freg-struct-return -fomit-frame-pointer -D__LIBFLOAT__
5.16 --#CC=gcc -g -O2 -freg-struct-return -D__LIBFLOAT__
5.17 --AR=ar
5.18 -+AR=$(CROSS_COMPILE)ar
5.19 -+#CFLAGS=-O2 -freg-struct-return -fomit-frame-pointer -D__LIBFLOAT__
5.20 -+CFLAGS=-O2 -D__LIBFLOAT__
5.21 -+CC=$(CROSS_COMPILE)gcc
5.22 -+LDFLAGS=-shared -nostdlib
5.23 -+LD=$(CROSS_COMPILE)ld
5.24 -
5.25 - all: libfloat.a libfloat.so.1
5.26 -
5.27 -@@ -12,28 +13,31 @@
5.28 -
5.29 - libfloat.so.1: softfloat.os fplib_glue.os
5.30 - rm -f libfloat.so.1
5.31 -- gcc -shared -Wl,-soname,libfloat.so.1 softfloat.os fplib_glue.os -o libfloat.so.1
5.32 -+ $(LD) $(LDFLAGS) -soname=libfloat.so.1 softfloat.os fplib_glue.os -o libfloat.so.1
5.33 -
5.34 - softfloat.o: softfloat/bits64/softfloat.c
5.35 -- $(CC) -c -o softfloat.o -Isoftfloat/bits64/ARM-gcc softfloat/bits64/softfloat.c
5.36 -+ $(CC) $(CFLAGS) -c -o softfloat.o -Isoftfloat/bits64/ARM-gcc softfloat/bits64/softfloat.c
5.37 -
5.38 - fplib_glue.o: fplib_glue.S
5.39 -- $(CC) -c -o fplib_glue.o fplib_glue.S
5.40 -+ $(CC) $(CFLAGS) -c -o fplib_glue.o fplib_glue.S
5.41 -
5.42 - softfloat.os: softfloat/bits64/softfloat.c
5.43 -- $(CC) -fpic -c -o softfloat.os -Isoftfloat/bits64/ARM-gcc softfloat/bits64/softfloat.c
5.44 -+ $(CC) $(CFLAGS) -fpic -c -o softfloat.os -Isoftfloat/bits64/ARM-gcc softfloat/bits64/softfloat.c
5.45 -
5.46 - fplib_glue.os: fplib_glue.S
5.47 -- $(CC) -fpic -c -o fplib_glue.os fplib_glue.S
5.48 -+ $(CC) $(CFLAGS) -fpic -c -o fplib_glue.os fplib_glue.S
5.49 -
5.50 - install: libfloat.a libfloat.so.1
5.51 -- cp -a libfloat.a $(DESTDIR)/usr/lib
5.52 -- cp -a libfloat.so.1 $(DESTDIR)/usr/lib
5.53 -- cd $(DESTDIR)/usr/lib; ln -s libfloat.so.1 libfloat.so
5.54 -+ install -d -m 755 "$(DESTDIR)/usr/lib"
5.55 -+ install -m 755 libfloat.a "$(DESTDIR)/usr/lib"
5.56 -+ install -m 755 libfloat.so.1 "$(DESTDIR)/usr/lib"
5.57 -+ cd $(DESTDIR)/usr/lib
5.58 -+ ln -s libfloat.so.1 libfloat.so
5.59 -
5.60 - clean:
5.61 - rm -f *.o
5.62 - rm -f *.os
5.63 - rm -f libfloat.a
5.64 - rm -f libfloat.so.1
5.65 -+ rm -f libfloat.so
5.66 - rm -f *~
6.1 --- a/samples/arm-unknown-linux-uclibc/crosstool.config Mon Jul 30 19:35:39 2007 +0000
6.2 +++ b/samples/arm-unknown-linux-uclibc/crosstool.config Mon Jul 30 20:02:13 2007 +0000
6.3 @@ -92,8 +92,6 @@
6.4 CT_ARCH_FPU=""
6.5 # CT_ARCH_FLOAT_HW is not set
6.6 CT_ARCH_FLOAT_SW=y
6.7 -CT_ARCH_SUPPORTS_LIBFLOAT=y
6.8 -# CT_ARCH_FLOAT_SW_LIBFLOAT is not set
6.9 CT_TARGET_CFLAGS=""
6.10
6.11 #
7.1 --- a/samples/armeb-unknown-linux-gnu/crosstool.config Mon Jul 30 19:35:39 2007 +0000
7.2 +++ b/samples/armeb-unknown-linux-gnu/crosstool.config Mon Jul 30 20:02:13 2007 +0000
7.3 @@ -92,8 +92,6 @@
7.4 CT_ARCH_FPU=""
7.5 # CT_ARCH_FLOAT_HW is not set
7.6 CT_ARCH_FLOAT_SW=y
7.7 -CT_ARCH_SUPPORTS_LIBFLOAT=y
7.8 -# CT_ARCH_FLOAT_SW_LIBFLOAT is not set
7.9 CT_TARGET_CFLAGS=""
7.10
7.11 #
8.1 --- a/samples/armeb-unknown-linux-uclibc/crosstool.config Mon Jul 30 19:35:39 2007 +0000
8.2 +++ b/samples/armeb-unknown-linux-uclibc/crosstool.config Mon Jul 30 20:02:13 2007 +0000
8.3 @@ -92,8 +92,6 @@
8.4 CT_ARCH_FPU=""
8.5 # CT_ARCH_FLOAT_HW is not set
8.6 CT_ARCH_FLOAT_SW=y
8.7 -CT_ARCH_SUPPORTS_LIBFLOAT=y
8.8 -# CT_ARCH_FLOAT_SW_LIBFLOAT is not set
8.9 CT_TARGET_CFLAGS=""
8.10
8.11 #
9.1 --- a/samples/i586-geode-linux-uclibc/crosstool.config Mon Jul 30 19:35:39 2007 +0000
9.2 +++ b/samples/i586-geode-linux-uclibc/crosstool.config Mon Jul 30 20:02:13 2007 +0000
9.3 @@ -90,7 +90,6 @@
9.4 CT_ARCH_FPU=""
9.5 CT_ARCH_FLOAT_HW=y
9.6 # CT_ARCH_FLOAT_SW is not set
9.7 -CT_ARCH_SUPPORTS_LIBFLOAT=y
9.8 CT_TARGET_CFLAGS=""
9.9
9.10 #
10.1 --- a/samples/i686-nptl-linux-gnu/crosstool.config Mon Jul 30 19:35:39 2007 +0000
10.2 +++ b/samples/i686-nptl-linux-gnu/crosstool.config Mon Jul 30 20:02:13 2007 +0000
10.3 @@ -90,7 +90,6 @@
10.4 CT_ARCH_FPU=""
10.5 CT_ARCH_FLOAT_HW=y
10.6 # CT_ARCH_FLOAT_SW is not set
10.7 -CT_ARCH_SUPPORTS_LIBFLOAT=y
10.8 CT_TARGET_CFLAGS=""
10.9
10.10 #
11.1 --- a/samples/mips-unknown-linux-uclibc/crosstool.config Mon Jul 30 19:35:39 2007 +0000
11.2 +++ b/samples/mips-unknown-linux-uclibc/crosstool.config Mon Jul 30 20:02:13 2007 +0000
11.3 @@ -92,7 +92,6 @@
11.4 CT_ARCH_FPU=""
11.5 # CT_ARCH_FLOAT_HW is not set
11.6 CT_ARCH_FLOAT_SW=y
11.7 -# CT_ARCH_SUPPORTS_LIBFLOAT is not set
11.8 CT_TARGET_CFLAGS=""
11.9
11.10 #
12.1 --- a/samples/x86_64-unknown-linux-uclibc/crosstool.config Mon Jul 30 19:35:39 2007 +0000
12.2 +++ b/samples/x86_64-unknown-linux-uclibc/crosstool.config Mon Jul 30 20:02:13 2007 +0000
12.3 @@ -90,7 +90,6 @@
12.4 CT_ARCH_FPU=""
12.5 CT_ARCH_FLOAT_HW=y
12.6 # CT_ARCH_FLOAT_SW is not set
12.7 -# CT_ARCH_SUPPORTS_LIBFLOAT is not set
12.8 CT_TARGET_CFLAGS=""
12.9
12.10 #
13.1 --- a/scripts/build/binutils.sh Mon Jul 30 19:35:39 2007 +0000
13.2 +++ b/scripts/build/binutils.sh Mon Jul 30 20:02:13 2007 +0000
13.3 @@ -45,7 +45,7 @@
13.4
13.5 # Make those new tools available to the core C compilers to come:
13.6 # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
13.7 - # well. Create that (libfloat is one such sucker).
13.8 + # well. Create that.
13.9 mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
13.10 mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
13.11 mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
14.1 --- a/scripts/build/libfloat.sh Mon Jul 30 19:35:39 2007 +0000
14.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
14.3 @@ -1,72 +0,0 @@
14.4 -# This file adds functions to build libfloat
14.5 -# Copyright 2007 Yann E. MORIN
14.6 -# Licensed under the GPL v2. See COPYING in the root of this package
14.7 -
14.8 -# Define libfloat functions depending on wether it is selected or not
14.9 -if [ "${CT_ARCH_FLOAT_SW_LIBFLOAT}" = "y" ]; then
14.10 -
14.11 -do_print_filename() {
14.12 - echo "libfloat-${CT_LIBFLOAT_VERSION}"
14.13 -}
14.14 -
14.15 -# Download libfloat
14.16 -do_libfloat_get() {
14.17 - # Ah! libfloat separates the version string from the base name with
14.18 - # an underscore. We need to workaround this in a sane manner: soft link.
14.19 - local libfloat_file=`echo "${CT_LIBFLOAT_FILE}" |sed -r -e 's/^libfloat-/libfloat_/;'`
14.20 - CT_GetFile "${libfloat_file}" \
14.21 - ftp://ftp.de.debian.org/debian/pool/main/libf/libfloat
14.22 - CT_Pushd "${CT_TARBALLS_DIR}"
14.23 - ext=`CT_GetFileExtension "${libfloat_file}"`
14.24 - ln -vf "${libfloat_file}${ext}" "${CT_LIBFLOAT_FILE}${ext}" |CT_DoLog DEBUG
14.25 - CT_Popd
14.26 -}
14.27 -
14.28 -# Extract libfloat
14.29 -do_libfloat_extract() {
14.30 - CT_ExtractAndPatch "${CT_LIBFLOAT_FILE}"
14.31 -}
14.32 -
14.33 -# Build libfloat
14.34 -do_libfloat() {
14.35 - # Here we build and install libfloat for the target, so that the C library
14.36 - # builds OK with those versions of gcc that have severed softfloat support
14.37 - # code
14.38 - CT_DoStep INFO "Installing software floating point emulation library libfloat"
14.39 - CT_Pushd "${CT_BUILD_DIR}"
14.40 - mkdir -p build-libfloat
14.41 - cd build-libfloat
14.42 -
14.43 - CT_DoLog EXTRA "Copying sources to build dir"
14.44 - ( cd "${CT_SRC_DIR}/${CT_LIBFLOAT_FILE}"; tar cf - . ) |tar xvf - |CT_DoLog ALL
14.45 -
14.46 - CT_DoLog EXTRA "Cleaning library"
14.47 - make clean 2>&1 |CT_DoLog ALL
14.48 -
14.49 - CT_DoLog EXTRA "Building library"
14.50 - make CROSS_COMPILE="${CT_TARGET}-" 2>&1 |CT_DoLog ALL
14.51 -
14.52 - CT_DoLog EXTRA "Installing library"
14.53 - make DESTDIR="${CT_SYSROOT_DIR}" install 2>&1 |CT_DoLog ALL
14.54 -
14.55 - CT_Popd
14.56 -
14.57 - CT_EndStep
14.58 -}
14.59 -
14.60 -else # "${CT_ARCH_FLOAT_SW_LIBFLOAT}" != "y"
14.61 -
14.62 -do_print_filename() {
14.63 - true
14.64 -}
14.65 -do_libfloat_get() {
14.66 - true
14.67 -}
14.68 -do_libfloat_extract() {
14.69 - true
14.70 -}
14.71 -do_libfloat() {
14.72 - true
14.73 -}
14.74 -
14.75 -fi
15.1 --- a/scripts/crosstool.sh Mon Jul 30 19:35:39 2007 +0000
15.2 +++ b/scripts/crosstool.sh Mon Jul 30 20:02:13 2007 +0000
15.3 @@ -90,7 +90,6 @@
15.4 CT_CC_CORE_FILE="${CT_CC_CORE}-${CT_CC_CORE_VERSION}"
15.5 CT_CC_FILE="${CT_CC}-${CT_CC_VERSION}"
15.6 CT_LIBC_FILE="${CT_LIBC}-${CT_LIBC_VERSION}"
15.7 -CT_LIBFLOAT_FILE="libfloat-${CT_LIBFLOAT_VERSION}"
15.8
15.9 # Where will we work?
15.10 CT_TARBALLS_DIR="${CT_TOP_DIR}/targets/tarballs"
15.11 @@ -345,7 +344,6 @@
15.12 # export any variable, nor re-parse the configuration and functions files.
15.13 . "${CT_LIB_DIR}/scripts/build/kernel_${CT_KERNEL}.sh"
15.14 . "${CT_LIB_DIR}/scripts/build/binutils.sh"
15.15 -. "${CT_LIB_DIR}/scripts/build/libfloat.sh"
15.16 . "${CT_LIB_DIR}/scripts/build/libc_${CT_LIBC}.sh"
15.17 . "${CT_LIB_DIR}/scripts/build/cc_core_${CT_CC_CORE}.sh"
15.18 . "${CT_LIB_DIR}/scripts/build/cc_${CT_CC}.sh"
15.19 @@ -357,7 +355,6 @@
15.20 do_kernel_get
15.21 do_binutils_get
15.22 do_cc_core_get
15.23 - do_libfloat_get
15.24 do_libc_get
15.25 do_cc_get
15.26 do_tools_get
15.27 @@ -373,7 +370,6 @@
15.28 do_kernel_extract
15.29 do_binutils_extract
15.30 do_cc_core_extract
15.31 - do_libfloat_extract
15.32 do_libc_extract
15.33 do_cc_extract
15.34 do_tools_extract
15.35 @@ -396,7 +392,6 @@
15.36 libc_headers \
15.37 libc_start_files \
15.38 cc_core_pass_2 \
15.39 - libfloat \
15.40 libc \
15.41 cc \
15.42 libc_finish \
16.1 --- a/scripts/functions Mon Jul 30 19:35:39 2007 +0000
16.2 +++ b/scripts/functions Mon Jul 30 20:02:13 2007 +0000
16.3 @@ -416,7 +416,7 @@
16.4 esac
16.5
16.6 # Snapshots might not have the version number in the extracted directory
16.7 - # name. This is also the case for some (old) packages, such as libfloat.
16.8 + # name. This is also the case for some (odd) packages, such as D.U.M.A.
16.9 # Overcome this issue by symlink'ing the directory.
16.10 if [ ! -d "${file}" -a "${libc_addon}" != "y" ]; then
16.11 case "${ext}" in
17.1 --- a/steps.mk Mon Jul 30 19:35:39 2007 +0000
17.2 +++ b/steps.mk Mon Jul 30 20:02:13 2007 +0000
17.3 @@ -9,7 +9,6 @@
17.4 libc_headers \
17.5 libc_start_files \
17.6 cc_core_pass_2 \
17.7 - libfloat \
17.8 libc \
17.9 cc \
17.10 libc_finish \