This patch stops targets not using the Linux kernel from using linux*.h config headers.
gnu-user.h has TARGET_C99_FUNCTIONS and TARGET_HAS_SINCOS added (defined to 1, overridden in linux.h) so that the non-Linux targets do not need to have any libc-choice-related definitions from linux.h and config.gcc does not need to define SINGLE_LIBC for them. Non-Linux x86 targets no longer inherit an MD_UNWIND_SUPPORT definition they need to override, and REG_NAME is obsolete now linux-unwind.h is used only for Linux, so is removed. Bootstrapped with no regressions on x86_64-unknown-linux-gnu. Also tested building cc1 and xgcc for crosses to: i686-pc-linux-gnu i686-gnu i686-kfreebsd-gnu i686-knetbsd-gnu i686-kopensolaris-gnu x86_64-kfreebsd-gnu. OK to commit? The remaining issue in this area (linux*.h or gnu-user*.h not being used for the right sets of targets) is that neither config/linux.h nor config/gnu-user.h is used by the following targets: alpha*-*-linux* arm*-*-uclinux* powerpc-*-linux* powerpc64-*-linux*. I have no current plans to work on this, but guess that it shouldn't be too hard to make the Alpha and ARM targets use those headers (for Alpha it might be necessary to move various Alpha ELF targets to using elfos.h; I don't know if config/gnu-user.h and config/linux.h will work without elfos.h or not, but certainly they are normally used with elfos.h; the division between alpha/linux.h and alpha/linux-elf.h is also no longer useful). The Power targets are probably harder to convert, because the -mcall-* mechanism for using one target's specs with another target's compiler (that complicates lots of many-target patches by making targets using rs6000/sysv4.h inconveniently different from other targets) is liable to get in the way and should probably be removed first. (If anyone does a port of one of the non-Linux-kernel GNU-userspace OSes to a non-x86 architecture, they should start by separating that architecture's <arch>/linux*.h headers into gnu-user*.h and linux*.h parts, as on x86, rather than creating new configurations using linux*.h on inappropriate OSes.) 2011-04-12 Joseph Myers <jos...@codesourcery.com> * config.gcc (*-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu): Don't define SINGLE_LIBC. (i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu, x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu): Don't use linux*.h headers. * config/gnu-user.h (TARGET_C99_FUNCTIONS, TARGET_HAS_SINCOS): Define. * config/i386/gnu.h (MD_UNWIND_SUPPORT): Don't undefine. * config/i386/kfreebsd-gnu.h (MD_UNWIND_SUPPORT): Don't undefine. * config/i386/knetbsd-gnu.h (MD_UNWIND_SUPPORT): Don't undefine. * config/i386/kopensolaris-gnu.h (MD_UNWIND_SUPPORT): Don't undefine. * config/i386/linux-unwind.h (x86_fallback_frame_state): Don't use REG_NAME. * config/i386/linux.h (REG_NAME): Don't define. * config/i386/linux64.h (REG_NAME): Don't define. * config/linux.h (TARGET_C99_FUNCTIONS, TARGET_HAS_SINCOS): Undefine before defining. Index: gcc/config.gcc =================================================================== --- gcc/config.gcc (revision 172279) +++ gcc/config.gcc (working copy) @@ -565,8 +565,6 @@ case ${target} in case $target in *linux*) extra_options="$extra_options linux.opt";; - *) - tm_defines="$tm_defines SINGLE_LIBC";; esac case $target in *-*-*android*) @@ -1201,9 +1199,10 @@ i[34567]86-*-openbsd*) i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu) # Intel 80386's running GNU/* # with ELF format using glibc 2 - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h" + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h" case ${target} in i[34567]86-*-linux*) + tm_file="${tm_file} linux.h" # Assume modern glibc default_gnu_indirect_function=yes if test x$enable_targets = xall; then @@ -1230,18 +1229,19 @@ i[34567]86-*-linux* | i[34567]86-*-kfree tm_file="${tm_file} i386/gnu-user.h i386/linux.h" fi ;; - i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/gnu-user.h i386/linux.h knetbsd-gnu.h i386/knetbsd-gnu.h" ;; - i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/gnu-user.h i386/linux.h kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;; - i[34567]86-*-kopensolaris*-gnu) tm_file="${tm_file} i386/gnu-user.h i386/linux.h kopensolaris-gnu.h i386/kopensolaris-gnu.h" ;; - i[34567]86-*-gnu*) tm_file="$tm_file i386/gnu-user.h i386/linux.h gnu.h i386/gnu.h";; + i[34567]86-*-knetbsd*-gnu) tm_file="${tm_file} i386/gnu-user.h knetbsd-gnu.h i386/knetbsd-gnu.h" ;; + i[34567]86-*-kfreebsd*-gnu) tm_file="${tm_file} i386/gnu-user.h kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;; + i[34567]86-*-kopensolaris*-gnu) tm_file="${tm_file} i386/gnu-user.h kopensolaris-gnu.h i386/kopensolaris-gnu.h" ;; + i[34567]86-*-gnu*) tm_file="$tm_file i386/gnu-user.h gnu.h i386/gnu.h";; esac tmake_file="${tmake_file} i386/t-crtstuff i386/t-crtpc i386/t-crtfm t-dfprules" ;; x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu) - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h \ - i386/x86-64.h i386/gnu-user64.h i386/linux64.h" + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h gnu-user.h glibc-stdint.h \ + i386/x86-64.h i386/gnu-user64.h" case ${target} in x86_64-*-linux*) + tm_file="${tm_file} linux.h i386/linux64.h" default_gnu_indirect_function=glibc-2011 ;; x86_64-*-kfreebsd*-gnu) tm_file="${tm_file} kfreebsd-gnu.h i386/kfreebsd-gnu.h" ;; x86_64-*-knetbsd*-gnu) tm_file="${tm_file} knetbsd-gnu.h" ;; Index: gcc/config/linux.h =================================================================== --- gcc/config/linux.h (revision 172279) +++ gcc/config/linux.h (working copy) @@ -93,7 +93,9 @@ see the files COPYING3 and COPYING.RUNTI /* Determine whether the entire c99 runtime is present in the runtime library. */ +#undef TARGET_C99_FUNCTIONS #define TARGET_C99_FUNCTIONS (OPTION_GLIBC) /* Whether we have sincos that follows the GNU extension. */ +#undef TARGET_HAS_SINCOS #define TARGET_HAS_SINCOS (OPTION_GLIBC || OPTION_BIONIC) Index: gcc/config/i386/linux.h =================================================================== --- gcc/config/i386/linux.h (revision 172279) +++ gcc/config/i386/linux.h (working copy) @@ -24,5 +24,3 @@ along with GCC; see the file COPYING3. #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" #define MD_UNWIND_SUPPORT "config/i386/linux-unwind.h" - -#define REG_NAME(reg) reg Index: gcc/config/i386/kopensolaris-gnu.h =================================================================== --- gcc/config/i386/kopensolaris-gnu.h (revision 172279) +++ gcc/config/i386/kopensolaris-gnu.h (working copy) @@ -20,5 +20,3 @@ along with GCC; see the file COPYING3. <http://www.gnu.org/licenses/>. */ #define GNU_USER_LINK_EMULATION "elf_i386" - -#undef MD_UNWIND_SUPPORT Index: gcc/config/i386/kfreebsd-gnu.h =================================================================== --- gcc/config/i386/kfreebsd-gnu.h (revision 172279) +++ gcc/config/i386/kfreebsd-gnu.h (working copy) @@ -27,5 +27,3 @@ along with GCC; see the file COPYING3. #undef GNU_USER_DYNAMIC_LINKER64 #define GNU_USER_DYNAMIC_LINKER64 "/lib/ld-kfreebsd-x86-64.so.1" - -#undef MD_UNWIND_SUPPORT Index: gcc/config/i386/gnu.h =================================================================== --- gcc/config/i386/gnu.h (revision 172279) +++ gcc/config/i386/gnu.h (working copy) @@ -36,9 +36,6 @@ along with GCC. If not, see <http://www crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" #endif -/* FIXME: Is a Hurd-specific fallback mechanism necessary? */ -#undef MD_UNWIND_SUPPORT - #ifdef TARGET_LIBC_PROVIDES_SSP /* Not supported yet. */ #undef TARGET_THREAD_SSP_OFFSET Index: gcc/config/i386/linux64.h =================================================================== --- gcc/config/i386/linux64.h (revision 172279) +++ gcc/config/i386/linux64.h (working copy) @@ -28,5 +28,3 @@ see the files COPYING3 and COPYING.RUNTI #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" #define MD_UNWIND_SUPPORT "config/i386/linux-unwind.h" - -#define REG_NAME(reg) reg Index: gcc/config/i386/linux-unwind.h =================================================================== --- gcc/config/i386/linux-unwind.h (revision 172279) +++ gcc/config/i386/linux-unwind.h (working copy) @@ -1,5 +1,6 @@ /* DWARF2 EH unwinding support for AMD x86-64 and x86. - Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2009, 2010, 2011 + Free Software Foundation, Inc. This file is part of GCC. @@ -146,28 +147,28 @@ x86_fallback_frame_state (struct _Unwind else return _URC_END_OF_STACK; - new_cfa = sc->REG_NAME(esp); + new_cfa = sc->esp; fs->regs.cfa_how = CFA_REG_OFFSET; fs->regs.cfa_reg = 4; fs->regs.cfa_offset = new_cfa - (long) context->cfa; /* The SVR4 register numbering macros aren't usable in libgcc. */ fs->regs.reg[0].how = REG_SAVED_OFFSET; - fs->regs.reg[0].loc.offset = (long)&sc->REG_NAME(eax) - new_cfa; + fs->regs.reg[0].loc.offset = (long)&sc->eax - new_cfa; fs->regs.reg[3].how = REG_SAVED_OFFSET; - fs->regs.reg[3].loc.offset = (long)&sc->REG_NAME(ebx) - new_cfa; + fs->regs.reg[3].loc.offset = (long)&sc->ebx - new_cfa; fs->regs.reg[1].how = REG_SAVED_OFFSET; - fs->regs.reg[1].loc.offset = (long)&sc->REG_NAME(ecx) - new_cfa; + fs->regs.reg[1].loc.offset = (long)&sc->ecx - new_cfa; fs->regs.reg[2].how = REG_SAVED_OFFSET; - fs->regs.reg[2].loc.offset = (long)&sc->REG_NAME(edx) - new_cfa; + fs->regs.reg[2].loc.offset = (long)&sc->edx - new_cfa; fs->regs.reg[6].how = REG_SAVED_OFFSET; - fs->regs.reg[6].loc.offset = (long)&sc->REG_NAME(esi) - new_cfa; + fs->regs.reg[6].loc.offset = (long)&sc->esi - new_cfa; fs->regs.reg[7].how = REG_SAVED_OFFSET; - fs->regs.reg[7].loc.offset = (long)&sc->REG_NAME(edi) - new_cfa; + fs->regs.reg[7].loc.offset = (long)&sc->edi - new_cfa; fs->regs.reg[5].how = REG_SAVED_OFFSET; - fs->regs.reg[5].loc.offset = (long)&sc->REG_NAME(ebp) - new_cfa; + fs->regs.reg[5].loc.offset = (long)&sc->ebp - new_cfa; fs->regs.reg[8].how = REG_SAVED_OFFSET; - fs->regs.reg[8].loc.offset = (long)&sc->REG_NAME(eip) - new_cfa; + fs->regs.reg[8].loc.offset = (long)&sc->eip - new_cfa; fs->retaddr_column = 8; fs->signal_frame = 1; return _URC_NO_REASON; Index: gcc/config/i386/knetbsd-gnu.h =================================================================== --- gcc/config/i386/knetbsd-gnu.h (revision 172279) +++ gcc/config/i386/knetbsd-gnu.h (working copy) @@ -20,5 +20,3 @@ along with GCC; see the file COPYING3. <http://www.gnu.org/licenses/>. */ #define GNU_USER_LINK_EMULATION "elf_i386" - -#undef MD_UNWIND_SUPPORT Index: gcc/config/gnu-user.h =================================================================== --- gcc/config/gnu-user.h (revision 172279) +++ gcc/config/gnu-user.h (working copy) @@ -95,3 +95,6 @@ see the files COPYING3 and COPYING.RUNTI #endif #define TARGET_POSIX_IO + +#define TARGET_C99_FUNCTIONS 1 +#define TARGET_HAS_SINCOS 1 -- Joseph S. Myers jos...@codesourcery.com