re PR target/24837 (move dynamic linker names out of LINK_SPEC and into new DYNAMIC_L...
authorJoseph Myers <joseph@codesourcery.com>
Sat, 18 Feb 2006 11:12:51 +0000 (11:12 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Sat, 18 Feb 2006 11:12:51 +0000 (11:12 +0000)
PR target/24837
* config.gcc: Define UCLIBC_DEFAULT to 0 or 1.
* opth-gen.awk: Handle Var and InverseMask together.
* config/linux.opt (muclibc, mglibc): Use Var(linux_uclibc).
* config/linux.h: Use #if not #ifdef for testing UCLIBC_DEFAULT.
(TARGET_C99_FUNCTIONS): Test OPTION_GLIBC not TARGET_GLIBC.
(CHOOSE_DYNAMIC_LINKER): Give an error for -mglibc and -muclibc
used together.
(UCLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER64,
LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64): Define.
* config/alpha/linux-elf.h (GLIBC_DYNAMIC_LINKER,
UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
LINUX_DYNAMIC_LINKER): Define.
(ELF_DYNAMIC_LINKER): Define to LINUX_DYNAMIC_LINKER.
* config/alpha/linux.h (TARGET_C99_FUNCTIONS): Define to
TARGET_GLIBC.
* config/cris/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(CRIS_LINK_SUBTARGET_SPEC): Pass a -dynamic-linker option.
* config/frv/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
(TARGET_C99_FUNCTIONS): Don't define.
* config/i386/linux.h (DYNAMIC_LINKER): Rename to
GLIBC_DYNAMIC_LINKER.
(SUBTARGET_EXTRA_SPECS): Use LINUX_DYNAMIC_LINKER.
* config/i386/linux64.h (GLIBC_DYNAMIC_LINKER32,
GLIBC_DYNAMIC_LINKER64): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER32 and
LINUX_DYNAMIC_LINKER64.
* config/ia64/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/m32r/linux.h (GLIBC_DYNAMIC_LINKE): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/m68k/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/mips/linux64.h (GLIBC_DYNAMIC_LINKER32,
GLIBC_DYNAMIC_LINKER64, GLIBC_DYNAMIC_LINKERN32,
UCLIBC_DYNAMIC_LINKERN32, LINUX_DYNAMIC_LINKERN32): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKERN32, LINUX_DYNAMIC_LINKER64
and LINUX_DYNAMIC_LINKER32.
* config/mn10300/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/pa/pa-linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/rs6000/linux.h (TARGET_C99_FUNCTIONS): Define to
TARGET_GLIBC.
* config/rs6000/linux64.h (TARGET_C99_FUNCTIONS): Likewise.
(GLIBC_DYNAMIC_LINKER32, GLIBC_DYNAMIC_LINKER64,
UCLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER64,
CHOOSE_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64): Define.
(LINK_OS_LINUX_SPEC32): Use LINUX_DYNAMIC_LINKER32.
(LINK_OS_LINUX_SPEC64): Use LINUX_DYNAMIC_LINKER64.
* config/rs6000/sysv4.h (GLIBC_DYNAMIC_LINKER,
UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
LINUX_DYNAMIC_LINKER): Define.
(LINK_OS_LINUX_SPEC): Use LINUX_DYNAMIC_LINKE.
* config/s390/linux.h (GLIBC_DYNAMIC_LINKER32,
GLIBC_DYNAMIC_LINKER64): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER32 and
LINUX_DYNAMIC_LINKER64.
* config/sh/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(SUBTARGET_LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* config/sparc/linux.h (GLIBC_DYNAMIC_LINKER,
UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
LINUX_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
(TARGET_C99_FUNCTIONS): Define to TARGET_GLIBC.
* config/sparc/linux64.h (GLIBC_DYNAMIC_LINKER32,
GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER32,
UCLIBC_DYNAMIC_LINKER64, CHOOSE_DYNAMIC_LINKER,
LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64): Define.
(LINK_ARCH32_SPEC): Use LINUX_DYNAMIC_LINKER32.
(LINK_ARCH64_SPEC, LINK_SPEC): Use LINUX_DYNAMIC_LINKER64.
(TARGET_C99_FUNCTIONS): Define to TARGET_GLIBC.
* config/xtensa/linux.h (GLIBC_DYNAMIC_LINKER): Define.
(LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
* doc/invoke.texi (-muclibc): Remove caveat about supported
targets.

testsuite:
* gcc.dg/glibc-uclibc-1.c, gcc.dg/glibc-uclibc-2.c: New tests.

From-SVN: r111235

29 files changed:
gcc/ChangeLog
gcc/config.gcc
gcc/config/alpha/linux-elf.h
gcc/config/alpha/linux.h
gcc/config/cris/linux.h
gcc/config/frv/linux.h
gcc/config/i386/linux.h
gcc/config/i386/linux64.h
gcc/config/ia64/linux.h
gcc/config/linux.h
gcc/config/linux.opt
gcc/config/m32r/linux.h
gcc/config/m68k/linux.h
gcc/config/mips/linux64.h
gcc/config/mn10300/linux.h
gcc/config/pa/pa-linux.h
gcc/config/rs6000/linux.h
gcc/config/rs6000/linux64.h
gcc/config/rs6000/sysv4.h
gcc/config/s390/linux.h
gcc/config/sh/linux.h
gcc/config/sparc/linux.h
gcc/config/sparc/linux64.h
gcc/config/xtensa/linux.h
gcc/doc/invoke.texi
gcc/opth-gen.awk
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/glibc-uclibc-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/glibc-uclibc-2.c [new file with mode: 0644]

index 0025c6c670ffb328ab35a98ec7a95da207a33319..675d1c472315750fd3e22a177653e23a79814308 100644 (file)
@@ -1,3 +1,84 @@
+2006-02-18  Joseph S. Myers  <joseph@codesourcery.com>
+
+       PR target/24837
+       * config.gcc: Define UCLIBC_DEFAULT to 0 or 1.
+       * opth-gen.awk: Handle Var and InverseMask together.
+       * config/linux.opt (muclibc, mglibc): Use Var(linux_uclibc).
+       * config/linux.h: Use #if not #ifdef for testing UCLIBC_DEFAULT.
+       (TARGET_C99_FUNCTIONS): Test OPTION_GLIBC not TARGET_GLIBC.
+       (CHOOSE_DYNAMIC_LINKER): Give an error for -mglibc and -muclibc
+       used together.
+       (UCLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER64,
+       LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64): Define.
+       * config/alpha/linux-elf.h (GLIBC_DYNAMIC_LINKER,
+       UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
+       LINUX_DYNAMIC_LINKER): Define.
+       (ELF_DYNAMIC_LINKER): Define to LINUX_DYNAMIC_LINKER.
+       * config/alpha/linux.h (TARGET_C99_FUNCTIONS): Define to
+       TARGET_GLIBC.
+       * config/cris/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (CRIS_LINK_SUBTARGET_SPEC): Pass a -dynamic-linker option.
+       * config/frv/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       (TARGET_C99_FUNCTIONS): Don't define.
+       * config/i386/linux.h (DYNAMIC_LINKER): Rename to
+       GLIBC_DYNAMIC_LINKER.
+       (SUBTARGET_EXTRA_SPECS): Use LINUX_DYNAMIC_LINKER.
+       * config/i386/linux64.h (GLIBC_DYNAMIC_LINKER32,
+       GLIBC_DYNAMIC_LINKER64): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER32 and
+       LINUX_DYNAMIC_LINKER64.
+       * config/ia64/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * config/m32r/linux.h (GLIBC_DYNAMIC_LINKE): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * config/m68k/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * config/mips/linux64.h (GLIBC_DYNAMIC_LINKER32,
+       GLIBC_DYNAMIC_LINKER64, GLIBC_DYNAMIC_LINKERN32,
+       UCLIBC_DYNAMIC_LINKERN32, LINUX_DYNAMIC_LINKERN32): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKERN32, LINUX_DYNAMIC_LINKER64
+       and LINUX_DYNAMIC_LINKER32.
+       * config/mn10300/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * config/pa/pa-linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * config/rs6000/linux.h (TARGET_C99_FUNCTIONS): Define to
+       TARGET_GLIBC.
+       * config/rs6000/linux64.h (TARGET_C99_FUNCTIONS): Likewise.
+       (GLIBC_DYNAMIC_LINKER32, GLIBC_DYNAMIC_LINKER64,
+       UCLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER64,
+       CHOOSE_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
+       LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64): Define.
+       (LINK_OS_LINUX_SPEC32): Use LINUX_DYNAMIC_LINKER32.
+       (LINK_OS_LINUX_SPEC64): Use LINUX_DYNAMIC_LINKER64.
+       * config/rs6000/sysv4.h (GLIBC_DYNAMIC_LINKER,
+       UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
+       LINUX_DYNAMIC_LINKER): Define.
+       (LINK_OS_LINUX_SPEC): Use LINUX_DYNAMIC_LINKE.
+       * config/s390/linux.h (GLIBC_DYNAMIC_LINKER32,
+       GLIBC_DYNAMIC_LINKER64): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER32 and
+       LINUX_DYNAMIC_LINKER64.
+       * config/sh/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (SUBTARGET_LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * config/sparc/linux.h (GLIBC_DYNAMIC_LINKER,
+       UCLIBC_DYNAMIC_LINKER, CHOOSE_DYNAMIC_LINKER,
+       LINUX_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       (TARGET_C99_FUNCTIONS): Define to TARGET_GLIBC.
+       * config/sparc/linux64.h (GLIBC_DYNAMIC_LINKER32,
+       GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER32,
+       UCLIBC_DYNAMIC_LINKER64, CHOOSE_DYNAMIC_LINKER,
+       LINUX_DYNAMIC_LINKER32, LINUX_DYNAMIC_LINKER64): Define.
+       (LINK_ARCH32_SPEC): Use LINUX_DYNAMIC_LINKER32.
+       (LINK_ARCH64_SPEC, LINK_SPEC): Use LINUX_DYNAMIC_LINKER64.
+       (TARGET_C99_FUNCTIONS): Define to TARGET_GLIBC.
+       * config/xtensa/linux.h (GLIBC_DYNAMIC_LINKER): Define.
+       (LINK_SPEC): Use LINUX_DYNAMIC_LINKER.
+       * doc/invoke.texi (-muclibc): Remove caveat about supported
+       targets.
+
 2006-02-17  Grigory Zagorodnev <grigory_zagorodnev@linux.intel.com>
 
        * doc/cpp.texi (__TIMESTAMP__): Document.
index 3d02543f3d6ceda1035d12bf92fc0fb4943cf4d3..70f9bae2e7c1efb891147d4cc26fd7f2fcc3b12c 100644 (file)
@@ -455,7 +455,10 @@ case ${target} in
   tmake_file="t-slibgcc-elf-ver t-linux"
   case ${target} in
     *-*-*uclibc*)
-      tm_defines="${tm_defines} UCLIBC_DEFAULT"
+      tm_defines="${tm_defines} UCLIBC_DEFAULT=1"
+      ;;
+    *)
+      tm_defines="${tm_defines} UCLIBC_DEFAULT=0"
       ;;
   esac
   ;;
index 581d07738e0c0aac1106accb5ebdaa483ad8e27f..565cd7ef918b7d53b560f2daeeedb85797d1a14a 100644 (file)
@@ -1,6 +1,7 @@
 /* Definitions of target machine for GNU compiler
    for Alpha Linux-based GNU systems using ELF.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2006
+   Free Software Foundation, Inc.
    Contributed by Richard Henderson.
 
 This file is part of GCC.
@@ -27,7 +28,17 @@ Boston, MA 02110-1301, USA.  */
 #define SUBTARGET_EXTRA_SPECS \
 { "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
 
-#define ELF_DYNAMIC_LINKER     "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER   "/lib/ld-linux.so.2"
+#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#if UCLIBC_DEFAULT
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
+#else
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
+#endif
+#define LINUX_DYNAMIC_LINKER \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
+#define ELF_DYNAMIC_LINKER     LINUX_DYNAMIC_LINKER
 
 #define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}         \
   %{O*:-O3} %{!O*:-O1}                                         \
index 3aa9d0005da81dcc12ad50945c7e060a3cb0e213..dcd3c6597c4382f1bc1885b875b496dc4fc3b12b 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of target machine for GNU compiler,
    for Alpha Linux-based GNU systems.
-   Copyright (C) 1996, 1997, 1998, 2002, 2003, 2004, 2005
+   Copyright (C) 1996, 1997, 1998, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
    Contributed by Richard Henderson.
 
@@ -64,7 +64,7 @@ Boston, MA 02110-1301, USA.  */
 
 /* Determine whether the entire c99 runtime is present in the
    runtime library.  */
-#define TARGET_C99_FUNCTIONS 1
+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
 
 #define TARGET_POSIX_IO
 
index 09968f42e2619e4db34d813b30ae7c7f6eb3bf06..6b439dc3d6ad6299d27922e1e9f8c344c03e3385 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for GCC.  Part of the machine description for CRIS.
-   Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
    Contributed by Axis Communications.  Written by Hans-Peter Nilsson.
 
 This file is part of GCC.
@@ -76,6 +76,8 @@ Boston, MA 02110-1301, USA.  */
 #undef CRIS_SUBTARGET_VERSION
 #define CRIS_SUBTARGET_VERSION " - cris-axis-linux-gnu"
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
 /* We need an -rpath-link to ld.so.1, and presumably to each directory
    specified with -B.  */
 #undef CRIS_LINK_SUBTARGET_SPEC
@@ -84,7 +86,9 @@ Boston, MA 02110-1301, USA.  */
   -rpath-link include/asm/../..%s\
   %{shared} %{static}\
   %{symbolic:-Bdynamic} %{shlib:-Bdynamic} %{static:-Bstatic}\
-  %{!shared:%{!static:%{rdynamic:-export-dynamic}}}\
+  %{!shared:%{!static:\
+              %{rdynamic:-export-dynamic}\
+              %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}\
   %{!r:%{O2|O3: --gc-sections}}"
 
 
index 6f5e3d1717ba1445a0e98a9c8b4c84de216ddcc0..4a30e46993659b119cce3f4b3d796d904c5fed57 100644 (file)
@@ -1,5 +1,5 @@
 /* Target macros for the FRV Linux port of GCC.
-   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2006
    Free Software Foundation, Inc.
    Contributed by Red Hat Inc.
 
 #define ENDFILE_SPEC \
   "%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
 #undef LINK_SPEC
 #define LINK_SPEC "\
   %{mfdpic: -m elf32frvfd -z text} %{shared} %{pie} \
   %{!shared: %{!static: \
    %{rdynamic:-export-dynamic} \
-   %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
    %{static}}"
 
 /* Support for compile-time default CPU.  */
@@ -71,19 +73,4 @@ asm (TEXT_SECTION_ASM_OP);
 #undef Twrite
 #define Twrite __write
 
-/* uClibc doesn't support many of the C90-reserved C99-defined math
-   functions.  Make sure we don't implicitly generate them unless C99
-   support is explicitly requested.  This will affect both frv-linux
-   and frv-uclinux.  Even though the glibc, the primary library for
-   frv-linux, would enable better code to be generated with
-   TARGET_C99_FUNCTIONS defined to 1, uClinux can be used as the
-   library for frv-linux as well, and we'd better have that work
-   correctly.  Maybe we move this to a uclibc.h header in the future,
-   and use that for frv-uclinux and frv-linux-uclibc?  Define it here
-   for now, such that we can still get exactly the same code out of
-   both frv-linux-gcc and frv-uclinux-gcc, when feeding them the same
-   preprocessed sources.  */
-#undef TARGET_C99_FUNCTIONS
-#define TARGET_C99_FUNCTIONS 0
-
 #endif /* __FRV_LINUX_H__ */
index 2d6fb680146376ae3b1e1434745c96ba9479f90d..ec171353c3315f824f27d29693ad9a293a77f065 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
-   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2004, 2005,
+   2006 Free Software Foundation, Inc.
    Contributed by Eric Youngdale.
    Modified for stabs-in-ELF by H.J. Lu.
 
@@ -100,12 +100,12 @@ Boston, MA 02110-1301, USA.  */
 /* If ELF is the default format, we should not use /lib/elf.  */
 
 #define LINK_EMULATION "elf_i386"
-#define DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
 
 #undef  SUBTARGET_EXTRA_SPECS
 #define SUBTARGET_EXTRA_SPECS \
   { "link_emulation", LINK_EMULATION },\
-  { "dynamic_linker", DYNAMIC_LINKER }
+  { "dynamic_linker", LINUX_DYNAMIC_LINKER }
 
 #undef LINK_SPEC
 #define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
index a3030945126fad71994f58755c637048bfc7d262..cc8ed16f22953f611b61e42e1f34fcf91aa068ca 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for AMD x86-64 running Linux-based GNU systems with ELF format.
-   Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
    Contributed by Jan Hubicka <jh@suse.cz>, based on linux.h.
 
 This file is part of GCC.
@@ -49,14 +49,17 @@ Boston, MA 02110-1301, USA.  */
    When the -shared link option is used a final link is not being
    done.  */
 
+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
+
 #undef LINK_SPEC
 #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
       %{rdynamic:-export-dynamic} \
-      %{m32:%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
-      %{!m32:%{!dynamic-linker:-dynamic-linker /lib64/ld-linux-x86-64.so.2}}} \
+      %{m32:%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}} \
+      %{!m32:%{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}} \
     %{static:-static}}"
 
 /* Similar to standard Linux, but adding -ffast-math support.  */
index 3d585609f61fd9241a167237e931281af76d0dfb..9e8ca596e754bb994d0f10019d40f06ab2b1977f 100644 (file)
@@ -37,13 +37,15 @@ do {                                                \
 /* Define this for shared library support because it isn't in the main
    linux.h file.  */
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
+
 #undef LINK_SPEC
 #define LINK_SPEC "\
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
       %{rdynamic:-export-dynamic} \
-      %{!dynamic-linker:-dynamic-linker /lib/ld-linux-ia64.so.2}} \
+      %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
       %{static:-static}}"
 
 
index e5707d396230be6f8bb88c05b103c54f82264bba..59e3e8538f9c02ebe5823df168b118dfdebf11d8 100644 (file)
@@ -102,21 +102,28 @@ Boston, MA 02110-1301, USA.  */
 /* Determine which dynamic linker to use depending on whether GLIBC or
    uClibc is the default C library and whether -muclibc or -mglibc has
    been passed to change the default.  */
-#ifdef UCLIBC_DEFAULT
-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
+#if UCLIBC_DEFAULT
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
 #else
-#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
 #endif
 
-/* For most targets with a single dynamic linker the following
-   definitions suffice; GLIBC_DYNAMIC_LINKER must be defined for each
-   target using them.  */
+/* For most targets the following definitions suffice;
+   GLIBC_DYNAMIC_LINKER must be defined for each target using them, or
+   GLIBC_DYNAMIC_LINKER32 and GLIBC_DYNAMIC_LINKER64 for targets
+   supporting both 32-bit and 64-bit compilation.  */
 #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
 #define LINUX_DYNAMIC_LINKER \
   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+#define LINUX_DYNAMIC_LINKER32 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
+#define LINUX_DYNAMIC_LINKER64 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
 
 /* Determine whether the entire c99 runtime
    is present in the runtime library.  */
-#define TARGET_C99_FUNCTIONS (TARGET_GLIBC)
+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
 
 #define TARGET_POSIX_IO
index 2cb04b25613a424e11768ebcd80985345911cf00..3f615bb5154102879e489b40258c15b127f49fa1 100644 (file)
@@ -21,9 +21,9 @@
 ; 02110-1301, USA.
 
 muclibc
-Target RejectNegative Report Mask(UCLIBC)
+Target RejectNegative Report Mask(UCLIBC) Var(linux_uclibc) Init(UCLIBC_DEFAULT ? OPTION_MASK_UCLIBC : 0)
 Use uClibc instead of GNU libc
 
 mglibc
-Target RejectNegative Report InverseMask(UCLIBC, GLIBC)
+Target RejectNegative Report InverseMask(UCLIBC, GLIBC) Var(linux_uclibc) VarExists
 Use GNU libc instead of uClibc
index c338ed6d592b882341084e8e05bf35c5e51651da..5e31e46af0abfa5b39fe796436a538e9b3187df8 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for Renesas M32R running Linux-based GNU systems using ELF.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
 
    This file is part of GCC.
 
@@ -59,6 +59,8 @@
 
 /* If ELF is the default format, we should not use /lib/elf.  */
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
 #undef LINK_SPEC
 #if TARGET_LITTLE_ENDIAN
 #define LINK_SPEC "%(link_cpu) -m m32rlelf_linux %{shared:-shared} \
@@ -66,7 +68,7 @@
     %{!ibcs: \
       %{!static: \
        %{rdynamic:-export-dynamic} \
-       %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+       %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
        %{static:-static}}}"
 #else
 #define LINK_SPEC "%(link_cpu) -m m32relf_linux %{shared:-shared} \
@@ -74,7 +76,7 @@
     %{!ibcs: \
       %{!static: \
        %{rdynamic:-export-dynamic} \
-       %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+       %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
        %{static:-static}}}"
 #endif
 
index 4f51a021af00bc24fb00331bd878f31269276031..ab957113155fc2174b635aa1ecb0e798a8bd7271 100644 (file)
@@ -123,12 +123,14 @@ Boston, MA 02110-1301, USA.  */
 
 /* If ELF is the default format, we should not use /lib/elf.  */
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
 #undef LINK_SPEC
 #define LINK_SPEC "-m m68kelf %{shared} \
   %{!shared: \
     %{!static: \
       %{rdynamic:-export-dynamic} \
-      %{!dynamic-linker*:-dynamic-linker /lib/ld.so.1}} \
+      %{!dynamic-linker*:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
     %{static}}"
 
 /* For compatibility with linux/a.out */
index 25455b43360ec3be29d1dd004db4dafe0edcb477..da78519c88c086c1c207c77e34e93c29c1173f4b 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for MIPS running Linux-based GNU systems with ELF format
    using n32/64 abi.
-   Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -36,6 +36,13 @@ Boston, MA 02110-1301, USA.  */
 %{!shared: %{pthread:-lpthread} \
   %{profile:-lc_p} %{!profile: -lc}}"
 
+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld.so.1"
+#define GLIBC_DYNAMIC_LINKERN32 "/lib32/ld.so.1"
+#define UCLIBC_DYNAMIC_LINKERN32 "/lib32/ld-uClibc.so.0"
+#define LINUX_DYNAMIC_LINKERN32 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERN32, UCLIBC_DYNAMIC_LINKERN32)
+
 #undef LINK_SPEC
 #define LINK_SPEC "\
 %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \
@@ -47,9 +54,9 @@ Boston, MA 02110-1301, USA.  */
       %{!static: \
         %{rdynamic:-export-dynamic} \
         %{!dynamic-linker: \
-         %{mabi=n32: -dynamic-linker /lib32/ld.so.1} \
-         %{mabi=64: -dynamic-linker /lib64/ld.so.1} \
-         %{mabi=32: -dynamic-linker /lib/ld.so.1}}} \
+         %{mabi=n32: -dynamic-linker " LINUX_DYNAMIC_LINKERN32 "} \
+         %{mabi=64: -dynamic-linker " LINUX_DYNAMIC_LINKER64 "} \
+         %{mabi=32: -dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}} \
       %{static:-static}}} \
 %{mabi=n32:-melf32%{EB:b}%{EL:l}tsmipn32} \
 %{mabi=64:-melf64%{EB:b}%{EL:l}tsmip} \
index 57449950436503b1f5836ad0834936e93957e985..25600e6777158ebe4d02c11cf6f3f1088a0ba534 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions of taret machine for GNU compiler.
    Matsushita AM33/2.0
-   Copyright 2001, 2002, 2005 Free Software Foundation, Inc.
+   Copyright 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
    Contributed by Alexandre Oliva <aoliva@redhat.com>
 
    This file is part of GCC.
 #undef  ASM_SPEC
 #define ASM_SPEC "%{Wa,*:%*}"
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
 #undef  LINK_SPEC
 #define LINK_SPEC "%{mrelax:--relax} %{shared:-shared} \
    %{!static: \
      %{rdynamic:-export-dynamic} \
-     %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+     %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
    %{static:-static}"
 
 #undef  PROCESSOR_DEFAULT
index 527977f15e269fd75b1fa6634cda35ff833ed76a..81dc152fcb8cd75c37eeaf7f98515287968d64c8 100644 (file)
@@ -1,5 +1,6 @@
 /* Definitions for PA_RISC with ELF format
-   Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -44,13 +45,15 @@ Boston, MA 02110-1301, USA.  */
 /* Define this for shared library support because it isn't in the main
    linux.h file.  */
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
 #undef LINK_SPEC
 #define LINK_SPEC "\
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
       %{rdynamic:-export-dynamic} \
-      %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+      %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
       %{static:-static}}"
 
 /* glibc's profiling functions don't need gcc to allocate counters.  */
index 74aeb2cf5ee9ac60e461fdb8d5f0560d065de562..1816d0fc7f11c719bfdaf4c70548fefc59e3603f 100644 (file)
@@ -33,7 +33,7 @@
 
 /* glibc has float and long double forms of math functions.  */
 #undef  TARGET_C99_FUNCTIONS
-#define TARGET_C99_FUNCTIONS 1
+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
 
 #undef  TARGET_OS_CPP_BUILTINS
 #define TARGET_OS_CPP_BUILTINS()               \
index c95df9dfe71507dbf850f60cd5ec4ecacb480023..d292380b4ba5368b46c8d595d9be0a9c4abf841f 100644 (file)
@@ -283,7 +283,7 @@ extern int dot_symbols;
 
 /* glibc has float and long double forms of math functions.  */
 #undef  TARGET_C99_FUNCTIONS
-#define TARGET_C99_FUNCTIONS 1
+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
 
 #undef  TARGET_OS_CPP_BUILTINS
 #define TARGET_OS_CPP_BUILTINS()                       \
@@ -336,13 +336,28 @@ extern int dot_symbols;
 #undef LINK_OS_DEFAULT_SPEC
 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
 
+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld64.so.1"
+#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
+#if UCLIBC_DEFAULT
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
+#else
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
+#endif
+#define LINUX_DYNAMIC_LINKER32 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
+#define LINUX_DYNAMIC_LINKER64 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+
+
 #define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
-  %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+  %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
 
 #define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
-  %{!dynamic-linker:-dynamic-linker /lib64/ld64.so.1}}}"
+  %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"
 
 #undef  TOC_SECTION_ASM_OP
 #define TOC_SECTION_ASM_OP \
