libstdc++ doesn't try to call ioctl() (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Mar 2013 02:36:48 +0000 (18:36 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Mar 2013 02:36:48 +0000 (18:36 -0800)
showmanyc() should still work via the alternate mechanism (via regular
files).  If it doesn't work, and simply returns 0, I'm not actually sure
what the consequences are, though glibc seems to allow that.

Regarding the ctype files in config/os/ros/, I just grabbed the files
from the generic directory, which were the ones we were using before
this patch (generic is the default).

Rebuild your cross compiler.  Simply making won't suffice, since you
need new config/make files, so either make clean, or rm the gcc
configure files and build directories.

Documentation/glibc.txt
tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_base.h [new file with mode: 0644]
tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_inline.h [new file with mode: 0644]
tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_noninline.h [new file with mode: 0644]
tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/os_defines.h [new file with mode: 0644]
tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/configure.host [new file with mode: 0644]

index ea5d901..963cb34 100644 (file)
@@ -184,6 +184,14 @@ Tips, Questions, and Misc Notes
   shared vs static, and it can get complicated with start.c, tls.c, etc.
 - What things in one file rely heavily on another file?  Are there non-obvious
   gotchas?  (yes, and no one documented them).
+- Is the build failing without any clear error messages?  Scroll up a lot, and
+  there may be messages farther up (like a hundred+ lines up).  I've had some
+  gcc stage2 builds that fail with no obvious issue in the short term console
+  output, but the real error is much higher.  Some aspect of the build system
+  will continue on failures and only fail much later, after building other
+  packages.
+- Note that libstdc++ is a subpart of gcc, built during stage2, and has its
+  own configure script and settings.
 
 Ghetto Things (Feel free to fix them):
 --------------------------
