mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
292 lines
9.4 KiB
Diff
292 lines
9.4 KiB
Diff
|
Warning! The powerpc patch (rs6000/linux.h) is hack-ish and would
|
||
|
definitely need to be improved to be acceptable upstream. Also,
|
||
|
this patch isn't complete as it only supports i386, arm, mips, and
|
||
|
powerpc (rs6000).
|
||
|
diff -urN gcc-20011006/config.sub gcc-20011006-new/config.sub
|
||
|
--- gcc-20011006/config.sub 2004-01-13 06:15:28.000000000 -0600
|
||
|
+++ gcc-20011006-new/config.sub 2004-01-10 11:09:35.000000000 -0600
|
||
|
@@ -68,7 +68,7 @@
|
||
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||
|
case $maybe_os in
|
||
|
- linux-gnu*)
|
||
|
+ linux-gnu* | linux-uclibc*)
|
||
|
os=-$maybe_os
|
||
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||
|
;;
|
||
|
@@ -936,7 +936,8 @@
|
||
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||
|
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||
|
+ | -mingw32* | -linux-gnu* | -linux-uclibc* \
|
||
|
+ | -uxpv* | -beos* | -mpeix* | -udk* \
|
||
|
| -interix* | -uwin* )
|
||
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||
|
;;
|
||
|
diff -urN gcc-20011006/gcc/config/arm/linux-elf.h gcc-20011006-new/gcc/config/arm/linux-elf.h
|
||
|
--- gcc-20011006/gcc/config/arm/linux-elf.h 2004-01-13 06:15:28.000000000 -0600
|
||
|
+++ gcc-20011006-new/gcc/config/arm/linux-elf.h 2004-01-10 11:12:11.000000000 -0600
|
||
|
@@ -90,6 +90,18 @@
|
||
|
#define ENDFILE_SPEC \
|
||
|
"%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
|
||
|
|
||
|
+#ifdef USE_UCLIBC
|
||
|
+#define LINK_SPEC "%{h*} %{version:-v} \
|
||
|
+ %{b} %{Wl,*:%*} \
|
||
|
+ %{static:-Bstatic} \
|
||
|
+ %{shared:-shared} \
|
||
|
+ %{symbolic:-Bsymbolic} \
|
||
|
+ %{rdynamic:-export-dynamic} \
|
||
|
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0} \
|
||
|
+ -X \
|
||
|
+ %{mbig-endian:-EB}" \
|
||
|
+ SUBTARGET_EXTRA_LINK_SPEC
|
||
|
+#else
|
||
|
#define LINK_SPEC "%{h*} %{version:-v} \
|
||
|
%{b} %{Wl,*:%*} \
|
||
|
%{static:-Bstatic} \
|
||
|
@@ -100,6 +112,7 @@
|
||
|
-X \
|
||
|
%{mbig-endian:-EB}" \
|
||
|
SUBTARGET_EXTRA_LINK_SPEC
|
||
|
+#endif
|
||
|
|
||
|
#undef CPP_PREDEFINES
|
||
|
#define CPP_PREDEFINES \
|
||
|
diff -urN gcc-20011006/gcc/config/i386/linux.h gcc-20011006-new/gcc/config/i386/linux.h
|
||
|
--- gcc-20011006/gcc/config/i386/linux.h 2001-04-03 17:38:59.000000000 -0500
|
||
|
+++ gcc-20011006-new/gcc/config/i386/linux.h 2004-01-10 11:15:38.000000000 -0600
|
||
|
@@ -199,6 +199,15 @@
|
||
|
%{static:-static}}}"
|
||
|
#endif
|
||
|
#else
|
||
|
+#if defined USE_UCLIBC
|
||
|
+#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
|
||
|
+ %{!shared: \
|
||
|
+ %{!ibcs: \
|
||
|
+ %{!static: \
|
||
|
+ %{rdynamic:-export-dynamic} \
|
||
|
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
|
||
|
+ %{static:-static}}}"
|
||
|
+#else
|
||
|
#define LINK_SPEC "-m elf_i386 %{shared:-shared} \
|
||
|
%{!shared: \
|
||
|
%{!ibcs: \
|
||
|
@@ -207,6 +216,7 @@
|
||
|
%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
|
||
|
%{static:-static}}}"
|
||
|
#endif
|
||
|
+#endif
|
||
|
|
||
|
/* Get perform_* macros to build libgcc.a. */
|
||
|
#include "i386/perform.h"
|
||
|
diff -urN gcc-20011006/gcc/config/mips/linux.h gcc-20011006-new/gcc/config/mips/linux.h
|
||
|
--- gcc-20011006/gcc/config/mips/linux.h 2004-01-13 06:15:28.000000000 -0600
|
||
|
+++ gcc-20011006-new/gcc/config/mips/linux.h 2004-01-10 11:16:39.000000000 -0600
|
||
|
@@ -154,6 +154,17 @@
|
||
|
|
||
|
/* Borrowed from sparc/linux.h */
|
||
|
#undef LINK_SPEC
|
||
|
+#ifdef USE_UCLIBC
|
||
|
+#define LINK_SPEC \
|
||
|
+ "%(endian_spec) \
|
||
|
+ %{shared:-shared} \
|
||
|
+ %{!shared: \
|
||
|
+ %{!ibcs: \
|
||
|
+ %{!static: \
|
||
|
+ %{rdynamic:-export-dynamic} \
|
||
|
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
|
||
|
+ %{static:-static}}}"
|
||
|
+#else
|
||
|
#define LINK_SPEC \
|
||
|
"%(endian_spec) \
|
||
|
%{shared:-shared} \
|
||
|
@@ -163,6 +174,7 @@
|
||
|
%{rdynamic:-export-dynamic} \
|
||
|
%{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
|
||
|
%{static:-static}}}"
|
||
|
+#endif
|
||
|
|
||
|
|
||
|
#undef SUBTARGET_ASM_SPEC
|
||
|
diff -urN old/gcc-20011006/gcc/config/mips/t-linux-uclibc gcc-20011006/gcc/config/mips/t-linux-uclibc
|
||
|
--- old/gcc-20011006/gcc/config/mips/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
|
||
|
+++ gcc-20011006/gcc/config/mips/t-linux-uclibc 2004-01-14 02:51:10.000000000 -0600
|
||
|
@@ -0,0 +1 @@
|
||
|
+T_CFLAGS = -DUSE_UCLIBC
|
||
|
diff -urN gcc-20011006/gcc/config/rs6000/linux.h gcc-20011006-new/gcc/config/rs6000/linux.h
|
||
|
--- gcc-20011006/gcc/config/rs6000/linux.h 2001-04-03 17:38:59.000000000 -0500
|
||
|
+++ gcc-20011006-new/gcc/config/rs6000/linux.h 2004-01-10 11:15:38.000000000 -0600
|
||
|
@@ -36,12 +36,21 @@
|
||
|
#define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
|
||
|
|
||
|
#undef LINK_SPEC
|
||
|
+#ifdef USE_UCLIBC
|
||
|
+#define LINK_SPEC "-m elf32ppclinux %{G*} %{shared:-shared} \
|
||
|
+ %{!shared: \
|
||
|
+ %{!static: \
|
||
|
+ %{rdynamic:-export-dynamic} \
|
||
|
+ %{!dynamic-linker:-dynamic-linker /lib/ld-uClibc.so.0}} \
|
||
|
+ %{static:-static}}"
|
||
|
+#else
|
||
|
#define LINK_SPEC "-m elf32ppclinux %{G*} %{shared:-shared} \
|
||
|
%{!shared: \
|
||
|
%{!static: \
|
||
|
%{rdynamic:-export-dynamic} \
|
||
|
%{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
|
||
|
%{static:-static}}"
|
||
|
+#endif
|
||
|
|
||
|
#undef LIB_DEFAULT_SPEC
|
||
|
#define LIB_DEFAULT_SPEC "%(lib_linux)"
|
||
|
diff -urN gcc-20011006/gcc/config/t-linux-uclibc gcc-20011006-new/gcc/config/t-linux-uclibc
|
||
|
--- gcc-20011006/gcc/config/t-linux-uclibc 1969-12-31 18:00:00.000000000 -0600
|
||
|
+++ gcc-20011006-new/gcc/config/t-linux-uclibc 2004-01-10 11:18:46.000000000 -0600
|
||
|
@@ -0,0 +1,18 @@
|
||
|
+T_CFLAGS = -DUSE_UCLIBC
|
||
|
+
|
||
|
+# Don't run fixproto
|
||
|
+STMP_FIXPROTO =
|
||
|
+
|
||
|
+# Don't install "assert.h" in gcc. We use the one in glibc.
|
||
|
+INSTALL_ASSERT_H =
|
||
|
+
|
||
|
+# Compile crtbeginS.o and crtendS.o with pic.
|
||
|
+CRTSTUFF_T_CFLAGS_S = -fPIC
|
||
|
+# Compile libgcc2.a with pic.
|
||
|
+TARGET_LIBGCC2_CFLAGS = -fPIC
|
||
|
+
|
||
|
+# Do not build libgcc1. Let gcc generate those functions. The GNU/Linux
|
||
|
+# C library can handle them.
|
||
|
+LIBGCC1 =
|
||
|
+CROSS_LIBGCC1 =
|
||
|
+LIBGCC1_TEST =
|
||
|
diff -urN gcc-20011006/gcc/configure gcc-20011006-new/gcc/configure
|
||
|
--- gcc-20011006/gcc/configure 2004-01-13 06:15:28.000000000 -0600
|
||
|
+++ gcc-20011006-new/gcc/configure 2004-01-10 11:28:54.000000000 -0600
|
||
|
@@ -3219,6 +3219,24 @@
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
+ arm*-*-linux-uclibc*) # ARM GNU/Linux with ELF - uClibc
|
||
|
+ xm_file=arm/xm-linux.h
|
||
|
+ xmake_file=x-linux
|
||
|
+ tm_file="arm/linux-elf.h"
|
||
|
+ case $machine in
|
||
|
+ armv2*-*-*)
|
||
|
+ tm_file="arm/linux-elf26.h $tm_file"
|
||
|
+ ;;
|
||
|
+ esac
|
||
|
+ tmake_file="t-linux-uclibc arm/t-linux"
|
||
|
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
|
||
|
+ gnu_ld=yes
|
||
|
+ case x${enable_threads} in
|
||
|
+ x | xyes | xpthreads | xposix)
|
||
|
+ thread_file='posix'
|
||
|
+ ;;
|
||
|
+ esac
|
||
|
+ ;;
|
||
|
arm*-*-aout)
|
||
|
tm_file=arm/aout.h
|
||
|
tmake_file=arm/t-bare
|
||
|
@@ -3631,6 +3649,18 @@
|
||
|
thread_file='single'
|
||
|
fi
|
||
|
;;
|
||
|
+ i[34567]86-*-linux*uclibc*) # Intel 80386's running GNU/Linux
|
||
|
+ # with ELF format using uClibc
|
||
|
+ xmake_file=x-linux
|
||
|
+ tm_file=i386/linux.h
|
||
|
+ tmake_file="t-linux-uclibc i386/t-crtstuff"
|
||
|
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
|
||
|
+ gnu_ld=yes
|
||
|
+ float_format=i386
|
||
|
+ if test x$enable_threads = xyes; then
|
||
|
+ thread_file='posix'
|
||
|
+ fi
|
||
|
+ ;;
|
||
|
i[34567]86-*-linux-gnu*) # Intel 80386's running GNU/Linux
|
||
|
# aka GNU/Linux C library 6
|
||
|
xmake_file=x-linux
|
||
|
@@ -4696,7 +4726,19 @@
|
||
|
# On NetBSD, the headers are already okay, except for math.h.
|
||
|
tmake_file=t-netbsd
|
||
|
;;
|
||
|
- mips*-*-linux*) # Linux MIPS, either endian.
|
||
|
+ mips*-*-linux-uclibc*) # Linux (uclibc) MIPS, either endian.
|
||
|
+ tmake_file=mips/t-linux-uclibc
|
||
|
+ xmake_file=x-linux
|
||
|
+ xm_file="xm-siglist.h ${xm_file}"
|
||
|
+ case $machine in
|
||
|
+ mipsel-*) tm_file="mips/elfl.h mips/linux.h" ;;
|
||
|
+ *) tm_file="mips/elf.h mips/linux.h" ;;
|
||
|
+ esac
|
||
|
+ extra_parts="crtbegin.o crtend.o"
|
||
|
+ gnu_ld=yes
|
||
|
+ gas=yes
|
||
|
+ ;;
|
||
|
+ mips*-*-linux*) # Linux MIPS, either endian.
|
||
|
xmake_file=x-linux
|
||
|
xm_file="xm-siglist.h ${xm_file}"
|
||
|
case $machine in
|
||
|
@@ -5159,6 +5201,24 @@
|
||
|
thread_file='posix'
|
||
|
fi
|
||
|
;;
|
||
|
+ powerpc-*-linux-uclibc*)
|
||
|
+ tm_file=rs6000/linux.h
|
||
|
+ xm_file="xm-siglist.h rs6000/xm-sysv4.h"
|
||
|
+ xm_defines="USG ${xm_defines}"
|
||
|
+ out_file=rs6000/rs6000.c
|
||
|
+ if test x$gas = xyes
|
||
|
+ then
|
||
|
+ tmake_file="rs6000/t-ppcos t-linux-uclibc rs6000/t-ppccomm"
|
||
|
+ else
|
||
|
+ tmake_file="rs6000/t-ppc t-linux-uclibc rs6000/t-ppccomm"
|
||
|
+ fi
|
||
|
+ xmake_file=x-linux
|
||
|
+ extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
|
||
|
+ extra_headers=ppc-asm.h
|
||
|
+ if test x$enable_threads = xyes; then
|
||
|
+ thread_file='posix'
|
||
|
+ fi
|
||
|
+ ;;
|
||
|
powerpc-wrs-vxworks*)
|
||
|
cpu_type=rs6000
|
||
|
xm_file="xm-siglist.h rs6000/xm-sysv4.h"
|
||
|
diff -urN gcc-20011006/ltconfig gcc-20011006-new/ltconfig
|
||
|
--- gcc-20011006/ltconfig 1999-06-21 21:35:12.000000000 -0500
|
||
|
+++ gcc-20011006-new/ltconfig 2004-01-10 11:34:23.000000000 -0600
|
||
|
@@ -436,6 +436,7 @@
|
||
|
# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
|
||
|
case "$host_os" in
|
||
|
linux-gnu*) ;;
|
||
|
+linux-uclibc*) ;;
|
||
|
linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
|
||
|
esac
|
||
|
|
||
|
@@ -1773,6 +1774,22 @@
|
||
|
fi
|
||
|
;;
|
||
|
|
||
|
+linux-uclibc*)
|
||
|
+ version_type=linux
|
||
|
+ need_lib_prefix=no
|
||
|
+ need_version=no
|
||
|
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
|
||
|
+ soname_spec='${libname}${release}.so$major'
|
||
|
+ finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir'
|
||
|
+ shlibpath_var=LD_LIBRARY_PATH
|
||
|
+ shlibpath_overrides_runpath=no
|
||
|
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
|
||
|
+ file_magic_cmd=/usr/bin/file
|
||
|
+ file_magic_test_file=`echo /lib/libuClibc-*.so`
|
||
|
+ # Assume using the uClibc dynamic linker.
|
||
|
+ dynamic_linker="uClibc ld.so"
|
||
|
+ ;;
|
||
|
+
|
||
|
netbsd*)
|
||
|
version_type=sunos
|
||
|
if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
|