index 3c8462f4ac92fc44a9eaf74c456f777f4d251f09..d3382bdbde5a8fb93b1dc067f89f0c0545239751 100644 (file)
@@ -909,9 +909,19 @@ extern int fixuplabelno;
 
 #define LINK_START_LINUX_SPEC ""
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#if UCLIBC_DEFAULT
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
+#else
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
+#endif
+#define LINUX_DYNAMIC_LINKER \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
 #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
-  %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
+  %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
 
 #if defined(HAVE_LD_EH_FRAME_HDR)
 # define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
index fcb6dff0317304b0b15c21f7c4c1518f07606bd9..8efcaec339f6230ee59426af083602a945e1df01 100644 (file)
@@ -1,5 +1,6 @@
 /* Definitions for Linux for S/390.
-   Copyright (C) 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2006
+   Free Software Foundation, Inc.
    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
                   Ulrich Weigand (uweigand@de.ibm.com).
 
@@ -72,6 +73,9 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #define MULTILIB_DEFAULTS { "m31" }
 #endif
 
+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
+
 #undef  LINK_SPEC
 #define LINK_SPEC \
   "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
@@ -81,8 +85,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
       %{!static: \
        %{rdynamic:-export-dynamic} \
        %{!dynamic-linker: \
-          %{m31:-dynamic-linker /lib/ld.so.1} \
-          %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
+          %{m31:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "} \
+          %{m64:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}}"
 
 
 #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
index 6956e4dfccd6236f1a1867ebb2315f5c59596726..94c31662a2c0dbddedbfddde438037ea9051e34b 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for SH running Linux-based GNU systems using ELF
-   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005
+   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
    Contributed by Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
 
@@ -48,6 +48,8 @@ Boston, MA 02110-1301, USA.  */
 
 #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
 #undef SUBTARGET_LINK_EMUL_SUFFIX
 #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
 #undef SUBTARGET_LINK_SPEC
