Patchwork Remove obsolete Solaris 8 support

login
register
mail settings
Submitter Rainer Orth
Date March 12, 2012, 5:44 p.m.
Message ID <yddwr6piuiv.fsf@manam.CeBiTec.Uni-Bielefeld.DE>
Download mbox | patch
Permalink /patch/146189/
State New
Headers show

Comments

Rainer Orth - March 12, 2012, 5:44 p.m.
Since even extended support for Solaris 8 ends by March 31st, this patch
removes Solaris 8 support from mainline.  Given that extended support
for Solaris 9 lasts until October 2014, I guess that will remain in GCC
for at least one major release.

Again, I don't expect the patch to be controversial, but a few issues
bear mention:

* Although libgcc/config/sparc/sol2-unwind.h could be simplified quite a
  bit, perhaps we could go further: I wonder if the remaining nframes = 2
  case really applies to Solaris 9.  If not, one could massivly simplify
  this code.

* As in the IRIX case, I wonder if removing Solaris 8 support from libgo
  is a good idea while it still is supported on the 4.7 branch.

* In libstdc++, all checks for the presence of overloads can be replaced
  by hardcoded values.  This also allows __CORRECT_ISO_CPP_MATH_H_PROTO2
  to be removed and to drop the `1' in __CORRECT_ISO_CPP_MATH_H_PROTO1.

* I haven't yet checked if the Solaris references in
  libstdc++-v3/config/io/basic_file_stdio.cc are correct or also apply
  to newer versions.  This can probably wait for a later time.

* libstdc++-v3/doc/xml/manual/internals.xml still has various references
  to older Solaris versions.  I haven't touched those.

Bootstrapped without regressions on {i386-pc, sparc-sun}-solaris2.{9, 10, 11}
(Solaris 9/SPARC still running).  Ok for mainline if that passes (though
I guess I don't need approval for most of these changes)?

Thanks.
	Rainer


2012-03-11  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	libstdc++-v3:
	* config/os/solaris/solaris2.8: Rename to ...
	* config/os/solaris/solaris2.9: ... this.
	* config/abi/post/solaris2.8: Rename to ...
	* config/abi/post/solaris2.9: ... this.
	* configure.host (os_include_dir): Remove solaris2.8.
	Reflect renaming.
	(abi_baseline_pair): Remove *-*-solaris2.8.
	Reflect renaming.

	* configure.ac (GLIBCXX_CHECK_MATH_PROTO): Remove
	(GLIBCXX_CHECK_STDLIB_PROTO): Remove.
	* acinclude.m4 (GLIBCXX_CHECK_MATH_PROTO): Remove
	(GLIBCXX_CHECK_STDLIB_PROTO): Remove.
	(GLIBCXX_CHECK_GTHREADS): Remove Solaris 8 handling.
	* crossconfig.m4 (GLIBCXX_CROSSCONFIG): Remove *-solaris2.8
	handling.
	* configure: Regenerate.
	* config.h.in: Regenerate.

	* config/os/solaris/solaris2.9/os_defines.h
	(__CORRECT_ISO_CPP_MATH_H_PROTO): Define.
	(__CORRECT_ISO_CPP_STDLIB_H_PROTO): Define.
	* include/c_global/cmath: Rename __CORRECT_ISO_CPP_MATH_H_PROTO1
	to __CORRECT_ISO_CPP_MATH_H_PROTO.
	[!__CORRECT_ISO_CPP_MATH_H_PROTO2]: Remove.
	* include/tr1/cmath: Rename __CORRECT_ISO_CPP_MATH_H_PROTO1 to
	__CORRECT_ISO_CPP_MATH_H_PROTO.

	* doc/xml/manual/configure.xml (Configure, --enable-libstdcxx-threads):
	Remove Solaris 8 reference.

	* testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc:
	Don't xfail on *-*-solaris2.8.
	* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc:
	Likewise.
	* testsuite/ext/enc_filebuf/char/13598.cc: Don't xfail on
	*-*-solaris2.8.

	libjava:
	* configure.ac (THREADLIBS): Remove *-*-solaris2.8 handling.
	* configure: Regenerate.

	libgo:
	* configure.ac (OSCFLAGS): Remove *-*-solaris2.8 handling.
	(libgo_cv_lib_makecontext_stack_top): Remove
	sparc*-*-solaris2.8* handling.
	* configure: Regenerate.

	libgcc:
	* config/i386/sol2-unwind.h (x86_fallback_frame_state): Remove
	Solaris 8 handling.
	* config/sparc/sol2-unwind.h (sparc64_is_sighandler): Remove
	Solaris 8 handling.
	(sparc_is_sighandler): Likewise.

	libcpp:
	* lex.c: Remove Solaris 8 reference.

	gcc/testsuite:
	* g++.dg/warn/miss-format-1.C: Remove *-*-solaris2.8 handling.
	* gcc.dg/c99-stdint-6.c: Likewise.
	* gcc.dg/lto/20090210_0.c: Likewise.
	* gcc.dg/pr28796-2.c: Don't skip on sparc*-sun-solaris2.8.
	* gcc.dg/pragma-init-fini.c: Don't skip on i?86-*-solaris2.8.
	* gcc.dg/pragma-init-fini-2.c: Likewise.
	* gcc.dg/torture/pr47917.c: Remove *-*-solaris2.8 handling.
	* gcc.target/i386/pr22076.c: Remove i?86-*-solaris2.8 handling.
	* gcc.target/i386/pr22152.c: Likewise.
	* gcc.target/i386/vect8-ret.c: Likewise.
	* lib/target-supports.exp (add_options_for_tls): Remove Solaris 8
	handling.

	gcc:
	* config.gcc (enable_obsolete): Remove *-*-solaris2.8*.
	(*-*-solaris2.[0-8], *-*-solaris2.[0-8].*): Mark unsupported.
	(i[34567]86-*-solaris2*, x86_64-*-solaris2.1[0-9]*): Remove
	Solaris 8 support.
	* configure.ac (gcc_cv_ld_hidden): Remove *-*-solaris2.8*.
	(ld_tls_support): Remove Solaris 8 references.
	(lwp_dir, lwp_spec): Remove support for alternate thread library.
	* acinclude.m4 (gcc_cv_initfini_array): Remove *-*-solaris2.*
	tests.
	* configure: Regenerate.
	* config.in: Regenerate.

	* config/sol2.h (LINK_SPEC): Remove LIB_THREAD_LDFLAGS_SPEC.
	* config/i386/sol2.h: Remove Solaris 8 references.

	* doc/install.texi (Specific, i?86-*-solaris2.[89]): Rename to ...
	(i?86-*-solaris2.9): ... this.
	Remove Solaris 8 references.
	(Specific, *-*-solaris2*): Document Solaris 8 removal.
	Remove Solaris 8 references.

	fixincludes:
	* inclhack.def (math_exception): Remove duplicate.
	(solaris_cond_init): Remove.
	(solaris_sys_va_list): Remove Solaris 8 support.
	* fixincl.x: Regenerate.
	* tests/base/pthread.h [SOLARIS_COND_INIT_CHECK]: Remove.
Ian Taylor - March 12, 2012, 6:31 p.m.
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

> 	libgo:
> 	* configure.ac (OSCFLAGS): Remove *-*-solaris2.8 handling.
> 	(libgo_cv_lib_makecontext_stack_top): Remove
> 	sparc*-*-solaris2.8* handling.
> 	* configure: Regenerate.

As with the Irix 5 changes, just send the libgo patches to me rather
than committing them directly to the repository.  Thanks.

Ian
Mike Stump - March 12, 2012, 6:37 p.m.
On Mar 12, 2012, at 10:44 AM, Rainer Orth wrote:
> Since even extended support for Solaris 8 ends by March 31st, this patch
> removes Solaris 8 support from mainline.

One of the nice things about gcc is that gcc usually still works, long after a vendor has abandoned a machine.  I rather like that gcc will just work, unlike vendor software, which often says, please buy a new machine.  One doesn't have to remove support in gcc for something, just because a vendor doesn't support it.  That said, truly crufty things, should go.
Rainer Orth - March 12, 2012, 6:48 p.m.
Mike Stump <mikestump@comcast.net> writes:

> On Mar 12, 2012, at 10:44 AM, Rainer Orth wrote:
>> Since even extended support for Solaris 8 ends by March 31st, this patch
>> removes Solaris 8 support from mainline.
>
> One of the nice things about gcc is that gcc usually still works, long
> after a vendor has abandoned a machine.  I rather like that gcc will
> just work, unlike vendor software, which often says, please buy a new
> machine.  One doesn't have to remove support in gcc for something,
> just because a vendor doesn't support it.  That said, truly crufty
> things, should go.

No need to tell me, that's why I've been keeping the IRIX and OSF ports
going for so long, sort of like an OS archaeologist :-)  But both for
those and Solaris 8, the time has come where maintaining them is more
trouble than it's worth, as can be seen by the contortions I had to go
through to even find a machine still capable of running Solaris 8/x86.

	Rainer
Richard Kenner - March 12, 2012, 6:49 p.m.
> One of the nice things about gcc is that gcc usually still works,
> long after a vendor has abandoned a machine.  I rather like that gcc
> will just work, unlike vendor software, which often says, please buy
> a new machine.  One doesn't have to remove support in gcc for
> something, just because a vendor doesn't support it.  That said,
> truly crufty things, should go.

I agree.  If it's not causing a serious maintenance issue, I see no
reason to remove it.
Rainer Orth - March 12, 2012, 6:55 p.m.
kenner@vlsi1.ultra.nyu.edu (Richard Kenner) writes:

>> One of the nice things about gcc is that gcc usually still works,
>> long after a vendor has abandoned a machine.  I rather like that gcc
>> will just work, unlike vendor software, which often says, please buy
>> a new machine.  One doesn't have to remove support in gcc for
>> something, just because a vendor doesn't support it.  That said,
>> truly crufty things, should go.
>
> I agree.  If it's not causing a serious maintenance issue, I see no
> reason to remove it.

It does, unfortunately: Solaris 8 is even worse wrt. to C99 and POSIX.1
conformance than Solaris 9, especially in the areas of TLS and thread
support, as I've found the hard way during the GCC 4.7 cycle.  There are
all sorts of quirks, and the OS is now 12 years old.  I see better ways
to spend my (volunteer) time.

	Rainer
Steven Bosscher - March 12, 2012, 6:57 p.m.
On Mon, Mar 12, 2012 at 7:37 PM, Mike Stump <mikestump@comcast.net> wrote:
> On Mar 12, 2012, at 10:44 AM, Rainer Orth wrote:
>> Since even extended support for Solaris 8 ends by March 31st, this patch
>> removes Solaris 8 support from mainline.
>
> One of the nice things about gcc is that gcc usually still works, long after a vendor has abandoned a machine.  I rather like that gcc will just work, unlike vendor software, which often says, please buy a new machine.  One doesn't have to remove support in gcc for something, just because a vendor doesn't support it.  That said, truly crufty things, should go.

Personally, I'd be in favor of removing any target for which no test
results have been posted for the last, say, 2 GCC release series.
Otherwise there isn't any measure for the quality for such a target.
There've been GCC release series where a complete port failed to
build...

Ciao!
Steven
Mike Stump - March 12, 2012, 6:58 p.m.
On Mar 12, 2012, at 11:48 AM, Rainer Orth wrote:
> But both for those and Solaris 8, the time has come where maintaining them is more
> trouble than it's worth,

The nice thing is, anyone that disagrees with you, will step forward.  :-)  Notice, I didn't disagree with you...  I was only railing against the idea that we remove support, simply because a vendor did.  In this case, we're removing support, because it is more trouble than it is worth, which makes for a fine reason to remove support.
Bruce Korb - March 12, 2012, 7:35 p.m.
On 03/12/12 10:44, Rainer Orth wrote:
> 	fixincludes:
> 	* inclhack.def (math_exception): Remove duplicate.
> 	(solaris_cond_init): Remove.
> 	(solaris_sys_va_list): Remove Solaris 8 support.

I think I probably hate those COND initializers more than any other
thing that gets patched up.  Glad to see it go!!  Thanks.
Jonathan Wakely - March 12, 2012, 8:14 p.m.
On 12 March 2012 17:44, Rainer Orth wrote:
> Since even extended support for Solaris 8 ends by March 31st, this patch
> removes Solaris 8 support from mainline.  Given that extended support
> for Solaris 9 lasts until October 2014, I guess that will remain in GCC
> for at least one major release.

The libstdc++ parts of the patch are OK.
Tom Tromey - March 12, 2012, 8:43 p.m.
>>>>> "Rainer" == Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

Rainer> 	libjava:
Rainer> 	* configure.ac (THREADLIBS): Remove *-*-solaris2.8 handling.
Rainer> 	* configure: Regenerate.

This part is ok.  Thanks.

Tom
Tom Tromey - March 12, 2012, 8:43 p.m.
>>>>> "Rainer" == Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> writes:

Rainer> 	libcpp:
Rainer> 	* lex.c: Remove Solaris 8 reference.

Also ok.

Tom
Eric Botcazou - March 12, 2012, 10:19 p.m.
> * Although libgcc/config/sparc/sol2-unwind.h could be simplified quite a
>   bit, perhaps we could go further: I wonder if the remaining nframes = 2
>   case really applies to Solaris 9.  If not, one could massivly simplify
>   this code.

Please no, let's keep being very conservative with this stuff.
Rainer Orth - March 15, 2012, 2:41 p.m.
Eric Botcazou <ebotcazou@adacore.com> writes:

>> * Although libgcc/config/sparc/sol2-unwind.h could be simplified quite a
>>   bit, perhaps we could go further: I wonder if the remaining nframes = 2
>>   case really applies to Solaris 9.  If not, one could massivly simplify
>>   this code.
>
> Please no, let's keep being very conservative with this stuff.

If we are, we'll never learn if this code is needed on anything beyond
Solaris 8 and keep this cruft around basically forever.  I'll at least
try a bootstrap with the nframes = 2 code ripped out with Solaris 9 FCS
libc and libthread (and of course the whole rest: latest Solaris 9, 10
and 11) and see if anything breaks.

	Rainer
Eric Botcazou - March 15, 2012, 2:53 p.m.
> If we are, we'll never learn if this code is needed on anything beyond
> Solaris 8 and keep this cruft around basically forever.

So what?  This file is a big kludge and there is no value whatsoever in it 
being elegant or particularly readable or even efficient.

> I'll at least try a bootstrap with the nframes = 2 code ripped out with
> Solaris 9 FCS libc and libthread (and of course the whole rest: latest
> Solaris 9, 10 and 11) and see if anything breaks.

To make things clear upfront: I'll oppose any change that removes something.

Patch

# HG changeset patch
# Parent 70d9a4a121c064783ddbabfaf18e606d404a2e3c
Remove obsolete Solaris 8 support

diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def
--- a/fixincludes/inclhack.def
+++ b/fixincludes/inclhack.def
@@ -2382,7 +2382,7 @@  fix = {
     files     = math.h;
     select    = "struct exception";
     /*
-     * This should be bypassed on __cplusplus, but some supposedly C++ C++
+     * This should be bypassed on __cplusplus, but some supposedly C++
      * aware headers, such as Solaris 8 and 9, don't wrap their struct
      * exception either.  So currently we bypass only for glibc, based on a
      * comment in the fixed glibc header.  Ick.
@@ -2926,26 +2926,6 @@  fix = {
 
 
 /*
- * Solaris 8 PTHREAD_COND_INITIALIZER lacks the __pthread_cond_magic field.
- * COND_MAGIC is only defined in <synch.h> and pollutes the namespace, so
- * use the value literally instead.
- */
-fix = {
-    hackname = solaris_cond_init;
-    select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
-    files = pthread.h;
-    mach = '*-*-solaris2.8';
-    c_fix = format;
-    c_fix_arg = "%1, 0x4356%2";
-    c_fix_arg = "^(#define[ \t]+PTHREAD_COND_INITIALIZER[ \t]+"
-                "\\{.*0)(\\},[ \t]*0\\}.*)$";
-    test_text =
-    '#pragma ident	"@(#)pthread.h	1.29	01/07/07 SMI"'"\n"
-    '#define	PTHREAD_COND_INITIALIZER	{{{0}, 0}, 0}	/* = DEFAULTCV */';
-};
-
-
-/*
  *  g++ rejects functions declared with both C and C++ linkage.
  */
 fix = {
@@ -3422,13 +3402,13 @@  fix = {
 
 
 /*
- * On Solaris 8 and 9, __va_list needs to become a typedef for
+ * On Solaris 9, __va_list needs to become a typedef for
  * __builtin_va_list to make -Wmissing-format-attribute work.
  */
 fix = {
     hackname = solaris_sys_va_list;
     files    = sys/va_list.h;
-    mach     = '*-*-solaris2.[89]';
+    mach     = '*-*-solaris2.9';
     select   = "#if.*__STDC__.*\n"
 	       "typedef void \\*__va_list;\n"
 	       "#else\n"
diff --git a/fixincludes/tests/base/pthread.h b/fixincludes/tests/base/pthread.h
--- a/fixincludes/tests/base/pthread.h
+++ b/fixincludes/tests/base/pthread.h
@@ -75,16 +75,6 @@  extern int __sigsetjmp (struct __jmp_buf
 #endif  /* PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_CHECK */
 
 
-#if defined( SOLARIS_COND_INIT_CHECK )
-#pragma ident	"@(#)pthread.h	1.29	01/07/07 SMI"
-#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
-#define	PTHREAD_COND_INITIALIZER	{{{0}, 0, 0x4356}, 0}	/* = DEFAULTCV */
-#else
-#define	PTHREAD_COND_INITIALIZER	{{{0}, 0, 0x4356}, {0}}	/* = DEFAULTCV */
-#endif
-#endif  /* SOLARIS_COND_INIT_CHECK */
-
-
 #if defined( SOLARIS_MUTEX_INIT_2_CHECK )
 #ident "@(#)pthread.h  1.26  98/04/12 SMI"
 #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
diff --git a/gcc/acinclude.m4 b/gcc/acinclude.m4
--- a/gcc/acinclude.m4
+++ b/gcc/acinclude.m4
@@ -461,23 +461,7 @@  changequote([,])dnl
 #  error The C library not known to support .init_array/.fini_array
 # endif
 #endif
-])],[
-    case "${target}" in
-      *-*-solaris2.8*)
-	# .init_array/.fini_array support was introduced in Solaris 8
-	# patches 109147-08 (sparc) and 109148-08 (x86).  Since ld.so.1 and
-	# ld are guaranteed to be updated in lockstep, we can check ld -V
-	# instead.  Unfortunately, proper ld version numbers were only
-	# introduced in rev. -14, so we check for that.
-  	if test "$gcc_cv_sun_ld_vers_minor" -lt 272; then
-	  gcc_cv_initfini_array=no
-	fi
-      ;;
-      *-*-solaris2.9* | *-*-solaris2.1[[0-9]]*)
-        # .init_array/.fini_array support is present since Solaris 9 FCS.
-        ;;
-    esac
-], [gcc_cv_initfini_array=no]);;
+])],, [gcc_cv_initfini_array=no]);;
     esac
   else
     AC_MSG_CHECKING(cross compile... guessing)
diff --git a/gcc/config.gcc b/gcc/config.gcc
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -251,7 +251,6 @@  case ${target} in
  | arm*-*-uclinux*			\
  | arm*-wince-pe*			\
  | score-*				\
- | *-*-solaris2.8*			\
  )
     if test "x$enable_obsolete" != xyes; then
       echo "*** Configuration ${target} is obsolete." >&2
@@ -282,9 +281,9 @@  case ${target} in
  | *-*-rtemsaout*			\
  | *-*-rtemscoff*			\
  | *-*-solaris2				\
- | *-*-solaris2.[0-7]			\
- | *-*-solaris2.[0-7].*			\
- | *-*-sysv*		\
+ | *-*-solaris2.[0-8]			\
+ | *-*-solaris2.[0-8].*			\
+ | *-*-sysv*				\
  | vax-*-vms*				\
  )
 	echo "*** Configuration ${target} not supported" 1>&2
@@ -1320,9 +1319,8 @@  i[34567]86-*-solaris2* | x86_64-*-solari
 	# Set default arch_32 to pentium4, tune_32 to generic like the other
 	# i386 targets, although config.guess defaults to i386-pc-solaris2*.
 	case ${target} in
-	*-*-solaris2.[89]*)
-		# Solaris 8 and 9/x86 cannot execute SSE/SSE2 instructions by
-		# default.
+	*-*-solaris2.9*)
+		# Solaris 9/x86 cannot execute SSE/SSE2 instructions by default.
 		with_arch_32=${with_arch_32:-pentiumpro}
 		;;
 	*)
diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h
--- a/gcc/config/i386/sol2.h
+++ b/gcc/config/i386/sol2.h
@@ -1,6 +1,6 @@ 
 /* Target definitions for GCC for Intel 80386 running Solaris 2
    Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2004, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
    Contributed by Fred Fish (fnf@cygnus.com).
 
 This file is part of GCC.
@@ -21,7 +21,7 @@  along with GCC; see the file COPYING3.  
 
 /* Augment i386/unix.h version to return 8-byte vectors in memory, matching
    Sun Studio compilers until version 12, the only ones supported on
-   Solaris 8 and 9.  */
+   Solaris 9.  */
 #undef TARGET_SUBTARGET_DEFAULT
 #define TARGET_SUBTARGET_DEFAULT \
 	(MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_VECT8_RETURNS)
@@ -63,7 +63,7 @@  along with GCC; see the file COPYING3.  
 
 #define ASM_CPU_SPEC ""
  
-/* Don't include ASM_PIC_SPEC.  While the Solaris 8 and 9 assembler accepts
+/* Don't include ASM_PIC_SPEC.  While the Solaris 9 assembler accepts
    -K PIC, it gives many warnings:
 	R_386_32 relocation is used for symbol "<symbol>"
    GNU as doesn't recognize -K at all.  */
diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h
--- a/gcc/config/sol2.h
+++ b/gcc/config/sol2.h
@@ -1,6 +1,6 @@ 
 /* Operating system specific defines to be used when targeting GCC for any
    Solaris 2 system.
-   Copyright 2002, 2003, 2004, 2007, 2008, 2009, 2010, 2011
+   Copyright 2002, 2003, 2004, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -173,7 +173,6 @@  along with GCC; see the file COPYING3.  
    %{static:-dn -Bstatic} \
    %{shared:-G -dy %{!mimpure-text:-z text}} \
    %{symbolic:-Bsymbolic -G -dy -z text} \
-   %{pthreads|pthread|fprofile-generate*:" LIB_THREAD_LDFLAGS_SPEC "} \
    %(link_arch) \
    %{Qy:} %{!Qn:-Qy}"
 
diff --git a/gcc/configure.ac b/gcc/configure.ac
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2345,15 +2345,6 @@  else
       hppa64*-*-hpux* | ia64*-*-hpux*)
 	gcc_cv_ld_hidden=yes
 	;;
-      *-*-solaris2.8*)
-        # .hidden support was backported to Solaris 8, starting with ld
-	# version 1.276.
-	if test "$ld_vers_minor" -ge 276; then
-	  gcc_cv_ld_hidden=yes
-	else
-	  gcc_cv_ld_hidden=no
-	fi
-	;;
       *-*-solaris2.9* | *-*-solaris2.1[0-9]*)
 	# Support for .hidden in Sun ld appeared in Solaris 9 FCS, but
 	# .symbolic was only added in Solaris 9 12/02.
@@ -3170,10 +3161,9 @@  else
   [set_have_as_tls=yes])
 fi
 case "$target" in
-  # TLS was introduced in the Solaris 9 FCS release and backported to
-  # Solaris 8 patches.  Support for GNU-style TLS on x86 was only
-  # introduced in Solaris 9 4/04, replacing the earlier Sun style that Sun
-  # ld and GCC don't support any longer.
+  # TLS was introduced in the Solaris 9 FCS release.  Support for GNU-style
+  # TLS on x86 was only introduced in Solaris 9 4/04, replacing the earlier
+  # Sun style that Sun ld and GCC don't support any longer.
   *-*-solaris2.*)
     AC_MSG_CHECKING(linker and ld.so.1 TLS support)
     ld_tls_support=no
@@ -3184,14 +3174,6 @@  case "$target" in
       ld_tls_support=yes
     else
       case "$target" in
-        # Solaris 8/x86 ld has GNU style TLS support since version 1.280.
-        i?86-*-solaris2.8)
-          min_tls_ld_vers_minor=280
-          ;;
-        # Solaris 8/SPARC ld has TLS support since version 1.272.
-        sparc*-*-solaris2.8)
-          min_tls_ld_vers_minor=272
-          ;;
 	# Solaris 9/x86 ld has GNU style TLS support since version 1.374.
         i?86-*-solaris2.9)
           min_tls_ld_vers_minor=374
@@ -3215,28 +3197,6 @@  case "$target" in
     LIBS=
     LDFLAGS=
 
-    AC_MSG_CHECKING(alternate thread library)
-    case "$target" in
-      # TLS support was backported to Solaris 8 patches, but only lives in
-      # the alternate thread library which became the default in Solaris 9. 
-      # We want to always use that, irrespective of TLS support.
-      *-*-solaris2.8)
-        # Take multilib subdir into account.  There's no spec to handle
-	# this.  The 64 symlink exists since Solaris 8.
-        lwp_dir=/usr/lib/lwp
-	lwp_spec="-L$lwp_dir%{m64:/64} -R$lwp_dir%{m64:/64}"
-        LDFLAGS="-L$lwp_dir -R$lwp_dir"
-        ;;
-      *-*-solaris2*)
-        lwp_dir="none"
-	lwp_spec=""
-	;;
-    esac    
-    # Always define LIB_THREAD_LDFLAGS_SPEC, even without TLS support.
-    AC_DEFINE_UNQUOTED(LIB_THREAD_LDFLAGS_SPEC, "$lwp_spec",
-        [Define to the linker flags to use for -pthread.])
-    AC_MSG_RESULT($lwp_dir)
-
     AC_MSG_CHECKING(library containing $tga_func)
     # Before Solaris 10, __tls_get_addr (SPARC/x64) resp. ___tls_get_addr
     # (32-bit x86) only lived in libthread, so check for that.  Keep
@@ -3246,13 +3206,6 @@  case "$target" in
     if test $set_have_as_tls = no; then
       LIBS=
     fi
-    # Even without TLS support on Solaris 8, explicitly link with libthread
-    # to guarantee that the alternate thread library is used.
-    case "$target" in
-      *-*-solaris2.8)
-	LIBS=-lthread
-	;;
-    esac
     # Always define LIB_TLS_SPEC, even without TLS support.
     AC_DEFINE_UNQUOTED(LIB_TLS_SPEC, "$LIBS",
         [Define to the library containing __tls_get_addr/___tls_get_addr.])
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -3014,7 +3014,7 @@  information are.
 @item
 @uref{#ix86-x-linux,,i?86-*-linux*}
 @item
-@uref{#ix86-x-solaris289,,i?86-*-solaris2.[89]}
+@uref{#ix86-x-solaris289,,i?86-*-solaris2.9}
 @item
 @uref{#ix86-x-solaris210,,i?86-*-solaris2.10}
 @item
@@ -3551,8 +3551,8 @@  found on @uref{http://www.bitwizard.nl/s
 @html
 <hr />
 @end html
-@heading @anchor{ix86-x-solaris289}i?86-*-solaris2.[89]
-The Sun assembler in Solaris 8 and 9 has several bugs and limitations.
+@heading @anchor{ix86-x-solaris29}i?86-*-solaris2.9
+The Sun assembler in Solaris 9 has several bugs and limitations.
 While GCC works around them, several features are missing, so it is
 @c FIXME: which ones?
 recommended to use the GNU assembler instead.  There is no bundled
@@ -3562,9 +3562,9 @@  work.
 Solaris@tie{}2/x86 doesn't support the execution of SSE/SSE2 instructions
 before Solaris@tie{}9 4/04, even if the CPU supports them.  Programs will
 receive @code{SIGILL} if they try.  The fix is available both in
-Solaris@tie{}9 Update@tie{}6 and kernel patch 112234-12 or newer.  There is no
-corresponding patch for Solaris 8.  To avoid this problem,
-@option{-march} defaults to @samp{pentiumpro} on Solaris 8 and 9.  If
+Solaris@tie{}9 Update@tie{}6 and kernel patch 112234-12 or newer.  To
+avoid this problem,
+@option{-march} defaults to @samp{pentiumpro} on Solaris 9.  If
 you have the patch installed, you can configure GCC with an appropriate
 @option{--with-arch} option, but need GNU @command{as} for SSE2 support.
 
@@ -4066,9 +4066,8 @@  supported as cross-compilation target on
 @c alone is too unspecific and must be avoided.
 @heading @anchor{x-x-solaris2}*-*-solaris2*
 
-Support for Solaris 8 has been obsoleted in GCC 4.7, but can still be
-enabled by configuring with @option{--enable-obsolete}.  Support will be
-removed in GCC 4.8.  Support for Solaris 7 has been removed in GCC 4.6.
+Support for Solaris 8 has removed in GCC 4.8.  Support for Solaris 7 has
+been removed in GCC 4.6.
 
 Sun does not ship a C compiler with Solaris 2 before Solaris 10, though
 you can download the Sun Studio compilers for free.  In Solaris 10 and
@@ -4141,13 +4140,6 @@  newer: @command{g++} will complain that 
 assume that omitting the type means @code{int}; this assumption worked for
 C90 but is wrong for C++, and is now wrong for C99 also.
 
-@command{g++} accepts such (invalid) constructs with the option
-@option{-fpermissive}; it will assume that any missing type is @code{int}
-(as defined by C90).
-
-There are patches for Solaris 8 (108652-24 or newer for SPARC,
-108653-22 for Intel) that fix this bug.
-
 Sun bug 4927647 sometimes causes random spurious testsuite failures
 related to missing diagnostic output.  This bug doesn't affect GCC
 itself, rather it is a kernel bug triggered by the @command{expect}
@@ -4155,27 +4147,19 @@  program which is used only by the GCC te
 causes the @command{expect} program to miss anticipated output, extra
 testsuite failures appear.
 
-There are patches for Solaris 8 (117350-12 or newer for SPARC,
-117351-12 or newer for Intel) and Solaris 9 (117171-11 or newer for
+There are patches for Solaris 9 (117171-11 or newer for
 SPARC, 117172-11 or newer for Intel) that address this problem.
 
-Solaris@tie{}8 provides an alternate implementation of the thread
-library @samp{libthread}.  It is required for TLS support and has
-been made the default in Solaris@tie{}9, so it is always used on
-Solaris@tie{}8.
-
-Thread-local storage (TLS) is supported in Solaris@tie{}8 and 9, but requires
+Thread-local storage (TLS) is supported in Solaris@tie{}9, but requires
 some patches.  The @samp{libthread} patches provide the
 @code{__tls_get_addr} (SPARC, 64-bit x86) resp.@ @code{___tls_get_addr}
-(32-bit x86) functions.  On Solaris@tie{}8, you need 108993-26 or newer on
-SPARC, 108994-26 or newer on Intel.  On Solaris@tie{}9, the necessary support
+(32-bit x86) functions.  On Solaris@tie{}9, the necessary support
 on SPARC is present since FCS, while 114432-05 or newer is required on
-Intel.  Additionally, on Solaris@tie{}8, patch 109147-14 or newer on SPARC or
-109148-22 or newer on Intel are required for the Sun @command{ld} and
-runtime linker (@command{ld.so.1}) support.  Again, Solaris@tie{}9/SPARC
-works since FCS, while 113986-02 is required on Intel.  The linker
+Intel.  Additionally, on Solaris@tie{}9/x86, patch 113986-02 or newer is
+required for the Sun @command{ld} and runtime linker (@command{ld.so.1})
+support, while Solaris@tie{}9/SPARC works since FCS.  The linker
 patches must be installed even if GNU @command{ld} is used. Sun
-@command{as} in Solaris@tie{}8 and 9 doesn't support the necessary
+@command{as} in Solaris@tie{}9 doesn't support the necessary
 relocations, so GNU @command{as} must be used.  The @command{configure}
 script checks for those prerequisites and automatically enables TLS
 support if they are met.  Although those minimal patch versions should
diff --git a/gcc/testsuite/g++.dg/warn/miss-format-1.C b/gcc/testsuite/g++.dg/warn/miss-format-1.C
--- a/gcc/testsuite/g++.dg/warn/miss-format-1.C
+++ b/gcc/testsuite/g++.dg/warn/miss-format-1.C
@@ -4,7 +4,7 @@ 
 /* { dg-options "-Wmissing-format-attribute" } */
 /* { dg-options "-Wmissing-format-attribute -Wno-abi" { target arm_eabi } } */
 /* VxWorks does not provide vscanf, either in kernel or RTP mode.  */
-/* { dg-error "not declared" "" { target { *-*-solaris2.8 *-*-vxworks* } } 26 } */
+/* { dg-error "not declared" "" { target *-*-vxworks* } 26 } */
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -23,7 +23,7 @@  bar (const char *fmt, ...)
 {
   va_list ap;
   va_start (ap, fmt);
-  vscanf (fmt, ap); /* { dg-warning "candidate" "scanf attribute warning" { xfail *-*-solaris2.8 *-*-vxworks* } } */
+  vscanf (fmt, ap); /* { dg-warning "candidate" "scanf attribute warning" { xfail *-*-vxworks* } } */
   va_end (ap);
 }
 
diff --git a/gcc/testsuite/gcc.dg/c99-stdint-6.c b/gcc/testsuite/gcc.dg/c99-stdint-6.c
--- a/gcc/testsuite/gcc.dg/c99-stdint-6.c
+++ b/gcc/testsuite/gcc.dg/c99-stdint-6.c
@@ -2,7 +2,7 @@ 
    with any system <inttypes.h> header.  */
 /* { dg-do compile { target inttypes_types } } */
 /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
-/* { dg-options "-std=gnu99 -pedantic-errors -DNO_FAST_TYPES" { target *-*-solaris2.[89]* } } */
+/* { dg-options "-std=gnu99 -pedantic-errors -DNO_FAST_TYPES" { target *-*-solaris2.9* } } */
 
 #include <inttypes.h>
 #ifndef SIGNAL_SUPPRESS
diff --git a/gcc/testsuite/gcc.dg/lto/20090210_0.c b/gcc/testsuite/gcc.dg/lto/20090210_0.c
--- a/gcc/testsuite/gcc.dg/lto/20090210_0.c
+++ b/gcc/testsuite/gcc.dg/lto/20090210_0.c
@@ -2,7 +2,7 @@ 
 /* { dg-require-effective-target fpic } */
 /* { dg-suppress-ld-options {-fPIC} }  */
 /* { dg-require-effective-target tls_runtime } */
-/* { dg-extra-ld-options "-pthread" { target *-*-solaris2.[89] } } */
+/* { dg-extra-ld-options "-pthread" { target *-*-solaris2.9 } } */
 int foo (int x)
 {
   return x;
diff --git a/gcc/testsuite/gcc.dg/pr28796-2.c b/gcc/testsuite/gcc.dg/pr28796-2.c
--- a/gcc/testsuite/gcc.dg/pr28796-2.c
+++ b/gcc/testsuite/gcc.dg/pr28796-2.c
@@ -2,7 +2,6 @@ 
 /* { dg-options "-O2 -funsafe-math-optimizations -fno-finite-math-only -DUNSAFE" } */
 /* { dg-add-options ieee } */
 /* { dg-skip-if "No Inf/NaN support" { spu-*-* } } */
-/* { dg-skip-if "Bug in _Q_dtoq" { sparc*-sun-solaris2.8 } } */
 
 #include "tg-tests.h"
 
diff --git a/gcc/testsuite/gcc.dg/pragma-init-fini-2.c b/gcc/testsuite/gcc.dg/pragma-init-fini-2.c
--- a/gcc/testsuite/gcc.dg/pragma-init-fini-2.c
+++ b/gcc/testsuite/gcc.dg/pragma-init-fini-2.c
@@ -2,7 +2,6 @@ 
 
 /* { dg-do link { target *-*-solaris2.* } } */
 /* { dg-options "-fpic" } */
-/* { dg-xfail-if "no .pushsection/.popsection" { i?86-*-solaris2.8 && { ! gas } } } */
 
 #include <stdio.h>
 
diff --git a/gcc/testsuite/gcc.dg/pragma-init-fini.c b/gcc/testsuite/gcc.dg/pragma-init-fini.c
--- a/gcc/testsuite/gcc.dg/pragma-init-fini.c
+++ b/gcc/testsuite/gcc.dg/pragma-init-fini.c
@@ -1,7 +1,6 @@ 
 /* Tests for #pragma init and #pragma fini.  */
 
 /* { dg-do run { target *-*-solaris2.* } } */
-/* { dg-skip-if "no .pushsection/.popsection" { i?86-*-solaris2.8 && { ! gas } } } */
 
 extern void abort ();
 
diff --git a/gcc/testsuite/gcc.dg/torture/pr47917.c b/gcc/testsuite/gcc.dg/torture/pr47917.c
--- a/gcc/testsuite/gcc.dg/torture/pr47917.c
+++ b/gcc/testsuite/gcc.dg/torture/pr47917.c
@@ -1,6 +1,6 @@ 
 /* { dg-do run } */
 /* { dg-options "-std=c99" } */
-/* { dg-options "-std=c99 -D_XOPEN_SOURCE=500" { target *-*-solaris2.[89] } } */
+/* { dg-options "-std=c99 -D_XOPEN_SOURCE=500" { target *-*-solaris2.9 } } */
 /* { dg-options "-std=gnu99" { target *-*-hpux* } } */
 /* { dg-additional-options "-D__USE_MINGW_ANSI_STDIO=1" { target *-*-mingw* } } */
 /* { dg-xfail-if "no C99 snprintf function" { *-*-hpux10* } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr22076.c b/gcc/testsuite/gcc.target/i386/pr22076.c
--- a/gcc/testsuite/gcc.target/i386/pr22076.c
+++ b/gcc/testsuite/gcc.target/i386/pr22076.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O2 -fomit-frame-pointer -flax-vector-conversions -mmmx" } */
-/* { dg-options "-O2 -fomit-frame-pointer -flax-vector-conversions -mmmx -mno-vect8-ret-in-mem" { target i?86-*-solaris2.[89] *-*-vxworks* } } */
+/* { dg-options "-O2 -fomit-frame-pointer -flax-vector-conversions -mmmx -mno-vect8-ret-in-mem" { target i?86-*-solaris2.9 *-*-vxworks* } } */
 
 #include <mmintrin.h>
 
diff --git a/gcc/testsuite/gcc.target/i386/pr22152.c b/gcc/testsuite/gcc.target/i386/pr22152.c
--- a/gcc/testsuite/gcc.target/i386/pr22152.c
+++ b/gcc/testsuite/gcc.target/i386/pr22152.c
@@ -1,6 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-options "-O2 -msse2" } */
-/* { dg-options "-O2 -msse2 -mno-vect8-ret-in-mem" { target i?86-*-solaris2.[89] *-*-vxworks* } } */
+/* { dg-options "-O2 -msse2 -mno-vect8-ret-in-mem" { target i?86-*-solaris2.9 *-*-vxworks* } } */
 /* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
 
 #include <mmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/vect8-ret.c b/gcc/testsuite/gcc.target/i386/vect8-ret.c
--- a/gcc/testsuite/gcc.target/i386/vect8-ret.c
+++ b/gcc/testsuite/gcc.target/i386/vect8-ret.c
@@ -1,5 +1,5 @@ 
 /* { dg-do compile { target ia32 } } */
-/* { dg-options "-mmmx" { target i?86-*-solaris2.[89] *-*-vxworks* } } */
+/* { dg-options "-mmmx" { target i?86-*-solaris2.9 *-*-vxworks* } } */
 /* { dg-options "-mmmx -mvect8-ret-in-mem" } */
 
 #include <mmintrin.h>
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -569,11 +569,11 @@  proc check_effective_target_pcc_bitfield
 # Add to FLAGS all the target-specific flags needed to use thread-local storage.
 
 proc add_options_for_tls { flags } {
-    # On Solaris 8 and 9, __tls_get_addr/___tls_get_addr only lives in
+    # On Solaris 9, __tls_get_addr/___tls_get_addr only lives in
     # libthread, so always pass -pthread for native TLS.
     # Need to duplicate native TLS check from
     # check_effective_target_tls_native to avoid recursion.
-    if { [istarget *-*-solaris2.\[89\]*] &&
+    if { [istarget *-*-solaris2.9*] &&
 	 [check_no_messages_and_pattern tls_native "!emutls" assembly {
 	     __thread int i;
 	     int f (void) { return i; }
diff --git a/libcpp/lex.c b/libcpp/lex.c
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -1,6 +1,6 @@ 
 /* CPP Library - lexical analysis.
    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
-   2011 Free Software Foundation, Inc.
+   2011, 2012 Free Software Foundation, Inc.
    Contributed by Per Bothner, 1994-95.
    Based on CCCP program by Paul Rubin, June 1986
    Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -267,7 +267,6 @@  search_line_acc_char (const uchar *s, co
 /* Disable on Solaris 2/x86 until the following problems can be properly
    autoconfed:
 
-   The Solaris 8 assembler cannot assemble SSE2/SSE4.2 insns.
    The Solaris 9 assembler cannot assemble SSE4.2 insns.
    Before Solaris 9 Update 6, SSE insns cannot be executed.
    The Solaris 10+ assembler tags objects with the instruction set
diff --git a/libgcc/config/i386/sol2-unwind.h b/libgcc/config/i386/sol2-unwind.h
--- a/libgcc/config/i386/sol2-unwind.h
+++ b/libgcc/config/i386/sol2-unwind.h
@@ -1,5 +1,5 @@ 
 /* DWARF2 EH unwinding support for AMD x86-64 and x86.
-   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2012 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -144,55 +144,23 @@  x86_fallback_frame_state (struct _Unwind
   mcontext_t *mctx;
   long new_cfa;
 
-  if (/* Solaris 8 - single-threaded
+  if (/* Solaris 9 - single-threaded
 	----------------------------
-	<sigacthandler+17>:  mov    0x10(%ebp),%esi
-	<sigacthandler+20>:  push   %esi
-	<sigacthandler+21>:  pushl  0xc(%ebp)
-	<sigacthandler+24>:  mov    0x8(%ebp),%ecx
-	<sigacthandler+27>:  push   %ecx
-	<sigacthandler+28>:  mov    offset(%ebx),%eax
-	<sigacthandler+34>:  call   *(%eax,%ecx,4)
-	<sigacthandler+37>:  add    $0xc,%esp        <--- PC
-	<sigacthandler+40>:  push   %esi ... */
-      (*(unsigned long *)(pc - 20) == 0x5610758b
-       && *(unsigned long *)(pc - 16) == 0x8b0c75ff
-       && *(unsigned long *)(pc - 12) == 0x8b51084d
-       && *(unsigned char *)(pc - 8)  == 0x83
-       && *(unsigned long *)(pc - 4)  == 0x8814ff00
-       && *(unsigned long *)(pc - 0)  == 0x560cc483)
-
-      || /* Solaris 8 - multi-threaded
-	   ---------------------------
-	   <__sighndlr+0>:      push   %ebp
-	   <__sighndlr+1>:      mov    %esp,%ebp
-	   <__sighndlr+3>:      pushl  0x10(%ebp)
-	   <__sighndlr+6>:      pushl  0xc(%ebp)
-	   <__sighndlr+9>:      pushl  0x8(%ebp)
-	   <__sighndlr+12>:     call   *0x14(%ebp)
-	   <__sighndlr+15>:     leave               <--- PC  */
-	 (*(unsigned long *)(pc - 15) == 0xffec8b55
-	  && *(unsigned long *)(pc - 11) == 0x75ff1075
-	  && *(unsigned long *)(pc - 7)  == 0x0875ff0c
-	  && *(unsigned long *)(pc - 3)  == 0xc91455ff)
-
-      || /* Solaris 9 - single-threaded
-	   ----------------------------
-           <sigacthandler+16>:    mov    0x244(%ebx),%ecx
-	   <sigacthandler+22>:    mov    0x8(%ebp),%eax
-	   <sigacthandler+25>:    mov    (%ecx,%eax,4),%ecx
-	   <sigacthandler+28>:    pushl  0x10(%ebp)
-	   <sigacthandler+31>:    pushl  0xc(%ebp)
-	   <sigacthandler+34>:    push   %eax
-	   <sigacthandler+35>:    call   *%ecx
-	   <sigacthandler+37>:    add    $0xc,%esp	<--- PC
-	   <sigacthandler+40>:    pushl  0x10(%ebp) */
-         (*(unsigned long *)(pc - 21) == 0x2448b8b
-	  && *(unsigned long *)(pc - 17) == 0x458b0000
-	  && *(unsigned long *)(pc - 13) == 0x810c8b08
-	  && *(unsigned long *)(pc - 9)  == 0xff1075ff
-	  && *(unsigned long *)(pc - 5)  == 0xff500c75
-	  && *(unsigned long *)(pc - 1)  == 0xcc483d1)
+         <sigacthandler+16>:    mov    0x244(%ebx),%ecx
+	 <sigacthandler+22>:    mov    0x8(%ebp),%eax
+	 <sigacthandler+25>:    mov    (%ecx,%eax,4),%ecx
+	 <sigacthandler+28>:    pushl  0x10(%ebp)
+	 <sigacthandler+31>:    pushl  0xc(%ebp)
+	 <sigacthandler+34>:    push   %eax
+	 <sigacthandler+35>:    call   *%ecx
+	 <sigacthandler+37>:    add    $0xc,%esp	<--- PC
+	 <sigacthandler+40>:    pushl  0x10(%ebp) */
+      (*(unsigned long *)(pc - 21) == 0x2448b8b
+       && *(unsigned long *)(pc - 17) == 0x458b0000
+       && *(unsigned long *)(pc - 13) == 0x810c8b08
+       && *(unsigned long *)(pc - 9)  == 0xff1075ff
+       && *(unsigned long *)(pc - 5)  == 0xff500c75
+       && *(unsigned long *)(pc - 1)  == 0xcc483d1)
 
       || /* Solaris 9 - multi-threaded, Solaris 10
 	   ---------------------------------------
diff --git a/libgcc/config/sparc/sol2-unwind.h b/libgcc/config/sparc/sol2-unwind.h
--- a/libgcc/config/sparc/sol2-unwind.h
+++ b/libgcc/config/sparc/sol2-unwind.h
@@ -36,44 +36,25 @@  see the files COPYING3 and COPYING.RUNTI
 static int
 sparc64_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
 {
-  if (/* Solaris 8 - single-threaded
+  if (/* Solaris 9 - single-threaded
 	----------------------------
-	<sigacthandler+24>:  add  %g5, %o7, %o2
-	<sigacthandler+28>:  ldx  [ %o2 + 0xfa0 ], %g5
-	<sigacthandler+32>:  sra  %i0, 0, %o0
-	<sigacthandler+36>:  sllx  %o0, 3, %g4
+	The pattern changes slightly in different versions of the
+	operating system, so we skip the comparison against pc[-6] for
+	Solaris 9.
+
+	<sigacthandler+24>:  sra  %i0, 0, %l1
+
+	Solaris 9 5/02:
+	<sigacthandler+28>:  ldx  [ %o2 + 0xf68 ], %g5
+	Solaris 9 9/05:
+	<sigacthandler+28>:  ldx  [ %o2 + 0xe50 ], %g5
+
+	<sigacthandler+32>:  sllx  %l1, 3, %g4
+	<sigacthandler+36>:  mov  %l1, %o0
 	<sigacthandler+40>:  ldx  [ %g4 + %g5 ], %l0
 	<sigacthandler+44>:  call  %l0
 	<sigacthandler+48>:  mov  %i2, %o2
-	<sigacthandler+52>:  cmp  %i3, 8	<--- PC  */
-      (   pc[-7] == 0x9401400f
-       && pc[-6] == 0xca5aafa0
-       && pc[-5] == 0x913e2000
-       && pc[-4] == 0x892a3003
-       && pc[-3] == 0xe0590005
-       && pc[-2] == 0x9fc40000
-       && pc[-1] == 0x9410001a
-       && pc[ 0] == 0x80a6e008)
-
-      || /* Solaris 9 - single-threaded
-	   ----------------------------
-	   The pattern changes slightly in different versions of the
-	   operating system, so we skip the comparison against pc[-6] for
-	   Solaris 9.
-
-	   <sigacthandler+24>:  sra  %i0, 0, %l1
-
-	   Solaris 9 5/02:
-	   <sigacthandler+28>:  ldx  [ %o2 + 0xf68 ], %g5
-	   Solaris 9 9/05:
-	   <sigacthandler+28>:  ldx  [ %o2 + 0xe50 ], %g5
-
-	   <sigacthandler+32>:  sllx  %l1, 3, %g4
-	   <sigacthandler+36>:  mov  %l1, %o0
-	   <sigacthandler+40>:  ldx  [ %g4 + %g5 ], %l0
-	   <sigacthandler+44>:  call  %l0
-	   <sigacthandler+48>:  mov  %i2, %o2
-	   <sigacthandler+52>:  cmp  %l1, 8	<--- PC  */
+	<sigacthandler+52>:  cmp  %l1, 8	<--- PC  */
       (   pc[-7] == 0xa33e2000
        /* skip pc[-6] */
        && pc[-5] == 0x892c7003
@@ -147,8 +128,7 @@  sparc64_is_sighandler (unsigned int *pc,
 	}
 
       else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x94100013)
-	/* This matches the call_user_handler pattern for Solaris 9 and
-	   for Solaris 8 running inside Solaris Containers respectively
+	/* This matches the call_user_handler pattern for Solaris 9.
 	   We need to move up three frames:
 
 		<signal handler>	<-- context->cfa
@@ -159,17 +139,6 @@  sparc64_is_sighandler (unsigned int *pc,
 	*/
 	*nframes = 3;
 
-      else /* cuh_pattern == 0xe0272010 */
-	/* This is the default Solaris 8 case.
-	   We need to move up two frames:
-
-		<signal handler>	<-- context->cfa
-		__sighndlr
-		sigacthandler
-		<kernel>
-	*/
-	*nframes = 2;
-
       return 1;
     }
 
@@ -211,8 +180,8 @@  sparc64_frob_update_context (struct _Unw
 static int
 sparc_is_sighandler (unsigned int *pc, void *cfa, int *nframes)
 {
-  if (/* Solaris 8, 9 - single-threaded
-        -------------------------------
+  if (/* Solaris 9 - single-threaded
+        ----------------------------
 	The pattern changes slightly in different versions of the operating
 	system, so we skip the comparison against pc[-6].
 
@@ -247,37 +216,6 @@  sparc_is_sighandler (unsigned int *pc, v
       return 1;
     }
 
-  if (/* Solaris 8 - multi-threaded
-	---------------------------
-	<__libthread_segvhdlr+212>:  clr  %o2
-	<__libthread_segvhdlr+216>:  ld  [ %fp + -28 ], %l0
-	<__libthread_segvhdlr+220>:  mov  %i4, %o0
-	<__libthread_segvhdlr+224>:  mov  %i1, %o1
-	<__libthread_segvhdlr+228>:  call  %l0
-	<__libthread_segvhdlr+232>:  mov  %i2, %o2
-	<__libthread_segvhdlr+236>:  ret		<--- PC
-	<__libthread_segvhdlr+240>:  restore
-	<__libthread_segvhdlr+244>:  cmp  %o1, 0  */
-         pc[-6] == 0x94102000
-      && pc[-5] == 0xe007bfe4
-      && pc[-4] == 0x9010001c
-      && pc[-3] == 0x92100019
-      && pc[-2] == 0x9fc40000
-      && pc[-1] == 0x9410001a
-      && pc[ 0] == 0x81c7e008
-      && pc[ 1] == 0x81e80000
-      && pc[ 2] == 0x80a26000)
-    {
-      /* We need to move up one frame:
-
-		<signal handler>	<-- context->cfa
-		__libthread_segvhdlr
-		<kernel>
-      */
-      *nframes = 1;
-      return 1;
-    }
-
   if(/* Solaris 8+ - multi-threaded
        ----------------------------
        <__sighndlr>:	save  %sp, -96, %sp
@@ -332,8 +270,7 @@  sparc_is_sighandler (unsigned int *pc, v
 	}
 
       else if (cuh_pattern == 0x9410001a || cuh_pattern == 0x9410001b)
-	/* This matches the call_user_handler pattern for Solaris 9 and
-	   for Solaris 8 running inside Solaris Containers respectively.
+	/* This matches the call_user_handler pattern for Solaris 9.
 	   We need to move up three frames:
 
 		<signal handler>	<-- context->cfa
@@ -344,17 +281,6 @@  sparc_is_sighandler (unsigned int *pc, v
 	*/
 	*nframes = 3;
 
-      else /* cuh_pattern == 0x90100018 */
-	/* This is the default Solaris 8 case.
-	   We need to move up two frames:
-
-		<signal handler>	<-- context->cfa
-		__sighndlr
-		sigacthandler
-		<kernel>
-	*/
-	*nframes = 2;
-
       return 1;
     }
 
diff --git a/libgo/configure.ac b/libgo/configure.ac
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -282,8 +282,8 @@  AC_SUBST(GO_SYSCALL_OS_ARCH_FILE)
 dnl Special flags used to generate sysinfo.go.
 OSCFLAGS="-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 case "$target" in
-    *-*-solaris2.[[89]])
-	# Solaris 8/9 need this so struct msghdr gets the msg_control
+    *-*-solaris2.9)
+	# Solaris 9 needs this so struct msghdr gets the msg_control
 	# etc. fields in <sys/socket.h> (_XPG4_2).
 	OSCFLAGS="$OSCFLAGS -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D__EXTENSIONS__"
 	;;
@@ -623,7 +623,7 @@  fi
 dnl Check if makecontext expects the uc_stack member of ucontext to point
 dnl to the top of the stack.
 case "$target" in
-  sparc*-*-solaris2.[[89]]*)
+  sparc*-*-solaris2.9*)
     libgo_cv_lib_makecontext_stack_top=yes
     ;;
   *)
diff --git a/libjava/configure.ac b/libjava/configure.ac
--- a/libjava/configure.ac
+++ b/libjava/configure.ac
@@ -1086,16 +1086,8 @@  case "$THREADS" in
 	THREADLIBS='-lpthread -lrt'
 	THREADSPEC='-lpthread -lrt'
 	;;
-     *-*-solaris2.8)
-	# Always use alternate thread library on Solaris 8.  Need libthread
-	# for TLS support.
-	# Need -Wl,-R to get it through libtool ...
-	THREADLIBS='-L/usr/lib/lwp$(MULTISUBDIR) -Wl,-R -Wl,/usr/lib/lwp$(MULTISUBDIR) -lpthread -lthread'
-	# ... while ld only accepts -R.
-	THREADSPEC='-L/usr/lib/lwp%{m64:/64} -R/usr/lib/lwp%{m64:/64} -lpthread -lthread'
-        ;;
      *-*-solaris2.9)
-	# As on Solaris 8, need libthread for TLS support.
+	# Need libthread for TLS support.
 	THREADLIBS='-lpthread -lthread'
 	THREADSPEC='-lpthread -lthread'
 	;;
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -1715,100 +1715,6 @@  AC_DEFUN([GLIBCXX_COMPUTE_STDIO_INTEGER_
 ])
 
 dnl
-dnl Check whether required C++ overloads are present in <math.h>.
-dnl
-
-AC_DEFUN([GLIBCXX_CHECK_MATH_PROTO], [
-
-  AC_LANG_SAVE
-  AC_LANG_CPLUSPLUS
-
-  case "$host" in
-    *-*-solaris2.*)
-      # Solaris 8 FCS only had an overload for double std::abs(double) in
-      # <iso/math_iso.h>.  Patches 111721-04 (SPARC) and 112757-01 (x86)
-      # introduced the full set also found from Solaris 9 onwards.
-      AC_MSG_CHECKING([for float std::abs(float) overload])
-      AC_CACHE_VAL(glibcxx_cv_abs_float, [
-	AC_COMPILE_IFELSE([AC_LANG_SOURCE(
-	  [#include <math.h>
-	   namespace std {
-	     inline float abs(float __x)
-	     {  return __builtin_fabsf(__x); }
-	   }
-	])],
-	[glibcxx_cv_abs_float=no],
-	[glibcxx_cv_abs_float=yes]
-      )])
-
-      # autoheader cannot handle indented templates.
-      AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO1],
-	[/* Define if all C++ overloads are available in <math.h>.  */
-#if __cplusplus >= 199711L
-#undef __CORRECT_ISO_CPP_MATH_H_PROTO1
-#endif])
-      AH_VERBATIM([__CORRECT_ISO_CPP_MATH_H_PROTO2],
-	[/* Define if only double std::abs(double) is available in <math.h>.  */
-#if __cplusplus >= 199711L
-#undef __CORRECT_ISO_CPP_MATH_H_PROTO2
-#endif])
-
-      if test $glibcxx_cv_abs_float = yes; then
-	AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO1)
-      else
-	AC_DEFINE(__CORRECT_ISO_CPP_MATH_H_PROTO2)
-      fi
-      AC_MSG_RESULT($glibcxx_cv_abs_float)
-      ;;
-  esac
-
-  AC_LANG_RESTORE
-])
-
-dnl
-dnl Check whether required C++ overloads are present in <stdlib.h>.
-dnl
-
-AC_DEFUN([GLIBCXX_CHECK_STDLIB_PROTO], [
-
-  AC_LANG_SAVE
-  AC_LANG_CPLUSPLUS
-
-  case "$host" in
-    *-*-solaris2.*)
-      # Solaris 8 FCS lacked the overloads for long std::abs(long) and
-      # ldiv_t std::div(long, long) in <iso/stdlib_iso.h>.  Patches 109607-02
-      # (SPARC) and 109608-02 (x86) introduced them.
-      AC_MSG_CHECKING([for long std::abs(long) overload])
-      AC_CACHE_VAL(glibcxx_cv_abs_long, [
-	AC_COMPILE_IFELSE([AC_LANG_SOURCE(
-	  [#include <stdlib.h>
-	   namespace std {
-	     inline long
-	     abs(long __i) { return labs(__i); }
-	   }
-	])],
-	[glibcxx_cv_abs_long=no],
-	[glibcxx_cv_abs_long=yes]
-      )])
-
-      # autoheader cannot handle indented templates.
-      AH_VERBATIM([__CORRECT_ISO_CPP_STDLIB_H_PROTO],
-	[/* Define if all C++ overloads are available in <stdlib.h>.  */
-#if __cplusplus >= 199711L
-#undef __CORRECT_ISO_CPP_STDLIB_H_PROTO
-#endif])
-      if test $glibcxx_cv_abs_long = yes; then
-	AC_DEFINE(__CORRECT_ISO_CPP_STDLIB_H_PROTO, 1)
-      fi
-      AC_MSG_RESULT($glibcxx_cv_abs_long)
-      ;;
-  esac
-
-  AC_LANG_RESTORE
-])
-
-dnl
 dnl Check whether required C++ overloads are present in <stdio.h>.
 dnl
 AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
@@ -3401,9 +3307,9 @@  AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
       #error
       #endif
     ], [case $target_os in
-	  # gthreads support breaks symbol versioning on Solaris 8/9 (PR
+	  # gthreads support breaks symbol versioning on Solaris 9 (PR
 	  # libstdc++/52189).
-          solaris2.[[89]]*)
+          solaris2.9*)
 	    if test x$enable_symvers = xno; then
 	      ac_has_gthreads=yes
 	    elif test x$enable_libstdcxx_threads = xyes; then
diff --git a/libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.9/baseline_symbols.txt
rename from libstdc++-v3/config/abi/post/solaris2.8/baseline_symbols.txt
rename to libstdc++-v3/config/abi/post/solaris2.9/baseline_symbols.txt
diff --git a/libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt
rename from libstdc++-v3/config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt
rename to libstdc++-v3/config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt
diff --git a/libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h b/libstdc++-v3/config/os/solaris/solaris2.9/ctype_base.h
rename from libstdc++-v3/config/os/solaris/solaris2.8/ctype_base.h
rename to libstdc++-v3/config/os/solaris/solaris2.9/ctype_base.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc b/libstdc++-v3/config/os/solaris/solaris2.9/ctype_configure_char.cc
rename from libstdc++-v3/config/os/solaris/solaris2.8/ctype_configure_char.cc
rename to libstdc++-v3/config/os/solaris/solaris2.9/ctype_configure_char.cc
diff --git a/libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h b/libstdc++-v3/config/os/solaris/solaris2.9/ctype_inline.h
rename from libstdc++-v3/config/os/solaris/solaris2.8/ctype_inline.h
rename to libstdc++-v3/config/os/solaris/solaris2.9/ctype_inline.h
diff --git a/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h b/libstdc++-v3/config/os/solaris/solaris2.9/os_defines.h
rename from libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
rename to libstdc++-v3/config/os/solaris/solaris2.9/os_defines.h
--- a/libstdc++-v3/config/os/solaris/solaris2.8/os_defines.h
+++ b/libstdc++-v3/config/os/solaris/solaris2.9/os_defines.h
@@ -1,6 +1,7 @@ 
-// Specific definitions for Solaris 8+  -*- C++ -*-
+// Specific definitions for Solaris 9+  -*- C++ -*-
 
-// Copyright (C) 2000, 2002, 2005, 2009, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2002, 2005, 2009, 2011, 2012
+// 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
@@ -29,11 +30,8 @@ 
 // file will come before all others.
 
 #if __cplusplus >= 199711L
-// Overloads in <iso/math_iso.h> and <iso/stdlib_iso.h> changed with
-// Solaris 8 patches.  Since <bits/c++config.h> includes
-// <bits/os_defines.h> before configure results,
-// __CORRECT_ISO_CPP_MATH_H_PROTO[12] and __CORRECT_ISO_CPP_STDLIB_H_PROTO
-// must be defined via acinclude.m4.
+#define __CORRECT_ISO_CPP_MATH_H_PROTO
+#define __CORRECT_ISO_CPP_STDLIB_H_PROTO
 #define __CORRECT_ISO_CPP_STRING_H_PROTO
 #define __CORRECT_ISO_CPP_WCHAR_H_PROTO
 #endif
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -134,8 +134,6 @@  GLIBCXX_ENABLE_PYTHON
 GLIBCXX_ENABLE_WERROR([yes])
 
 # Checks for operating systems support that doesn't require linking.
-GLIBCXX_CHECK_MATH_PROTO
-GLIBCXX_CHECK_STDLIB_PROTO
 GLIBCXX_CHECK_STDIO_PROTO
 GLIBCXX_CHECK_SYSTEM_ERROR
 
diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host
--- a/libstdc++-v3/configure.host
+++ b/libstdc++-v3/configure.host
@@ -280,8 +280,8 @@  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.8"
+  solaris2.9 | solaris2.1[0-9])
+    os_include_dir="os/solaris/solaris2.9"
     ;;
   tpf)
     os_include_dir="os/tpf"
@@ -332,8 +332,8 @@  case "${host}" in
   powerpc*-*-darwin*)
     port_specific_symbol_files="\$(srcdir)/../config/os/bsd/darwin/ppc-extra.ver"
     ;;
-  *-*-solaris2.[89])
-    abi_baseline_pair=solaris2.8
+  *-*-solaris2.9)
+    abi_baseline_pair=solaris2.9
     abi_baseline_subdir_switch=--print-multi-os-directory
     ;;
   *-*-solaris2.1[0-9])
diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4
--- a/libstdc++-v3/crossconfig.m4
+++ b/libstdc++-v3/crossconfig.m4
@@ -198,7 +198,7 @@  case "${host}" in
     ;;
   *-solaris*)
     case "$target" in
-      *-solaris2.8 | *-solaris2.9 | *-solaris2.10)
+      *-solaris2.9 | *-solaris2.10)
          GLIBCXX_CHECK_LINKER_FEATURES
          AC_DEFINE(HAVE_MBSTATE_T)
          AC_DEFINE(HAVE_FINITE)
diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml
--- a/libstdc++-v3/doc/xml/manual/configure.xml
+++ b/libstdc++-v3/doc/xml/manual/configure.xml
@@ -164,7 +164,7 @@ 
  <varlistentry><term><code>--enable-libstdcxx-threads</code></term>
  <listitem><para>Enable C++11 threads support.  If not explicitly specified,
         the  configure process enables it if possible.  It defaults to 'off'
-	on Solaris 8 and 9, where it would break symbol versioning.   This
+	on Solaris 9, where it would break symbol versioning.   This
 	option can change the library ABI.
      </para>
  </listitem></varlistentry>
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
@@ -1,7 +1,7 @@ 
 // -*- C++ -*- C forwarding header.
 
 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011
+// 2006, 2007, 2008, 2009, 2010, 2011, 2012
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -78,14 +78,13 @@  namespace std _GLIBCXX_VISIBILITY(defaul
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
-#if !defined(__CORRECT_ISO_CPP_MATH_H_PROTO1) \
-  && !defined(__CORRECT_ISO_CPP_MATH_H_PROTO2)
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR double
   abs(double __x)
   { return __builtin_fabs(__x); }
 #endif
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   abs(float __x)
   { return __builtin_fabsf(__x); }
@@ -104,7 +103,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::acos;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   acos(float __x)
   { return __builtin_acosf(__x); }
@@ -123,7 +122,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::asin;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   asin(float __x)
   { return __builtin_asinf(__x); }
@@ -142,7 +141,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::atan;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   atan(float __x)
   { return __builtin_atanf(__x); }
@@ -161,7 +160,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::atan2;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   atan2(float __y, float __x)
   { return __builtin_atan2f(__y, __x); }
@@ -182,7 +181,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::ceil;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   ceil(float __x)
   { return __builtin_ceilf(__x); }
@@ -201,7 +200,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::cos;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   cos(float __x)
   { return __builtin_cosf(__x); }
@@ -220,7 +219,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::cosh;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   cosh(float __x)
   { return __builtin_coshf(__x); }
@@ -239,7 +238,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::exp;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   exp(float __x)
   { return __builtin_expf(__x); }
@@ -258,7 +257,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::fabs;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   fabs(float __x)
   { return __builtin_fabsf(__x); }
@@ -277,7 +276,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::floor;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   floor(float __x)
   { return __builtin_floorf(__x); }
@@ -296,7 +295,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::fmod;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   fmod(float __x, float __y)
   { return __builtin_fmodf(__x, __y); }
@@ -317,7 +316,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::frexp;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline float
   frexp(float __x, int* __exp)
   { return __builtin_frexpf(__x, __exp); }
@@ -336,7 +335,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::ldexp;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   ldexp(float __x, int __exp)
   { return __builtin_ldexpf(__x, __exp); }
@@ -355,7 +354,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::log;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   log(float __x)
   { return __builtin_logf(__x); }
@@ -374,7 +373,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::log10;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   log10(float __x)
   { return __builtin_log10f(__x); }
@@ -393,7 +392,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::modf;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline float
   modf(float __x, float* __iptr)
   { return __builtin_modff(__x, __iptr); }
@@ -405,7 +404,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::pow;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   pow(float __x, float __y)
   { return __builtin_powf(__x, __y); }
@@ -442,7 +441,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::sin;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   sin(float __x)
   { return __builtin_sinf(__x); }
@@ -461,7 +460,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::sinh;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   sinh(float __x)
   { return __builtin_sinhf(__x); }
@@ -480,7 +479,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::sqrt;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   sqrt(float __x)
   { return __builtin_sqrtf(__x); }
@@ -499,7 +498,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::tan;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   tan(float __x)
   { return __builtin_tanf(__x); }
@@ -518,7 +517,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   using ::tanh;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline _GLIBCXX_CONSTEXPR float
   tanh(float __x)
   { return __builtin_tanhf(__x); }
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
@@ -1,6 +1,6 @@ 
 // TR1 cmath -*- C++ -*-
 
-// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
+// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -563,12 +563,12 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
   // Note: we deal with fabs in a special way, because an using std::fabs
   // would bring in also the overloads for complex types, which in C++0x
   // mode have a different return type.
-  // With __CORRECT_ISO_CPP_MATH_H_PROTO1, math.h imports std::fabs in the
+  // With __CORRECT_ISO_CPP_MATH_H_PROTO, math.h imports std::fabs in the
   // global namespace after the declarations of the float / double / long
   // double overloads but before the std::complex overloads.
   using ::fabs;
 
-#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO1
+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
   inline float
   fabs(float __x)
   { return __builtin_fabsf(__x); }
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc
@@ -1,7 +1,7 @@ 
 // 1999-04-12 bkoz
 
 // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009,
-// 2010
+// 2010, 2012
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -21,10 +21,10 @@ 
 
 // 27.6.1.2.2 arithmetic extractors
 
-// XXX This test fails on Solaris 8 and 9 because of a bug in libc
+// XXX This test fails on Solaris 9 because of a bug in libc
 // XXX sscanf for very long input.  See:
 // XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html
-// { dg-do run { xfail { { *-*-solaris2.[89] } || lax_strtofp } } }
+// { dg-do run { xfail { { *-*-solaris2.9 } || lax_strtofp } } }
 
 #include <istream>
 #include <sstream>
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc
@@ -1,4 +1,4 @@ 
-// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2012
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -18,10 +18,10 @@ 
 
 // 27.6.1.2.2 arithmetic extractors
 
-// XXX This test fails on Solaris 8 and 9 because of a bug in libc
+// XXX This test fails on Solaris 9 because of a bug in libc
 // XXX sscanf for very long input.  See:
 // XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html
-// { dg-do run { xfail { { *-*-solaris2.[89] } || lax_strtofp } } }
+// { dg-do run { xfail { { *-*-solaris2.9 } || lax_strtofp } } }
 
 #include <istream>
 #include <sstream>
diff --git a/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc b/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
--- a/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
+++ b/libstdc++-v3/testsuite/ext/enc_filebuf/char/13598.cc
@@ -1,10 +1,11 @@ 
 // Before Solaris 11, iconv -f ISO-8859-1 -t ISO-8859-1 fails with
 // Not supported ISO-8859-1 to ISO-8859-1
 //
-// { dg-do run { xfail *-*-solaris2.[89] *-*-solaris2.10 } }
+// { dg-do run { xfail *-*-solaris2.9 *-*-solaris2.10 } }
 // { dg-require-iconv "ISO-8859-1" }
 
-// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2012
+// Free Software Foundation
 //
 // 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