diff options
29 files changed, 276 insertions, 80 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0025c6c..675d1c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/config.gcc b/gcc/config.gcc index 3d02543..70f9bae 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -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 ;; diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h index 581d077..565cd7e 100644 --- a/gcc/config/alpha/linux-elf.h +++ b/gcc/config/alpha/linux-elf.h @@ -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} \ diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index 3aa9d00..dcd3c65 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -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 diff --git a/gcc/config/cris/linux.h b/gcc/config/cris/linux.h index 09968f4..6b439dc 100644 --- a/gcc/config/cris/linux.h +++ b/gcc/config/cris/linux.h @@ -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}}" diff --git a/gcc/config/frv/linux.h b/gcc/config/frv/linux.h index 6f5e3d1..4a30e46 100644 --- a/gcc/config/frv/linux.h +++ b/gcc/config/frv/linux.h @@ -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. @@ -36,12 +36,14 @@ #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__ */ diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index 2d6fb68..ec17135 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -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} \ diff --git a/gcc/config/i386/linux64.h b/gcc/config/i386/linux64.h index a303094..cc8ed16 100644 --- a/gcc/config/i386/linux64.h +++ b/gcc/config/i386/linux64.h @@ -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. */ diff --git a/gcc/config/ia64/linux.h b/gcc/config/ia64/linux.h index 3d58560..9e8ca59 100644 --- a/gcc/config/ia64/linux.h +++ b/gcc/config/ia64/linux.h @@ -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}}" diff --git a/gcc/config/linux.h b/gcc/config/linux.h index e5707d3..59e3e85 100644 --- a/gcc/config/linux.h +++ b/gcc/config/linux.h @@ -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 diff --git a/gcc/config/linux.opt b/gcc/config/linux.opt index 2cb04b2..3f615bb 100644 --- a/gcc/config/linux.opt +++ b/gcc/config/linux.opt @@ -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 diff --git a/gcc/config/m32r/linux.h b/gcc/config/m32r/linux.h index c338ed6..5e31e46 100644 --- a/gcc/config/m32r/linux.h +++ b/gcc/config/m32r/linux.h @@ -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 diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h index 4f51a02..ab95711 100644 --- a/gcc/config/m68k/linux.h +++ b/gcc/config/m68k/linux.h @@ -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 */ diff --git a/gcc/config/mips/linux64.h b/gcc/config/mips/linux64.h index 25455b4..da78519 100644 --- a/gcc/config/mips/linux64.h +++ b/gcc/config/mips/linux64.h @@ -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} \ diff --git a/gcc/config/mn10300/linux.h b/gcc/config/mn10300/linux.h index 5744995..25600e6 100644 --- a/gcc/config/mn10300/linux.h +++ b/gcc/config/mn10300/linux.h @@ -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. @@ -33,11 +33,13 @@ #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 diff --git a/gcc/config/pa/pa-linux.h b/gcc/config/pa/pa-linux.h index 527977f..81dc152 100644 --- a/gcc/config/pa/pa-linux.h +++ b/gcc/config/pa/pa-linux.h @@ -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. */ diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h index 74aeb2c..1816d0f 100644 --- a/gcc/config/rs6000/linux.h +++ b/gcc/config/rs6000/linux.h @@ -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() \ diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index c95df9d..d292380 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -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 \ diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 3c8462f..d3382bd 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -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} " diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h index fcb6dff..8efcaec 100644 --- a/gcc/config/s390/linux.h +++ b/gcc/config/s390/linux.h @@ -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 diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h index 6956e4d..94c3166 100644 --- a/gcc/config/sh/linux.h +++ b/gcc/config/sh/linux.h @@ -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. */ diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h index 524c720..5af67a6 100644 --- a/gcc/config/sparc/linux.h +++ b/gcc/config/sparc/linux.h @@ -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 diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h index a190c16..a6244f1 100644 --- a/gcc/config/sparc/linux64.h +++ b/gcc/config/sparc/linux64.h @@ -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 diff --git a/gcc/config/xtensa/linux.h b/gcc/config/xtensa/linux.h index fad7aba..0a64a1e 100644 --- a/gcc/config/xtensa/linux.h +++ b/gcc/config/xtensa/linux.h @@ -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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 5889b96..1ddd4fe 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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 diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk index a6537a1..e7ffc1a 100644 --- a/gcc/opth-gen.awk +++ b/gcc/opth-gen.awk @@ -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 "" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 08b1d2d..7040443 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..46c4175 --- /dev/null +++ b/gcc/testsuite/gcc.dg/glibc-uclibc-1.c @@ -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 index 0000000..344fb06 --- /dev/null +++ b/gcc/testsuite/gcc.dg/glibc-uclibc-2.c @@ -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 } */ |