gcc csl 2008q3: add fix for http://hardwarebug.org/2008/10/11/codesourcery-gcc-2008q3...
authorKoen Kooi <koen@openembedded.org>
Mon, 17 Nov 2008 21:26:22 +0000 (22:26 +0100)
committerKoen Kooi <koen@openembedded.org>
Mon, 17 Nov 2008 21:26:22 +0000 (22:26 +0100)
packages/gcc/gcc-csl-arm-2008q3.inc
packages/gcc/gcc-csl-arm-2008q3/gcc-csl-2008q3-hotfix.diff [new file with mode: 0644]

index 8985a7c..059c742 100644 (file)
@@ -6,11 +6,12 @@ PV = "4.3.2+csl-arm-2008q3-39"
 FILESDIR = "${FILE_DIRNAME}/gcc-csl-arm-2008q3"
 
 SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm-none-eabi/arm-2008q3-39-arm-none-eabi.src.tar.bz2 \
+           file://gcc-csl-2008q3-hotfix.diff;patch=1 \
            file://arm-nolibfloat.patch;patch=1 \
            file://arm-softfloat.patch;patch=1 \
 #    file://gcc-4.3.1-SYSROOT_CFLAGS_FOR_TARGET.patch;patch=1 \
 #    file://gcc-4.3.1-ARCH_FLAGS_FOR_TARGET.patch;patch=1 \
-    file://gcc-flags-for-build.patch;patch=1 \
+#    file://gcc-flags-for-build.patch;patch=1 \
 "
 
 
