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

Reply via email to