diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h
rename from libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h
rename to libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_configure_char.cc b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc
rename from libstdc++-v3/config/os/solaris/solaris2.7/ctype_configure_char.cc
rename to libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h b/libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h
rename from libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h
rename to libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h b/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
rename from libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h
rename to libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
--- a/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h
+++ b/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
@@ -1,6 +1,6 @@
-// Specific definitions for Solaris 7,8  -*- C++ -*-
+// Specific definitions for Solaris 8  -*- C++ -*-
 
-// Copyright (C) 2000, 2002, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2002, 2005, 2009, 2011 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
@@ -28,5 +28,12 @@
 // System-specific #define, typedefs, corrections, etc, go here.  This
 // file will come before all others.
 
+// FIXME: Autoconf if possible.
+#if __cplusplus >= 199711L
+#define __CORRECT_ISO_CPP_MATH_H_PROTO2
+#define __CORRECT_ISO_CPP_STRING_H_PROTO
+#define __CORRECT_ISO_CPP_WCHAR_H_PROTO
 #endif
 
+#endif
+
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h b/libstdc++-v3/config/os/solaris/solaris2.9/ctype_base.h
copy from libstdc++-v3/config/os/solaris/solaris2.7/ctype_base.h
copy to libstdc++-v3/config/os/solaris/solaris2.9/ctype_base.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_configure_char.cc b/libstdc++-v3/config/os/solaris/solaris2.9/ctype_configure_char.cc
copy from libstdc++-v3/config/os/solaris/solaris2.7/ctype_configure_char.cc
copy to libstdc++-v3/config/os/solaris/solaris2.9/ctype_configure_char.cc
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h b/libstdc++-v3/config/os/solaris/solaris2.9/ctype_inline.h
copy from libstdc++-v3/config/os/solaris/solaris2.7/ctype_inline.h
copy to libstdc++-v3/config/os/solaris/solaris2.9/ctype_inline.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h b/libstdc++-v3/config/os/solaris/solaris2.9/os_defines.h
copy from libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h
copy to libstdc++-v3/config/os/solaris/solaris2.9/os_defines.h
--- a/libstdc++-v3/config/os/solaris/solaris2.7/os_defines.h
+++ b/libstdc++-v3/config/os/solaris/solaris2.9/os_defines.h
@@ -1,6 +1,6 @@
-// Specific definitions for Solaris 7,8  -*- C++ -*-
+// Specific definitions for Solaris 9+  -*- C++ -*-
 
-// Copyright (C) 2000, 2002, 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2002, 2005, 2009, 2011 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
@@ -28,5 +28,13 @@
 // System-specific #define, typedefs, corrections, etc, go here.  This
 // file will come before all others.
 
+// FIXME: Autoconf if possible.
+#if __cplusplus >= 199711L
+#define __CORRECT_ISO_CPP_MATH_H_PROTO1
+#define __CORRECT_ISO_CPP_STDLIB_H_PROTO
+#define __CORRECT_ISO_CPP_STRING_H_PROTO
+#define __CORRECT_ISO_CPP_WCHAR_H_PROTO
 #endif
 
+#endif
+
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -288,8 +288,11 @@ case "${host_os}" in
     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"
+  solaris2.8)
+    os_include_dir="os/solaris/solaris2.8"
+    ;;
+  solaris2.9 | solaris2.1[0-9])
+    os_include_dir="os/solaris/solaris2.9"
     ;;
   tpf)
     os_include_dir="os/tpf"
diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath
--- a/libstdc++-v3/include/c_global/cmath
+++ b/libstdc++-v3/include/c_global/cmath
@@ -78,10 +78,14 @@ namespace std _GLIBCXX_VISIBILITY(defaul
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
+#if !defined(__CORRECT_ISO_CPP_MATH_H_PROTO1) \
+  && !defined(__CORRECT_ISO_CPP_MATH_H_PROTO2)
   inline _GLIBCXX_CONSTEXPR double
   abs(double __x)
   { return __builtin_fabs(__x); }
+#endif
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   abs(float __x)
   { return __builtin_fabsf(__x); }
@@ -89,6 +93,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   abs(long double __x)
   { return __builtin_fabsl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -99,6 +104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::acos;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   acos(float __x)
   { return __builtin_acosf(__x); }
@@ -106,6 +112,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   acos(long double __x)
   { return __builtin_acosl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -116,6 +123,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::asin;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   asin(float __x)
   { return __builtin_asinf(__x); }
@@ -123,6 +131,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   asin(long double __x)
   { return __builtin_asinl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -133,6 +142,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::atan;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   atan(float __x)
   { return __builtin_atanf(__x); }
@@ -140,6 +150,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   atan(long double __x)
   { return __builtin_atanl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -150,6 +161,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::atan2;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   atan2(float __y, float __x)
   { return __builtin_atan2f(__y, __x); }
@@ -157,6 +169,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   atan2(long double __y, long double __x)
   { return __builtin_atan2l(__y, __x); }
+#endif
 
   template<typename _Tp, typename _Up>
     inline _GLIBCXX_CONSTEXPR
@@ -172,6 +185,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::ceil;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   ceil(float __x)
   { return __builtin_ceilf(__x); }
@@ -179,6 +193,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   ceil(long double __x)
   { return __builtin_ceill(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -189,6 +204,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::cos;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   cos(float __x)
   { return __builtin_cosf(__x); }
@@ -196,6 +212,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   cos(long double __x)
   { return __builtin_cosl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -206,6 +223,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::cosh;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   cosh(float __x)
   { return __builtin_coshf(__x); }
@@ -213,6 +231,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   cosh(long double __x)
   { return __builtin_coshl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -223,6 +242,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::exp;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   exp(float __x)
   { return __builtin_expf(__x); }
@@ -230,6 +250,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   exp(long double __x)
   { return __builtin_expl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -240,6 +261,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::fabs;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   fabs(float __x)
   { return __builtin_fabsf(__x); }
@@ -247,6 +269,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   fabs(long double __x)
   { return __builtin_fabsl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -257,6 +280,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::floor;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   floor(float __x)
   { return __builtin_floorf(__x); }
@@ -264,6 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   floor(long double __x)
   { return __builtin_floorl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -274,6 +299,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::fmod;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   fmod(float __x, float __y)
   { return __builtin_fmodf(__x, __y); }
@@ -281,9 +307,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   fmod(long double __x, long double __y)
   { return __builtin_fmodl(__x, __y); }
+#endif
 
   using ::frexp;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   frexp(float __x, int* __exp)
   { return __builtin_frexpf(__x, __exp); }
@@ -291,6 +319,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   frexp(long double __x, int* __exp)
   { return __builtin_frexpl(__x, __exp); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -301,6 +330,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::ldexp;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   ldexp(float __x, int __exp)
   { return __builtin_ldexpf(__x, __exp); }
@@ -308,6 +338,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   ldexp(long double __x, int __exp)
   { return __builtin_ldexpl(__x, __exp); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -318,6 +349,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::log;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   log(float __x)
   { return __builtin_logf(__x); }
@@ -325,6 +357,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   log(long double __x)
   { return __builtin_logl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -335,6 +368,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::log10;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   log10(float __x)
   { return __builtin_log10f(__x); }
@@ -342,6 +376,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   log10(long double __x)
   { return __builtin_log10l(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -352,6 +387,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::modf;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   modf(float __x, float* __iptr)
   { return __builtin_modff(__x, __iptr); }
@@ -359,9 +395,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   modf(long double __x, long double* __iptr)
   { return __builtin_modfl(__x, __iptr); }
+#endif
 
   using ::pow;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   pow(float __x, float __y)
   { return __builtin_powf(__x, __y); }
@@ -385,6 +423,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   pow(long double __x, int __n)
   { return __builtin_powil(__x, __n); }
 #endif
+#endif
 
   template<typename _Tp, typename _Up>
     inline _GLIBCXX_CONSTEXPR
@@ -400,6 +439,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::sin;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   sin(float __x)
   { return __builtin_sinf(__x); }
@@ -407,6 +447,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   sin(long double __x)
   { return __builtin_sinl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -417,6 +458,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::sinh;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   sinh(float __x)
   { return __builtin_sinhf(__x); }
@@ -424,6 +466,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   sinh(long double __x)
   { return __builtin_sinhl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -434,6 +477,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::sqrt;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   sqrt(float __x)
   { return __builtin_sqrtf(__x); }
@@ -441,6 +485,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   sqrt(long double __x)
   { return __builtin_sqrtl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -451,6 +496,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::tan;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   tan(float __x)
   { return __builtin_tanf(__x); }
@@ -458,6 +504,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   tan(long double __x)
   { return __builtin_tanl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
@@ -468,6 +515,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::tanh;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline _GLIBCXX_CONSTEXPR float
   tanh(float __x)
   { return __builtin_tanhf(__x); }
@@ -475,6 +523,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   inline _GLIBCXX_CONSTEXPR long double
   tanh(long double __x)
   { return __builtin_tanhl(__x); }
+#endif
 
   template<typename _Tp>
     inline _GLIBCXX_CONSTEXPR
diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib
--- a/libstdc++-v3/include/c_global/cstdlib
+++ b/libstdc++-v3/include/c_global/cstdlib
@@ -1,7 +1,7 @@
 // -*- C++ -*- forwarding header.
 
 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010
+// 2006, 2007, 2008, 2009, 2010, 2011
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -135,11 +135,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   using ::wctomb;
 #endif // _GLIBCXX_USE_WCHAR_T
 
+#ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO
   inline long
   abs(long __i) { return labs(__i); }
 
   inline ldiv_t
   div(long __i, long __j) { return ldiv(__i, __j); }
+#endif
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath
--- a/libstdc++-v3/include/tr1/cmath
+++ b/libstdc++-v3/include/tr1/cmath
@@ -569,6 +569,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   // mode have a different return type.
   using ::fabs;
 
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
   inline float
   fabs(float __x)
   { return __builtin_fabsf(__x); }
@@ -582,6 +583,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 					   double>::__type
     fabs(_Tp __x)
     { return __builtin_fabs(__x); }
+#endif
 
   inline float
   fdim(float __x, float __y)