diff --git a/packages/gcc/gcc-csl-arm-2008q3/gcc-csl-2008q3-hotfix.diff b/packages/gcc/gcc-csl-arm-2008q3/gcc-csl-2008q3-hotfix.diff
new file mode 100644 (file)
index 0000000..18f2328
--- /dev/null
@@ -0,0 +1,2106 @@
+diff -Nurd gcc-4.3/ChangeLog.csl gcc-4.3-new/ChangeLog.csl
+--- gcc-4.3/ChangeLog.csl      2008-10-01 14:56:28.000000000 +0200
++++ gcc-4.3-new/ChangeLog.csl  2008-10-18 13:08:51.000000000 +0200
+@@ -1,3 +1,190 @@
++2008-10-16  Nathan Froyd  <froydnj@codesourcery.com>
++
++      gcc/
++      * config.gcc (powerpc-*-eabi*): Add rs6000/t-cs-eabi when
++      --enable-extra-sgxx-multilibs is passed to configure.
++      * config/rs6000/t-ppcgas (MULTILIB_OPTIONS): Remove te500mc.
++      (MULTILIB_DIRNAMES): Likewise.
++      (MULTILIB_EXCEPTIONS): Likewise.
++      * config/rs6000/t-cs-eabi: New file.
++
++2008-10-16  Julian Brown  <julian@codesourcery.com>
++
++      Issue #4039
++
++      gcc/
++      * config/arm/neon.md (movmisalign<mode>): Use expander/unnamed insn
++      for both D & Q variants. Don't permit both operands to be mems.
++      * release-notes-csl.xml (Misaligned NEON memory accesses): Add note.
++
++2008-10-15  Catherine Moore  <clm@codesourcery.com>
++
++      gcc/testsuite/
++      * gcc-target/mips/octeon-1.c (dg-mips-options): Use -mno-abicalls.
++      * gcc-target/mips/octeon-5.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-6.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-18.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-19.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-23.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-28.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-34.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-37.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-43.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-44.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-49.c (dg-mips-options): Likewise.
++      * gcc-target/mips/octeon-54.c (dg-mips-options): Likewise.
++
++2008-10-14  Sandra Loosemore  <sandra@codesourcery.com>
++
++      Issue #4017
++
++      * release-notes-csl.xml (Linker script option syntax): New note.
++
++      gcc/
++      * config.gcc (powerpc-*): Make t-ppcgas imply usegas.h.
++      * config/svr4.h (SVR4_ASM_SPEC): New.
++      (ASM_SPEC): Inherit from SVR4_ASM_SPEC.
++      * config/rs6000/sysv4.h (ASM_SPEC): Inherit from SVR4_ASM_SPEC.
++      
++      gcc/doc/
++      * invoke.texi (Option Summary): Add -T to linker options.
++      (Link Options): Document -T.
++      
++2008-10-13  Nathan Froyd  <froydnj@codesourcery.com>
++
++      gcc/
++      * config/rs6000/rs6000.c (rs6000_file_start): Output gnu
++      attribute for struct return convention.
++
++2008-10-13  Paul Brook  <paul@codesourcery.com>
++
++      gcc/
++      * config/arm/arm.h (fputype): Remove stray comma.
++
++2008-10-13  Andrew Stubbs  <ams@codesourcery.com>
++
++      Issue #3884
++
++      gcc/
++      * doc/invoke.texi (PowerPC Options): -meabi option no longer places
++      __eabi function in main.
++
++2008-10-12  Mark Mitchell  <mark@codesourcery.com>
++
++      Issue #3224
++      * release-notes-csl.xml: Mention OpenMP add-on.
++
++2008-10-12  Catherine Moore  <clm@codesourcery.com>
++
++      Issue # 3903
++
++      Backport:
++
++      2008-07-28  Ilie Garbacea  <ilie@mips.com>
++                  Chao-ying Fu  <fu@mips.com>
++
++      * configure.tgt: Enable futex for MIPS.
++      * config/linux/mips/futex.h: New file.
++
++2008-10-12  Catherine Moore  <clm@codesourcery.com>
++
++      gcc/
++      * config/mips/mips.opt (muclibc): New option entry.
++      * config/mips/mips.c (mips_override_options): Disable
++      __thread support when the -muclibc option is used.
++
++2008-10-11  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++      gcc/
++      * config/m68k/lb1sf68.asm (PICCALL, PICJUMP): Use GOT instead of
++      PC-relative addressing when compiling for uclinux PIC.
++
++2008-10-09  Catherine Moore  <clm@codesourcery.com>
++
++      Issue #3312
++
++      gcc/
++      * config/mips/mips.h ( DSP_CTRL_REG_FIRST): Define.
++      (DSP_CTRL_REG_LAST): Define.
++      * config/mips/mips.c (mips_conditional_register_usage): Handle
++      DSP registers.
++
++2008-10-08  Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++      * release-notes-csl.xml: Fix typo.
++
++2008-10-08  Nathan Sidwell  <nathan@codesourcery.com>
++          Maxim Kuvyrkov  <maxim@codesourcery.com>
++
++      * release-notes-csl.xml (Shared Libraries bug fix): New.
++
++      gcc/
++      * config/m68k/lb1sf68.asm (__cmpdf_internal, __cmpsf_internal): Hide.
++      (__cmpdf, __cmpsf): Use PIC call sequence.
++
++2008-10-07  Nathan Froyd  <froydnj@codesourcery.com>
++
++      Issue #3988
++
++      * release-notes-csl.xml (Dynamic libraries and -Os bug fix): New.
++
++      gcc/
++      * config/rs6000/ppc-asm.h (HIDDEN_FUNC): New macro.
++      * config/rs6000/crtresfpr.asm, config/rs6000/crtresgpr.asm,
++      config/rs6000/crtresxfpr.asm, config/rs6000/crtresxgpr.asm,
++      config/rs6000/crtsavfpr.asm, config/rs6000/crtsavgpr.asm,
++      config/rs6000/e500crtres32gpr.asm,
++      config/rs6000/e500crtres64gpr.asm,
++      config/rs6000/e500crtres64gprctr.asm,
++      config/rs6000/e500crtrest32gpr.asm,
++      config/rs6000/e500crtrest64gpr.asm,
++      config/rs6000/e500crtresx32gpr.asm,
++      config/rs6000/e500crtresx64gpr.asm,
++      config/rs6000/e500crtsav32gpr.asm,
++      config/rs6000/e500crtsav64gpr.asm,
++      config/rs6000/e500crtsav64gprctr.asm,
++      config/rs6000/e500crtsavg32gpr.asm,
++      config/rs6000/e500crtsavg64gpr.asm,
++      config/rs6000/e500crtsavg64gprctr.asm: Use it.
++
++2008-10-07  Nathan Sidwell  <nathan@codesourcery.com>
++
++      * release-notes-csl.xml: Document it.
++
++      gcc/
++      * doc/invoke.texi (MIPS Options): Add ice9 arch.
++      * config/mips/mips.c (mips_cpu_info_table): Add ice9 arch.
++
++2008-10-03  Catherine Moore  <clm@codesourcery.com>
++
++        gcc/testsuite/
++      * gcc.target/mips/fix-ice9a-1.c: Disable for soft-float
++      multilibs.
++      * gcc.target/mips/fix-ice9a-1.c: Likewise.
++
++2008-10-03  Kazu Hirata  <kazu@codesourcery.com>
++
++      Backport:
++      gcc/testsuite/
++      2008-09-23  Eric Botcazou  <ebotcazou@adacore.com>
++
++      * gcc.dg/pragma-init-fini.c: Use dg-warning in lieu of dg-error.
++      * gcc.dg/pragma-align-2.c: Likewise.
++      * gcc.dg/format/cmn-err-1.c: Likewise.
++
++2008-10-02  Catherine Moore  <clm@codesourcery.com>
++
++      gcc/testsuite/
++      * gcc.target/mips/lazy-binding-1.c: Compile with -fpic.
++
++2008-10-02  Maciej W. Rozycki  <macro@codesourcery.com>
++
++      Issue #3673
++      gcc/testsuite/
++      * lib/target-supports.exp
++      (check_effective_target_arm_iwmmxt_ok): New procedure.
++      * gcc.dg/arm-mmx-1.c: Only run if arm_iwmmxt_ok.
++
+ 2008-09-29  Joseph Myers  <joseph@codesourcery.com>
+       Backport:
+diff -Nurd gcc-4.3/gcc/config/arm/arm.h gcc-4.3-new/gcc/config/arm/arm.h
+--- gcc-4.3/gcc/config/arm/arm.h       2008-10-01 14:51:02.000000000 +0200
++++ gcc-4.3-new/gcc/config/arm/arm.h   2008-10-18 12:44:43.000000000 +0200
+@@ -329,7 +329,7 @@
+   /* Neon.  */
+   FPUTYPE_NEON,
+   /* Neon with half-precision float extensions.  */
+-  FPUTYPE_NEON_FP16,
++  FPUTYPE_NEON_FP16
+ };
+ /* Recast the floating point class to be the floating point attribute.  */
+diff -Nurd gcc-4.3/gcc/config/arm/neon.md gcc-4.3-new/gcc/config/arm/neon.md
+--- gcc-4.3/gcc/config/arm/neon.md     2008-10-01 14:51:02.000000000 +0200
++++ gcc-4.3-new/gcc/config/arm/neon.md 2008-10-18 12:44:43.000000000 +0200
+@@ -659,21 +659,36 @@
+   neon_disambiguate_copy (operands, dest, src, 4);
+ })
+-(define_insn "movmisalign<mode>"
++(define_expand "movmisalign<mode>"
++  [(set (match_operand:VDQX 0 "nonimmediate_operand"         "")
++      (unspec:VDQX [(match_operand:VDQX 1 "general_operand" "")]
++                   UNSPEC_MISALIGNED_ACCESS))]
++  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++{
++  if (!s_register_operand (operands[0], <MODE>mode)
++      && !s_register_operand (operands[1], <MODE>mode))
++    FAIL;
++})
++
++(define_insn "*movmisalign<mode>_neon"
+   [(set (match_operand:VDX 0 "nonimmediate_operand"         "=Um,w")
+       (unspec:VDX [(match_operand:VDX 1 "general_operand" " w, Um")]
+                   UNSPEC_MISALIGNED_ACCESS))]
+-  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++  "TARGET_NEON && !BYTES_BIG_ENDIAN
++   && (   s_register_operand (operands[0], <MODE>mode)
++       || s_register_operand (operands[1], <MODE>mode))"
+   "@
+   vst1.<V_sz_elem>\t{%P1}, %A0
+   vld1.<V_sz_elem>\t{%P0}, %A1"
+   [(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs,neon_vld1_1_2_regs")])
+-(define_insn "movmisalign<mode>"
++(define_insn "*movmisalign<mode>_neon"
+   [(set (match_operand:VQX 0 "nonimmediate_operand"         "=Um,w")
+       (unspec:VQX [(match_operand:VQX 1 "general_operand" " w, Um")]
+                   UNSPEC_MISALIGNED_ACCESS))]
+-  "TARGET_NEON && !BYTES_BIG_ENDIAN"
++  "TARGET_NEON && !BYTES_BIG_ENDIAN
++   && (   s_register_operand (operands[0], <MODE>mode)
++       || s_register_operand (operands[1], <MODE>mode))"
+   "@
+   vst1.<V_sz_elem>\t{%q1}, %A0
+   vld1.<V_sz_elem>\t{%q0}, %A1"
+diff -Nurd gcc-4.3/gcc/config/m68k/lb1sf68.asm gcc-4.3-new/gcc/config/m68k/lb1sf68.asm
+--- gcc-4.3/gcc/config/m68k/lb1sf68.asm        2008-10-01 14:50:48.000000000 +0200
++++ gcc-4.3-new/gcc/config/m68k/lb1sf68.asm    2008-10-18 12:43:53.000000000 +0200
+@@ -129,30 +129,6 @@
+ #else /* __PIC__ */
+-      /* Common for Linux and uClinux, the latter with either
+-         -mid-shared-library or -msep-data.  */
+-
+-      .macro PICCALL addr
+-#if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
+-      lea     \addr-.-8,a0
+-      jsr     pc@(a0)
+-#else
+-      bsr     \addr
+-#endif
+-      .endm
+-
+-      .macro PICJUMP addr
+-      /* ISA C has no bra.l instruction, and since this assembly file
+-         gets assembled into multiple object files, we avoid the
+-         bra instruction entirely.  */
+-#if defined (__mcoldfire__) && !defined (__mcfisab__)
+-      lea     \addr-.-8,a0
+-      jmp     pc@(a0)
+-#else
+-      bra     \addr
+-#endif
+-      .endm
+-
+ # if defined (__uClinux__)
+       /* Versions for uClinux */
+@@ -171,6 +147,16 @@
+       movel   \sym@GOT(\areg), sp@-
+       .endm
++      .macro PICCALL addr
++      PICLEA  \addr,a0
++      jsr     a0@
++      .endm
++
++      .macro PICJUMP addr
++      PICLEA  \addr,a0
++      jmp     a0@
++      .endm
++
+ #  else /* !__ID_SHARED_LIBRARY__ */
+       /* Versions for -msep-data */
+@@ -183,6 +169,27 @@
+       movel   \sym@GOT(a5), sp@-
+       .endm
++      .macro PICCALL addr
++#if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
++      lea     \addr-.-8,a0
++      jsr     pc@(a0)
++#else
++      bsr     \addr
++#endif
++      .endm
++
++      .macro PICJUMP addr
++      /* ISA C has no bra.l instruction, and since this assembly file
++         gets assembled into multiple object files, we avoid the
++         bra instruction entirely.  */
++#if defined (__mcoldfire__) && !defined (__mcfisab__)
++      lea     \addr-.-8,a0
++      jmp     pc@(a0)
++#else
++      bra     \addr
++#endif
++      .endm
++
+ #  endif
+ # else /* !__uClinux__ */
+@@ -201,6 +208,27 @@
+       movel   \sym@GOT(\areg), sp@-
+       .endm
++      .macro PICCALL addr
++#if defined (__mcoldfire__) && !defined (__mcfisab__) && !defined (__mcfisac__)
++      lea     \addr-.-8,a0
++      jsr     pc@(a0)
++#else
++      bsr     \addr
++#endif
++      .endm
++
++      .macro PICJUMP addr
++      /* ISA C has no bra.l instruction, and since this assembly file
++         gets assembled into multiple object files, we avoid the
++         bra instruction entirely.  */
++#if defined (__mcoldfire__) && !defined (__mcfisab__)
++      lea     \addr-.-8,a0
++      jmp     pc@(a0)
++#else
++      bra     \addr
++#endif
++      .endm
++
+ # endif
+ #endif /* __PIC__ */
+@@ -648,6 +676,7 @@
+       .globl SYM (__negdf2)
+       .globl SYM (__cmpdf2)
+       .globl SYM (__cmpdf2_internal)
++      .hidden SYM (__cmpdf2_internal)
+       .text
+       .even
+@@ -2410,7 +2439,7 @@
+       movl    a6@(16),sp@-
+       movl    a6@(12),sp@-
+       movl    a6@(8),sp@-
+-      bsr     SYM (__cmpdf2_internal)
++      PICCALL SYM (__cmpdf2_internal)
+       unlk    a6
+       rts
+@@ -2562,6 +2591,7 @@
+       .globl SYM (__negsf2)
+       .globl SYM (__cmpsf2)
+       .globl SYM (__cmpsf2_internal)
++      .hidden SYM (__cmpsf2_internal)
+ | These are common routines to return and signal exceptions.  
+@@ -3816,7 +3846,7 @@
+       pea     1
+       movl    a6@(12),sp@-
+       movl    a6@(8),sp@-
+-      bsr (__cmpsf2_internal)
++      PICCALL SYM (__cmpsf2_internal)
+       unlk    a6
+       rts
+diff -Nurd gcc-4.3/gcc/config/mips/mips.c gcc-4.3-new/gcc/config/mips/mips.c
+--- gcc-4.3/gcc/config/mips/mips.c     2008-10-01 14:51:08.000000000 +0200
++++ gcc-4.3-new/gcc/config/mips/mips.c 2008-10-18 12:45:05.000000000 +0200
+@@ -657,6 +657,7 @@
+   { "sr71000", PROCESSOR_SR71000, 64, PTF_AVOID_BRANCHLIKELY },
+   { "xlr", PROCESSOR_XLR, 64, 0 },
+   { "octeon", PROCESSOR_OCTEON, 64, 0 },
++  { "ice9", PROCESSOR_5KF, 64 }, /* May diverge from 5kf in future. */
+ };
+ /* Default costs.  If these are used for a processor we should look
+@@ -12577,6 +12578,10 @@
+   /* Function to allocate machine-dependent function status.  */
+   init_machine_status = &mips_init_machine_status;
++  /* __thread_support is not supported by uClibc.  */
++  if (building_for_uclibc)
++    targetm.have_tls = 0;
++
+   /* Default to working around R4000 errata only if the processor
+      was selected explicitly.  */
+   if ((target_flags_explicit & MASK_FIX_R4000) == 0
+@@ -12629,18 +12634,24 @@
+ #undef SWAP_STRING
+ #undef SWAP_INT
+ }
+-
+-/* Implement CONDITIONAL_REGISTER_USAGE.  */
+-
+ void
+ mips_conditional_register_usage (void)
+ {
++
++  /* These DSP control register fields are global.  */
++  if (ISA_HAS_DSP)
++    {
++      global_regs[CCDSP_PO_REGNUM] = 1;
++      global_regs[CCDSP_SC_REGNUM] = 1;
++    }
+   if (!ISA_HAS_DSP)
+     {
+       int regno;
+       for (regno = DSP_ACC_REG_FIRST; regno <= DSP_ACC_REG_LAST; regno++)
+       fixed_regs[regno] = call_used_regs[regno] = 1;
++      for (regno = DSP_CTRL_REG_FIRST; regno <= DSP_CTRL_REG_LAST; regno++)
++      fixed_regs[regno] = call_used_regs[regno] = 1;
+     }
+   if (!TARGET_HARD_FLOAT)
+     {
+diff -Nurd gcc-4.3/gcc/config/mips/mips.h gcc-4.3-new/gcc/config/mips/mips.h
+--- gcc-4.3/gcc/config/mips/mips.h     2008-10-01 14:51:08.000000000 +0200
++++ gcc-4.3-new/gcc/config/mips/mips.h 2008-10-18 12:45:05.000000000 +0200
+@@ -1615,6 +1615,9 @@
+ #define DSP_ACC_REG_LAST 181
+ #define DSP_ACC_REG_NUM (DSP_ACC_REG_LAST - DSP_ACC_REG_FIRST + 1)
++#define DSP_CTRL_REG_FIRST 182
++#define DSP_CTRL_REG_LAST 187
++
+ #define AT_REGNUM     (GP_REG_FIRST + 1)
+ #define HI_REGNUM     (TARGET_BIG_ENDIAN ? MD_REG_FIRST : MD_REG_FIRST + 1)
+ #define LO_REGNUM     (TARGET_BIG_ENDIAN ? MD_REG_FIRST + 1 : MD_REG_FIRST)
+diff -Nurd gcc-4.3/gcc/config/mips/mips.opt gcc-4.3-new/gcc/config/mips/mips.opt
+--- gcc-4.3/gcc/config/mips/mips.opt   2008-10-01 14:51:08.000000000 +0200
++++ gcc-4.3-new/gcc/config/mips/mips.opt       2008-10-18 12:45:05.000000000 +0200
+@@ -272,6 +272,10 @@
+ Target RejectNegative Joined Var(mips_tune_string)
+ -mtune=PROCESSOR      Optimize the output for PROCESSOR
++muclibc
++Target RejectNegative Var(building_for_uclibc)
++Building with -muclibc
++
+ muninit-const-in-rodata
+ Target Report Var(TARGET_UNINIT_CONST_IN_RODATA)
+ Put uninitialized constants in ROM (needs -membedded-data)
+diff -Nurd gcc-4.3/gcc/config/rs6000/crtresfpr.asm gcc-4.3-new/gcc/config/rs6000/crtresfpr.asm
+--- gcc-4.3/gcc/config/rs6000/crtresfpr.asm    2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/crtresfpr.asm        2008-10-18 12:44:16.000000000 +0200
+@@ -49,24 +49,24 @@
+ /* Called with r11 pointing to the stack header word of the caller of the */
+ /* function, just beyond the end of the floating point save area.  */
+-FUNC_START(_restfpr_14)       lfd     14,-144(11)     /* restore fp registers */
+-FUNC_START(_restfpr_15)       lfd     15,-136(11)
+-FUNC_START(_restfpr_16)       lfd     16,-128(11)
+-FUNC_START(_restfpr_17)       lfd     17,-120(11)
+-FUNC_START(_restfpr_18)       lfd     18,-112(11)
+-FUNC_START(_restfpr_19)       lfd     19,-104(11)
+-FUNC_START(_restfpr_20)       lfd     20,-96(11)
+-FUNC_START(_restfpr_21)       lfd     21,-88(11)
+-FUNC_START(_restfpr_22)       lfd     22,-80(11)
+-FUNC_START(_restfpr_23)       lfd     23,-72(11)
+-FUNC_START(_restfpr_24)       lfd     24,-64(11)
+-FUNC_START(_restfpr_25)       lfd     25,-56(11)
+-FUNC_START(_restfpr_26)       lfd     26,-48(11)
+-FUNC_START(_restfpr_27)       lfd     27,-40(11)
+-FUNC_START(_restfpr_28)       lfd     28,-32(11)
+-FUNC_START(_restfpr_29)       lfd     29,-24(11)
+-FUNC_START(_restfpr_30)       lfd     30,-16(11)
+-FUNC_START(_restfpr_31)       lfd     31,-8(11)
++HIDDEN_FUNC(_restfpr_14)      lfd     14,-144(11)     /* restore fp registers */
++HIDDEN_FUNC(_restfpr_15)      lfd     15,-136(11)
++HIDDEN_FUNC(_restfpr_16)      lfd     16,-128(11)
++HIDDEN_FUNC(_restfpr_17)      lfd     17,-120(11)
++HIDDEN_FUNC(_restfpr_18)      lfd     18,-112(11)
++HIDDEN_FUNC(_restfpr_19)      lfd     19,-104(11)
++HIDDEN_FUNC(_restfpr_20)      lfd     20,-96(11)
++HIDDEN_FUNC(_restfpr_21)      lfd     21,-88(11)
++HIDDEN_FUNC(_restfpr_22)      lfd     22,-80(11)
++HIDDEN_FUNC(_restfpr_23)      lfd     23,-72(11)
++HIDDEN_FUNC(_restfpr_24)      lfd     24,-64(11)
++HIDDEN_FUNC(_restfpr_25)      lfd     25,-56(11)
++HIDDEN_FUNC(_restfpr_26)      lfd     26,-48(11)
++HIDDEN_FUNC(_restfpr_27)      lfd     27,-40(11)
++HIDDEN_FUNC(_restfpr_28)      lfd     28,-32(11)
++HIDDEN_FUNC(_restfpr_29)      lfd     29,-24(11)
++HIDDEN_FUNC(_restfpr_30)      lfd     30,-16(11)
++HIDDEN_FUNC(_restfpr_31)      lfd     31,-8(11)
+                       blr
+ FUNC_END(_restfpr_31)
+ FUNC_END(_restfpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/crtresgpr.asm gcc-4.3-new/gcc/config/rs6000/crtresgpr.asm
+--- gcc-4.3/gcc/config/rs6000/crtresgpr.asm    2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/crtresgpr.asm        2008-10-18 12:44:16.000000000 +0200
+@@ -49,24 +49,24 @@
+ /* Called with r11 pointing to the stack header word of the caller of the */
+ /* function, just beyond the end of the integer restore area.  */
+-FUNC_START(_restgpr_14)       lwz     14,-72(11)      /* restore gp registers */
+-FUNC_START(_restgpr_15)       lwz     15,-68(11)
+-FUNC_START(_restgpr_16)       lwz     16,-64(11)
+-FUNC_START(_restgpr_17)       lwz     17,-60(11)
+-FUNC_START(_restgpr_18)       lwz     18,-56(11)
+-FUNC_START(_restgpr_19)       lwz     19,-52(11)
+-FUNC_START(_restgpr_20)       lwz     20,-48(11)
+-FUNC_START(_restgpr_21)       lwz     21,-44(11)
+-FUNC_START(_restgpr_22)       lwz     22,-40(11)
+-FUNC_START(_restgpr_23)       lwz     23,-36(11)
+-FUNC_START(_restgpr_24)       lwz     24,-32(11)
+-FUNC_START(_restgpr_25)       lwz     25,-28(11)
+-FUNC_START(_restgpr_26)       lwz     26,-24(11)
+-FUNC_START(_restgpr_27)       lwz     27,-20(11)
+-FUNC_START(_restgpr_28)       lwz     28,-16(11)
+-FUNC_START(_restgpr_29)       lwz     29,-12(11)
+-FUNC_START(_restgpr_30)       lwz     30,-8(11)
+-FUNC_START(_restgpr_31)       lwz     31,-4(11)
++HIDDEN_FUNC(_restgpr_14)      lwz     14,-72(11)      /* restore gp registers */
++HIDDEN_FUNC(_restgpr_15)      lwz     15,-68(11)
++HIDDEN_FUNC(_restgpr_16)      lwz     16,-64(11)
++HIDDEN_FUNC(_restgpr_17)      lwz     17,-60(11)
++HIDDEN_FUNC(_restgpr_18)      lwz     18,-56(11)
++HIDDEN_FUNC(_restgpr_19)      lwz     19,-52(11)
++HIDDEN_FUNC(_restgpr_20)      lwz     20,-48(11)
++HIDDEN_FUNC(_restgpr_21)      lwz     21,-44(11)
++HIDDEN_FUNC(_restgpr_22)      lwz     22,-40(11)
++HIDDEN_FUNC(_restgpr_23)      lwz     23,-36(11)
++HIDDEN_FUNC(_restgpr_24)      lwz     24,-32(11)
++HIDDEN_FUNC(_restgpr_25)      lwz     25,-28(11)
++HIDDEN_FUNC(_restgpr_26)      lwz     26,-24(11)
++HIDDEN_FUNC(_restgpr_27)      lwz     27,-20(11)
++HIDDEN_FUNC(_restgpr_28)      lwz     28,-16(11)
++HIDDEN_FUNC(_restgpr_29)      lwz     29,-12(11)
++HIDDEN_FUNC(_restgpr_30)      lwz     30,-8(11)
++HIDDEN_FUNC(_restgpr_31)      lwz     31,-4(11)
+                       blr
+ FUNC_END(_restgpr_31)
+ FUNC_END(_restgpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/crtresxfpr.asm gcc-4.3-new/gcc/config/rs6000/crtresxfpr.asm
+--- gcc-4.3/gcc/config/rs6000/crtresxfpr.asm   2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/crtresxfpr.asm       2008-10-18 12:44:16.000000000 +0200
+@@ -51,24 +51,24 @@
+ /* In addition to restoring the fp registers, it will return to the caller's */
+ /* caller */
+-FUNC_START(_restfpr_14_x)     lfd     14,-144(11)     /* restore fp registers */
+-FUNC_START(_restfpr_15_x)     lfd     15,-136(11)
+-FUNC_START(_restfpr_16_x)     lfd     16,-128(11)
+-FUNC_START(_restfpr_17_x)     lfd     17,-120(11)
+-FUNC_START(_restfpr_18_x)     lfd     18,-112(11)
+-FUNC_START(_restfpr_19_x)     lfd     19,-104(11)
+-FUNC_START(_restfpr_20_x)     lfd     20,-96(11)
+-FUNC_START(_restfpr_21_x)     lfd     21,-88(11)
+-FUNC_START(_restfpr_22_x)     lfd     22,-80(11)
+-FUNC_START(_restfpr_23_x)     lfd     23,-72(11)
+-FUNC_START(_restfpr_24_x)     lfd     24,-64(11)
+-FUNC_START(_restfpr_25_x)     lfd     25,-56(11)
+-FUNC_START(_restfpr_26_x)     lfd     26,-48(11)
+-FUNC_START(_restfpr_27_x)     lfd     27,-40(11)
+-FUNC_START(_restfpr_28_x)     lfd     28,-32(11)
+-FUNC_START(_restfpr_29_x)     lfd     29,-24(11)
+-FUNC_START(_restfpr_30_x)     lfd     30,-16(11)
+-FUNC_START(_restfpr_31_x)     lwz     0,4(11)
++HIDDEN_FUNC(_restfpr_14_x)    lfd     14,-144(11)     /* restore fp registers */
++HIDDEN_FUNC(_restfpr_15_x)    lfd     15,-136(11)
++HIDDEN_FUNC(_restfpr_16_x)    lfd     16,-128(11)
++HIDDEN_FUNC(_restfpr_17_x)    lfd     17,-120(11)
++HIDDEN_FUNC(_restfpr_18_x)    lfd     18,-112(11)
++HIDDEN_FUNC(_restfpr_19_x)    lfd     19,-104(11)
++HIDDEN_FUNC(_restfpr_20_x)    lfd     20,-96(11)
++HIDDEN_FUNC(_restfpr_21_x)    lfd     21,-88(11)
++HIDDEN_FUNC(_restfpr_22_x)    lfd     22,-80(11)
++HIDDEN_FUNC(_restfpr_23_x)    lfd     23,-72(11)
++HIDDEN_FUNC(_restfpr_24_x)    lfd     24,-64(11)
++HIDDEN_FUNC(_restfpr_25_x)    lfd     25,-56(11)
++HIDDEN_FUNC(_restfpr_26_x)    lfd     26,-48(11)
++HIDDEN_FUNC(_restfpr_27_x)    lfd     27,-40(11)
++HIDDEN_FUNC(_restfpr_28_x)    lfd     28,-32(11)
++HIDDEN_FUNC(_restfpr_29_x)    lfd     29,-24(11)
++HIDDEN_FUNC(_restfpr_30_x)    lfd     30,-16(11)
++HIDDEN_FUNC(_restfpr_31_x)    lwz     0,4(11)
+                               lfd     31,-8(11)
+                               mtlr    0
+                               mr      1,11
+diff -Nurd gcc-4.3/gcc/config/rs6000/crtresxgpr.asm gcc-4.3-new/gcc/config/rs6000/crtresxgpr.asm
+--- gcc-4.3/gcc/config/rs6000/crtresxgpr.asm   2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/crtresxgpr.asm       2008-10-18 12:44:16.000000000 +0200
+@@ -49,24 +49,24 @@
+ /* Called with r11 pointing to the stack header word of the caller of the */
+ /* function, just beyond the end of the integer restore area.  */
+-FUNC_START(_restgpr_14_x)     lwz     14,-72(11)      /* restore gp registers */
+-FUNC_START(_restgpr_15_x)     lwz     15,-68(11)
+-FUNC_START(_restgpr_16_x)     lwz     16,-64(11)
+-FUNC_START(_restgpr_17_x)     lwz     17,-60(11)
+-FUNC_START(_restgpr_18_x)     lwz     18,-56(11)
+-FUNC_START(_restgpr_19_x)     lwz     19,-52(11)
+-FUNC_START(_restgpr_20_x)     lwz     20,-48(11)
+-FUNC_START(_restgpr_21_x)     lwz     21,-44(11)
+-FUNC_START(_restgpr_22_x)     lwz     22,-40(11)
+-FUNC_START(_restgpr_23_x)     lwz     23,-36(11)
+-FUNC_START(_restgpr_24_x)     lwz     24,-32(11)
+-FUNC_START(_restgpr_25_x)     lwz     25,-28(11)
+-FUNC_START(_restgpr_26_x)     lwz     26,-24(11)
+-FUNC_START(_restgpr_27_x)     lwz     27,-20(11)
+-FUNC_START(_restgpr_28_x)     lwz     28,-16(11)
+-FUNC_START(_restgpr_29_x)     lwz     29,-12(11)
+-FUNC_START(_restgpr_30_x)     lwz     30,-8(11)
+-FUNC_START(_restgpr_31_x)     lwz     0,4(11)
++HIDDEN_FUNC(_restgpr_14_x)    lwz     14,-72(11)      /* restore gp registers */
++HIDDEN_FUNC(_restgpr_15_x)    lwz     15,-68(11)
++HIDDEN_FUNC(_restgpr_16_x)    lwz     16,-64(11)
++HIDDEN_FUNC(_restgpr_17_x)    lwz     17,-60(11)
++HIDDEN_FUNC(_restgpr_18_x)    lwz     18,-56(11)
++HIDDEN_FUNC(_restgpr_19_x)    lwz     19,-52(11)
++HIDDEN_FUNC(_restgpr_20_x)    lwz     20,-48(11)
++HIDDEN_FUNC(_restgpr_21_x)    lwz     21,-44(11)
++HIDDEN_FUNC(_restgpr_22_x)    lwz     22,-40(11)
++HIDDEN_FUNC(_restgpr_23_x)    lwz     23,-36(11)
++HIDDEN_FUNC(_restgpr_24_x)    lwz     24,-32(11)
++HIDDEN_FUNC(_restgpr_25_x)    lwz     25,-28(11)
++HIDDEN_FUNC(_restgpr_26_x)    lwz     26,-24(11)
++HIDDEN_FUNC(_restgpr_27_x)    lwz     27,-20(11)
++HIDDEN_FUNC(_restgpr_28_x)    lwz     28,-16(11)
++HIDDEN_FUNC(_restgpr_29_x)    lwz     29,-12(11)
++HIDDEN_FUNC(_restgpr_30_x)    lwz     30,-8(11)
++HIDDEN_FUNC(_restgpr_31_x)    lwz     0,4(11)
+                               lwz     31,-4(11)
+                               mtlr    0
+                               mr      1,11
+diff -Nurd gcc-4.3/gcc/config/rs6000/crtsavfpr.asm gcc-4.3-new/gcc/config/rs6000/crtsavfpr.asm
+--- gcc-4.3/gcc/config/rs6000/crtsavfpr.asm    2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/crtsavfpr.asm        2008-10-18 12:44:16.000000000 +0200
+@@ -49,24 +49,24 @@
+ /* Called with r11 pointing to the stack header word of the caller of the */
+ /* function, just beyond the end of the floating point save area.  */
+-FUNC_START(_savefpr_14)       stfd    14,-144(11)     /* save fp registers */
+-FUNC_START(_savefpr_15)       stfd    15,-136(11)
+-FUNC_START(_savefpr_16)       stfd    16,-128(11)
+-FUNC_START(_savefpr_17)       stfd    17,-120(11)
+-FUNC_START(_savefpr_18)       stfd    18,-112(11)
+-FUNC_START(_savefpr_19)       stfd    19,-104(11)
+-FUNC_START(_savefpr_20)       stfd    20,-96(11)
+-FUNC_START(_savefpr_21)       stfd    21,-88(11)
+-FUNC_START(_savefpr_22)       stfd    22,-80(11)
+-FUNC_START(_savefpr_23)       stfd    23,-72(11)
+-FUNC_START(_savefpr_24)       stfd    24,-64(11)
+-FUNC_START(_savefpr_25)       stfd    25,-56(11)
+-FUNC_START(_savefpr_26)       stfd    26,-48(11)
+-FUNC_START(_savefpr_27)       stfd    27,-40(11)
+-FUNC_START(_savefpr_28)       stfd    28,-32(11)
+-FUNC_START(_savefpr_29)       stfd    29,-24(11)
+-FUNC_START(_savefpr_30)       stfd    30,-16(11)
+-FUNC_START(_savefpr_31)       stfd    31,-8(11)
++HIDDEN_FUNC(_savefpr_14)      stfd    14,-144(11)     /* save fp registers */
++HIDDEN_FUNC(_savefpr_15)      stfd    15,-136(11)
++HIDDEN_FUNC(_savefpr_16)      stfd    16,-128(11)
++HIDDEN_FUNC(_savefpr_17)      stfd    17,-120(11)
++HIDDEN_FUNC(_savefpr_18)      stfd    18,-112(11)
++HIDDEN_FUNC(_savefpr_19)      stfd    19,-104(11)
++HIDDEN_FUNC(_savefpr_20)      stfd    20,-96(11)
++HIDDEN_FUNC(_savefpr_21)      stfd    21,-88(11)
++HIDDEN_FUNC(_savefpr_22)      stfd    22,-80(11)
++HIDDEN_FUNC(_savefpr_23)      stfd    23,-72(11)
++HIDDEN_FUNC(_savefpr_24)      stfd    24,-64(11)
++HIDDEN_FUNC(_savefpr_25)      stfd    25,-56(11)
++HIDDEN_FUNC(_savefpr_26)      stfd    26,-48(11)
++HIDDEN_FUNC(_savefpr_27)      stfd    27,-40(11)
++HIDDEN_FUNC(_savefpr_28)      stfd    28,-32(11)
++HIDDEN_FUNC(_savefpr_29)      stfd    29,-24(11)
++HIDDEN_FUNC(_savefpr_30)      stfd    30,-16(11)
++HIDDEN_FUNC(_savefpr_31)      stfd    31,-8(11)
+                       blr
+ FUNC_END(_savefpr_31)
+ FUNC_END(_savefpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/crtsavgpr.asm gcc-4.3-new/gcc/config/rs6000/crtsavgpr.asm
+--- gcc-4.3/gcc/config/rs6000/crtsavgpr.asm    2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/crtsavgpr.asm        2008-10-18 12:44:16.000000000 +0200
+@@ -49,24 +49,24 @@
+ /* Called with r11 pointing to the stack header word of the caller of the */
+ /* function, just beyond the end of the integer save area.  */
+-FUNC_START(_savegpr_14)       stw     14,-72(11)      /* save gp registers */
+-FUNC_START(_savegpr_15)       stw     15,-68(11)
+-FUNC_START(_savegpr_16)       stw     16,-64(11)
+-FUNC_START(_savegpr_17)       stw     17,-60(11)
+-FUNC_START(_savegpr_18)       stw     18,-56(11)
+-FUNC_START(_savegpr_19)       stw     19,-52(11)
+-FUNC_START(_savegpr_20)       stw     20,-48(11)
+-FUNC_START(_savegpr_21)       stw     21,-44(11)
+-FUNC_START(_savegpr_22)       stw     22,-40(11)
+-FUNC_START(_savegpr_23)       stw     23,-36(11)
+-FUNC_START(_savegpr_24)       stw     24,-32(11)
+-FUNC_START(_savegpr_25)       stw     25,-28(11)
+-FUNC_START(_savegpr_26)       stw     26,-24(11)
+-FUNC_START(_savegpr_27)       stw     27,-20(11)
+-FUNC_START(_savegpr_28)       stw     28,-16(11)
+-FUNC_START(_savegpr_29)       stw     29,-12(11)
+-FUNC_START(_savegpr_30)       stw     30,-8(11)
+-FUNC_START(_savegpr_31)       stw     31,-4(11)
++HIDDEN_FUNC(_savegpr_14)      stw     14,-72(11)      /* save gp registers */
++HIDDEN_FUNC(_savegpr_15)      stw     15,-68(11)
++HIDDEN_FUNC(_savegpr_16)      stw     16,-64(11)
++HIDDEN_FUNC(_savegpr_17)      stw     17,-60(11)
++HIDDEN_FUNC(_savegpr_18)      stw     18,-56(11)
++HIDDEN_FUNC(_savegpr_19)      stw     19,-52(11)
++HIDDEN_FUNC(_savegpr_20)      stw     20,-48(11)
++HIDDEN_FUNC(_savegpr_21)      stw     21,-44(11)
++HIDDEN_FUNC(_savegpr_22)      stw     22,-40(11)
++HIDDEN_FUNC(_savegpr_23)      stw     23,-36(11)
++HIDDEN_FUNC(_savegpr_24)      stw     24,-32(11)
++HIDDEN_FUNC(_savegpr_25)      stw     25,-28(11)
++HIDDEN_FUNC(_savegpr_26)      stw     26,-24(11)
++HIDDEN_FUNC(_savegpr_27)      stw     27,-20(11)
++HIDDEN_FUNC(_savegpr_28)      stw     28,-16(11)
++HIDDEN_FUNC(_savegpr_29)      stw     29,-12(11)
++HIDDEN_FUNC(_savegpr_30)      stw     30,-8(11)
++HIDDEN_FUNC(_savegpr_31)      stw     31,-4(11)
+                       blr
+ FUNC_END(_savegpr_31)
+ FUNC_END(_savegpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtres32gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtres32gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtres32gpr.asm      2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtres32gpr.asm  2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for restoring 32-bit integer registers, called by the compiler.  */
+ /* "Bare" versions that simply return to their caller.  */
+-FUNC_START(_rest32gpr_14)     lwz 14,-72(11)
+-FUNC_START(_rest32gpr_15)     lwz 15,-68(11)
+-FUNC_START(_rest32gpr_16)     lwz 16,-64(11)
+-FUNC_START(_rest32gpr_17)     lwz 17,-60(11)
+-FUNC_START(_rest32gpr_18)     lwz 18,-56(11)
+-FUNC_START(_rest32gpr_19)     lwz 19,-52(11)
+-FUNC_START(_rest32gpr_20)     lwz 20,-48(11)
+-FUNC_START(_rest32gpr_21)     lwz 21,-44(11)
+-FUNC_START(_rest32gpr_22)     lwz 22,-40(11)
+-FUNC_START(_rest32gpr_23)     lwz 23,-36(11)
+-FUNC_START(_rest32gpr_24)     lwz 24,-32(11)
+-FUNC_START(_rest32gpr_25)     lwz 25,-28(11)
+-FUNC_START(_rest32gpr_26)     lwz 26,-24(11)
+-FUNC_START(_rest32gpr_27)     lwz 27,-20(11)
+-FUNC_START(_rest32gpr_28)     lwz 28,-16(11)
+-FUNC_START(_rest32gpr_29)     lwz 29,-12(11)
+-FUNC_START(_rest32gpr_30)     lwz 30,-8(11)
+-FUNC_START(_rest32gpr_31)     lwz 31,-4(11)
++HIDDEN_FUNC(_rest32gpr_14)    lwz 14,-72(11)
++HIDDEN_FUNC(_rest32gpr_15)    lwz 15,-68(11)
++HIDDEN_FUNC(_rest32gpr_16)    lwz 16,-64(11)
++HIDDEN_FUNC(_rest32gpr_17)    lwz 17,-60(11)
++HIDDEN_FUNC(_rest32gpr_18)    lwz 18,-56(11)
++HIDDEN_FUNC(_rest32gpr_19)    lwz 19,-52(11)
++HIDDEN_FUNC(_rest32gpr_20)    lwz 20,-48(11)
++HIDDEN_FUNC(_rest32gpr_21)    lwz 21,-44(11)
++HIDDEN_FUNC(_rest32gpr_22)    lwz 22,-40(11)
++HIDDEN_FUNC(_rest32gpr_23)    lwz 23,-36(11)
++HIDDEN_FUNC(_rest32gpr_24)    lwz 24,-32(11)
++HIDDEN_FUNC(_rest32gpr_25)    lwz 25,-28(11)
++HIDDEN_FUNC(_rest32gpr_26)    lwz 26,-24(11)
++HIDDEN_FUNC(_rest32gpr_27)    lwz 27,-20(11)
++HIDDEN_FUNC(_rest32gpr_28)    lwz 28,-16(11)
++HIDDEN_FUNC(_rest32gpr_29)    lwz 29,-12(11)
++HIDDEN_FUNC(_rest32gpr_30)    lwz 30,-8(11)
++HIDDEN_FUNC(_rest32gpr_31)    lwz 31,-4(11)
+                               blr
+ FUNC_END(_rest32gpr_31)
+ FUNC_END(_rest32gpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtres64gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtres64gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtres64gpr.asm      2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtres64gpr.asm  2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for restoring 64-bit integer registers, called by the compiler.  */
+ /* "Bare" versions that return to their caller.  */
+-FUNC_START(_rest64gpr_14)     evldd 14,0(11)
+-FUNC_START(_rest64gpr_15)     evldd 15,8(11)
+-FUNC_START(_rest64gpr_16)     evldd 16,16(11)
+-FUNC_START(_rest64gpr_17)     evldd 17,24(11)
+-FUNC_START(_rest64gpr_18)     evldd 18,32(11)
+-FUNC_START(_rest64gpr_19)     evldd 19,40(11)
+-FUNC_START(_rest64gpr_20)     evldd 20,48(11)
+-FUNC_START(_rest64gpr_21)     evldd 21,56(11)
+-FUNC_START(_rest64gpr_22)     evldd 22,64(11)
+-FUNC_START(_rest64gpr_23)     evldd 23,72(11)
+-FUNC_START(_rest64gpr_24)     evldd 24,80(11)
+-FUNC_START(_rest64gpr_25)     evldd 25,88(11)
+-FUNC_START(_rest64gpr_26)     evldd 26,96(11)
+-FUNC_START(_rest64gpr_27)     evldd 27,104(11)
+-FUNC_START(_rest64gpr_28)     evldd 28,112(11)
+-FUNC_START(_rest64gpr_29)     evldd 29,120(11)
+-FUNC_START(_rest64gpr_30)     evldd 30,128(11)
+-FUNC_START(_rest64gpr_31)     evldd 31,136(11)
++HIDDEN_FUNC(_rest64gpr_14)    evldd 14,0(11)
++HIDDEN_FUNC(_rest64gpr_15)    evldd 15,8(11)
++HIDDEN_FUNC(_rest64gpr_16)    evldd 16,16(11)
++HIDDEN_FUNC(_rest64gpr_17)    evldd 17,24(11)
++HIDDEN_FUNC(_rest64gpr_18)    evldd 18,32(11)
++HIDDEN_FUNC(_rest64gpr_19)    evldd 19,40(11)
++HIDDEN_FUNC(_rest64gpr_20)    evldd 20,48(11)
++HIDDEN_FUNC(_rest64gpr_21)    evldd 21,56(11)
++HIDDEN_FUNC(_rest64gpr_22)    evldd 22,64(11)
++HIDDEN_FUNC(_rest64gpr_23)    evldd 23,72(11)
++HIDDEN_FUNC(_rest64gpr_24)    evldd 24,80(11)
++HIDDEN_FUNC(_rest64gpr_25)    evldd 25,88(11)
++HIDDEN_FUNC(_rest64gpr_26)    evldd 26,96(11)
++HIDDEN_FUNC(_rest64gpr_27)    evldd 27,104(11)
++HIDDEN_FUNC(_rest64gpr_28)    evldd 28,112(11)
++HIDDEN_FUNC(_rest64gpr_29)    evldd 29,120(11)
++HIDDEN_FUNC(_rest64gpr_30)    evldd 30,128(11)
++HIDDEN_FUNC(_rest64gpr_31)    evldd 31,136(11)
+                               blr
+ FUNC_END(_rest64gpr_31)
+ FUNC_END(_rest64gpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtres64gprctr.asm gcc-4.3-new/gcc/config/rs6000/e500crtres64gprctr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtres64gprctr.asm   2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtres64gprctr.asm       2008-10-18 12:44:16.000000000 +0200
+@@ -43,41 +43,41 @@
+ /* Routines for restoring 64-bit integer registers where the number of
+    registers to be restored is passed in CTR, called by the compiler.  */
+-FUNC_START(_rest64gpr_ctr_14) evldd 14,0(11)
++HIDDEN_FUNC(_rest64gpr_ctr_14)        evldd 14,0(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_15) evldd 15,8(11)
++HIDDEN_FUNC(_rest64gpr_ctr_15)        evldd 15,8(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_16) evldd 16,16(11)
++HIDDEN_FUNC(_rest64gpr_ctr_16)        evldd 16,16(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_17) evldd 17,24(11)
++HIDDEN_FUNC(_rest64gpr_ctr_17)        evldd 17,24(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_18) evldd 18,32(11)
++HIDDEN_FUNC(_rest64gpr_ctr_18)        evldd 18,32(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_19) evldd 19,40(11)
++HIDDEN_FUNC(_rest64gpr_ctr_19)        evldd 19,40(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_20) evldd 20,48(11)
++HIDDEN_FUNC(_rest64gpr_ctr_20)        evldd 20,48(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_21) evldd 21,56(11)
++HIDDEN_FUNC(_rest64gpr_ctr_21)        evldd 21,56(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_22) evldd 22,64(11)
++HIDDEN_FUNC(_rest64gpr_ctr_22)        evldd 22,64(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_23) evldd 23,72(11)
++HIDDEN_FUNC(_rest64gpr_ctr_23)        evldd 23,72(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_24) evldd 24,80(11)
++HIDDEN_FUNC(_rest64gpr_ctr_24)        evldd 24,80(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_25) evldd 25,88(11)
++HIDDEN_FUNC(_rest64gpr_ctr_25)        evldd 25,88(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_26) evldd 26,96(11)
++HIDDEN_FUNC(_rest64gpr_ctr_26)        evldd 26,96(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_27) evldd 27,104(11)
++HIDDEN_FUNC(_rest64gpr_ctr_27)        evldd 27,104(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_28) evldd 28,112(11)
++HIDDEN_FUNC(_rest64gpr_ctr_28)        evldd 28,112(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_29) evldd 29,120(11)
++HIDDEN_FUNC(_rest64gpr_ctr_29)        evldd 29,120(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_30) evldd 30,128(11)
++HIDDEN_FUNC(_rest64gpr_ctr_30)        evldd 30,128(11)
+                               bdz _rest64_gpr_ctr_done
+-FUNC_START(_rest64gpr_ctr_31) evldd 31,136(11)
++HIDDEN_FUNC(_rest64gpr_ctr_31)        evldd 31,136(11)
+ _rest64gpr_ctr_done:          blr
+ #endif
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtrest32gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtrest32gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtrest32gpr.asm     2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtrest32gpr.asm 2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for restoring 32-bit integer registers, called by the compiler.  */
+ /* "Tail" versions that perform a tail call.  */
+-FUNC_START(_rest32gpr_14_t)   lwz 14,-72(11)
+-FUNC_START(_rest32gpr_15_t)   lwz 15,-68(11)
+-FUNC_START(_rest32gpr_16_t)   lwz 16,-64(11)
+-FUNC_START(_rest32gpr_17_t)   lwz 17,-60(11)
+-FUNC_START(_rest32gpr_18_t)   lwz 18,-56(11)
+-FUNC_START(_rest32gpr_19_t)   lwz 19,-52(11)
+-FUNC_START(_rest32gpr_20_t)   lwz 20,-48(11)
+-FUNC_START(_rest32gpr_21_t)   lwz 21,-44(11)
+-FUNC_START(_rest32gpr_22_t)   lwz 22,-40(11)
+-FUNC_START(_rest32gpr_23_t)   lwz 23,-36(11)
+-FUNC_START(_rest32gpr_24_t)   lwz 24,-32(11)
+-FUNC_START(_rest32gpr_25_t)   lwz 25,-28(11)
+-FUNC_START(_rest32gpr_26_t)   lwz 26,-24(11)
+-FUNC_START(_rest32gpr_27_t)   lwz 27,-20(11)
+-FUNC_START(_rest32gpr_28_t)   lwz 28,-16(11)
+-FUNC_START(_rest32gpr_29_t)   lwz 29,-12(11)
+-FUNC_START(_rest32gpr_30_t)   lwz 30,-8(11)
+-FUNC_START(_rest32gpr_31_t)   lwz 31,-4(11)
++HIDDEN_FUNC(_rest32gpr_14_t)  lwz 14,-72(11)
++HIDDEN_FUNC(_rest32gpr_15_t)  lwz 15,-68(11)
++HIDDEN_FUNC(_rest32gpr_16_t)  lwz 16,-64(11)
++HIDDEN_FUNC(_rest32gpr_17_t)  lwz 17,-60(11)
++HIDDEN_FUNC(_rest32gpr_18_t)  lwz 18,-56(11)
++HIDDEN_FUNC(_rest32gpr_19_t)  lwz 19,-52(11)
++HIDDEN_FUNC(_rest32gpr_20_t)  lwz 20,-48(11)
++HIDDEN_FUNC(_rest32gpr_21_t)  lwz 21,-44(11)
++HIDDEN_FUNC(_rest32gpr_22_t)  lwz 22,-40(11)
++HIDDEN_FUNC(_rest32gpr_23_t)  lwz 23,-36(11)
++HIDDEN_FUNC(_rest32gpr_24_t)  lwz 24,-32(11)
++HIDDEN_FUNC(_rest32gpr_25_t)  lwz 25,-28(11)
++HIDDEN_FUNC(_rest32gpr_26_t)  lwz 26,-24(11)
++HIDDEN_FUNC(_rest32gpr_27_t)  lwz 27,-20(11)
++HIDDEN_FUNC(_rest32gpr_28_t)  lwz 28,-16(11)
++HIDDEN_FUNC(_rest32gpr_29_t)  lwz 29,-12(11)
++HIDDEN_FUNC(_rest32gpr_30_t)  lwz 30,-8(11)
++HIDDEN_FUNC(_rest32gpr_31_t)  lwz 31,-4(11)
+                               lwz 0,4(11)
+                               mr 1,11
+                               blr
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtrest64gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtrest64gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtrest64gpr.asm     2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtrest64gpr.asm 2008-10-18 12:44:16.000000000 +0200
+@@ -42,24 +42,24 @@
+ /* "Tail" versions that perform a tail call.  */
+-FUNC_START(_rest64gpr_14_t)   evldd 14,0(11)
+-FUNC_START(_rest64gpr_15_t)   evldd 15,8(11)
+-FUNC_START(_rest64gpr_16_t)   evldd 16,16(11)
+-FUNC_START(_rest64gpr_17_t)   evldd 17,24(11)
+-FUNC_START(_rest64gpr_18_t)   evldd 18,32(11)
+-FUNC_START(_rest64gpr_19_t)   evldd 19,40(11)
+-FUNC_START(_rest64gpr_20_t)   evldd 20,48(11)
+-FUNC_START(_rest64gpr_21_t)   evldd 21,56(11)
+-FUNC_START(_rest64gpr_22_t)   evldd 22,64(11)
+-FUNC_START(_rest64gpr_23_t)   evldd 23,72(11)
+-FUNC_START(_rest64gpr_24_t)   evldd 24,80(11)
+-FUNC_START(_rest64gpr_25_t)   evldd 25,88(11)
+-FUNC_START(_rest64gpr_26_t)   evldd 26,96(11)
+-FUNC_START(_rest64gpr_27_t)   evldd 27,104(11)
+-FUNC_START(_rest64gpr_28_t)   evldd 28,112(11)
+-FUNC_START(_rest64gpr_29_t)   evldd 29,120(11)
+-FUNC_START(_rest64gpr_30_t)   evldd 30,128(11)
+-FUNC_START(_rest64gpr_31_t)   lwz 0,148(11)
++HIDDEN_FUNC(_rest64gpr_14_t)  evldd 14,0(11)
++HIDDEN_FUNC(_rest64gpr_15_t)  evldd 15,8(11)
++HIDDEN_FUNC(_rest64gpr_16_t)  evldd 16,16(11)
++HIDDEN_FUNC(_rest64gpr_17_t)  evldd 17,24(11)
++HIDDEN_FUNC(_rest64gpr_18_t)  evldd 18,32(11)
++HIDDEN_FUNC(_rest64gpr_19_t)  evldd 19,40(11)
++HIDDEN_FUNC(_rest64gpr_20_t)  evldd 20,48(11)
++HIDDEN_FUNC(_rest64gpr_21_t)  evldd 21,56(11)
++HIDDEN_FUNC(_rest64gpr_22_t)  evldd 22,64(11)
++HIDDEN_FUNC(_rest64gpr_23_t)  evldd 23,72(11)
++HIDDEN_FUNC(_rest64gpr_24_t)  evldd 24,80(11)
++HIDDEN_FUNC(_rest64gpr_25_t)  evldd 25,88(11)
++HIDDEN_FUNC(_rest64gpr_26_t)  evldd 26,96(11)
++HIDDEN_FUNC(_rest64gpr_27_t)  evldd 27,104(11)
++HIDDEN_FUNC(_rest64gpr_28_t)  evldd 28,112(11)
++HIDDEN_FUNC(_rest64gpr_29_t)  evldd 29,120(11)
++HIDDEN_FUNC(_rest64gpr_30_t)  evldd 30,128(11)
++HIDDEN_FUNC(_rest64gpr_31_t)  lwz 0,148(11)
+                               evldd 31,136(11)
+                               addi 1,11,144
+                               blr
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtresx32gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtresx32gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtresx32gpr.asm     2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtresx32gpr.asm 2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for restoring 32-bit integer registers, called by the compiler.  */
+ /* "Exit" versions that return to the caller's caller.  */
+-FUNC_START(_rest32gpr_14_x)   lwz 14,-72(11)
+-FUNC_START(_rest32gpr_15_x)   lwz 15,-68(11)
+-FUNC_START(_rest32gpr_16_x)   lwz 16,-64(11)
+-FUNC_START(_rest32gpr_17_x)   lwz 17,-60(11)
+-FUNC_START(_rest32gpr_18_x)   lwz 18,-56(11)
+-FUNC_START(_rest32gpr_19_x)   lwz 19,-52(11)
+-FUNC_START(_rest32gpr_20_x)   lwz 20,-48(11)
+-FUNC_START(_rest32gpr_21_x)   lwz 21,-44(11)
+-FUNC_START(_rest32gpr_22_x)   lwz 22,-40(11)
+-FUNC_START(_rest32gpr_23_x)   lwz 23,-36(11)
+-FUNC_START(_rest32gpr_24_x)   lwz 24,-32(11)
+-FUNC_START(_rest32gpr_25_x)   lwz 25,-28(11)
+-FUNC_START(_rest32gpr_26_x)   lwz 26,-24(11)
+-FUNC_START(_rest32gpr_27_x)   lwz 27,-20(11)
+-FUNC_START(_rest32gpr_28_x)   lwz 28,-16(11)
+-FUNC_START(_rest32gpr_29_x)   lwz 29,-12(11)
+-FUNC_START(_rest32gpr_30_x)   lwz 30,-8(11)
+-FUNC_START(_rest32gpr_31_x)   lwz 0,4(11)
++HIDDEN_FUNC(_rest32gpr_14_x)  lwz 14,-72(11)
++HIDDEN_FUNC(_rest32gpr_15_x)  lwz 15,-68(11)
++HIDDEN_FUNC(_rest32gpr_16_x)  lwz 16,-64(11)
++HIDDEN_FUNC(_rest32gpr_17_x)  lwz 17,-60(11)
++HIDDEN_FUNC(_rest32gpr_18_x)  lwz 18,-56(11)
++HIDDEN_FUNC(_rest32gpr_19_x)  lwz 19,-52(11)
++HIDDEN_FUNC(_rest32gpr_20_x)  lwz 20,-48(11)
++HIDDEN_FUNC(_rest32gpr_21_x)  lwz 21,-44(11)
++HIDDEN_FUNC(_rest32gpr_22_x)  lwz 22,-40(11)
++HIDDEN_FUNC(_rest32gpr_23_x)  lwz 23,-36(11)
++HIDDEN_FUNC(_rest32gpr_24_x)  lwz 24,-32(11)
++HIDDEN_FUNC(_rest32gpr_25_x)  lwz 25,-28(11)
++HIDDEN_FUNC(_rest32gpr_26_x)  lwz 26,-24(11)
++HIDDEN_FUNC(_rest32gpr_27_x)  lwz 27,-20(11)
++HIDDEN_FUNC(_rest32gpr_28_x)  lwz 28,-16(11)
++HIDDEN_FUNC(_rest32gpr_29_x)  lwz 29,-12(11)
++HIDDEN_FUNC(_rest32gpr_30_x)  lwz 30,-8(11)
++HIDDEN_FUNC(_rest32gpr_31_x)  lwz 0,4(11)
+                               lwz 31,-4(11)
+                               mr 1,11
+                               mtlr 0
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtresx64gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtresx64gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtresx64gpr.asm     2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtresx64gpr.asm 2008-10-18 12:44:16.000000000 +0200
+@@ -42,24 +42,24 @@
+ /* "Exit" versions that return to their caller's caller.  */
+-FUNC_START(_rest64gpr_14_x)   evldd 14,0(11)
+-FUNC_START(_rest64gpr_15_x)   evldd 15,8(11)
+-FUNC_START(_rest64gpr_16_x)   evldd 16,16(11)
+-FUNC_START(_rest64gpr_17_x)   evldd 17,24(11)
+-FUNC_START(_rest64gpr_18_x)   evldd 18,32(11)
+-FUNC_START(_rest64gpr_19_x)   evldd 19,40(11)
+-FUNC_START(_rest64gpr_20_x)   evldd 20,48(11)
+-FUNC_START(_rest64gpr_21_x)   evldd 21,56(11)
+-FUNC_START(_rest64gpr_22_x)   evldd 22,64(11)
+-FUNC_START(_rest64gpr_23_x)   evldd 23,72(11)
+-FUNC_START(_rest64gpr_24_x)   evldd 24,80(11)
+-FUNC_START(_rest64gpr_25_x)   evldd 25,88(11)
+-FUNC_START(_rest64gpr_26_x)   evldd 26,96(11)
+-FUNC_START(_rest64gpr_27_x)   evldd 27,104(11)
+-FUNC_START(_rest64gpr_28_x)   evldd 28,112(11)
+-FUNC_START(_rest64gpr_29_x)   evldd 29,120(11)
+-FUNC_START(_rest64gpr_30_x)   evldd 30,128(11)
+-FUNC_START(_rest64gpr_31_x)   lwz 0,148(11)
++HIDDEN_FUNC(_rest64gpr_14_x)  evldd 14,0(11)
++HIDDEN_FUNC(_rest64gpr_15_x)  evldd 15,8(11)
++HIDDEN_FUNC(_rest64gpr_16_x)  evldd 16,16(11)
++HIDDEN_FUNC(_rest64gpr_17_x)  evldd 17,24(11)
++HIDDEN_FUNC(_rest64gpr_18_x)  evldd 18,32(11)
++HIDDEN_FUNC(_rest64gpr_19_x)  evldd 19,40(11)
++HIDDEN_FUNC(_rest64gpr_20_x)  evldd 20,48(11)
++HIDDEN_FUNC(_rest64gpr_21_x)  evldd 21,56(11)
++HIDDEN_FUNC(_rest64gpr_22_x)  evldd 22,64(11)
++HIDDEN_FUNC(_rest64gpr_23_x)  evldd 23,72(11)
++HIDDEN_FUNC(_rest64gpr_24_x)  evldd 24,80(11)
++HIDDEN_FUNC(_rest64gpr_25_x)  evldd 25,88(11)
++HIDDEN_FUNC(_rest64gpr_26_x)  evldd 26,96(11)
++HIDDEN_FUNC(_rest64gpr_27_x)  evldd 27,104(11)
++HIDDEN_FUNC(_rest64gpr_28_x)  evldd 28,112(11)
++HIDDEN_FUNC(_rest64gpr_29_x)  evldd 29,120(11)
++HIDDEN_FUNC(_rest64gpr_30_x)  evldd 30,128(11)
++HIDDEN_FUNC(_rest64gpr_31_x)  lwz 0,148(11)
+                               evldd 31,136(11)
+                               addi 1,11,144
+                               mtlr 0
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtsav32gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtsav32gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtsav32gpr.asm      2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtsav32gpr.asm  2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for saving 32-bit integer registers, called by the compiler.  */
+ /* "Bare" versions that simply return to their caller.  */
+-FUNC_START(_save32gpr_14)     stw 14,-72(11)
+-FUNC_START(_save32gpr_15)     stw 15,-68(11)
+-FUNC_START(_save32gpr_16)     stw 16,-64(11)
+-FUNC_START(_save32gpr_17)     stw 17,-60(11)
+-FUNC_START(_save32gpr_18)     stw 18,-56(11)
+-FUNC_START(_save32gpr_19)     stw 19,-52(11)
+-FUNC_START(_save32gpr_20)     stw 20,-48(11)
+-FUNC_START(_save32gpr_21)     stw 21,-44(11)
+-FUNC_START(_save32gpr_22)     stw 22,-40(11)
+-FUNC_START(_save32gpr_23)     stw 23,-36(11)
+-FUNC_START(_save32gpr_24)     stw 24,-32(11)
+-FUNC_START(_save32gpr_25)     stw 25,-28(11)
+-FUNC_START(_save32gpr_26)     stw 26,-24(11)
+-FUNC_START(_save32gpr_27)     stw 27,-20(11)
+-FUNC_START(_save32gpr_28)     stw 28,-16(11)
+-FUNC_START(_save32gpr_29)     stw 29,-12(11)
+-FUNC_START(_save32gpr_30)     stw 30,-8(11)
+-FUNC_START(_save32gpr_31)     stw 31,-4(11)
++HIDDEN_FUNC(_save32gpr_14)    stw 14,-72(11)
++HIDDEN_FUNC(_save32gpr_15)    stw 15,-68(11)
++HIDDEN_FUNC(_save32gpr_16)    stw 16,-64(11)
++HIDDEN_FUNC(_save32gpr_17)    stw 17,-60(11)
++HIDDEN_FUNC(_save32gpr_18)    stw 18,-56(11)
++HIDDEN_FUNC(_save32gpr_19)    stw 19,-52(11)
++HIDDEN_FUNC(_save32gpr_20)    stw 20,-48(11)
++HIDDEN_FUNC(_save32gpr_21)    stw 21,-44(11)
++HIDDEN_FUNC(_save32gpr_22)    stw 22,-40(11)
++HIDDEN_FUNC(_save32gpr_23)    stw 23,-36(11)
++HIDDEN_FUNC(_save32gpr_24)    stw 24,-32(11)
++HIDDEN_FUNC(_save32gpr_25)    stw 25,-28(11)
++HIDDEN_FUNC(_save32gpr_26)    stw 26,-24(11)
++HIDDEN_FUNC(_save32gpr_27)    stw 27,-20(11)
++HIDDEN_FUNC(_save32gpr_28)    stw 28,-16(11)
++HIDDEN_FUNC(_save32gpr_29)    stw 29,-12(11)
++HIDDEN_FUNC(_save32gpr_30)    stw 30,-8(11)
++HIDDEN_FUNC(_save32gpr_31)    stw 31,-4(11)
+                               blr
+ FUNC_END(_save32gpr_31)
+ FUNC_END(_save32gpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtsav64gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtsav64gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtsav64gpr.asm      2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtsav64gpr.asm  2008-10-18 12:44:16.000000000 +0200
+@@ -42,24 +42,24 @@
+ /* Routines for saving 64-bit integer registers, called by the compiler.  */
+-FUNC_START(_save64gpr_14)     evstdd 14,0(11)
+-FUNC_START(_save64gpr_15)     evstdd 15,8(11)
+-FUNC_START(_save64gpr_16)     evstdd 16,16(11)
+-FUNC_START(_save64gpr_17)     evstdd 17,24(11)
+-FUNC_START(_save64gpr_18)     evstdd 18,32(11)
+-FUNC_START(_save64gpr_19)     evstdd 19,40(11)
+-FUNC_START(_save64gpr_20)     evstdd 20,48(11)
+-FUNC_START(_save64gpr_21)     evstdd 21,56(11)
+-FUNC_START(_save64gpr_22)     evstdd 22,64(11)
+-FUNC_START(_save64gpr_23)     evstdd 23,72(11)
+-FUNC_START(_save64gpr_24)     evstdd 24,80(11)
+-FUNC_START(_save64gpr_25)     evstdd 25,88(11)
+-FUNC_START(_save64gpr_26)     evstdd 26,96(11)
+-FUNC_START(_save64gpr_27)     evstdd 27,104(11)
+-FUNC_START(_save64gpr_28)     evstdd 28,112(11)
+-FUNC_START(_save64gpr_29)     evstdd 29,120(11)
+-FUNC_START(_save64gpr_30)     evstdd 30,128(11)
+-FUNC_START(_save64gpr_31)     evstdd 31,136(11)
++HIDDEN_FUNC(_save64gpr_14)    evstdd 14,0(11)
++HIDDEN_FUNC(_save64gpr_15)    evstdd 15,8(11)
++HIDDEN_FUNC(_save64gpr_16)    evstdd 16,16(11)
++HIDDEN_FUNC(_save64gpr_17)    evstdd 17,24(11)
++HIDDEN_FUNC(_save64gpr_18)    evstdd 18,32(11)
++HIDDEN_FUNC(_save64gpr_19)    evstdd 19,40(11)
++HIDDEN_FUNC(_save64gpr_20)    evstdd 20,48(11)
++HIDDEN_FUNC(_save64gpr_21)    evstdd 21,56(11)
++HIDDEN_FUNC(_save64gpr_22)    evstdd 22,64(11)
++HIDDEN_FUNC(_save64gpr_23)    evstdd 23,72(11)
++HIDDEN_FUNC(_save64gpr_24)    evstdd 24,80(11)
++HIDDEN_FUNC(_save64gpr_25)    evstdd 25,88(11)
++HIDDEN_FUNC(_save64gpr_26)    evstdd 26,96(11)
++HIDDEN_FUNC(_save64gpr_27)    evstdd 27,104(11)
++HIDDEN_FUNC(_save64gpr_28)    evstdd 28,112(11)
++HIDDEN_FUNC(_save64gpr_29)    evstdd 29,120(11)
++HIDDEN_FUNC(_save64gpr_30)    evstdd 30,128(11)
++HIDDEN_FUNC(_save64gpr_31)    evstdd 31,136(11)
+                               blr
+ FUNC_END(_save64gpr_31)
+ FUNC_END(_save64gpr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtsav64gprctr.asm gcc-4.3-new/gcc/config/rs6000/e500crtsav64gprctr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtsav64gprctr.asm   2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtsav64gprctr.asm       2008-10-18 12:44:16.000000000 +0200
+@@ -44,41 +44,41 @@
+    registers to be saved is passed in CTR, called by the compiler.  */
+ /* "Bare" versions that return to their caller.  */
+-FUNC_START(_save64gpr_ctr_14) evstdd 14,0(11)
++HIDDEN_FUNC(_save64gpr_ctr_14)        evstdd 14,0(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_15) evstdd 15,8(11)
++HIDDEN_FUNC(_save64gpr_ctr_15)        evstdd 15,8(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_16) evstdd 16,16(11)
++HIDDEN_FUNC(_save64gpr_ctr_16)        evstdd 16,16(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_17) evstdd 17,24(11)
++HIDDEN_FUNC(_save64gpr_ctr_17)        evstdd 17,24(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_18) evstdd 18,32(11)
++HIDDEN_FUNC(_save64gpr_ctr_18)        evstdd 18,32(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_19) evstdd 19,40(11)
++HIDDEN_FUNC(_save64gpr_ctr_19)        evstdd 19,40(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_20) evstdd 20,48(11)
++HIDDEN_FUNC(_save64gpr_ctr_20)        evstdd 20,48(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_21) evstdd 21,56(11)
++HIDDEN_FUNC(_save64gpr_ctr_21)        evstdd 21,56(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_22) evstdd 22,64(11)
++HIDDEN_FUNC(_save64gpr_ctr_22)        evstdd 22,64(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_23) evstdd 23,72(11)
++HIDDEN_FUNC(_save64gpr_ctr_23)        evstdd 23,72(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_24) evstdd 24,80(11)
++HIDDEN_FUNC(_save64gpr_ctr_24)        evstdd 24,80(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_25) evstdd 25,88(11)
++HIDDEN_FUNC(_save64gpr_ctr_25)        evstdd 25,88(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_26) evstdd 26,96(11)
++HIDDEN_FUNC(_save64gpr_ctr_26)        evstdd 26,96(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_27) evstdd 27,104(11)
++HIDDEN_FUNC(_save64gpr_ctr_27)        evstdd 27,104(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_28) evstdd 28,112(11)
++HIDDEN_FUNC(_save64gpr_ctr_28)        evstdd 28,112(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_29) evstdd 29,120(11)
++HIDDEN_FUNC(_save64gpr_ctr_29)        evstdd 29,120(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_30) evstdd 30,128(11)
++HIDDEN_FUNC(_save64gpr_ctr_30)        evstdd 30,128(11)
+                               bdz _save64_gpr_ctr_done
+-FUNC_START(_save64gpr_ctr_31) evstdd 31,136(11)
++HIDDEN_FUNC(_save64gpr_ctr_31)        evstdd 31,136(11)
+ _save64gpr_ctr_done:          blr
+ FUNC_END(_save64gpr_ctr_31)
+ FUNC_END(_save64gpr_ctr_30)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtsavg32gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtsavg32gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtsavg32gpr.asm     2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtsavg32gpr.asm 2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for saving 32-bit integer registers, called by the compiler.  */
+ /* "GOT" versions that load the address of the GOT into lr before returning.  */
+-FUNC_START(_save32gpr_14_g)   stw 14,-72(11)
+-FUNC_START(_save32gpr_15_g)   stw 15,-68(11)
+-FUNC_START(_save32gpr_16_g)   stw 16,-64(11)
+-FUNC_START(_save32gpr_17_g)   stw 17,-60(11)
+-FUNC_START(_save32gpr_18_g)   stw 18,-56(11)
+-FUNC_START(_save32gpr_19_g)   stw 19,-52(11)
+-FUNC_START(_save32gpr_20_g)   stw 20,-48(11)
+-FUNC_START(_save32gpr_21_g)   stw 21,-44(11)
+-FUNC_START(_save32gpr_22_g)   stw 22,-40(11)
+-FUNC_START(_save32gpr_23_g)   stw 23,-36(11)
+-FUNC_START(_save32gpr_24_g)   stw 24,-32(11)
+-FUNC_START(_save32gpr_25_g)   stw 25,-28(11)
+-FUNC_START(_save32gpr_26_g)   stw 26,-24(11)
+-FUNC_START(_save32gpr_27_g)   stw 27,-20(11)
+-FUNC_START(_save32gpr_28_g)   stw 28,-16(11)
+-FUNC_START(_save32gpr_29_g)   stw 29,-12(11)
+-FUNC_START(_save32gpr_30_g)   stw 30,-8(11)
+-FUNC_START(_save32gpr_31_g)   stw 31,-4(11)
++HIDDEN_FUNC(_save32gpr_14_g)  stw 14,-72(11)
++HIDDEN_FUNC(_save32gpr_15_g)  stw 15,-68(11)
++HIDDEN_FUNC(_save32gpr_16_g)  stw 16,-64(11)
++HIDDEN_FUNC(_save32gpr_17_g)  stw 17,-60(11)
++HIDDEN_FUNC(_save32gpr_18_g)  stw 18,-56(11)
++HIDDEN_FUNC(_save32gpr_19_g)  stw 19,-52(11)
++HIDDEN_FUNC(_save32gpr_20_g)  stw 20,-48(11)
++HIDDEN_FUNC(_save32gpr_21_g)  stw 21,-44(11)
++HIDDEN_FUNC(_save32gpr_22_g)  stw 22,-40(11)
++HIDDEN_FUNC(_save32gpr_23_g)  stw 23,-36(11)
++HIDDEN_FUNC(_save32gpr_24_g)  stw 24,-32(11)
++HIDDEN_FUNC(_save32gpr_25_g)  stw 25,-28(11)
++HIDDEN_FUNC(_save32gpr_26_g)  stw 26,-24(11)
++HIDDEN_FUNC(_save32gpr_27_g)  stw 27,-20(11)
++HIDDEN_FUNC(_save32gpr_28_g)  stw 28,-16(11)
++HIDDEN_FUNC(_save32gpr_29_g)  stw 29,-12(11)
++HIDDEN_FUNC(_save32gpr_30_g)  stw 30,-8(11)
++HIDDEN_FUNC(_save32gpr_31_g)  stw 31,-4(11)
+                               b _GLOBAL_OFFSET_TABLE_-4
+ FUNC_END(_save32gpr_31_g)
+ FUNC_END(_save32gpr_30_g)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtsavg64gpr.asm gcc-4.3-new/gcc/config/rs6000/e500crtsavg64gpr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtsavg64gpr.asm     2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtsavg64gpr.asm 2008-10-18 12:44:16.000000000 +0200
+@@ -43,24 +43,24 @@
+ /* Routines for saving 64-bit integer registers, called by the compiler.  */
+ /* "GOT" versions that load the address of the GOT into lr before returning.  */
+-FUNC_START(_save64gpr_14_g)   evstdd 14,0(11)
+-FUNC_START(_save64gpr_15_g)   evstdd 15,8(11)
+-FUNC_START(_save64gpr_16_g)   evstdd 16,16(11)
+-FUNC_START(_save64gpr_17_g)   evstdd 17,24(11)
+-FUNC_START(_save64gpr_18_g)   evstdd 18,32(11)
+-FUNC_START(_save64gpr_19_g)   evstdd 19,40(11)
+-FUNC_START(_save64gpr_20_g)   evstdd 20,48(11)
+-FUNC_START(_save64gpr_21_g)   evstdd 21,56(11)
+-FUNC_START(_save64gpr_22_g)   evstdd 22,64(11)
+-FUNC_START(_save64gpr_23_g)   evstdd 23,72(11)
+-FUNC_START(_save64gpr_24_g)   evstdd 24,80(11)
+-FUNC_START(_save64gpr_25_g)   evstdd 25,88(11)
+-FUNC_START(_save64gpr_26_g)   evstdd 26,96(11)
+-FUNC_START(_save64gpr_27_g)   evstdd 27,104(11)
+-FUNC_START(_save64gpr_28_g)   evstdd 28,112(11)
+-FUNC_START(_save64gpr_29_g)   evstdd 29,120(11)
+-FUNC_START(_save64gpr_30_g)   evstdd 30,128(11)
+-FUNC_START(_save64gpr_31_g)   evstdd 31,136(11)
++HIDDEN_FUNC(_save64gpr_14_g)  evstdd 14,0(11)
++HIDDEN_FUNC(_save64gpr_15_g)  evstdd 15,8(11)
++HIDDEN_FUNC(_save64gpr_16_g)  evstdd 16,16(11)
++HIDDEN_FUNC(_save64gpr_17_g)  evstdd 17,24(11)
++HIDDEN_FUNC(_save64gpr_18_g)  evstdd 18,32(11)
++HIDDEN_FUNC(_save64gpr_19_g)  evstdd 19,40(11)
++HIDDEN_FUNC(_save64gpr_20_g)  evstdd 20,48(11)
++HIDDEN_FUNC(_save64gpr_21_g)  evstdd 21,56(11)
++HIDDEN_FUNC(_save64gpr_22_g)  evstdd 22,64(11)
++HIDDEN_FUNC(_save64gpr_23_g)  evstdd 23,72(11)
++HIDDEN_FUNC(_save64gpr_24_g)  evstdd 24,80(11)
++HIDDEN_FUNC(_save64gpr_25_g)  evstdd 25,88(11)
++HIDDEN_FUNC(_save64gpr_26_g)  evstdd 26,96(11)
++HIDDEN_FUNC(_save64gpr_27_g)  evstdd 27,104(11)
++HIDDEN_FUNC(_save64gpr_28_g)  evstdd 28,112(11)
++HIDDEN_FUNC(_save64gpr_29_g)  evstdd 29,120(11)
++HIDDEN_FUNC(_save64gpr_30_g)  evstdd 30,128(11)
++HIDDEN_FUNC(_save64gpr_31_g)  evstdd 31,136(11)
+                               b _GLOBAL_OFFSET_TABLE_-4
+ FUNC_END(_save64gpr_31_g)
+ FUNC_END(_save64gpr_30_g)
+diff -Nurd gcc-4.3/gcc/config/rs6000/e500crtsavg64gprctr.asm gcc-4.3-new/gcc/config/rs6000/e500crtsavg64gprctr.asm
+--- gcc-4.3/gcc/config/rs6000/e500crtsavg64gprctr.asm  2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/e500crtsavg64gprctr.asm      2008-10-18 12:44:16.000000000 +0200
+@@ -43,41 +43,41 @@
+ /* Routines for saving 64-bit integer registers, called by the compiler.  */
+ /* "GOT" versions that load the address of the GOT into lr before returning.  */
+-FUNC_START(_save64gpr_ctr_14_g)       evstdd 14,0(11)
++HIDDEN_FUNC(_save64gpr_ctr_14_g)      evstdd 14,0(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_15_g)       evstdd 15,8(11)
++HIDDEN_FUNC(_save64gpr_ctr_15_g)      evstdd 15,8(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_16_g)       evstdd 16,16(11)
++HIDDEN_FUNC(_save64gpr_ctr_16_g)      evstdd 16,16(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_17_g)       evstdd 17,24(11)
++HIDDEN_FUNC(_save64gpr_ctr_17_g)      evstdd 17,24(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_18_g)       evstdd 18,32(11)
++HIDDEN_FUNC(_save64gpr_ctr_18_g)      evstdd 18,32(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_19_g)       evstdd 19,40(11)
++HIDDEN_FUNC(_save64gpr_ctr_19_g)      evstdd 19,40(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_20_g)       evstdd 20,48(11)
++HIDDEN_FUNC(_save64gpr_ctr_20_g)      evstdd 20,48(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_21_g)       evstdd 21,56(11)
++HIDDEN_FUNC(_save64gpr_ctr_21_g)      evstdd 21,56(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_22_g)       evstdd 22,64(11)
++HIDDEN_FUNC(_save64gpr_ctr_22_g)      evstdd 22,64(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_23_g)       evstdd 23,72(11)
++HIDDEN_FUNC(_save64gpr_ctr_23_g)      evstdd 23,72(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_24_g)       evstdd 24,80(11)
++HIDDEN_FUNC(_save64gpr_ctr_24_g)      evstdd 24,80(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_25_g)       evstdd 25,88(11)
++HIDDEN_FUNC(_save64gpr_ctr_25_g)      evstdd 25,88(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_26_g)       evstdd 26,96(11)
++HIDDEN_FUNC(_save64gpr_ctr_26_g)      evstdd 26,96(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_27_g)       evstdd 27,104(11)
++HIDDEN_FUNC(_save64gpr_ctr_27_g)      evstdd 27,104(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_28_g)       evstdd 28,112(11)
++HIDDEN_FUNC(_save64gpr_ctr_28_g)      evstdd 28,112(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_29_g)       evstdd 29,120(11)
++HIDDEN_FUNC(_save64gpr_ctr_29_g)      evstdd 29,120(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_30_g)       evstdd 30,128(11)
++HIDDEN_FUNC(_save64gpr_ctr_30_g)      evstdd 30,128(11)
+                               bdz _save64_gpr_ctr_g_done
+-FUNC_START(_save64gpr_ctr_31_g)       evstdd 31,136(11)
++HIDDEN_FUNC(_save64gpr_ctr_31_g)      evstdd 31,136(11)
+ _save64gpr_ctr_g_done:                b _GLOBAL_OFFSET_TABLE_-4
+ FUNC_END(_save64gpr_ctr_31_g)
+ FUNC_END(_save64gpr_ctr_30_g)
+diff -Nurd gcc-4.3/gcc/config/rs6000/ppc-asm.h gcc-4.3-new/gcc/config/rs6000/ppc-asm.h
+--- gcc-4.3/gcc/config/rs6000/ppc-asm.h        2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/ppc-asm.h    2008-10-18 12:44:16.000000000 +0200
+@@ -110,6 +110,11 @@
+       .globl GLUE(.,name); \
+ GLUE(.,name):
++#define HIDDEN_FUNC(name) \
++  FUNC_START(name) \
++  .hidden name;       \
++  .hidden GLUE(.,name);
++
+ #define FUNC_END(name) \
+ GLUE(.L,name): \
+       .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
+@@ -136,6 +141,11 @@
+       .globl GLUE(.,name); \
+ GLUE(.,name):
++#define HIDDEN_FUNC(name) \
++  FUNC_START(name) \
++  .hidden name; \
++  .hidden GLUE(.,name);
++
+ #define FUNC_END(name) \
+ GLUE(.L,name): \
+       .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
+@@ -153,6 +163,10 @@
+       .globl FUNC_NAME(name); \
+ FUNC_NAME(name):
++#define HIDDEN_FUNC(name) \
++  FUNC_START(name) \
++  .hidden FUNC_NAME(name);
++
+ #define FUNC_END(name) \
+ GLUE(.L,name): \
+       .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
+diff -Nurd gcc-4.3/gcc/config/rs6000/rs6000.c gcc-4.3-new/gcc/config/rs6000/rs6000.c
+--- gcc-4.3/gcc/config/rs6000/rs6000.c 2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/rs6000.c     2008-10-18 12:44:16.000000000 +0200
+@@ -2476,6 +2476,8 @@
+              (TARGET_ALTIVEC_ABI ? 2
+               : TARGET_SPE_ABI ? 3
+               : 1));
++      fprintf (file, "\t.gnu_attribute 12, %d\n",
++             aix_struct_return ? 2 : 1);
+     }
+ #endif
+diff -Nurd gcc-4.3/gcc/config/rs6000/sysv4.h gcc-4.3-new/gcc/config/rs6000/sysv4.h
+--- gcc-4.3/gcc/config/rs6000/sysv4.h  2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/sysv4.h      2008-10-18 12:44:16.000000000 +0200
+@@ -585,9 +585,9 @@
+ /* Override svr4.h definition.  */
+ #undef        ASM_SPEC
+ #define       ASM_SPEC "%(asm_cpu) \
+-%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \
+-%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
+-%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
++%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}}" \
++SVR4_ASM_SPEC \
++"%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
+ %{memb|msdata|msdata=eabi: -memb} \
+ %{mlittle|mlittle-endian:-mlittle; \
+   mbig|mbig-endian      :-mbig;    \
+diff -Nurd gcc-4.3/gcc/config/rs6000/t-cs-eabi gcc-4.3-new/gcc/config/rs6000/t-cs-eabi
+--- gcc-4.3/gcc/config/rs6000/t-cs-eabi        1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.3-new/gcc/config/rs6000/t-cs-eabi    2008-10-18 12:44:16.000000000 +0200
+@@ -0,0 +1,17 @@
++# Multilibs for powerpc embedded ELF targets.
++
++MULTILIB_OPTIONS      = te500v1/te500v2/te600/te500mc \
++                        msoft-float
++
++MULTILIB_DIRNAMES     = te500v1 te500v2 te600 te500mc \
++                        nof
++
++MULTILIB_EXCEPTIONS   = *te600*/*msoft-float* \
++                        *te500v1*/*msoft-float* \
++                        *te500v2*/*msoft-float* \
++                        *te500mc*/*msoft-float*
++
++MULTILIB_EXTRA_OPTS   = mno-eabi mstrict-align
++
++MULTILIB_MATCHES      = ${MULTILIB_MATCHES_FLOAT} \
++                        ${MULTILIB_MATCHES_ENDIAN}
+diff -Nurd gcc-4.3/gcc/config/rs6000/t-ppcgas gcc-4.3-new/gcc/config/rs6000/t-ppcgas
+--- gcc-4.3/gcc/config/rs6000/t-ppcgas 2008-10-01 14:50:54.000000000 +0200
++++ gcc-4.3-new/gcc/config/rs6000/t-ppcgas     2008-10-18 12:44:16.000000000 +0200
+@@ -1,15 +1,14 @@
+ # Multilibs for powerpc embedded ELF targets.
+-MULTILIB_OPTIONS      = te500v1/te500v2/te600/te500mc \
++MULTILIB_OPTIONS      = te500v1/te500v2/te600 \
+                         msoft-float
+-MULTILIB_DIRNAMES     = te500v1 te500v2 te600 te500mc \
++MULTILIB_DIRNAMES     = te500v1 te500v2 te600 \
+                         nof
+ MULTILIB_EXCEPTIONS   = *te600*/*msoft-float* \
+                         *te500v1*/*msoft-float* \
+-                        *te500v2*/*msoft-float* \
+-                        *te500mc*/*msoft-float*
++                        *te500v2*/*msoft-float*
+ MULTILIB_EXTRA_OPTS   = mno-eabi mstrict-align
+diff -Nurd gcc-4.3/gcc/config/svr4.h gcc-4.3-new/gcc/config/svr4.h
+--- gcc-4.3/gcc/config/svr4.h  2008-10-01 14:51:13.000000000 +0200
++++ gcc-4.3-new/gcc/config/svr4.h      2008-10-18 12:45:26.000000000 +0200
+@@ -55,7 +55,8 @@
+   && strcmp (STR, "Tdata") && strcmp (STR, "Ttext")   \
+   && strcmp (STR, "Tbss"))
+-/* Provide an ASM_SPEC appropriate for svr4.  Here we try to support as
++/* Provide an ASM_SPEC appropriate for svr4.
++   If we're not using GAS, we try to support as
+    many of the specialized svr4 assembler options as seems reasonable,
+    given that there are certain options which we can't (or shouldn't)
+    support directly due to the fact that they conflict with other options
+@@ -74,9 +75,16 @@
+    read its stdin.
+ */
+-#undef  ASM_SPEC
+-#define ASM_SPEC \
++#ifdef USE_GAS
++#define SVR4_ASM_SPEC \
++  "%{v:-V} %{Wa,*:%*}"
++#else
++#define SVR4_ASM_SPEC \
+   "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
++#endif
++
++#undef  ASM_SPEC
++#define ASM_SPEC SVR4_ASM_SPEC
+ #define AS_NEEDS_DASH_FOR_PIPED_INPUT
+diff -Nurd gcc-4.3/gcc/config.gcc gcc-4.3-new/gcc/config.gcc
+--- gcc-4.3/gcc/config.gcc     2008-10-01 14:51:16.000000000 +0200
++++ gcc-4.3-new/gcc/config.gcc 2008-10-18 12:45:36.000000000 +0200
+@@ -2027,12 +2027,12 @@
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcendian rs6000/t-ppccomm"
+       ;;
+ powerpc-*-eabisim*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       ;;
+ powerpc-*-elf*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       use_fixproto=yes
+@@ -2043,9 +2043,12 @@
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcendian rs6000/t-ppccomm"
+       ;;
+ powerpc-*-eabi*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
++      if test x$enable_extra_sgxx_multilibs = xyes; then
++        tmake_file="${tmake_file} rs6000/t-cs-eabi"
++      fi
+       ;;
+ powerpc-*-rtems*)
+       tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/rtems.h rtems.h"
+@@ -2132,7 +2135,7 @@
+       esac
+       ;;
+ powerpc-wrs-windiss*)  # Instruction-level simulator for VxWorks.
+-      tm_file="${tm_file} elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/windiss.h"
++      tm_file="${tm_file} elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/windiss.h"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       thread_file=""
+@@ -2156,28 +2159,28 @@
+       use_fixproto=yes
+       ;;
+ powerpcle-*-elf*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       use_fixproto=yes
+       ;;
+ powerpcle-*-eabisim*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h rs6000/eabisim.h"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       ;;
+ powerpcle-*-eabi*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/e500.h"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       ;;
+ powerpc-*-kaos*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h kaos.h rs6000/kaos-ppc.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h kaos.h rs6000/kaos-ppc.h"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       ;;
+ powerpcle-*-kaos*)
+-      tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h kaos.h rs6000/kaos-ppc.h"
++      tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h kaos.h rs6000/kaos-ppc.h"
+       tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
+       extra_options="${extra_options} rs6000/sysv4.opt"
+       ;;
+diff -Nurd gcc-4.3/gcc/doc/invoke.texi gcc-4.3-new/gcc/doc/invoke.texi
+--- gcc-4.3/gcc/doc/invoke.texi        2008-10-01 14:39:48.000000000 +0200
++++ gcc-4.3-new/gcc/doc/invoke.texi    2008-10-18 12:02:55.000000000 +0200
+@@ -389,7 +389,7 @@
+ @gccoptlist{@var{object-file-name}  -l@var{library} @gol
+ -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
+ -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
+--Wl,@var{option}  -Xlinker @var{option} @gol
++-T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
+ -u @var{symbol}}
+ @item Directory Options
+@@ -7619,6 +7619,14 @@
+ option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
+ this option.
++@item -T @var{script}
++@opindex T
++@cindex linker script
++Use @var{script} as the linker script.  This option is supported by most
++systems using the GNU linker.  On some targets, such as bare-board
++targets without an operating system, the @option{-T} option may be required 
++when linking to avoid references to undefined symbols.
++
+ @item -Xlinker @var{option}
+ @opindex Xlinker
+ Pass @var{option} as an option to the linker.  You can use this to
+@@ -11971,6 +11979,7 @@
+ @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
+ @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1},
+ @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
++@samp{ice9},
+ @samp{m4k},
+ @samp{orion},
+ @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
+@@ -13600,12 +13609,11 @@
+ On System V.4 and embedded PowerPC systems do (do not) adhere to the
+ Embedded Applications Binary Interface (eabi) which is a set of
+ modifications to the System V.4 specifications.  Selecting @option{-meabi}
+-means that the stack is aligned to an 8 byte boundary, a function
+-@code{__eabi} is called to from @code{main} to set up the eabi
+-environment, and the @option{-msdata} option can use both @code{r2} and
++means that the stack is aligned to an 8 byte boundary,
++and the @option{-msdata} option can use both @code{r2} and
+ @code{r13} to point to two separate small data areas.  Selecting
+ @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
+-do not call an initialization function from @code{main}, and the
++and the
+ @option{-msdata} option will only use @code{r13} to point to a single
+ small data area.  The @option{-meabi} option is on by default if you
+ configured GCC using one of the @samp{powerpc*-*-eabi*} options.
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.dg/arm-mmx-1.c gcc-4.3-new/gcc/testsuite/gcc.dg/arm-mmx-1.c
+--- gcc-4.3/gcc/testsuite/gcc.dg/arm-mmx-1.c   2008-10-01 14:44:19.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.dg/arm-mmx-1.c       2008-10-18 12:19:00.000000000 +0200
+@@ -7,6 +7,7 @@
+ /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=iwmmxt" } } */
+ /* { dg-options "-O -mno-apcs-frame -mcpu=iwmmxt -mabi=iwmmxt" } */
+ /* { dg-require-effective-target arm32 } */
++/* { dg-require-effective-target arm_iwmmxt_ok } */
+ /* { dg-final { scan-assembler "ldmfd\[       ]sp!.*ip,\[ ]*pc" } } */
+ /* This function uses all the call-saved registers, namely r4, r5, r6,
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.dg/format/cmn-err-1.c gcc-4.3-new/gcc/testsuite/gcc.dg/format/cmn-err-1.c
+--- gcc-4.3/gcc/testsuite/gcc.dg/format/cmn-err-1.c    2008-10-01 14:44:18.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.dg/format/cmn-err-1.c        2008-10-18 12:18:58.000000000 +0200
+@@ -27,12 +27,12 @@
+   cmn_err_func (0, "%p", string);
+   cmn_err_func (0, "%16b", i, "\01Foo");
+-  cmn_err_func (0, "%i", i);          /* { dg-error "unknown|too many" } */
+-  cmn_err_func (0, "%d", l);          /* { dg-error "expects type" } */
+-  cmn_err_func (0, "%b");             /* { dg-error "too few" } */
+-  cmn_err_func (0, "%b", i);          /* { dg-error "too few" } */
+-  cmn_err_func (0, "%b", i, i);               /* { dg-error "expects type" } */
+-  cmn_err_func (0, "%b", string, i);  /* { dg-error "expects type" } */
+-  cmn_err_func (0, "%p", 3);            /* { dg-error "expects type" } */
++  cmn_err_func (0, "%i", i);          /* { dg-warning "unknown|too many" } */
++  cmn_err_func (0, "%d", l);          /* { dg-warning "expects type" } */
++  cmn_err_func (0, "%b");             /* { dg-warning "too few" } */
++  cmn_err_func (0, "%b", i);          /* { dg-warning "too few" } */
++  cmn_err_func (0, "%b", i, i);               /* { dg-warning "expects type" } */
++  cmn_err_func (0, "%b", string, i);  /* { dg-warning "expects type" } */
++  cmn_err_func (0, "%p", 3);          /* { dg-warning "expects type" } */
+   return 0;
+ }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.dg/pragma-align-2.c gcc-4.3-new/gcc/testsuite/gcc.dg/pragma-align-2.c
+--- gcc-4.3/gcc/testsuite/gcc.dg/pragma-align-2.c      2008-10-01 14:44:19.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.dg/pragma-align-2.c  2008-10-18 12:19:00.000000000 +0200
+@@ -19,15 +19,15 @@
+ #pragma align 8(not_defined)
+-#pragma align 9(odd_align)    /* { dg-error "invalid alignment" } */
+-#pragma align 256(high_align) /* { dg-error "invalid alignment" } */
+-#pragma align -1(neg_align)   /* { dg-error "malformed" } */
+-#pragma align bad_align               /* { dg-error "malformed" } */
+-#pragma align 1(bad_align     /* { dg-error "malformed" } */
++#pragma align 9(odd_align)    /* { dg-warning "invalid alignment" } */
++#pragma align 256(high_align) /* { dg-warning "invalid alignment" } */
++#pragma align -1(neg_align)   /* { dg-warning "malformed" } */
++#pragma align bad_align               /* { dg-warning "malformed" } */
++#pragma align 1(bad_align     /* { dg-warning "malformed" } */
+ int x, x1, x2, x4, x8, y8, z8, x16, x32, x64, x128, y128, z128;
+-#pragma align 16(x)           /* { dg-error "must appear before" } */
++#pragma align 16(x)           /* { dg-warning "must appear before" } */
+ int
+ main ()
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.dg/pragma-init-fini.c gcc-4.3-new/gcc/testsuite/gcc.dg/pragma-init-fini.c
+--- gcc-4.3/gcc/testsuite/gcc.dg/pragma-init-fini.c    2008-10-01 14:44:19.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.dg/pragma-init-fini.c        2008-10-18 12:19:00.000000000 +0200
+@@ -4,13 +4,13 @@
+ extern void abort ();
+-#pragma init          /* { dg-error "malformed" } */
+-#pragma init ()               /* { dg-error "malformed" } */
+-#pragma init init_func        /* { dg-error "malformed" } */
++#pragma init          /* { dg-warning "malformed" } */
++#pragma init ()               /* { dg-warning "malformed" } */
++#pragma init init_func        /* { dg-warning "malformed" } */
+-#pragma fini          /* { dg-error "malformed" } */
+-#pragma fini ()               /* { dg-error "malformed" } */
+-#pragma fini fini_func        /* { dg-error "malformed" } */
++#pragma fini          /* { dg-warning "malformed" } */
++#pragma fini ()               /* { dg-warning "malformed" } */
++#pragma fini fini_func        /* { dg-warning "malformed" } */
+ #pragma init (init_func, init_static_func)
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/fix-ice9a-1.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/fix-ice9a-1.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/fix-ice9a-1.c        2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/fix-ice9a-1.c    2008-10-18 12:10:17.000000000 +0200
+@@ -1,6 +1,7 @@
+ /* Check that nops are inserted before and after the fp operations.  */
+ /* { dg-do compile } */
+ /* { dg-options "-mfix-ice9a -O3" } */
++/* { dg-mips-options "-mhard-float" } */
+ typedef double TYPE;
+ #include "fix-ice9a.h"
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/fix-ice9a-2.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/fix-ice9a-2.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/fix-ice9a-2.c        2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/fix-ice9a-2.c    2008-10-18 12:10:17.000000000 +0200
+@@ -1,6 +1,7 @@
+ /* Check that nops are inserted before and after the fp operations.  */
+ /* { dg-do compile } */
+ /* { dg-options "-mfix-ice9a -O3" } */
++/* { dg-mips-options "-mhard-float" } */
+ typedef float TYPE;
+ #include "fix-ice9a.h"
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/lazy-binding-1.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/lazy-binding-1.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/lazy-binding-1.c     2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/lazy-binding-1.c 2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* { dg-do compile { target nomips16 } } */
+-/* { dg-mips-options "-mabicalls -mshared -mexplicit-relocs -O2 -fno-delayed-branch" } */
++/* { dg-mips-options "-mabicalls -mshared -mexplicit-relocs -O2 -fno-delayed-branch -fpic" } */
+ void bar (void);
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-18.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-18.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-18.c  2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-18.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,4 +1,4 @@
+ /* Check the *extendhisi2_hw pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mno-abicalls" } */
+ unsigned int f1 (unsigned int x) { return (short) x; }
+ /* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tseh\t\\\$2,\\\$4\n" } } */
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-19.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-19.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-19.c  2008-10-01 14:42:01.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-19.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,4 +1,4 @@
+ /* Check the *extendqisi2_hw pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mno-abicalls" } */
+ unsigned int f1 (unsigned int x) { return (signed char) x; }
+ /* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tseb\t\\\$2,\\\$4\n" } } */
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-1.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-1.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-1.c   2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-1.c       2008-10-18 12:10:17.000000000 +0200
+@@ -1,4 +1,4 @@
+ /* Check the *baddu_si pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -meb" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -meb -mno-abicalls" } */
+ unsigned int f1 (unsigned int x, unsigned int y) { return (x + y) & 0xff; }
+ /* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tbaddu\t\\\$2,\\\$\[45\],\\\$\[45\]\n" } } */
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-23.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-23.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-23.c  2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-23.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the extzvsi pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mno-abicalls" } */
+ #ifdef _MIPSEB
+ struct s1 { unsigned int x1 : 3, x2 : 10; };
+ struct s2 { unsigned int x1 : 5, x2 : 14; };
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-28.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-28.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-28.c  2008-10-01 14:42:01.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-28.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the extvsi pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mno-abicalls" } */
+ #ifdef _MIPSEB
+ struct s1 { int x1 : 3, x2 : 10; };
+ struct s2 { int x1 : 5, x2 : 14; };
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-34.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-34.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-34.c  2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-34.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the insvsi pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -fno-tree-sra" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mno-abicalls -mgp32 -fno-tree-sra" } */
+ #ifdef _MIPSEB
+ struct s1 { unsigned int x1 : 3, x2 : 20; };
+ struct s2 { unsigned int x1 : 5, x2 : 10; };
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-37.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-37.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-37.c  2008-10-01 14:42:01.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-37.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the mov_u[ls]w patterns.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mocteon-useun -meb" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mno-abi-calls -mgp32 -mocteon-useun -meb" } */
+ struct __attribute__((packed)) s { unsigned int x; };
+ unsigned int f1 (struct s *s) { return s[0].x; };
+ void f2 (struct s *s, unsigned long x) { s[10].x = x; }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-43.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-43.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-43.c  2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-43.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the *branch_bit pattern.  */
+-/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -mno-abicalls -Os -mabi=eabi -mgp32" } */
+ int foo (void);
+ int f1 (unsigned int x) { if (x & (1UL << 30)) foo (); return 1; }
+ int f2 (unsigned int x) { if (x & (1UL << 1)) foo (); return 1; }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-44.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-44.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-44.c  2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-44.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the *branch_bit pattern.  */
+-/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32 -mno-abicalls" } */
+ int foo (void);
+ int f1 (unsigned int x) { if ((x & (1UL << 30)) == 0) foo (); return 1; }
+ int f2 (unsigned int x) { if ((x & (1UL << 1)) == 0) foo (); return 1; }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-49.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-49.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-49.c  2008-10-01 14:42:01.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-49.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the *seq_si_seq pattern.  */
+-/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32 -mno-abicalls" } */
+ int f1 (int x) { return x == -513; }
+ int f2 (int x) { return x == -512; }
+ int f3 (int x) { return x == -1; }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-54.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-54.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-54.c  2008-10-01 14:42:01.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-54.c      2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the *sne_si_sne pattern.  */
+-/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -Os -mabi=eabi -mgp32 -mno-abicalls" } */
+ int f1 (int x) { return x != -513; }
+ int f2 (int x) { return x != -512; }
+ int f3 (int x) { return x != -1; }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-5.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-5.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-5.c   2008-10-01 14:42:02.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-5.c       2008-10-18 12:10:17.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* Check the *baddu_si pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -meb" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mno-abicalls -meb" } */
+ unsigned int
+ f1 (unsigned int x, unsigned int y)
+ { return (unsigned char) (x + y); }
+diff -Nurd gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-6.c gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-6.c
+--- gcc-4.3/gcc/testsuite/gcc.target/mips/octeon-6.c   2008-10-01 14:42:01.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/gcc.target/mips/octeon-6.c       2008-10-18 12:10:17.000000000 +0200
+@@ -1,4 +1,4 @@
+ /* Check the popcountsi2 pattern.  */
+-/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32" } */
++/* { dg-mips-options "-march=octeon -O2 -mabi=eabi -mgp32 -mno-abicalls" } */
+ unsigned int f1 (unsigned int x) { return __builtin_popcount (x); }
+ /* { dg-final { scan-assembler "\tjr?\t\\\$31\n\tpop\t\\\$2,\\\$4\n" } } */
+diff -Nurd gcc-4.3/gcc/testsuite/lib/target-supports.exp gcc-4.3-new/gcc/testsuite/lib/target-supports.exp
+--- gcc-4.3/gcc/testsuite/lib/target-supports.exp      2008-10-01 14:47:31.000000000 +0200
++++ gcc-4.3-new/gcc/testsuite/lib/target-supports.exp  2008-10-18 12:32:27.000000000 +0200
+@@ -1367,6 +1367,19 @@
+     }]
+ }
++# Return 1 if this is an ARM target supporting -mcpu=iwmmxt.
++# Some multilibs may be incompatible with this option.
++
++proc check_effective_target_arm_iwmmxt_ok { } {
++    if { [check_effective_target_arm32] } {
++      return [check_no_compiler_messages arm_iwmmxt_ok object {
++          int dummy;
++      } "-mcpu=iwmmxt"]
++    } else {
++      return 0
++    }
++}
++
+ # Return 1 if this is a PowerPC target with floating-point registers.
+ proc check_effective_target_powerpc_fprs { } {
+diff -Nurd gcc-4.3/libgomp/config/linux/mips/futex.h gcc-4.3-new/libgomp/config/linux/mips/futex.h
+--- gcc-4.3/libgomp/config/linux/mips/futex.h  1970-01-01 01:00:00.000000000 +0100
++++ gcc-4.3-new/libgomp/config/linux/mips/futex.h      2008-10-18 12:02:42.000000000 +0200
+@@ -0,0 +1,75 @@
++/* Copyright (C) 2005, 2008 Free Software Foundation, Inc.
++   Contributed by Ilie Garbacea <ilie@mips.com>, Chao-ying Fu <fu@mips.com>.
++
++   This file is part of the GNU OpenMP Library (libgomp).
++
++   Libgomp is free software; you can redistribute it and/or modify it
++   under the terms of the GNU Lesser General Public License as published by
++   the Free Software Foundation; either version 2.1 of the License, or
++   (at your option) any later version.
++
++   Libgomp 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 Lesser General Public License for
++   more details.
++
++   You should have received a copy of the GNU Lesser General Public License 
++   along with libgomp; see the file COPYING.LIB.  If not, write to the
++   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++   MA 02110-1301, USA.  */
++
++/* As a special exception, if you link this library with other files, some
++   of which are compiled with GCC, to produce an executable, this library
++   does not by itself cause the resulting executable to be covered by the
++   GNU General Public License.  This exception does not however invalidate
++   any other reasons why the executable file might be covered by the GNU
++   General Public License.  */
++
++/* Provide target-specific access to the futex system call.  */
++
++#include <sys/syscall.h>
++#define FUTEX_WAIT 0
++#define FUTEX_WAKE 1
++
++static inline void
++sys_futex0 (int *addr, int op, int val)
++{
++  register unsigned long __v0 asm("$2") = (unsigned long) SYS_futex;
++  register unsigned long __a0 asm("$4") = (unsigned long) addr;
++  register unsigned long __a1 asm("$5") = (unsigned long) op;
++  register unsigned long __a2 asm("$6") = (unsigned long) val;
++  register unsigned long __a3 asm("$7") = 0;
++
++  __asm volatile ("syscall"
++                /* returns $a3 (errno), $v0 (return value) */
++                : "=r" (__v0), "=r" (__a3)
++                /* arguments in v0 (syscall) a0-a3 */
++                : "r" (__v0), "r" (__a0), "r" (__a1), "r" (__a2), "r" (__a3)
++                /* clobbers at, v1, t0-t9, memory */
++                : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", "$14",
++                  "$15", "$24", "$25", "memory");
++}
++
++static inline void
++futex_wait (int *addr, int val)
++{
++  sys_futex0 (addr, FUTEX_WAIT, val);
++}
++
++static inline void
++futex_wake (int *addr, int count)
++{
++  sys_futex0 (addr, FUTEX_WAKE, count);
++}
++
++static inline void
++cpu_relax (void)
++{
++  __asm volatile ("" : : : "memory");
++}
++
++static inline void
++atomic_write_barrier (void)
++{
++  __sync_synchronize ();
++}
+diff -Nurd gcc-4.3/libgomp/configure.tgt gcc-4.3-new/libgomp/configure.tgt
+--- gcc-4.3/libgomp/configure.tgt      2008-10-01 14:39:39.000000000 +0200
++++ gcc-4.3-new/libgomp/configure.tgt  2008-10-18 12:02:43.000000000 +0200
+@@ -35,6 +35,10 @@
+       config_path="linux/ia64 linux posix"
+       ;;
++    mips*-*-linux*)
++      config_path="linux/mips linux posix"
++      ;;
++
+     powerpc*-*-linux*)
+       config_path="linux/powerpc linux posix"
+       ;;
+diff -Nurd gcc-4.3/release-notes-csl.xml gcc-4.3-new/release-notes-csl.xml
+--- gcc-4.3/release-notes-csl.xml      2008-10-01 14:56:28.000000000 +0200
++++ gcc-4.3-new/release-notes-csl.xml  2008-10-18 13:08:51.000000000 +0200
+@@ -5,6 +5,86 @@
+      relevant; it may be removed if it is relevant to all targets.
+  -->
++      <!-- UUID: a38e2a96-4845-410f-ba68-6f1091446123 -->
++      <!-- TARGET: arm* -->
++      <formalpara>
++        <title>Misaligned NEON memory accesses</title>
++        <para>
++        A bug has been fixed that caused the compiler to use aligned
++        NEON load/store instructions to access misaligned data when
++        autovectorizing certain loops.  The bug affected code compiled
++        with <option>-mfpu=neon</option> and loop vectorization enabled
++        with <option>-O3</option> or <option>-ftree-vectorize</option>.
++      </para>
++      </formalpara>
++
++      <!-- UUID: 75802745-041d-4357-b48f-31fd30c58adc -->
++      <!-- TARGET: powerpc-* -->
++      <formalpara>
++        <title>Linker script option syntax</title>
++        <para>
++        GCC now accepts <option>-T <replaceable>script</replaceable></option>
++        (with whitespace before the <replaceable>script</replaceable>)
++        as well as <option>-T<replaceable>script</replaceable></option>
++        (with no whitespace) to specify a linker script on the command line.
++        </para>
++      </formalpara>
++
++      <!-- UUID: e4838603-bc80-40fe-add0-cb5aba3a235d -->
++      <!-- TARGET: arm*-linux* mips*-linux* i?86*-linux* -->
++      <formalpara features="openmp_addon">
++        <title>OpenMP support</title>
++        <para>
++          Support for the OpenMP application programming interface is
++        now available in &csl_sgxx; Professional Edition.  To
++        compile programs that use OpenMP features, use the
++        <option>-fopenmp</option> command-line option.  For more
++        information about using OpenMP with &csl_sgxx;, see <xref
++        linkend="sec-openmp"/>.  For more information about the
++        OpenMP API, see <uri>http://www.openmp.org/</uri>.
++        </para>
++      </formalpara>
++
++      <!-- UUID: 934d8fb3-d31c-4051-aad3-f85fc72e7576 -->
++      <!-- TARGET: m68k-*uclinux -->
++      <formalpara>
++        <title>Shared libraries bug fix</title>
++        <para>
++          A bug has been fixed that caused
++          <literal>Invalid instruction</literal> errors in applications
++          compiled with <option>-mid-shared-library</option> for CPUs
++          without hardware floating point.  The problem was caused by
++          incorrect linker attributes on internal compiler-generated
++          symbols in the shared library; you must rebuild both
++          the application and shared libraries to pick up the fix.
++        </para>
++      </formalpara>
++
++      <!-- UUID: 62a77a44-3f36-4d0c-aca2-eb327dce9ca0 -->
++      <!-- TARGET: powerpc-linux-gnu -->
++      <formalpara>
++        <title>Compiling dynamic libraries with <option>-Os</option></title>
++        <para>
++          A bug has been fixed that affected dynamic libraries compiled
++          with <option>-Os</option>.  The bug caused runtime errors such
++          as segmentation faults in applications using the library, as a
++          result of incorrect linker attributes on internal
++          compiler-generated symbols in the library.  You must rebuild
++          both the affected shared libraries and the applications that
++          use them to pick up this fix.
++        </para>
++      </formalpara>
++
++      <!-- UUID: 53bf0593-1f5d-4047-8e74-ad8889a3a1cb -->
++      <!-- TARGET: mips*-sicortex-* -->
++      <formalpara>
++        <title>SiCortex architecture option</title>
++        <para>
++          A new architecture option, <option>-march=ice9</option>, is
++        now available to target the SiCortex ICE9 architecture.
++        </para>
++      </formalpara>
++
+       <!-- UUID: e2f7a383-48cd-48b3-9a7c-a157f722414f -->
+       <!-- TARGET: m68k-* -->
+       <formalpara>