@@ -55,7 +57,7 @@ Boston, MA 02110-1301, USA.  */
   "%{shared:-shared} \
    %{!static: \
      %{rdynamic:-export-dynamic} \
-     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+     %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
    %{static:-static}"
 
 /* Output assembler code to STREAM to call the profiler.  */
index 524c720ae63e6390202a8c77eb77d046086f091a..5af67a6a34d9b49b308c38423119f4d48df2153f 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for SPARC running Linux-based GNU systems with ELF.
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
    Contributed by Eddie C. Dost (ecd@skynet.be)
 
@@ -121,6 +121,17 @@ Boston, MA 02110-1301, USA.  */
 
 /* If ELF is the default format, we should not use /lib/elf.  */
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+#define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
+#if UCLIBC_DEFAULT
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
+#else
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
+#endif
+#define LINUX_DYNAMIC_LINKER \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
+
+
 #undef  LINK_SPEC
 #define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
   %{!mno-relax:%{!r:-relax}} \
@@ -128,7 +139,7 @@ Boston, MA 02110-1301, USA.  */
     %{!ibcs: \
       %{!static: \
         %{rdynamic:-export-dynamic} \
-        %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+        %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
         %{static:-static}}}"
 
 /* The sun bundled assembler doesn't accept -Yd, (and neither does gas).
@@ -202,7 +213,7 @@ do {                                                                        \
 
 /* Determine whether the entire c99 runtime is present in the
    runtime library.  */
