summaryrefslogtreecommitdiffstats
path: root/contrib/crossrpms/patches/gcc-core-4.2-20061031-rtems4.8-20061109.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/crossrpms/patches/gcc-core-4.2-20061031-rtems4.8-20061109.diff')
-rw-r--r--contrib/crossrpms/patches/gcc-core-4.2-20061031-rtems4.8-20061109.diff902
1 files changed, 902 insertions, 0 deletions
diff --git a/contrib/crossrpms/patches/gcc-core-4.2-20061031-rtems4.8-20061109.diff b/contrib/crossrpms/patches/gcc-core-4.2-20061031-rtems4.8-20061109.diff
new file mode 100644
index 0000000000..dd3c3e4206
--- /dev/null
+++ b/contrib/crossrpms/patches/gcc-core-4.2-20061031-rtems4.8-20061109.diff
@@ -0,0 +1,902 @@
+diff -uNr gcc-4.2-20061031.orig/gcc/builtins.def gcc-4.2-20061031/gcc/builtins.def
+--- gcc-4.2-20061031.orig/gcc/builtins.def 2006-10-09 18:27:14.000000000 +0200
++++ gcc-4.2-20061031/gcc/builtins.def 2006-11-09 10:14:51.000000000 +0100
+@@ -255,9 +255,9 @@
+ DEF_LIB_BUILTIN (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+ DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+ DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+-DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+-DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+-DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
++DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
++DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
++DEF_EXT_LIB_BUILTIN (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+ DEF_GCC_BUILTIN (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LIST)
+ DEF_GCC_BUILTIN (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LIST)
+ DEF_GCC_BUILTIN (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LIST)
+@@ -291,9 +291,9 @@
+ DEF_GCC_BUILTIN (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING)
+ DEF_GCC_BUILTIN (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING)
+ DEF_GCC_BUILTIN (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+-DEF_C99_BUILTIN (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+-DEF_C99_BUILTIN (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+-DEF_C99_BUILTIN (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
++DEF_C99_BUILTIN (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
++DEF_C99_BUILTIN (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
++DEF_C99_BUILTIN (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+ DEF_GCC_BUILTIN (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING)
+ DEF_GCC_BUILTIN (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING)
+ DEF_GCC_BUILTIN (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+diff -uNr gcc-4.2-20061031.orig/gcc/ChangeLog gcc-4.2-20061031/gcc/ChangeLog
+--- gcc-4.2-20061031.orig/gcc/ChangeLog 2006-10-30 09:03:50.000000000 +0100
++++ gcc-4.2-20061031/gcc/ChangeLog 2006-11-09 10:14:08.000000000 +0100
+@@ -1,3 +1,109 @@
++2006-11-08 Brooks Moses <brooks.moses@codesourcery.com>
++
++ * doc/invoke.texi: Minor formatting fixes in option lists.
++
++2006-11-08 Eric Christopher <echristo@apple.com>
++
++ Backport from mainline:
++ * config.gcc: Add x86_64-darwin host support.
++ * config.host: Ditto.
++ * config/i386/darwin64.h: New file.
++ * config/i386/t-darwin64: Ditto.
++
++2006-11-08 Janis Johnson <janis187@us.ibm.com>
++
++ * gcc/doc/sourcebuild.texi (Test Directives): Add output-exists
++ and output-exists-not.
++
++2006-11-07 Richard Guenther <rguenther@suse.de>
++
++ PR tree-optimization/29610
++ * tree-cfgcleanup.c (cleanup_control_flow): Honor return value
++ of tree_purge_dead_eh_edges as it may free dominators.
++
++ * g++.dg/other/pr29610.C: New testcase.
++
++2006-11-07 Jie Zhang <jie.zhang@analog.com>
++
++ * gcc.c (process_command): Treat -b as normal switch if its argument
++ has no dash.
++
++2006-11-06 Vladimir Prus <vladimir@codesourcery.com>
++
++ Backport from mainline:
++ * config/arm/t-strongarm-pe: (TARGET_LIBGCC2_CFLAGS): Do not
++ set inhibit_libc.
++ * config/arm/t-strongarm-elf: Likewise.
++ * config/arm/t-pe: Likewise.
++ * config/arm/t-arm-elf: Likewise.
++ * config/arm/t-xscale-elf: Likewise.
++ * config/arm/t-arm-coff: Likewise.
++ * config/arm/t-xscale-coff: Likewise.
++ * config/arm/t-wince-pe: Likewise.
++
++2006-11-06 Richard Guenther <rguenther@suse.de>
++
++ Backport from mainline:
++ 2006-10-21 Richard Guenther <rguenther@suse.de>
++
++ PR target/19116
++ * config/i386/i386.c (override_options): Do not set MASK_IEEE_FP
++ if flag_unsafe_math_optimizations is specified. We have
++ flag_finite_math_only for that.
++ * config/i386/i386.md (sqrtxf2): Do not require TARGET_IEEE_FP
++ or flag_unsafe_math_optimizations.
++
++ PR middle-end/28796
++ * simplify-rtx.c (simplify_const_relational_operation):
++ Do not constant-fold ORDERED and UNORDERED for
++ flag_unsafe_math_optimizations but only we do not need to
++ honor NaNs for the given mode.
++
++2006-11-05 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/29695
++ * fold-const.c (fold_ternary): Fix A < 0 ? <sign bit of A> : 0
++ simplification.
++
++2006-11-02 Brooks Moses <brooks.moses@codesourcery.com>
++
++ * doc/invoke.texi: Fix mfp-trap-mode typo.
++
++2006-11-02 Eric Botcazou <ebotcazou@libertysurf.fr>
++
++ * doc/install.texi (sparc-sun-solaris2*): Update GMP/MPFR build
++ instructions.
++ (sparc64-sun-solaris2*): Likewise.
++
++2006-11-02 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/29377
++ * config/h8300/h8300.c (h8300_emit_stack_adjustment): Change "size"
++ argument to HOST_WIDE_INT. Update function prototype.
++ (round_frame_size): Change return type to HOST_WIDE_INT. Change
++ "size" argument to HOST_WIDE_INT. Update function prototype.
++
++2006-11-01 Chris Johns <chris@contemporary.net.au>
++
++ PR bootstrap/28400
++ * Makefile.in (install-driver): Use exeext when installing
++ $target-gcc-$version.
++
++2006-11-01 Andrew Haley <aph@redhat.com>
++
++ * fold-const.c (fold_unary): Don't fold (t1)(t2) to (t1) if this
++ is a Java program.
++
++2006-11-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
++
++ * builtins.def (gamma, lgamma): Use ATTR_MATHFN_FPROUNDING_STORE.
++
++2006-10-31 Eric Botcazou <ebotcazou@libertysurf.fr>
++
++ PR target/24071
++ * gthr-posix.h (__gthread_active_p): New implementation on Solaris.
++ * gthr-posix95.h (__gthread_active_p): Likewise.
++
+ 2006-10-30 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/29637
+@@ -136,13 +242,13 @@
+ (init_alias_heapvars): Initialize nonlocal_for_type and
+ nonlocal_all.
+ (delete_alias_heapvars): Free nonlocal_for_type and null out
+- nonlocal_all.
++ nonlocal_all.
+
+ 2006-10-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * fold-const.c (add_double): Rename to add_double_with_sign.
+ Add 'unsigned_p' parameter and take it into account for the overflow.
+- (mul_double): Rename to mul_double_with_sign.
++ (mul_double): Rename to mul_double_with_sign.
+ Add 'unsigned_p' parameter and take it into account for the overflow.
+ (fold_div_compare): Call add_double_with_sign instead of add_double
+ and mul_double_with_sign instead of mul_double, passing them the
+@@ -199,17 +305,17 @@
+ 2006-10-17 Wolfgang Gellerich <gellerich@de.ibm.com>
+
+ * config/s390/contraints.md: New file.
+- * config/s390/s390-protos.h (s390_mem_constraint,
+- s390_O_constraint_str, s390_N_constraint_str,
++ * config/s390/s390-protos.h (s390_mem_constraint,
++ s390_O_constraint_str, s390_N_constraint_str,
+ s390_float_const_zero_p): Function prototypes added.
+- * config/s390/s390.c (s390_extra_constraint_str,
+- s390_const_double_ok_for_constraint_p,
++ * config/s390/s390.c (s390_extra_constraint_str,
++ s390_const_double_ok_for_constraint_p,
+ s390_const_ok_for_constraint_p): Functions removed.
+ (s390_mem_constraint, s390_O_constraint_str, s390_N_constraint_str,
+ s390_float_const_zero_p): New functions.
+ * config/s390/s390.h (REG_CLASS_FROM_LETTER, CONST_OK_FOR_CONSTRAINT_P,
+- CONST_DOUBLE_OK_FOR_CONSTRAINT_P, EXTRA_CONSTRAINT_STR,
+- EXTRA_MEMORY_CONSTRAINT, EXTRA_ADDRESS_CONSTRAINT, CONSTRAINT_LEN):
++ CONST_DOUBLE_OK_FOR_CONSTRAINT_P, EXTRA_CONSTRAINT_STR,
++ EXTRA_MEMORY_CONSTRAINT, EXTRA_ADDRESS_CONSTRAINT, CONSTRAINT_LEN):
+ Macro definitions removed.
+ (s390_const_ok_for_constraint_p, s390_const_double_ok_for_constraint_p,
+ s390_extra_constraint_str): Functions removed.
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/rtems-elf.h gcc-4.2-20061031/gcc/config/arm/rtems-elf.h
+--- gcc-4.2-20061031.orig/gcc/config/arm/rtems-elf.h 2005-11-21 23:56:34.000000000 +0100
++++ gcc-4.2-20061031/gcc/config/arm/rtems-elf.h 2006-11-09 10:15:12.000000000 +0100
+@@ -27,6 +27,7 @@
+ #define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__rtems__"); \
++ builtin_define ("__USE_INIT_FINI__"); \
+ builtin_assert ("system=rtems"); \
+ } while (0)
+
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-arm-coff gcc-4.2-20061031/gcc/config/arm/t-arm-coff
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-arm-coff 2003-07-02 01:26:43.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-arm-coff 2006-11-09 10:15:12.000000000 +0100
+@@ -31,4 +31,4 @@
+ # Currently there is a bug somewhere in GCC's alias analysis
+ # or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+ # Disabling function inlining is a workaround for this problem.
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline
++TARGET_LIBGCC2_CFLAGS = -fno-inline
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-arm-elf gcc-4.2-20061031/gcc/config/arm/t-arm-elf
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-arm-elf 2005-12-21 18:48:07.000000000 +0100
++++ gcc-4.2-20061031/gcc/config/arm/t-arm-elf 2006-11-09 10:15:12.000000000 +0100
+@@ -67,7 +67,7 @@
+ # Currently there is a bug somewhere in GCC's alias analysis
+ # or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+ # Disabling function inlining is a workaround for this problem.
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline
++TARGET_LIBGCC2_CFLAGS = -fno-inline
+
+ # Assemble startup files.
+ $(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-pe gcc-4.2-20061031/gcc/config/arm/t-pe
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-pe 2004-05-15 14:41:35.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-pe 2006-11-09 10:15:12.000000000 +0100
+@@ -29,4 +29,4 @@
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc
++TARGET_LIBGCC2_CFLAGS =
+\ No newline at end of file
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-strongarm-elf gcc-4.2-20061031/gcc/config/arm/t-strongarm-elf
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-strongarm-elf 2001-09-14 12:19:30.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-strongarm-elf 2006-11-09 10:15:12.000000000 +0100
+@@ -32,7 +32,7 @@
+ # Currently there is a bug somewhere in GCC's alias analysis
+ # or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+ # Disabling function inlining is a workaround for this problem.
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline
++TARGET_LIBGCC2_CFLAGS = -fno-inline
+
+ # Assemble startup files.
+ $(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-strongarm-pe gcc-4.2-20061031/gcc/config/arm/t-strongarm-pe
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-strongarm-pe 2003-07-02 01:26:43.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-strongarm-pe 2006-11-09 10:15:12.000000000 +0100
+@@ -35,4 +35,4 @@
+ # Currently there is a bug somewhere in GCC's alias analysis
+ # or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+ # Disabling function inlining is a workaround for this problem.
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline
++TARGET_LIBGCC2_CFLAGS = -fno-inline
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-wince-pe gcc-4.2-20061031/gcc/config/arm/t-wince-pe
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-wince-pe 2004-05-15 14:41:35.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-wince-pe 2006-11-09 10:15:12.000000000 +0100
+@@ -34,4 +34,4 @@
+
+ LIBGCC = stmp-multilib
+ INSTALL_LIBGCC = install-multilib
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc
++TARGET_LIBGCC2_CFLAGS =
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-xscale-coff gcc-4.2-20061031/gcc/config/arm/t-xscale-coff
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-xscale-coff 2004-05-15 14:41:35.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-xscale-coff 2006-11-09 10:15:12.000000000 +0100
+@@ -42,4 +42,4 @@
+ # Currently there is a bug somewhere in GCC's alias analysis
+ # or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+ # Disabling function inlining is a workaround for this problem.
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline
++TARGET_LIBGCC2_CFLAGS = -fno-inline
+diff -uNr gcc-4.2-20061031.orig/gcc/config/arm/t-xscale-elf gcc-4.2-20061031/gcc/config/arm/t-xscale-elf
+--- gcc-4.2-20061031.orig/gcc/config/arm/t-xscale-elf 2004-05-15 14:41:35.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/arm/t-xscale-elf 2006-11-09 10:15:12.000000000 +0100
+@@ -54,7 +54,7 @@
+ # Currently there is a bug somewhere in GCC's alias analysis
+ # or scheduling code that is breaking _fpmul_parts in fp-bit.c.
+ # Disabling function inlining is a workaround for this problem.
+-TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -fno-inline
++TARGET_LIBGCC2_CFLAGS = -fno-inline
+
+ # Assemble startup files.
+ $(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
+diff -uNr gcc-4.2-20061031.orig/gcc/config/bfin/bfin.h gcc-4.2-20061031/gcc/config/bfin/bfin.h
+--- gcc-4.2-20061031.orig/gcc/config/bfin/bfin.h 2006-10-05 12:46:41.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/bfin/bfin.h 2006-11-09 10:15:12.000000000 +0100
+@@ -39,8 +39,8 @@
+ #define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+- builtin_define ("bfin"); \
+- builtin_define ("BFIN"); \
++ builtin_define_std ("bfin"); \
++ builtin_define_std ("BFIN"); \
+ builtin_define ("__ADSPBLACKFIN__"); \
+ if (TARGET_FDPIC) \
+ builtin_define ("__BFIN_FDPIC__"); \
+diff -uNr gcc-4.2-20061031.orig/gcc/config/bfin/rtems.h gcc-4.2-20061031/gcc/config/bfin/rtems.h
+--- gcc-4.2-20061031.orig/gcc/config/bfin/rtems.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.2-20061031/gcc/config/bfin/rtems.h 2006-11-09 10:15:12.000000000 +0100
+@@ -0,0 +1,29 @@
++/* Definitions for rtems targeting a bfin
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ Contributed by Ralf Corsépius (ralf.corsepius@rtems.org).
++
++This file is part of GCC.
++
++GCC 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 2, or (at your option)
++any later version.
++
++GCC 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.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING. If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA. */
++
++/* Target OS preprocessor built-ins. */
++#define TARGET_OS_CPP_BUILTINS() \
++ do \
++ { \
++ builtin_define ("__rtems__"); \
++ builtin_assert ("system=rtems"); \
++ } \
++ while (0)
+diff -uNr gcc-4.2-20061031.orig/gcc/config/c4x/rtems.h gcc-4.2-20061031/gcc/config/c4x/rtems.h
+--- gcc-4.2-20061031.orig/gcc/config/c4x/rtems.h 2005-06-25 03:22:41.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/c4x/rtems.h 2006-11-09 10:15:12.000000000 +0100
+@@ -24,6 +24,5 @@
+ #define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define ("__rtems__"); \
+- builtin_define ("__USE_INIT_FINI__"); \
+ builtin_assert ("system=rtems"); \
+ } while (0)
+diff -uNr gcc-4.2-20061031.orig/gcc/config/h8300/h8300.c gcc-4.2-20061031/gcc/config/h8300/h8300.c
+--- gcc-4.2-20061031.orig/gcc/config/h8300/h8300.c 2006-08-28 15:51:04.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/h8300/h8300.c 2006-11-09 10:15:12.000000000 +0100
+@@ -83,8 +83,8 @@
+ static int h8300_saveall_function_p (tree);
+ static int h8300_monitor_function_p (tree);
+ static int h8300_os_task_function_p (tree);
+-static void h8300_emit_stack_adjustment (int, unsigned int);
+-static int round_frame_size (int);
++static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT);
++static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT);
+ static unsigned int compute_saved_regs (void);
+ static void push (int);
+ static void pop (int);
+@@ -510,7 +510,7 @@
+ SIZE to adjust the stack pointer. */
+
+ static void
+-h8300_emit_stack_adjustment (int sign, unsigned int size)
++h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size)
+ {
+ /* If the frame size is 0, we don't have anything to do. */
+ if (size == 0)
+@@ -546,8 +546,8 @@
+
+ /* Round up frame size SIZE. */
+
+-static int
+-round_frame_size (int size)
++static HOST_WIDE_INT
++round_frame_size (HOST_WIDE_INT size)
+ {
+ return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
+ & -STACK_BOUNDARY / BITS_PER_UNIT);
+diff -uNr gcc-4.2-20061031.orig/gcc/config/i386/darwin64.h gcc-4.2-20061031/gcc/config/i386/darwin64.h
+--- gcc-4.2-20061031.orig/gcc/config/i386/darwin64.h 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.2-20061031/gcc/config/i386/darwin64.h 2006-11-09 10:15:11.000000000 +0100
+@@ -0,0 +1,35 @@
++/* Target definitions for x86_64 running Darwin.
++ Copyright (C) 2006 Free Software Foundation, Inc.
++ Contributed by Apple Computer Inc.
++
++This file is part of GCC.
++
++GCC 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 2, or (at your option)
++any later version.
++
++GCC 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.
++
++You should have received a copy of the GNU General Public License
++along with GCC; see the file COPYING. If not, write to
++the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++Boston, MA 02110-1301, USA. */
++
++#undef TARGET_VERSION
++#define TARGET_VERSION fprintf (stderr, " (x86_64 Darwin)");
++
++#undef DARWIN_ARCH_SPEC
++#define DARWIN_ARCH_SPEC "%{m32:i386;:x86_64}"
++
++#undef DARWIN_SUBARCH_SPEC
++#define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC
++
++#undef SUBTARGET_EXTRA_SPECS
++#define SUBTARGET_EXTRA_SPECS \
++ { "darwin_arch", DARWIN_ARCH_SPEC }, \
++ { "darwin_crt2", "" }, \
++ { "darwin_subarch", DARWIN_SUBARCH_SPEC },
+diff -uNr gcc-4.2-20061031.orig/gcc/config/i386/i386.c gcc-4.2-20061031/gcc/config/i386/i386.c
+--- gcc-4.2-20061031.orig/gcc/config/i386/i386.c 2006-10-16 21:53:29.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/i386/i386.c 2006-11-09 10:15:11.000000000 +0100
+@@ -1847,7 +1847,7 @@
+
+ /* If we're doing fast math, we don't care about comparison order
+ wrt NaNs. This lets us use a shorter comparison sequence. */
+- if (flag_unsafe_math_optimizations)
++ if (flag_finite_math_only)
+ target_flags &= ~MASK_IEEE_FP;
+
+ /* If the architecture always has an FPU, turn off NO_FANCY_MATH_387,
+diff -uNr gcc-4.2-20061031.orig/gcc/config/i386/i386.md gcc-4.2-20061031/gcc/config/i386/i386.md
+--- gcc-4.2-20061031.orig/gcc/config/i386/i386.md 2006-09-07 19:53:18.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/i386/i386.md 2006-11-09 10:15:11.000000000 +0100
+@@ -15560,8 +15560,7 @@
+ (define_insn "sqrtxf2"
+ [(set (match_operand:XF 0 "register_operand" "=f")
+ (sqrt:XF (match_operand:XF 1 "register_operand" "0")))]
+- "TARGET_USE_FANCY_MATH_387
+- && (TARGET_IEEE_FP || flag_unsafe_math_optimizations) "
++ "TARGET_USE_FANCY_MATH_387"
+ "fsqrt"
+ [(set_attr "type" "fpspc")
+ (set_attr "mode" "XF")
+diff -uNr gcc-4.2-20061031.orig/gcc/config/i386/t-darwin64 gcc-4.2-20061031/gcc/config/i386/t-darwin64
+--- gcc-4.2-20061031.orig/gcc/config/i386/t-darwin64 1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.2-20061031/gcc/config/i386/t-darwin64 2006-11-09 10:15:11.000000000 +0100
+@@ -0,0 +1,3 @@
++SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
++LIB2_SIDITI_CONV_FUNCS=yes
++LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
+diff -uNr gcc-4.2-20061031.orig/gcc/config/mips/elf.h gcc-4.2-20061031/gcc/config/mips/elf.h
+--- gcc-4.2-20061031.orig/gcc/config/mips/elf.h 2006-10-08 09:35:47.000000000 +0200
++++ gcc-4.2-20061031/gcc/config/mips/elf.h 2006-11-09 10:15:12.000000000 +0100
+@@ -49,6 +49,4 @@
+ #undef ENDFILE_SPEC
+ #define ENDFILE_SPEC "crtend%O%s crtn%O%s"
+
+-#define NO_IMPLICIT_EXTERN_C 1
+-
+ #define HANDLE_PRAGMA_PACK_PUSH_POP 1
+diff -uNr gcc-4.2-20061031.orig/gcc/config.gcc gcc-4.2-20061031/gcc/config.gcc
+--- gcc-4.2-20061031.orig/gcc/config.gcc 2006-10-16 01:05:31.000000000 +0200
++++ gcc-4.2-20061031/gcc/config.gcc 2006-11-09 10:15:11.000000000 +0100
+@@ -786,6 +786,11 @@
+ tmake_file=bfin/t-bfin-elf
+ use_collect2=no
+ ;;
++bfin*-rtems*)
++ tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h bfin/rtems.h rtems.h"
++ tmake_file="bfin/t-bfin-elf t-rtems"
++ use_collect2=no
++ ;;
+ bfin*-*)
+ tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h"
+ tmake_file=bfin/t-bfin
+@@ -1013,6 +1018,12 @@
+ with_arch=${with_arch:-nocona}
+ with_cpu=${with_cpu:-generic}
+ ;;
++x86_64-*-darwin*)
++ with_arch=${with_arch:-nocona}
++ with_cpu=${with_cpu:-generic}
++ tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
++ tm_file="${tm_file} ${cpu_type}/darwin64.h"
++ ;;
+ i[34567]86-*-elf*)
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h"
+ tmake_file="i386/t-i386elf t-svr4"
+diff -uNr gcc-4.2-20061031.orig/gcc/config.host gcc-4.2-20061031/gcc/config.host
+--- gcc-4.2-20061031.orig/gcc/config.host 2006-09-23 01:50:51.000000000 +0200
++++ gcc-4.2-20061031/gcc/config.host 2006-11-09 10:15:11.000000000 +0100
+@@ -177,7 +177,7 @@
+ i[34567]86-*-interix3*)
+ host_xmake_file="${host_xmake_file} x-interix"
+ ;;
+- i[34567]86-*-darwin*)
++ i[34567]86-*-darwin* | x86_64-*-darwin*)
+ out_host_hook_obj="${out_host_hook_obj} host-i386-darwin.o"
+ host_xmake_file="${host_xmake_file} i386/x-darwin"
+ ;;
+diff -uNr gcc-4.2-20061031.orig/gcc/DATESTAMP gcc-4.2-20061031/gcc/DATESTAMP
+--- gcc-4.2-20061031.orig/gcc/DATESTAMP 2006-10-31 01:17:29.000000000 +0100
++++ gcc-4.2-20061031/gcc/DATESTAMP 2006-11-09 10:14:07.000000000 +0100
+@@ -1 +1 @@
+-20061031
++20061109
+diff -uNr gcc-4.2-20061031.orig/gcc/doc/install.texi gcc-4.2-20061031/gcc/doc/install.texi
+--- gcc-4.2-20061031.orig/gcc/doc/install.texi 2006-10-20 01:39:45.000000000 +0200
++++ gcc-4.2-20061031/gcc/doc/install.texi 2006-11-09 10:14:07.000000000 +0100
+@@ -3848,12 +3848,15 @@
+ To work around this problem, compile with @option{-gstabs+} instead of
+ plain @option{-g}.
+
+-When configuring the GNU Multiple Precision Library (GMP) version 4.1.x
+-on a Solaris 7 or later system, the canonical target triplet must be
+-specified as the @command{build} parameter on the configure line:
++When configuring the GNU Multiple Precision Library (GMP) or the MPFR
++library on a Solaris 7 or later system, the canonical target triplet
++must be specified as the @command{build} parameter on the configure
++line. This triplet can be obtained by invoking ./config.guess in
++the toplevel source directory of GCC (and not that of GMP or MPFR).
++For example on a Solaris 7 system:
+
+ @smallexample
+-./configure --build=sparc-sun-solaris2.7 --prefix=xxx --enable-mpfr
++ % ./configure --build=sparc-sun-solaris2.7 --prefix=xxx
+ @end smallexample
+
+ @html
+@@ -3933,15 +3936,24 @@
+ @end html
+ @heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2*
+
++When configuring the GNU Multiple Precision Library (GMP) or the
++MPFR library, the canonical target triplet must be specified as
++the @command{build} parameter on the configure line. For example
++on a Solaris 7 system:
++
++@smallexample
++ % ./configure --build=sparc64-sun-solaris2.7 --prefix=xxx
++@end smallexample
++
+ The following compiler flags must be specified in the configure
+ step in order to bootstrap this target with the Sun compiler:
+
+ @smallexample
+- % CC="cc -xildoff -xarch=v9" @var{srcdir}/configure [@var{options}] [@var{target}]
++ % CC="cc -xarch=v9 -xildoff" @var{srcdir}/configure [@var{options}] [@var{target}]
+ @end smallexample
+
+-@option{-xildoff} turns off the incremental linker, and @option{-xarch=v9}
+-specifies the SPARC-V9 architecture to the Sun linker and assembler.
++@option{-xarch=v9} specifies the SPARC-V9 architecture to the Sun toolchain
++and @option{-xildoff} turns off the incremental linker.
+
+ @html
+ <hr />
+diff -uNr gcc-4.2-20061031.orig/gcc/doc/invoke.texi gcc-4.2-20061031/gcc/doc/invoke.texi
+--- gcc-4.2-20061031.orig/gcc/doc/invoke.texi 2006-10-19 11:19:21.000000000 +0200
++++ gcc-4.2-20061031/gcc/doc/invoke.texi 2006-11-09 10:14:07.000000000 +0100
+@@ -197,8 +197,7 @@
+ @item Objective-C and Objective-C++ Language Options
+ @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
+ Objective-C and Objective-C++ Dialects}.
+-@gccoptlist{
+--fconstant-string-class=@var{class-name} @gol
++@gccoptlist{-fconstant-string-class=@var{class-name} @gol
+ -fgnu-runtime -fnext-runtime @gol
+ -fno-nil-receivers @gol
+ -fobjc-call-cxx-cdtors @gol
+@@ -216,8 +215,8 @@
+ @item Language Independent Options
+ @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
+ @gccoptlist{-fmessage-length=@var{n} @gol
+--fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}} @gol
+--fdiagnostics-show-option
++-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol
++-fdiagnostics-show-option}
+
+ @item Warning Options
+ @xref{Warning Options,,Options to Request or Suppress Warnings}.
+@@ -8352,7 +8351,7 @@
+ as well.
+
+ @item su
+-Like @samp{su}, but the instructions are marked to be safe for software
++Like @samp{u}, but the instructions are marked to be safe for software
+ completion (see Alpha architecture manual for details).
+
+ @item sui
+diff -uNr gcc-4.2-20061031.orig/gcc/doc/sourcebuild.texi gcc-4.2-20061031/gcc/doc/sourcebuild.texi
+--- gcc-4.2-20061031.orig/gcc/doc/sourcebuild.texi 2006-10-16 21:51:55.000000000 +0200
++++ gcc-4.2-20061031/gcc/doc/sourcebuild.texi 2006-11-09 10:14:07.000000000 +0100
+@@ -1134,6 +1134,12 @@
+ Passes if @var{regex} does not match demangled text in the dump file with
+ suffix @var{suffix}.
+
++@item output-exists [@{ target/xfail @var{selector} @}]
++Passes if compiler output file exists.
++
++@item output-exists-not [@{ target/xfail @var{selector} @}]
++Passes if compiler output file does not exist.
++
+ @item run-gcov @var{sourcefile}
+ Check line counts in @command{gcov} tests.
+
+diff -uNr gcc-4.2-20061031.orig/gcc/fold-const.c gcc-4.2-20061031/gcc/fold-const.c
+--- gcc-4.2-20061031.orig/gcc/fold-const.c 2006-10-19 22:22:04.000000000 +0200
++++ gcc-4.2-20061031/gcc/fold-const.c 2006-11-09 10:14:08.000000000 +0100
+@@ -7397,6 +7397,8 @@
+ - the final type is a pointer type and the initial type not
+ - the initial type is a pointer to an array and the final type
+ not. */
++ /* Java pointer type conversions generate checks in some
++ cases, so we explicitly disallow this optimization. */
+ if (! inside_float && ! inter_float && ! final_float
+ && ! inside_vec && ! inter_vec && ! final_vec
+ && (inter_prec >= inside_prec || inter_prec >= final_prec)
+@@ -7412,7 +7414,9 @@
+ && final_ptr == inside_ptr
+ && ! (inside_ptr
+ && TREE_CODE (TREE_TYPE (inside_type)) == ARRAY_TYPE
+- && TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
++ && TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE)
++ && ! ((strcmp (lang_hooks.name, "GNU Java") == 0)
++ && final_ptr))
+ return fold_build1 (code, type, TREE_OPERAND (op0, 0));
+ }
+
+@@ -11184,13 +11188,76 @@
+
+ /* A < 0 ? <sign bit of A> : 0 is simply (A & <sign bit of A>). */
+ if (TREE_CODE (arg0) == LT_EXPR
+- && integer_zerop (TREE_OPERAND (arg0, 1))
+- && integer_zerop (op2)
+- && (tem = sign_bit_p (TREE_OPERAND (arg0, 0), arg1)))
+- return fold_convert (type,
+- fold_build2 (BIT_AND_EXPR,
+- TREE_TYPE (tem), tem,
+- fold_convert (TREE_TYPE (tem), arg1)));
++ && integer_zerop (TREE_OPERAND (arg0, 1))
++ && integer_zerop (op2)
++ && (tem = sign_bit_p (TREE_OPERAND (arg0, 0), arg1)))
++ {
++ /* sign_bit_p only checks ARG1 bits within A's precision.
++ If <sign bit of A> has wider type than A, bits outside
++ of A's precision in <sign bit of A> need to be checked.
++ If they are all 0, this optimization needs to be done
++ in unsigned A's type, if they are all 1 in signed A's type,
++ otherwise this can't be done. */
++ if (TYPE_PRECISION (TREE_TYPE (tem))
++ < TYPE_PRECISION (TREE_TYPE (arg1))
++ && TYPE_PRECISION (TREE_TYPE (tem))
++ < TYPE_PRECISION (type))
++ {
++ unsigned HOST_WIDE_INT mask_lo;
++ HOST_WIDE_INT mask_hi;
++ int inner_width, outer_width;
++ tree tem_type;
++
++ inner_width = TYPE_PRECISION (TREE_TYPE (tem));
++ outer_width = TYPE_PRECISION (TREE_TYPE (arg1));
++ if (outer_width > TYPE_PRECISION (type))
++ outer_width = TYPE_PRECISION (type);
++
++ if (outer_width > HOST_BITS_PER_WIDE_INT)
++ {
++ mask_hi = ((unsigned HOST_WIDE_INT) -1
++ >> (2 * HOST_BITS_PER_WIDE_INT - outer_width));
++ mask_lo = -1;
++ }
++ else
++ {
++ mask_hi = 0;
++ mask_lo = ((unsigned HOST_WIDE_INT) -1
++ >> (HOST_BITS_PER_WIDE_INT - outer_width));
++ }
++ if (inner_width > HOST_BITS_PER_WIDE_INT)
++ {
++ mask_hi &= ~((unsigned HOST_WIDE_INT) -1
++ >> (HOST_BITS_PER_WIDE_INT - inner_width));
++ mask_lo = 0;
++ }
++ else
++ mask_lo &= ~((unsigned HOST_WIDE_INT) -1
++ >> (HOST_BITS_PER_WIDE_INT - inner_width));
++
++ if ((TREE_INT_CST_HIGH (arg1) & mask_hi) == mask_hi
++ && (TREE_INT_CST_LOW (arg1) & mask_lo) == mask_lo)
++ {
++ tem_type = lang_hooks.types.signed_type (TREE_TYPE (tem));
++ tem = fold_convert (tem_type, tem);
++ }
++ else if ((TREE_INT_CST_HIGH (arg1) & mask_hi) == 0
++ && (TREE_INT_CST_LOW (arg1) & mask_lo) == 0)
++ {
++ tem_type = lang_hooks.types.unsigned_type (TREE_TYPE (tem));
++ tem = fold_convert (tem_type, tem);
++ }
++ else
++ tem = NULL;
++ }
++
++ if (tem)
++ return fold_convert (type,
++ fold_build2 (BIT_AND_EXPR,
++ TREE_TYPE (tem), tem,
++ fold_convert (TREE_TYPE (tem),
++ arg1)));
++ }
+
+ /* (A >> N) & 1 ? (1 << N) : 0 is simply A & (1 << N). A & 1 was
+ already handled above. */
+diff -uNr gcc-4.2-20061031.orig/gcc/gcc.c gcc-4.2-20061031/gcc/gcc.c
+--- gcc-4.2-20061031.orig/gcc/gcc.c 2006-07-18 18:07:44.000000000 +0200
++++ gcc-4.2-20061031/gcc/gcc.c 2006-11-09 10:14:08.000000000 +0100
+@@ -3744,7 +3744,10 @@
+ switch (c)
+ {
+ case 'b':
+- if (NULL == strchr(argv[i] + 2, '-')) break;
++ if (NULL == strchr(argv[i] + 2, '-'))
++ goto normal_switch;
++
++ /* Fall through. */
+ case 'V':
+ fatal ("'-%c' must come at the start of the command line", c);
+ break;
+diff -uNr gcc-4.2-20061031.orig/gcc/gthr-posix95.h gcc-4.2-20061031/gcc/gthr-posix95.h
+--- gcc-4.2-20061031.orig/gcc/gthr-posix95.h 2006-01-26 23:00:28.000000000 +0100
++++ gcc-4.2-20061031/gcc/gthr-posix95.h 2006-11-09 10:15:12.000000000 +0100
+@@ -109,6 +109,59 @@
+
+ #if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+
++/* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if
++ -pthreads is not specified. The functions are dummies and most return an
++ error value. However pthread_once returns 0 without invoking the routine
++ it is passed so we cannot pretend that the interface is active if -pthreads
++ is not specified. On Solaris 2.5.1, the interface is not exposed at all so
++ we need to play the usual game with weak symbols. On Solaris 10 and up, a
++ working interface is always exposed. */
++
++#if defined(__sun) && defined(__svr4__)
++
++static volatile int __gthread_active = -1;
++
++static void
++__gthread_trigger (void)
++{
++ __gthread_active = 1;
++}
++
++static inline int
++__gthread_active_p (void)
++{
++ static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER;
++ static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT;
++
++ /* Avoid reading __gthread_active twice on the main code path. */
++ int __gthread_active_latest_value = __gthread_active;
++
++ /* This test is not protected to avoid taking a lock on the main code
++ path so every update of __gthread_active in a threaded program must
++ be atomic with regard to the result of the test. */
++ if (__builtin_expect (__gthread_active_latest_value < 0, 0))
++ {
++ if (__gthrw_(pthread_once))
++ {
++ /* If this really is a threaded program, then we must ensure that
++ __gthread_active has been set to 1 before exiting this block. */
++ __gthrw_(pthread_mutex_lock) (&__gthread_active_mutex);
++ __gthrw_(pthread_once) (&__gthread_active_once, __gthread_trigger);
++ __gthrw_(pthread_mutex_unlock) (&__gthread_active_mutex);
++ }
++
++ /* Make sure we'll never enter this block again. */
++ if (__gthread_active < 0)
++ __gthread_active = 0;
++
++ __gthread_active_latest_value = __gthread_active;
++ }
++
++ return __gthread_active_latest_value != 0;
++}
++
++#else /* not Solaris */
++
+ static inline int
+ __gthread_active_p (void)
+ {
+@@ -117,6 +170,8 @@
+ return __gthread_active_ptr != 0;
+ }
+
++#endif /* Solaris */
++
+ #else /* not SUPPORTS_WEAK */
+
+ static inline int
+diff -uNr gcc-4.2-20061031.orig/gcc/gthr-posix.h gcc-4.2-20061031/gcc/gthr-posix.h
+--- gcc-4.2-20061031.orig/gcc/gthr-posix.h 2006-03-02 03:47:40.000000000 +0100
++++ gcc-4.2-20061031/gcc/gthr-posix.h 2006-11-09 10:15:11.000000000 +0100
+@@ -142,6 +142,59 @@
+
+ #if SUPPORTS_WEAK && GTHREAD_USE_WEAK
+
++/* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if
++ -pthreads is not specified. The functions are dummies and most return an
++ error value. However pthread_once returns 0 without invoking the routine
++ it is passed so we cannot pretend that the interface is active if -pthreads
++ is not specified. On Solaris 2.5.1, the interface is not exposed at all so
++ we need to play the usual game with weak symbols. On Solaris 10 and up, a
++ working interface is always exposed. */
++
++#if defined(__sun) && defined(__svr4__)
++
++static volatile int __gthread_active = -1;
++
++static void
++__gthread_trigger (void)
++{
++ __gthread_active = 1;
++}
++
++static inline int
++__gthread_active_p (void)
++{
++ static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER;
++ static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT;
++
++ /* Avoid reading __gthread_active twice on the main code path. */
++ int __gthread_active_latest_value = __gthread_active;
++
++ /* This test is not protected to avoid taking a lock on the main code
++ path so every update of __gthread_active in a threaded program must
++ be atomic with regard to the result of the test. */
++ if (__builtin_expect (__gthread_active_latest_value < 0, 0))
++ {
++ if (__gthrw_(pthread_once))
++ {
++ /* If this really is a threaded program, then we must ensure that
++ __gthread_active has been set to 1 before exiting this block. */
++ __gthrw_(pthread_mutex_lock) (&__gthread_active_mutex);
++ __gthrw_(pthread_once) (&__gthread_active_once, __gthread_trigger);
++ __gthrw_(pthread_mutex_unlock) (&__gthread_active_mutex);
++ }
++
++ /* Make sure we'll never enter this block again. */
++ if (__gthread_active < 0)
++ __gthread_active = 0;
++
++ __gthread_active_latest_value = __gthread_active;
++ }
++
++ return __gthread_active_latest_value != 0;
++}
++
++#else /* not Solaris */
++
+ static inline int
+ __gthread_active_p (void)
+ {
+@@ -150,6 +203,8 @@
+ return __gthread_active_ptr != 0;
+ }
+
++#endif /* Solaris */
++
+ #else /* not SUPPORTS_WEAK */
+
+ static inline int
+diff -uNr gcc-4.2-20061031.orig/gcc/Makefile.in gcc-4.2-20061031/gcc/Makefile.in
+--- gcc-4.2-20061031.orig/gcc/Makefile.in 2006-10-14 03:25:39.000000000 +0200
++++ gcc-4.2-20061031/gcc/Makefile.in 2006-11-09 10:15:11.000000000 +0100
+@@ -3729,9 +3729,9 @@
+ install-driver: installdirs xgcc$(exeext)
+ -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+ -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+- -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)
++ -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext)
+ -( cd $(DESTDIR)$(bindir) && \
+- $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version) )
++ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) )
+ -if [ -f gcc-cross$(exeext) ] ; then \
+ if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
+ rm -f $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
+diff -uNr gcc-4.2-20061031.orig/gcc/simplify-rtx.c gcc-4.2-20061031/gcc/simplify-rtx.c
+--- gcc-4.2-20061031.orig/gcc/simplify-rtx.c 2006-09-05 19:41:22.000000000 +0200
++++ gcc-4.2-20061031/gcc/simplify-rtx.c 2006-11-09 10:15:11.000000000 +0100
+@@ -3747,10 +3747,10 @@
+ return simplify_const_relational_operation (signed_condition (code),
+ mode, tem, const0_rtx);
+
+- if (flag_unsafe_math_optimizations && code == ORDERED)
++ if (! HONOR_NANS (mode) && code == ORDERED)
+ return const_true_rtx;
+
+- if (flag_unsafe_math_optimizations && code == UNORDERED)
++ if (! HONOR_NANS (mode) && code == UNORDERED)
+ return const0_rtx;
+
+ /* For modes without NaNs, if the two operands are equal, we know the
+diff -uNr gcc-4.2-20061031.orig/gcc/tree-cfgcleanup.c gcc-4.2-20061031/gcc/tree-cfgcleanup.c
+--- gcc-4.2-20061031.orig/gcc/tree-cfgcleanup.c 2006-07-17 15:14:38.000000000 +0200
++++ gcc-4.2-20061031/gcc/tree-cfgcleanup.c 2006-11-09 10:15:11.000000000 +0100
+@@ -160,7 +160,7 @@
+
+ /* If the last statement of the block could throw and now cannot,
+ we need to prune cfg. */
+- tree_purge_dead_eh_edges (bb);
++ retval |= tree_purge_dead_eh_edges (bb);
+
+ if (bsi_end_p (bsi))
+ continue;