diff --git a/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_base.h b/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_base.h
new file mode 100644 (file)
index 0000000..72aa6f2
--- /dev/null
@@ -0,0 +1,59 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997, 1998, 1999, 2003, 2009, 2010
+// Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+// <http://www.gnu.org/licenses/>.
+
+//
+// ISO C++ 14882: 22.1  Locales
+//
+
+// Default information, may not be appropriate for specific host.
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+  /// @brief  Base class for ctype.
+  struct ctype_base
+  {
+    // Non-standard typedefs.
+    typedef const int*                 __to_type;
+
+    // NB: Offsets into ctype<char>::_M_table force a particular size
+    // on the mask type. Because of this, we don't use an enum.
+    typedef unsigned int       mask;
+    static const mask upper            = 1 << 0;
+    static const mask lower    = 1 << 1;
+    static const mask alpha    = 1 << 2;
+    static const mask digit    = 1 << 3;
+    static const mask xdigit   = 1 << 4;
+    static const mask space    = 1 << 5;
+    static const mask print    = 1 << 6;
+    static const mask graph    = (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct
+    static const mask cntrl    = 1 << 8;
+    static const mask punct    = 1 << 9;
+    static const mask alnum    = (1 << 2) | (1 << 3);  // alpha|digit
+  };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_inline.h b/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_inline.h
new file mode 100644 (file)
index 0000000..ae54f29
--- /dev/null
@@ -0,0 +1,168 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 2000, 2003, 2009, 2010 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/ctype_inline.h
+ *  This is an internal header file, included by other library headers.
+ *  Do not attempt to use it directly. @headername{locale}
+ */
+
+//
+// ISO C++ 14882: 22.1  Locales
+//
+  
+// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
+// functions go in ctype.cc
+  
+// The following definitions are portable, but insanely slow. If one
+// cares at all about performance, then specialized ctype
+// functionality should be added for the native os in question: see
+// the config/os/bits/ctype_*.h files.
+
+// Constructing a synthetic "C" table should be seriously considered...
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+  bool
+  ctype<char>::
+  is(mask __m, char __c) const
+  { 
+    if (_M_table)
+      return _M_table[static_cast<unsigned char>(__c)] & __m;
+    else
+      {
+       bool __ret = false;
+       const size_t __bitmasksize = 15; 
+       size_t __bitcur = 0; // Lowest bitmask in ctype_base == 0
+       for (; __bitcur <= __bitmasksize; ++__bitcur)
+         {
+           const mask __bit = static_cast<mask>(1 << __bitcur);
+           if (__m & __bit)
+             {
+               bool __testis;
+               switch (__bit)
+                 {
+                 case space:
+                   __testis = isspace(__c);
+                   break;
+                 case print:
+                   __testis = isprint(__c);
+                   break;
+                 case cntrl:
+                   __testis = iscntrl(__c);
+                   break;
+                 case upper:
+                   __testis = isupper(__c);
+                   break;
+                 case lower:
+                   __testis = islower(__c);
+                   break;
+                 case alpha:
+                   __testis = isalpha(__c);
+                   break;
+                 case digit:
+                   __testis = isdigit(__c);
+                   break;
+                 case punct:
+                   __testis = ispunct(__c);
+                   break;
+                 case xdigit:
+                   __testis = isxdigit(__c);
+                   break;
+                 case alnum:
+                   __testis = isalnum(__c);
+                   break;
+                 case graph:
+                   __testis = isgraph(__c);
+                   break;
+                 default:
+                   __testis = false;
+                   break;
+                 }
+               __ret |= __testis;
+             }
+         }
+       return __ret;
+      }
+  }
+   
+  const char*
+  ctype<char>::
+  is(const char* __low, const char* __high, mask* __vec) const
+  {
+    if (_M_table)
+      while (__low < __high)
+       *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+    else
+      {
+       // Highest bitmask in ctype_base == 10.
+       const size_t __bitmasksize = 15; 
+       for (;__low < __high; ++__vec, ++__low)
+         {
+           mask __m = 0;
+           // Lowest bitmask in ctype_base == 0
+           size_t __i = 0; 
+           for (;__i <= __bitmasksize; ++__i)
+             {
+               const mask __bit = static_cast<mask>(1 << __i);
+               if (this->is(__bit, *__low))
+                 __m |= __bit;
+             }
+           *__vec = __m;
+         }
+      }
+    return __high;
+  }
+
+  const char*
+  ctype<char>::
+  scan_is(mask __m, const char* __low, const char* __high) const
+  {
+    if (_M_table)
+      while (__low < __high
+            && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+       ++__low;
+    else
+      while (__low < __high && !this->is(__m, *__low))
+       ++__low;
+    return __low;
+  }
+
+  const char*
+  ctype<char>::
+  scan_not(mask __m, const char* __low, const char* __high) const
+  {
+    if (_M_table)
+      while (__low < __high
+            && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+       ++__low;
+    else
+      while (__low < __high && this->is(__m, *__low) != 0)
+       ++__low;
+    return __low;
+  }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
diff --git a/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_noninline.h b/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/ctype_noninline.h
new file mode 100644 (file)
index 0000000..3004589
--- /dev/null
@@ -0,0 +1,92 @@
+// Locale support -*- C++ -*-
+
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2009, 2010
+//  Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/ctype_noninline.h
+ *  This is an internal header file, included by other library headers.
+ *  Do not attempt to use it directly. @headername{locale}
+ */
+
+//
+// ISO C++ 14882: 22.1  Locales
+//
+  
+// Information as gleaned from /usr/include/ctype.h
+
+  const ctype_base::mask*
+  ctype<char>::classic_table() throw()
+  { return 0; }
+
+  ctype<char>::ctype(__c_locale, const mask* __table, bool __del, 
+                    size_t __refs) 
+  : facet(__refs), _M_del(__table != 0 && __del), 
+  _M_toupper(NULL), _M_tolower(NULL), 
+  _M_table(__table ? __table : classic_table()) 
+  { 
+    memset(_M_widen, 0, sizeof(_M_widen));
+    _M_widen_ok = 0;
+    memset(_M_narrow, 0, sizeof(_M_narrow));
+    _M_narrow_ok = 0;
+  }
+
+  ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) 
+  : facet(__refs), _M_del(__table != 0 && __del), 
+  _M_toupper(NULL), _M_tolower(NULL), 
+  _M_table(__table ? __table : classic_table())
+  { 
+    memset(_M_widen, 0, sizeof(_M_widen));
+    _M_widen_ok = 0;
+    memset(_M_narrow, 0, sizeof(_M_narrow));
+    _M_narrow_ok = 0;
+  }
+
+  char
+  ctype<char>::do_toupper(char __c) const
+  { return ::toupper((int) __c); }
+
+  const char*
+  ctype<char>::do_toupper(char* __low, const char* __high) const
+  {
+    while (__low < __high)
+      {
+       *__low = ::toupper((int) *__low);
+       ++__low;
+      }
+    return __high;
+  }
+
+  char
+  ctype<char>::do_tolower(char __c) const
+  { return ::tolower((int) __c); }
+
+  const char* 
+  ctype<char>::do_tolower(char* __low, const char* __high) const
+  {
+    while (__low < __high)
+      {
+       *__low = ::tolower((int) *__low);
+       ++__low;
+      }
+    return __high;
+  }
diff --git a/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/os_defines.h b/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/config/os/ros/os_defines.h
new file mode 100644 (file)
index 0000000..dbbfe05
--- /dev/null
@@ -0,0 +1,17 @@
+/** @file bits/os_defines.h
+ *  This is an internal header file, included by other library headers.
+ *  Do not attempt to use it directly. @headername{iosfwd}
+ */
+
+#ifndef _GLIBCXX_OS_DEFINES
+#define _GLIBCXX_OS_DEFINES 1
+
+/* Try to avoid ioctls in the c++ build - I don't plan on supporting them in
+ * the OS, and don't want a shim layer in glibc yet either. */
+#define _GLIBCXX_NO_IOCTL 1
+
+/* This is an alternate way to get showmanyc() to work, since we disabled the
+ * IOCTL style. */
+#define _GLIBCXX_HAVE_S_ISREG 1
+
+#endif /* _GLIBCXX_OS_DEFINES */
diff --git a/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/configure.host b/tools/compilers/gcc-glibc/gcc-4.6.1-ros/libstdc++-v3/configure.host
new file mode 100644 (file)
index 0000000..a739657
--- /dev/null
@@ -0,0 +1,342 @@
+# configure.host
+#
+# This shell script handles all host based configuration for libstdc++.
+# It sets various shell variables based on the the host and the
+# configuration options.  You can modify this shell script without needing
+# to rerun autoconf/aclocal/etc.  This file is "sourced" not executed.
+#
+# You should read docs/html/17_intro/porting.* to make sense of this file.
+#
+#
+# It uses the following shell variables as set by config.guess:
+#   host                The configuration host (full CPU-vendor-OS triplet)
+#   host_cpu            The configuration host CPU
+#   host_os             The configuration host OS
+#
+#
+# It sets the following shell variables:
+#
+#   cpu_include_dir        CPU-specific directory, defaults to cpu/generic
+#                          if cpu/host_cpu doesn't exist.  This is not used
+#                          directly, but sets the default for others.
+#
+#   os_include_dir         OS-specific directory, defaults to os/generic.
+#
+#   c_model                the "C" header model, defaults to c_global.
+#
+#   c_compatibility        if "C" compatibility headers are necessary,
+#                          defaults to no.
+#
+#   abi_baseline_pair      directory name for ABI compat testing,
+#                          defaults to host_cpu-host_os (as per config.guess)
+#
+#   abi_tweaks_dir         location of cxxabi_tweaks.h,
+#                          defaults to cpu_include_dir
+#
+#   atomicity_dir          location of atomicity.h,
+#                          defaults to cpu_include_dir
+#
+#   atomic_word_dir        location of atomic_word.h
+#                          defaults to generic.
+#
+#   atomic_flags           extra flags to pass to use atomic instructions
+#                          defaults to nothing.
+#
+#   cpu_defines_dir        location of cpu_defines.h
+#                          defaults to generic.
+#
+#
+#   error_constants_dir    location of error_constants.h
+#                          defaults to os/generic.
+#
+# It possibly modifies the following variables:
+#
+#   OPT_LDFLAGS            extra flags to pass when linking the library, of
+#                          the form '-Wl,blah'
+#                          (defaults to empty in acinclude.m4)
+#
+#   port_specific_symbol_files
+#                          whitespace-seperated list of files containing
+#                          additional symbols to export from the shared
+#                          library, when symbol versioning is in use
+#
+#
+# If the defaults will not work for your platform, you need only change the
+# variables that won't work, i.e., you do not need to explicitly set a
+# working variable to its default.  Most hosts only need to change the two
+# *_include_dir variables.
+
+
+# DEFAULTS
+# Try to guess a default cpu_include_dir based on the name of the CPU.  We
+# cannot do this for os_include_dir; there are too many portable operating
+# systems out there.  :-)
+c_model=c_global
+c_compatibility=no
+atomic_word_dir=cpu/generic
+atomic_flags=""
+atomicity_dir="cpu/generic"
+cpu_defines_dir="cpu/generic"
+try_cpu=generic
+abi_tweaks_dir="cpu/generic"
+error_constants_dir="os/generic"
+
+# HOST-SPECIFIC OVERRIDES
+# Set any CPU-dependent bits.
+
+# Provide a way to funnel exotic flavors and prefixed/postfixed chip
+# variants into the established source config/cpu/* sub-directories.
+# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+case "${host_cpu}" in
+  alpha*)
+    try_cpu=alpha
+    ;;
+  arm*)
+    try_cpu=arm
+    ;;
+  crisv32)
+    try_cpu=cris
+    ;;
+  i[567]86 | x86_64)
+    try_cpu=i486
+    ;;
+  hppa*)
+    try_cpu=hppa
+    ;;
+  mep*)
+    EXTRA_CXX_FLAGS=-mm
+    try_cpu=generic
+    ;;
+  mips*)
+    try_cpu=mips
+    ;;
+  powerpc* | rs6000)
+    try_cpu=powerpc
+    ;;
+  sparc* | ultrasparc)
+    try_cpu=sparc
+    ;;
+  *)
+    if test -d ${glibcxx_srcdir}/config/cpu/${host_cpu}; then
+      try_cpu=${host_cpu}
+    fi
+esac
+
+
+# Now look for the file(s) usually tied to a CPU model, and make
+# default choices for those if they haven't been explicitly set
+# already.  
+cpu_include_dir=cpu/${try_cpu}
+
+
+# Set specific CPU overrides for cpu_defines_dir. Most can just use generic.
+# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+case "${host_cpu}" in
+  powerpc* | rs6000)
+    cpu_defines_dir=cpu/powerpc
+    ;;
+esac
+
+
+# Set specific CPU overrides for atomic_word_dir and atomic_flags. 
+# Most can just use generic.
+# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+case "${host_cpu}" in
+  alpha*)
+    atomic_word_dir=cpu/alpha
+    ;;
+  cris*)
+    atomic_word_dir=cpu/cris
+    ;;
+  ia64)
+    atomic_word_dir=cpu/ia64
+    ;;
+  i[4567]86 | x86_64)
+    atomic_flags="-march=native"
+    ;;
+  powerpc* | rs6000)
+    atomic_word_dir=cpu/powerpc
+    ;;
+  sparc* | ultrasparc)
+    atomic_word_dir=cpu/sparc
+    atomic_flags="-mcpu=v9"
+    ;;
+esac
+
+
+# Set specific CPU overrides for atomicity_dir.
+# This can be over-ridden in GLIBCXX_ENABLE_ATOMIC_BUILTINS.
+# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/atomicity.h ; then
+  atomicity_dir=$cpu_include_dir
+fi
+
+
+if test -f ${glibcxx_srcdir}/config/${cpu_include_dir}/cxxabi_tweaks.h ; then
+  abi_tweaks_dir=$cpu_include_dir
+fi
+
+
+# Set any OS-dependent bits.
+# Set the os_include_dir.
+# Set the error_costants_dir.
+# Set c_model, c_compatibility here.
+# If atomic ops and/or numeric limits are OS-specific rather than
+# CPU-specifc, set those here too.
+# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+case "${host_os}" in
+  aix4.[3456789]* | aix[56789]*)
+    # We set os_include_dir to os/aix only on AIX 4.3 and newer, but
+    # os/aix/atomicity.h works on earlier versions of AIX 4.*, so we
+    # explicitly duplicate the directory for 4.[<3].
+    os_include_dir="os/aix"
+    atomicity_dir="os/aix"
+    atomic_word_dir="os/aix"
+    OPT_LDFLAGS="-Wl,-G"
+    ;;
+  aix4.*)
+    os_include_dir="os/generic"
+    atomicity_dir="os/aix"
+    atomic_word_dir="os/aix"
+    ;;
+  aix*)
+    os_include_dir="os/generic"
+    atomicity_dir="cpu/generic"
+    ;;
+  bsd*)
+    # Plain BSD attempts to share FreeBSD files.
+    os_include_dir="os/bsd/freebsd"
+    ;;
+  cygwin*)
+    os_include_dir="os/newlib"
+    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
+    ;;
+  darwin | darwin[1-7] | darwin[1-7].*)
+    # On Darwin, performance is improved if libstdc++ is single-module.
+    # Up to at least 10.3.7, -flat_namespace is required for proper
+    # treatment of coalesced symbols.
+    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module -Wl,-flat_namespace"
+    os_include_dir="os/bsd/darwin"
+    ;;
+  darwin[89] | darwin[89].* | darwin[1-9][0-9]* )
+    # On Darwin, performance is improved if libstdc++ is single-module,
+    # and on 8+ compatibility is better if not -flat_namespace.
+    OPT_LDFLAGS="${OPT_LDFLAGS} -Wl,-single_module"
+    case "${host_cpu}" in
+      i[34567]86 | x86_64)
+        OPTIMIZE_CXXFLAGS="${OPTIMIZE_CXXFLAGS} -fvisibility-inlines-hidden"
+        ;;
+    esac
+    os_include_dir="os/bsd/darwin"
+    ;;
+  *djgpp*)      # leading * picks up "msdosdjgpp"
+    os_include_dir="os/djgpp"
+    error_constants_dir="os/djgpp"
+    ;;
+  freebsd*)
+    os_include_dir="os/bsd/freebsd"
+    ;;
+  gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
+    if [ "$uclibc" = "yes" ]; then
+      os_include_dir="os/uclibc"
+    elif [ "$bionic" = "yes" ]; then
+      os_include_dir="os/bionic"
+    else
+      os_include_dir="os/gnu-linux"
+    fi
+    ;;
+  hpux*)
+    os_include_dir="os/hpux"
+    ;;
+  irix6.5*)
+    os_include_dir="os/irix/irix6.5"
+    atomicity_dir=os/irix
+    atomic_word_dir=os/irix
+    ;;
+  mingw32*)
+    os_include_dir="os/mingw32"
+    error_constants_dir="os/mingw32"
+    OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)"
+    ;;
+  netbsd*)
+    os_include_dir="os/bsd/netbsd"
+    ;;
+  osf*)
+    os_include_dir="os/generic"
+    # libstdc++.so relies on emutls on Tru64 UNIX, which only works with the
+    # real functions implemented in libpthread.so, not with the dummies in
+    # libgcc, so always pass -lpthread.
+    OPT_LDFLAGS="${OPT_LDFLAGS} -lpthread"
+    ;;
+  qnx6.[12]*)
+    os_include_dir="os/qnx/qnx6.1"
+    c_model=c
+    ;;
+  ros*)
+    os_include_dir="os/ros"
+    ;;
+  solaris2)
+    # This too-vague configuration does not provide enough information
+    # to select a ctype include, and thus os_include_dir is a crap shoot.
+    echo "Please specify the full version of Solaris, ie. solaris2.9 " 1>&2
+    exit 1
+    ;;
+  solaris2.[89] | solaris2.1[0-9])
+    os_include_dir="os/solaris/solaris2.7"
+    ;;
+  tpf)
+    os_include_dir="os/tpf"
+    ;;
+  vxworks)
+    os_include_dir="os/vxworks"
+    ;;
+  *)
+    os_include_dir="os/generic"
+    ;;
+esac
+
+
+# Set any OS-dependent and CPU-dependent bits.
+# THIS TABLE IS SORTED.  KEEP IT THAT WAY.
+case "${host}" in
+  *-*-linux*)
+    case "${host_cpu}" in
+      i[567]86)
+        abi_baseline_pair=i486-linux-gnu
+        ;;
+      mips64*)
+       abi_baseline_pair=mips64-linux-gnu
+       ;;
+      powerpc64)
+        abi_baseline_pair=powerpc64-linux-gnu
+        ;;
+      s390)
+        abi_baseline_pair=s390-linux-gnu
+        ;;
+      s390x)
+        abi_baseline_pair=s390x-linux-gnu
+        ;;
+      x86_64)
+        abi_baseline_pair=x86_64-linux-gnu
+        ;;
+      *)
+        if test -d ${glibcxx_srcdir}/config/abi/post/${try_cpu}-linux-gnu; then
+          abi_baseline_pair=${try_cpu}-linux-gnu
+        fi
+    esac
+    case "${host}" in
+      arm*-*-linux-*eabi)
+       port_specific_symbol_files="\$(srcdir)/../config/os/gnu-linux/arm-eabi-extra.ver"
+       ;;
+    esac
+    ;;
+  powerpc*-*-darwin*)
+    port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
+    ;;
+  *-*-solaris2.[89])
+    abi_baseline_pair=solaris2.8
+    ;;
+  *-*-solaris2.1[0-9])
+    abi_baseline_pair=solaris2.10
+    ;;
+esac