-#define TARGET_C99_FUNCTIONS 1
+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
 
 #define TARGET_POSIX_IO
 
index a190c1654b1326c7ef222f3dfeb2ecebd3bfc96c..a6244f1ed8a3fbafcaa15a30cf44d22d745aa04d 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF.
-   Copyright 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2005
+   Copyright 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2005, 2006
    Free Software Foundation, Inc.
    Contributed by David S. Miller (davem@caip.rutgers.edu)
 
@@ -143,6 +143,20 @@ Boston, MA 02110-1301, USA.  */
 
 /* If ELF is the default format, we should not use /lib/elf.  */
 
+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
+#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux.so.2"
+#define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
+#define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
+#if UCLIBC_DEFAULT
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:%{muclibc:%e-mglibc and -muclibc used together}" G ";:" U "}"
+#else
+#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}" U ";:" G "}"
+#endif
+#define LINUX_DYNAMIC_LINKER32 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
+#define LINUX_DYNAMIC_LINKER64 \
+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
+
 #ifdef SPARC_BI_ARCH
 
 #undef SUBTARGET_EXTRA_SPECS
@@ -151,13 +165,13 @@ Boston, MA 02110-1301, USA.  */
   { "link_arch64",       LINK_ARCH64_SPEC },              \
   { "link_arch_default", LINK_ARCH_DEFAULT_SPEC },       \
   { "link_arch",        LINK_ARCH_SPEC },
