| 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 |