-    
+
 #define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
   %{!shared: \
     %{!ibcs: \
       %{!static: \
         %{rdynamic:-export-dynamic} \
-        %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} \
+        %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}} \
         %{static:-static}}} \
 "
 
@@ -166,7 +180,7 @@ Boston, MA 02110-1301, USA.  */
     %{!ibcs: \
       %{!static: \
         %{rdynamic:-export-dynamic} \
-        %{!dynamic-linker:-dynamic-linker /lib64/ld-linux.so.2}} \
+        %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}} \
         %{static:-static}}} \
 "
 
@@ -247,7 +261,7 @@ Boston, MA 02110-1301, USA.  */
     %{!ibcs: \
       %{!static: \
         %{rdynamic:-export-dynamic} \
-        %{!dynamic-linker:-dynamic-linker /lib64/ld-linux.so.2}} \
+        %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}} \
         %{static:-static}}} \
 %{mlittle-endian:-EL} \
 %{!mno-relax:%{!r:-relax}} \
@@ -330,7 +344,7 @@ do {                                                                        \
 
 /* Determine whether the entire c99 runtime is present in the
    runtime library.  */
-#define TARGET_C99_FUNCTIONS 1
+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
 
 #define TARGET_POSIX_IO
 
index fad7aba46c484eb9996feba9e6c169bfbc7198db..0a64a1ed0b32aa91138f0b2943869a6dfec227b8 100644 (file)
@@ -1,6 +1,6 @@
 /* Xtensa Linux configuration.
    Derived from the configuration for GCC for Intel i386 running Linux.
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2006 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -43,6 +43,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   %{mlongcalls:--longcalls} \
   %{mno-longcalls:--no-longcalls}"
 
+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
 #undef LINK_SPEC
 #define LINK_SPEC \
  "%{shared:-shared} \
@@ -50,7 +52,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
     %{!ibcs: \
       %{!static: \
         %{rdynamic:-export-dynamic} \
-        %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \
+        %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}} \
       %{static:-static}}}"
 
 #undef LOCAL_LABEL_PREFIX
index 5889b96fa46dbf0c0a6ed41c928b7e296afbe2c6..1ddd4fe0c3ec58b0bd8155198c854fac4deefbf6 100644 (file)
@@ -8801,8 +8801,7 @@ on @samp{*-*-linux-*uclibc*} targets.
 @item -muclibc
 @opindex muclibc
 Use uClibc instead of the GNU C library.  This is the default on
-@samp{*-*-linux-*uclibc*} targets.  GCC currently only supports uClibc
-on ARM and 32-bit MIPS targets.
+@samp{*-*-linux-*uclibc*} targets.
 @end table
 
 @node H8/300 Options
index a6537a1c3489441f947f6641b43b1c465d705a2a..e7ffc1a646ebbc96ff69e52a3b19544f634285e5 100644 (file)
@@ -1,4 +1,4 @@
-#  Copyright (C) 2003,2004 Free Software Foundation, Inc.
+#  Copyright (C) 2003,2004,2005,2006 Free Software Foundation, Inc.
 #  Contributed by Kelley Cook, June 2004.
 #  Original code from Neil Booth, May 2003.
 #
@@ -118,9 +118,18 @@ print ""
 
 for (i = 0; i < n_opts; i++) {
        opt = opt_args("InverseMask", flags[i])
-       if (opt ~ ",")
-               print "#define TARGET_" nth_arg(1, opt) \
-                     " ((target_flags & MASK_" nth_arg(0, opt) ") == 0)"
+       if (opt ~ ",") {
+               vname = var_name(flags[i])
+               macro = "OPTION_"
+               mask = "OPTION_MASK_"
+               if (vname == "") {
+                       vname = "target_flags"
+                       macro = "TARGET_"
+                       mask = "MASK_"
+               }
+               print "#define " macro nth_arg(1, opt) \
+                     " ((" vname " & " mask nth_arg(0, opt) ") == 0)"
+       }
 }
 print ""
 
index 08b1d2dd72181383ade38b42b97c859f4b4c6cd9..7040443cf2e01a101deb5d6b328aac8e021f52d8 100644 (file)
@@ -1,3 +1,7 @@
+2006-02-18  Joseph S. Myers  <joseph@codesourcery.com>
+
+       * gcc.dg/glibc-uclibc-1.c, gcc.dg/glibc-uclibc-2.c: New tests.
+
 2006-02-17  Grigory Zagorodnev <grigory_zagorodnev@linux.intel.com>
 
        * gcc.dg/cpp/undef3.c: New test.
diff --git a/gcc/testsuite/gcc.dg/glibc-uclibc-1.c b/gcc/testsuite/gcc.dg/glibc-uclibc-1.c
new file mode 100644 (file)
index 0000000..46c4175
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test -mglibc and -muclibc not allowed together.  */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do link { target *-*-linux* } } */
+/* { dg-options "-mglibc -muclibc" } */
+
+/* { dg-error "-mglibc and -muclibc used together" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/glibc-uclibc-2.c b/gcc/testsuite/gcc.dg/glibc-uclibc-2.c
new file mode 100644 (file)
index 0000000..344fb06
--- /dev/null
@@ -0,0 +1,6 @@
+/* Test -mglibc and -muclibc not allowed together.  */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do link { target *-*-linux* } } */
+/* { dg-options "-muclibc -mglibc" } */
+
+/* { dg-error "-mglibc and -muclibc used together" "" { target *-*-* } 0 } */