From b90c67c32ef034e98907602223dc9f8517c7a324 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 23 Sep 2009 18:21:09 +0000 Subject: [PATCH] 4.4.1-16 --- .cvsignore | 2 +- gcc.spec | 30 +- gcc44-powerpc-libgcc_s_so.patch | 136 --- gcc44-pr41175.patch | 1205 -------------------- gcc44-vta-cfgexpand-ptr-mode-pr41248.patch | 151 --- sources | 2 +- 6 files changed, 21 insertions(+), 1505 deletions(-) delete mode 100644 gcc44-powerpc-libgcc_s_so.patch delete mode 100644 gcc44-pr41175.patch delete mode 100644 gcc44-vta-cfgexpand-ptr-mode-pr41248.patch diff --git a/.cvsignore b/.cvsignore index 60d2bbf..6aab4c1 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ fastjar-0.97.tar.gz -gcc-4.4.1-20090918.tar.bz2 +gcc-4.4.1-20090923.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 240a3b8..6f0f51e 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20090918 -%global SVNREV 151835 +%global DATE 20090923 +%global SVNREV 152092 %global gcc_version 4.4.1 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 15 +%global gcc_release 16 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %global include_gappletviewer 1 @@ -159,10 +159,7 @@ Patch15: gcc44-raw-string.patch Patch16: gcc44-unwind-debug-hook.patch Patch17: gcc44-pr38757.patch Patch18: gcc44-libstdc++-docs.patch -Patch19: gcc44-vta-cfgexpand-ptr-mode-pr41248.patch -Patch20: gcc44-powerpc-libgcc_s_so.patch -Patch21: gcc44-pr41175.patch -Patch22: gcc44-ppc64-aixdesc.patch +Patch19: gcc44-ppc64-aixdesc.patch Patch1000: fastjar-0.97-segfault.patch @@ -468,10 +465,7 @@ which are required to compile with the GNAT. %if %{build_libstdcxx_docs} %patch18 -p0 -b .libstdc++-docs~ %endif -%patch19 -p0 -b .vta-cfgexpand-ptr-mode-pr41248~ -%patch20 -p0 -b .powerpc-libgcc_s_so~ -%patch21 -p0 -b .pr41175~ -%patch22 -p0 -b .ppc64-aixdesc~ +%patch19 -p0 -b .ppc64-aixdesc~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -1827,6 +1821,20 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Wed Sep 23 2009 Jakub Jelinek 4.4.1-16 +- update from gcc-4_4-branch + - PRs c/39779, c/41049, debug/41065, libffi/40242, libffi/41443, + libgfortran/41328, testsuite/41288 +- VTA backports + - PRs bootstrap/41397, bootstrap/41404, bootstrap/41405, debug/41295, + debug/41411, debug/41439 + - fix ICE caused by reload substitution of const_int into zero_extend + in debug_insn (#524439) +- fix altivec vec_cmp{lt,gt} (#524273) +- fix -mno-sched-epilogue on ppc (#524216, PR target/40473) +- don't look at MUDFLAP_OPTIONS env var in suid/sgid programs + (PR libmudflap/41433) + * Fri Sep 18 2009 Jakub Jelinek 4.4.1-15 - for now disable out of line gpr/fpr saving on ppc with -m64 -Os -mcall-aixdesc - fix DW_AT_decl_{file,location} for DW_TAG_structure_type for C structs diff --git a/gcc44-powerpc-libgcc_s_so.patch b/gcc44-powerpc-libgcc_s_so.patch deleted file mode 100644 index 0f1674d..0000000 --- a/gcc44-powerpc-libgcc_s_so.patch +++ /dev/null @@ -1,136 +0,0 @@ -svn diff -r151567:151568 svn+ssh://gcc.gnu.org/svn/gcc/trunk - -2009-09-09 Jakub Jelinek - - * config/t-slibgcc-elf-ver (SHLIB_MAKE_SOLINK, SHLIB_INSTALL_SOLINK): - New variables. - (SHLIB_LINK, SHLIB_INSTALL): Use them. - * config/t-slibgcc-libgcc: New file. - * config.gcc (powerpc*-*-linux*, powerpc*-*-gnu*): Use it. - ---- gcc/config.gcc (revision 151567) -+++ gcc/config.gcc (revision 151568) -@@ -1738,12 +1738,12 @@ powerpc64-*-linux*) - tm_file="rs6000/secureplt.h ${tm_file}" - fi - extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt" -- tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" -+ tmake_file="t-dfprules rs6000/t-fprules ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" - ;; - powerpc64-*-gnu*) - tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux64.h rs6000/gnu.h" - extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt" -- tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" -+ tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" - ;; - powerpc-*-darwin*) - extra_options="${extra_options} rs6000/darwin.opt" -@@ -1820,22 +1820,22 @@ powerpc-*-rtems*) - powerpc-*-linux*altivec*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h" - extra_options="${extra_options} rs6000/sysv4.opt" -- tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" -+ tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm" - ;; - powerpc-*-linux*spe*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxspe.h rs6000/e500.h" - extra_options="${extra_options} rs6000/sysv4.opt" -- tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" -+ tmake_file="t-dfprules rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm" - ;; - powerpc-*-linux*paired*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h rs6000/750cl.h" - extra_options="${extra_options} rs6000/sysv4.opt" -- tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" -+ tmake_file="rs6000/t-fprules rs6000/t-fprules-softfp soft-fp/t-softfp rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm" - ;; - powerpc-*-linux*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" - extra_options="${extra_options} rs6000/sysv4.opt" -- tmake_file="t-dfprules rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" -+ tmake_file="t-dfprules rs6000/t-fprules rs6000/t-ppcos ${tmake_file} t-slibgcc-libgcc rs6000/t-ppccomm" - case ${enable_targets}:${cpu_is_64bit} in - *powerpc64* | all:* | *:yes) - if test x$cpu_is_64bit = xyes; then -@@ -1857,14 +1857,14 @@ powerpc-*-linux*) - powerpc-*-gnu-gnualtivec*) - tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h" - extra_options="${extra_options} rs6000/sysv4.opt" -- tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm" -+ tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm" - if test x$enable_threads = xyes; then - thread_file='posix' - fi - ;; - powerpc-*-gnu*) - tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/gnu.h" -- tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-gnu rs6000/t-ppccomm" -+ tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos t-slibgcc-elf-ver t-slibgcc-libgcc t-gnu rs6000/t-ppccomm" - extra_options="${extra_options} rs6000/sysv4.opt" - if test x$enable_threads = xyes; then - thread_file='posix' ---- gcc/config/t-slibgcc-libgcc (revision 0) -+++ gcc/config/t-slibgcc-libgcc (revision 151568) -@@ -0,0 +1,32 @@ -+# Copyright (C) 2009 Free Software Foundation, Inc. -+# -+# This file is part of GCC. -+# -+# GCC is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 3, or (at your option) -+# any later version. -+# -+# GCC is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with GCC; see the file COPYING3. If not see -+# . -+ -+# Instead of creating $(SHLIB_SOLINK) symlink create a GNU ld -+# linker script which sources in both $(SHLIB_SONAME) and libgcc.a. -+# This is needed on targets where libgcc.a contains routines that aren't in -+# $(SHLIB_SONAME) and are needed for shared libraries. -+ -+SHLIB_MAKE_SOLINK = \ -+ (echo "/* GNU ld script"; \ -+ echo " Use the shared library, but some functions are only in"; \ -+ echo " the static library. */"; \ -+ echo "GROUP ( $(SHLIB_SONAME) libgcc.a )" \ -+ ) > $(SHLIB_DIR)/$(SHLIB_SOLINK) -+SHLIB_INSTALL_SOLINK = \ -+ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SOLINK) \ -+ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) ---- gcc/config/t-slibgcc-elf-ver (revision 151567) -+++ gcc/config/t-slibgcc-elf-ver (revision 151568) -@@ -28,6 +28,9 @@ SHLIB_OBJS = @shlib_objs@ - SHLIB_DIR = @multilib_dir@ - SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@ - SHLIB_LC = -lc -+SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) -+SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \ -+ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) - - SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ - -Wl,--soname=$(SHLIB_SONAME) \ -@@ -40,7 +43,7 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2 - $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \ - else true; fi && \ - mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \ -- $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) -+ $(SHLIB_MAKE_SOLINK) - # $(slibdir) double quoted to protect it from expansion while building - # libgcc.mk. We want this delayed until actual install time. - SHLIB_INSTALL = \ -@@ -48,7 +51,6 @@ SHLIB_INSTALL = \ - $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SONAME) \ - $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \ - rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \ -- $(LN_S) $(SHLIB_SONAME) \ -- $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) -+ $(SHLIB_INSTALL_SOLINK) - SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk - SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver diff --git a/gcc44-pr41175.patch b/gcc44-pr41175.patch deleted file mode 100644 index 56c19af..0000000 --- a/gcc44-pr41175.patch +++ /dev/null @@ -1,1205 +0,0 @@ -2009-09-15 Nathan Froyd - Jakub Jelinek - - PR target/41175 - PR target/40677 - * config/rs6000/rs6000.c (no_global_regs_above): Fix precedence - problem. - (SAVRES_NOINLINE_GPRS_SAVES_LR, SAVRES_NOINLINE_FPRS_SAVES_LR, - SAVRES_NOINLINE_FPRS_DOESNT_RESTORE_LR): New strategy bits. - (rs6000_savres_strategy): Always save FP registers inline if the - target doesn't support hardware double-precision. Set the above - bits in return value when needed. - (rs6000_savres_routine_sym): Fix computation for cache selector. - Mark the generated symbol as a function. Rename exitp argument to - lr. Move code for determining the name of the symbol... - (rs6000_savres_routine_name): ...here. New function. Add cases for - getting the names right on AIX and 64-bit Linux. - (savres_routine_name): New variable. - (rs6000_make_savres_rtx): Rename exitp argument to lr. Don't assert - lr isn't set when savep. Use r12 resp. r1 instead of r11 depending - on what the target routine uses as a base register. If savep && lr - describe saving of r0 into memory slot. - (rs6000_emit_prologue): Correct use of call_used_regs. Fix out of - line calls for AIX ABI. - (rs6000_output_function_prologue): Use rs6000_savres_routine_name to - determine FP save/restore functions. - (rs6000_emit_stack_reset): Handle savres if sp_offset != 0 and - frame_reg_rtx != sp_reg_rtx. Use gen_add3_insn instead of - gen_addsi3. - (rs6000_emit_epilogue): Adjust computation of restore_lr. - Duplicate restoration of LR and execute the appropriate one - depending on whether GPRs are being restored inline. Set r11 from - offsetted frame_reg_rtx instead of sp_reg_rtx; if frame_reg_rtx is - r11, adjust sp_offset. Use gen_add3_insn instead of gen_addsi3. - Fix out of line calls for AIX ABI. - * config/rs6000/rs6000.md (*return_and_restore_fpregs_aix_): - New insn. - * config/rs6000/spe.md (*save_gpregs_spe): Use explicit match for - register 11. - (*restore_gpregs_spe): Likewise. - (*return_and_restore_gpregs_spe): Likewise. - * config/rs6000/linux64.h (SAVE_FP_SUFFIX, RESTORE_FP_SUFFIX): - Define to empty string unconditionally. - * config/rs6000/sysv4.h (SAVE_FP_SUFFIX, RESTORE_FP_SUFFIX): - Define to empty string unconditionally. - (GP_SAVE_INLINE, FP_SAVE_INLINE): Handle TARGET_64BIT the same as - !TARGET_64BIT. - - * gcc.target/powerpc/pr41175.c: New test. - ---- gcc/testsuite/gcc.target/powerpc/pr41175.c (revision 0) -+++ gcc/testsuite/gcc.target/powerpc/pr41175.c (revision 151729) -@@ -0,0 +1,461 @@ -+/* PR target/41175 */ -+/* { dg-do run } */ -+/* { dg-options "-Os" } */ -+ -+#define X2(n) X1(n##0) X1(n##1) -+#define X4(n) X2(n##0) X2(n##1) -+#define X8(n) X4(n##0) X4(n##1) -+ -+#ifndef __SPE__ -+#define FLOAT_REG_CONSTRAINT "f" -+#else -+#define FLOAT_REG_CONSTRAINT "r" -+#endif -+ -+volatile int ll; -+ -+__attribute__((noinline)) void -+foo (void) -+{ -+ asm volatile ("" : : : "memory"); -+} -+ -+__attribute__((noinline)) void -+bar (char *p) -+{ -+ asm volatile ("" : : "r" (p) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f1 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+ foo (); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f2 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+ char *pp = __builtin_alloca (ll); -+ bar (pp); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f3 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+} -+ -+#ifndef __NO_FPRS__ -+__attribute__((noinline)) void -+f4 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X4(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X4(d) "=m" (mem) : : "memory"); -+ foo (); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X4(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f5 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X4(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X4(d) "=m" (mem) : : "memory"); -+ char *pp = __builtin_alloca (ll); -+ bar (pp); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X4(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f6 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X4(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X4(d) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X4(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f7 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X2(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X2(d) "=m" (mem) : : "memory"); -+ foo (); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X2(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f8 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X2(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X2(d) "=m" (mem) : : "memory"); -+ char *pp = __builtin_alloca (ll); -+ bar (pp); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X2(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f9 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X8(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X2(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X2(d) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X2(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f10 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X4(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X1(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X4(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X1(d) "=m" (mem) : : "memory"); -+ foo (); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X4(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X1(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f11 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X4(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X1(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X4(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X1(d) "=m" (mem) : : "memory"); -+ char *pp = __builtin_alloca (ll); -+ bar (pp); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X4(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X1(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f12 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X4(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X1(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X4(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X1(d) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X4(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X1(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f13 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X2(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X8(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X2(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X8(d) "=m" (mem) : : "memory"); -+ foo (); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X2(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X8(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f14 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X2(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X8(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X2(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X8(d) "=m" (mem) : : "memory"); -+ char *pp = __builtin_alloca (ll); -+ bar (pp); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X2(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X8(d) "m" (mem) : "memory"); -+} -+ -+__attribute__((noinline)) void -+f15 (void) -+{ -+ int mem; -+#undef X1 -+#define X1(n) int gpr##n = 0; -+ X8(a) X8(b) X2(c) -+#undef X1 -+#define X1(n) double fpr##n = 0.0; -+ X8(d) -+#undef X1 -+#define X1(n) "+r" (gpr##n), -+ asm volatile ("" : X8(a) "=m" (mem) : : "memory"); -+ asm volatile ("" : X8(b) "=m" (mem) : : "memory"); -+ asm volatile ("" : X2(c) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : X8(d) "=m" (mem) : : "memory"); -+#undef X1 -+#define X1(n) "r" (gpr##n), -+ asm volatile ("" : : X8(a) "m" (mem) : "memory"); -+ asm volatile ("" : : X8(b) "m" (mem) : "memory"); -+ asm volatile ("" : : X2(c) "m" (mem) : "memory"); -+#undef X1 -+#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n), -+ asm volatile ("" : : X8(d) "m" (mem) : "memory"); -+} -+#endif -+ -+int -+main () -+{ -+ ll = 60; -+ f1 (); -+ f2 (); -+ f3 (); -+#ifndef __NO_FPRS__ -+ f4 (); -+ f5 (); -+ f6 (); -+ f7 (); -+ f8 (); -+ f9 (); -+ f10 (); -+ f11 (); -+ f12 (); -+ f13 (); -+ f14 (); -+ f15 (); -+#endif -+ return 0; -+} ---- gcc/config/rs6000/spe.md (revision 151728) -+++ gcc/config/rs6000/spe.md (revision 151729) -@@ -3156,9 +3156,9 @@ (define_insn "*save_gpregs_spe" - [(match_parallel 0 "any_parallel_operand" - [(clobber (reg:P 65)) - (use (match_operand:P 1 "symbol_ref_operand" "s")) -- (use (match_operand:P 2 "gpc_reg_operand" "r")) -- (set (match_operand:V2SI 3 "memory_operand" "=m") -- (match_operand:V2SI 4 "gpc_reg_operand" "r"))])] -+ (use (reg:P 11)) -+ (set (match_operand:V2SI 2 "memory_operand" "=m") -+ (match_operand:V2SI 3 "gpc_reg_operand" "r"))])] - "TARGET_SPE_ABI" - "bl %z1" - [(set_attr "type" "branch") -@@ -3168,9 +3168,9 @@ (define_insn "*restore_gpregs_spe" - [(match_parallel 0 "any_parallel_operand" - [(clobber (reg:P 65)) - (use (match_operand:P 1 "symbol_ref_operand" "s")) -- (use (match_operand:P 2 "gpc_reg_operand" "r")) -- (set (match_operand:V2SI 3 "gpc_reg_operand" "=r") -- (match_operand:V2SI 4 "memory_operand" "m"))])] -+ (use (reg:P 11)) -+ (set (match_operand:V2SI 2 "gpc_reg_operand" "=r") -+ (match_operand:V2SI 3 "memory_operand" "m"))])] - "TARGET_SPE_ABI" - "bl %z1" - [(set_attr "type" "branch") -@@ -3181,9 +3181,9 @@ (define_insn "*return_and_restore_gpregs - [(return) - (clobber (reg:P 65)) - (use (match_operand:P 1 "symbol_ref_operand" "s")) -- (use (match_operand:P 2 "gpc_reg_operand" "r")) -- (set (match_operand:V2SI 3 "gpc_reg_operand" "=r") -- (match_operand:V2SI 4 "memory_operand" "m"))])] -+ (use (reg:P 11)) -+ (set (match_operand:V2SI 2 "gpc_reg_operand" "=r") -+ (match_operand:V2SI 3 "memory_operand" "m"))])] - "TARGET_SPE_ABI" - "b %z1" - [(set_attr "type" "branch") ---- gcc/config/rs6000/linux64.h (revision 151728) -+++ gcc/config/rs6000/linux64.h (revision 151729) -@@ -437,11 +437,11 @@ extern int dot_symbols; - #undef SAVE_FP_PREFIX - #define SAVE_FP_PREFIX (TARGET_64BIT ? "._savef" : "_savefpr_") - #undef SAVE_FP_SUFFIX --#define SAVE_FP_SUFFIX (TARGET_64BIT ? "" : "_l") -+#define SAVE_FP_SUFFIX "" - #undef RESTORE_FP_PREFIX - #define RESTORE_FP_PREFIX (TARGET_64BIT ? "._restf" : "_restfpr_") - #undef RESTORE_FP_SUFFIX --#define RESTORE_FP_SUFFIX (TARGET_64BIT ? "" : "_l") -+#define RESTORE_FP_SUFFIX "" - - /* Dwarf2 debugging. */ - #undef PREFERRED_DEBUGGING_TYPE ---- gcc/config/rs6000/rs6000.c (revision 151728) -+++ gcc/config/rs6000/rs6000.c (revision 151729) -@@ -17980,7 +17980,8 @@ static bool - no_global_regs_above (int first, bool gpr) - { - int i; -- for (i = first; i < gpr ? 32 : 64 ; i++) -+ int last = gpr ? 32 : 64; -+ for (i = first; i < last; i++) - if (global_regs[i]) - return false; - return true; -@@ -17997,54 +17998,136 @@ no_global_regs_above (int first, bool gp - - static GTY(()) rtx savres_routine_syms[N_SAVRES_REGISTERS][8]; - --/* Return the symbol for an out-of-line register save/restore routine. -+/* Temporary holding space for an out-of-line register save/restore -+ routine name. */ -+static char savres_routine_name[30]; -+ -+/* Return the name for an out-of-line register save/restore routine. -+ We are saving/restoring GPRs if GPR is true. */ -+ -+static char * -+rs6000_savres_routine_name (rs6000_stack_t *info, int regno, -+ bool savep, bool gpr, bool lr) -+{ -+ const char *prefix = ""; -+ const char *suffix = ""; -+ -+ /* Different targets are supposed to define -+ {SAVE,RESTORE}_FP_{PREFIX,SUFFIX} with the idea that the needed -+ routine name could be defined with: -+ -+ sprintf (name, "%s%d%s", SAVE_FP_PREFIX, regno, SAVE_FP_SUFFIX) -+ -+ This is a nice idea in practice, but in reality, things are -+ complicated in several ways: -+ -+ - ELF targets have save/restore routines for GPRs. -+ -+ - SPE targets use different prefixes for 32/64-bit registers, and -+ neither of them fit neatly in the FOO_{PREFIX,SUFFIX} regimen. -+ -+ - PPC64 ELF targets have routines for save/restore of GPRs that -+ differ in what they do with the link register, so having a set -+ prefix doesn't work. (We only use one of the save routines at -+ the moment, though.) -+ -+ - PPC32 elf targets have "exit" versions of the restore routines -+ that restore the link register and can save some extra space. -+ These require an extra suffix. (There are also "tail" versions -+ of the restore routines and "GOT" versions of the save routines, -+ but we don't generate those at present. Same problems apply, -+ though.) -+ -+ We deal with all this by synthesizing our own prefix/suffix and -+ using that for the simple sprintf call shown above. */ -+ if (TARGET_SPE) -+ { -+ /* No floating point saves on the SPE. */ -+ gcc_assert (gpr); -+ -+ if (savep) -+ prefix = info->spe_64bit_regs_used ? "_save64gpr_" : "_save32gpr_"; -+ else -+ prefix = info->spe_64bit_regs_used ? "_rest64gpr_" : "_rest32gpr_"; -+ -+ if (lr) -+ suffix = "_x"; -+ } -+ else if (DEFAULT_ABI == ABI_V4) -+ { -+ if (TARGET_64BIT) -+ goto aix_names; -+ -+ if (gpr) -+ prefix = savep ? "_savegpr_" : "_restgpr_"; -+ else -+ prefix = savep ? "_savefpr_" : "_restfpr_"; -+ -+ if (lr) -+ suffix = "_x"; -+ } -+ else if (DEFAULT_ABI == ABI_AIX) -+ { -+#ifndef POWERPC_LINUX -+ /* No out-of-line save/restore routines for GPRs on AIX. */ -+ gcc_assert (!TARGET_AIX || !gpr); -+#endif -+ -+ aix_names: -+ if (gpr) -+ prefix = (savep -+ ? (lr ? "_savegpr0_" : "_savegpr1_") -+ : (lr ? "_restgpr0_" : "_restgpr1_")); -+#ifdef POWERPC_LINUX -+ else if (lr) -+ prefix = (savep ? "_savefpr_" : "_restfpr_"); -+#endif -+ else -+ { -+ prefix = savep ? SAVE_FP_PREFIX : RESTORE_FP_PREFIX; -+ suffix = savep ? SAVE_FP_SUFFIX : RESTORE_FP_SUFFIX; -+ } -+ } -+ else if (DEFAULT_ABI == ABI_DARWIN) -+ sorry ("Out-of-line save/restore routines not supported on Darwin"); -+ -+ sprintf (savres_routine_name, "%s%d%s", prefix, regno, suffix); -+ -+ return savres_routine_name; -+} -+ -+/* Return an RTL SYMBOL_REF for an out-of-line register save/restore routine. - We are saving/restoring GPRs if GPR is true. */ - - static rtx --rs6000_savres_routine_sym (rs6000_stack_t *info, bool savep, bool gpr, bool exitp) -+rs6000_savres_routine_sym (rs6000_stack_t *info, bool savep, -+ bool gpr, bool lr) - { - int regno = gpr ? info->first_gp_reg_save : (info->first_fp_reg_save - 32); - rtx sym; - int select = ((savep ? 1 : 0) << 2 -- | (gpr -- /* On the SPE, we never have any FPRs, but we do have -- 32/64-bit versions of the routines. */ -- ? (TARGET_SPE_ABI && info->spe_64bit_regs_used ? 1 : 0) -- : 0) << 1 -- | (exitp ? 1: 0)); -+ | ((TARGET_SPE_ABI -+ /* On the SPE, we never have any FPRs, but we do have -+ 32/64-bit versions of the routines. */ -+ ? (info->spe_64bit_regs_used ? 1 : 0) -+ : (gpr ? 1 : 0)) << 1) -+ | (lr ? 1: 0)); - - /* Don't generate bogus routine names. */ -- gcc_assert (FIRST_SAVRES_REGISTER <= regno && regno <= LAST_SAVRES_REGISTER); -+ gcc_assert (FIRST_SAVRES_REGISTER <= regno -+ && regno <= LAST_SAVRES_REGISTER); - - sym = savres_routine_syms[regno-FIRST_SAVRES_REGISTER][select]; - - if (sym == NULL) - { -- char name[30]; -- const char *action; -- const char *regkind; -- const char *exit_suffix; -- -- action = savep ? "save" : "rest"; -- -- /* SPE has slightly different names for its routines depending on -- whether we are saving 32-bit or 64-bit registers. */ -- if (TARGET_SPE_ABI) -- { -- /* No floating point saves on the SPE. */ -- gcc_assert (gpr); -- -- regkind = info->spe_64bit_regs_used ? "64gpr" : "32gpr"; -- } -- else -- regkind = gpr ? "gpr" : "fpr"; -- -- exit_suffix = exitp ? "_x" : ""; -+ char *name; - -- sprintf (name, "_%s%s_%d%s", action, regkind, regno, exit_suffix); -+ name = rs6000_savres_routine_name (info, regno, savep, gpr, lr); - - sym = savres_routine_syms[regno-FIRST_SAVRES_REGISTER][select] - = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name)); -+ SYMBOL_REF_FLAGS (sym) |= SYMBOL_FLAG_FUNCTION; - } - - return sym; -@@ -18072,8 +18155,11 @@ rs6000_emit_stack_reset (rs6000_stack_t - { - rs6000_emit_stack_tie (); - if (sp_offset != 0) -- return emit_insn (gen_addsi3 (sp_reg_rtx, frame_reg_rtx, -- GEN_INT (sp_offset))); -+ { -+ rtx dest_reg = savres ? gen_rtx_REG (Pmode, 11) : sp_reg_rtx; -+ return emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, -+ GEN_INT (sp_offset))); -+ } - else if (!savres) - return emit_move_insn (sp_reg_rtx, frame_reg_rtx); - } -@@ -18102,7 +18188,7 @@ static rtx - rs6000_make_savres_rtx (rs6000_stack_t *info, - rtx frame_reg_rtx, int save_area_offset, - enum machine_mode reg_mode, -- bool savep, bool gpr, bool exitp) -+ bool savep, bool gpr, bool lr) - { - int i; - int offset, start_reg, end_reg, n_regs; -@@ -18116,20 +18202,21 @@ rs6000_make_savres_rtx (rs6000_stack_t * - : info->first_fp_reg_save); - end_reg = gpr ? 32 : 64; - n_regs = end_reg - start_reg; -- p = rtvec_alloc ((exitp ? 4 : 3) + n_regs); -+ p = rtvec_alloc ((lr ? 4 : 3) + n_regs); - -- /* If we're saving registers, then we should never say we're exiting. */ -- gcc_assert ((savep && !exitp) || !savep); -- -- if (exitp) -+ if (!savep && lr) - RTVEC_ELT (p, offset++) = gen_rtx_RETURN (VOIDmode); - - RTVEC_ELT (p, offset++) - = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, 65)); - -- sym = rs6000_savres_routine_sym (info, savep, gpr, exitp); -+ sym = rs6000_savres_routine_sym (info, savep, gpr, lr); - RTVEC_ELT (p, offset++) = gen_rtx_USE (VOIDmode, sym); -- RTVEC_ELT (p, offset++) = gen_rtx_USE (VOIDmode, gen_rtx_REG (Pmode, 11)); -+ RTVEC_ELT (p, offset++) -+ = gen_rtx_USE (VOIDmode, -+ gen_rtx_REG (Pmode, DEFAULT_ABI != ABI_AIX ? 11 -+ : gpr && !lr ? 12 -+ : 1)); - - for (i = 0; i < end_reg - start_reg; i++) - { -@@ -18144,6 +18231,16 @@ rs6000_make_savres_rtx (rs6000_stack_t * - savep ? reg : mem); - } - -+ if (savep && lr) -+ { -+ rtx addr, reg, mem; -+ reg = gen_rtx_REG (Pmode, 0); -+ addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, -+ GEN_INT (info->lr_save_offset)); -+ mem = gen_frame_mem (Pmode, addr); -+ RTVEC_ELT (p, i + offset) = gen_rtx_SET (VOIDmode, mem, reg); -+ } -+ - return gen_rtx_PARALLEL (VOIDmode, p); - } - -@@ -18164,7 +18261,10 @@ rs6000_reg_live_or_pic_offset_p (int reg - enum { - SAVRES_MULTIPLE = 0x1, - SAVRES_INLINE_FPRS = 0x2, -- SAVRES_INLINE_GPRS = 0x4 -+ SAVRES_INLINE_GPRS = 0x4, -+ SAVRES_NOINLINE_GPRS_SAVES_LR = 0x8, -+ SAVRES_NOINLINE_FPRS_SAVES_LR = 0x10, -+ SAVRES_NOINLINE_FPRS_DOESNT_RESTORE_LR = 0x20 - }; - - /* Determine the strategy for savings/restoring registers. */ -@@ -18179,6 +18279,7 @@ rs6000_savres_strategy (rs6000_stack_t * - bool savres_gprs_inline; - bool noclobber_global_gprs - = no_global_regs_above (info->first_gp_reg_save, /*gpr=*/true); -+ int strategy; - - using_multiple_p = (TARGET_MULTIPLE && ! TARGET_POWERPC64 - && (!TARGET_SPE_ABI -@@ -18198,6 +18299,10 @@ rs6000_savres_strategy (rs6000_stack_t * - || info->first_fp_reg_save == 64 - || !no_global_regs_above (info->first_fp_reg_save, - /*gpr=*/false) -+ /* The out-of-line FP routines use -+ double-precision stores; we can't use those -+ routines if we don't have such stores. */ -+ || (TARGET_HARD_FLOAT && !TARGET_DOUBLE_FLOAT) - || FP_SAVE_INLINE (info->first_fp_reg_save)); - savres_gprs_inline = (common - /* Saving CR interferes with the exit routines -@@ -18235,9 +18340,22 @@ rs6000_savres_strategy (rs6000_stack_t * - savres_gprs_inline = savres_gprs_inline || using_multiple_p; - } - -- return (using_multiple_p -- | (savres_fprs_inline << 1) -- | (savres_gprs_inline << 2)); -+ strategy = (using_multiple_p -+ | (savres_fprs_inline << 1) -+ | (savres_gprs_inline << 2)); -+#ifdef POWERPC_LINUX -+ if (TARGET_64BIT) -+ { -+ if (!savres_fprs_inline) -+ strategy |= SAVRES_NOINLINE_FPRS_SAVES_LR; -+ else if (!savres_gprs_inline && info->first_fp_reg_save == 64) -+ strategy |= SAVRES_NOINLINE_GPRS_SAVES_LR; -+ } -+#else -+ if (TARGET_AIX && !savres_fprs_inline) -+ strategy |= SAVRES_NOINLINE_FPRS_DOESNT_RESTORE_LR; -+#endif -+ return strategy; - } - - /* Emit function prologue as insns. */ -@@ -18259,7 +18377,7 @@ rs6000_emit_prologue (void) - int using_store_multiple; - int using_static_chain_p = (cfun->static_chain_decl != NULL_TREE - && df_regs_ever_live_p (STATIC_CHAIN_REGNUM) -- && !call_used_regs[STATIC_CHAIN_REGNUM]); -+ && call_used_regs[STATIC_CHAIN_REGNUM]); - HOST_WIDE_INT sp_offset = 0; - - if (TARGET_FIX_AND_CONTINUE) -@@ -18444,24 +18562,30 @@ rs6000_emit_prologue (void) - gen_rtx_REG (Pmode, LR_REGNO)); - RTX_FRAME_RELATED_P (insn) = 1; - -- addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, -+ if (!(strategy & (SAVRES_NOINLINE_GPRS_SAVES_LR -+ | SAVRES_NOINLINE_FPRS_SAVES_LR))) -+ { -+ addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, - GEN_INT (info->lr_save_offset + sp_offset)); -- reg = gen_rtx_REG (Pmode, 0); -- mem = gen_rtx_MEM (Pmode, addr); -- /* This should not be of rs6000_sr_alias_set, because of -- __builtin_return_address. */ -+ reg = gen_rtx_REG (Pmode, 0); -+ mem = gen_rtx_MEM (Pmode, addr); -+ /* This should not be of rs6000_sr_alias_set, because of -+ __builtin_return_address. */ - -- insn = emit_move_insn (mem, reg); -- rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, -- NULL_RTX, NULL_RTX); -+ insn = emit_move_insn (mem, reg); -+ rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, -+ NULL_RTX, NULL_RTX); -+ } - } - -- /* If we need to save CR, put it into r12. */ -+ /* If we need to save CR, put it into r12 or r11. */ - if (!WORLD_SAVE_P (info) && info->cr_save_p && frame_reg_rtx != frame_ptr_rtx) - { - rtx set; - -- cr_save_rtx = gen_rtx_REG (SImode, 12); -+ cr_save_rtx -+ = gen_rtx_REG (SImode, DEFAULT_ABI == ABI_AIX && !saving_GPRs_inline -+ ? 11 : 12); - insn = emit_insn (gen_movesi_from_cr (cr_save_rtx)); - RTX_FRAME_RELATED_P (insn) = 1; - /* Now, there's no way that dwarf2out_frame_debug_expr is going -@@ -18500,7 +18624,9 @@ rs6000_emit_prologue (void) - info->fp_save_offset + sp_offset, - DFmode, - /*savep=*/true, /*gpr=*/false, -- /*exitp=*/false); -+ /*lr=*/(strategy -+ & SAVRES_NOINLINE_FPRS_SAVES_LR) -+ != 0); - insn = emit_insn (par); - rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, - NULL_RTX, NULL_RTX); -@@ -18596,7 +18722,7 @@ rs6000_emit_prologue (void) - par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11), - 0, reg_mode, - /*savep=*/true, /*gpr=*/true, -- /*exitp=*/false); -+ /*lr=*/false); - insn = emit_insn (par); - rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, - NULL_RTX, NULL_RTX); -@@ -18611,23 +18737,23 @@ rs6000_emit_prologue (void) - { - rtx par; - -- /* Need to adjust r11 if we saved any FPRs. */ -+ /* Need to adjust r11 (r12) if we saved any FPRs. */ - if (info->first_fp_reg_save != 64) - { -- rtx r11 = gen_rtx_REG (reg_mode, 11); -- rtx offset = GEN_INT (info->total_size -+ rtx dest_reg = gen_rtx_REG (reg_mode, DEFAULT_ABI == ABI_AIX -+ ? 12 : 11); -+ rtx offset = GEN_INT (sp_offset - + (-8 * (64-info->first_fp_reg_save))); -- rtx ptr_reg = (sp_reg_rtx == frame_reg_rtx -- ? sp_reg_rtx : r11); -- -- emit_insn (gen_add3_insn (r11, ptr_reg, offset)); -+ emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, offset)); - } - - par = rs6000_make_savres_rtx (info, frame_reg_rtx, - info->gp_save_offset + sp_offset, - reg_mode, - /*savep=*/true, /*gpr=*/true, -- /*exitp=*/false); -+ /*lr=*/(strategy -+ & SAVRES_NOINLINE_GPRS_SAVES_LR) -+ != 0); - insn = emit_insn (par); - rs6000_frame_related (insn, frame_ptr_rtx, info->total_size, - NULL_RTX, NULL_RTX); -@@ -18907,9 +19033,18 @@ rs6000_output_function_prologue (FILE *f - fp values. */ - if (info->first_fp_reg_save < 64 - && !FP_SAVE_INLINE (info->first_fp_reg_save)) -- fprintf (file, "\t.extern %s%d%s\n\t.extern %s%d%s\n", -- SAVE_FP_PREFIX, info->first_fp_reg_save - 32, SAVE_FP_SUFFIX, -- RESTORE_FP_PREFIX, info->first_fp_reg_save - 32, RESTORE_FP_SUFFIX); -+ { -+ char *name; -+ int regno = info->first_fp_reg_save - 32; -+ -+ name = rs6000_savres_routine_name (info, regno, /*savep=*/true, -+ /*gpr=*/false, /*lr=*/false); -+ fprintf (file, "\t.extern %s\n", name); -+ -+ name = rs6000_savres_routine_name (info, regno, /*savep=*/false, -+ /*gpr=*/false, /*lr=*/true); -+ fprintf (file, "\t.extern %s\n", name); -+ } - - /* Write .extern for AIX common mode routines, if needed. */ - if (! TARGET_POWER && ! TARGET_POWERPC && ! common_mode_defined) -@@ -19035,6 +19170,7 @@ rs6000_emit_epilogue (int sibcall) - rtx frame_reg_rtx = sp_reg_rtx; - rtx cfa_restores = NULL_RTX; - rtx insn; -+ rtx cr_save_reg = NULL_RTX; - enum machine_mode reg_mode = Pmode; - int reg_size = TARGET_32BIT ? 4 : 8; - int i; -@@ -19068,8 +19204,10 @@ rs6000_emit_epilogue (int sibcall) - || (cfun->calls_alloca - && !frame_pointer_needed)); - restore_lr = (info->lr_save_p -- && restoring_GPRs_inline -- && restoring_FPRs_inline); -+ && (restoring_FPRs_inline -+ || (strategy & SAVRES_NOINLINE_FPRS_DOESNT_RESTORE_LR)) -+ && (restoring_GPRs_inline -+ || info->first_fp_reg_save < 64)); - - if (WORLD_SAVE_P (info)) - { -@@ -19356,7 +19494,7 @@ rs6000_emit_epilogue (int sibcall) - - /* Get the old lr if we saved it. If we are restoring registers - out-of-line, then the out-of-line routines can do this for us. */ -- if (restore_lr) -+ if (restore_lr && restoring_GPRs_inline) - { - rtx mem = gen_frame_mem_offset (Pmode, frame_reg_rtx, - info->lr_save_offset + sp_offset); -@@ -19371,12 +19509,17 @@ rs6000_emit_epilogue (int sibcall) - GEN_INT (info->cr_save_offset + sp_offset)); - rtx mem = gen_frame_mem (SImode, addr); - -- emit_move_insn (gen_rtx_REG (SImode, 12), mem); -+ cr_save_reg = gen_rtx_REG (SImode, -+ DEFAULT_ABI == ABI_AIX -+ && !restoring_GPRs_inline -+ && info->first_fp_reg_save < 64 -+ ? 11 : 12); -+ emit_move_insn (cr_save_reg, mem); - } - - /* Set LR here to try to overlap restores below. LR is always saved - above incoming stack, so it never needs REG_CFA_RESTORE. */ -- if (restore_lr) -+ if (restore_lr && restoring_GPRs_inline) - emit_move_insn (gen_rtx_REG (Pmode, LR_REGNO), - gen_rtx_REG (Pmode, 0)); - -@@ -19493,7 +19636,7 @@ rs6000_emit_epilogue (int sibcall) - par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11), - 0, reg_mode, - /*savep=*/false, /*gpr=*/true, -- /*exitp=*/true); -+ /*lr=*/true); - emit_jump_insn (par); - /* We don't want anybody else emitting things after we jumped - back. */ -@@ -19511,21 +19654,25 @@ rs6000_emit_epilogue (int sibcall) - rs6000_emit_stack_reset (info, sp_reg_rtx, frame_reg_rtx, - sp_offset, can_use_exit); - else -- emit_insn (gen_addsi3 (gen_rtx_REG (Pmode, 11), -- sp_reg_rtx, -- GEN_INT (sp_offset - info->fp_size))); -+ { -+ emit_insn (gen_add3_insn (gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX -+ ? 12 : 11), -+ frame_reg_rtx, -+ GEN_INT (sp_offset - info->fp_size))); -+ if (REGNO (frame_reg_rtx) == 11) -+ sp_offset += info->fp_size; -+ } - - par = rs6000_make_savres_rtx (info, frame_reg_rtx, - info->gp_save_offset, reg_mode, - /*savep=*/false, /*gpr=*/true, -- /*exitp=*/can_use_exit); -+ /*lr=*/can_use_exit); - - if (can_use_exit) - { - if (info->cr_save_p) - { -- rs6000_restore_saved_cr (gen_rtx_REG (SImode, 12), -- using_mtcr_multiple); -+ rs6000_restore_saved_cr (cr_save_reg, using_mtcr_multiple); - if (DEFAULT_ABI == ABI_V4) - cfa_restores - = alloc_EXPR_LIST (REG_CFA_RESTORE, -@@ -19612,6 +19759,16 @@ rs6000_emit_epilogue (int sibcall) - } - } - -+ if (restore_lr && !restoring_GPRs_inline) -+ { -+ rtx mem = gen_frame_mem_offset (Pmode, frame_reg_rtx, -+ info->lr_save_offset + sp_offset); -+ -+ emit_move_insn (gen_rtx_REG (Pmode, 0), mem); -+ emit_move_insn (gen_rtx_REG (Pmode, LR_REGNO), -+ gen_rtx_REG (Pmode, 0)); -+ } -+ - /* Restore fpr's if we need to do it without calling a function. */ - if (restoring_FPRs_inline) - for (i = 0; i < 64 - info->first_fp_reg_save; i++) -@@ -19638,7 +19795,7 @@ rs6000_emit_epilogue (int sibcall) - /* If we saved cr, restore it here. Just those that were used. */ - if (info->cr_save_p) - { -- rs6000_restore_saved_cr (gen_rtx_REG (SImode, 12), using_mtcr_multiple); -+ rs6000_restore_saved_cr (cr_save_reg, using_mtcr_multiple); - if (DEFAULT_ABI == ABI_V4) - cfa_restores - = alloc_EXPR_LIST (REG_CFA_RESTORE, gen_rtx_REG (SImode, CR2_REGNO), -@@ -19669,13 +19826,14 @@ rs6000_emit_epilogue (int sibcall) - if (!sibcall) - { - rtvec p; -+ bool lr = (strategy & SAVRES_NOINLINE_FPRS_DOESNT_RESTORE_LR) == 0; - if (! restoring_FPRs_inline) - p = rtvec_alloc (4 + 64 - info->first_fp_reg_save); - else - p = rtvec_alloc (2); - - RTVEC_ELT (p, 0) = gen_rtx_RETURN (VOIDmode); -- RTVEC_ELT (p, 1) = (restoring_FPRs_inline -+ RTVEC_ELT (p, 1) = ((restoring_FPRs_inline || !lr) - ? gen_rtx_USE (VOIDmode, gen_rtx_REG (Pmode, 65)) - : gen_rtx_CLOBBER (VOIDmode, - gen_rtx_REG (Pmode, 65))); -@@ -19690,10 +19848,12 @@ rs6000_emit_epilogue (int sibcall) - sym = rs6000_savres_routine_sym (info, - /*savep=*/false, - /*gpr=*/false, -- /*exitp=*/true); -+ /*lr=*/lr); - RTVEC_ELT (p, 2) = gen_rtx_USE (VOIDmode, sym); - RTVEC_ELT (p, 3) = gen_rtx_USE (VOIDmode, -- gen_rtx_REG (Pmode, 11)); -+ gen_rtx_REG (Pmode, -+ DEFAULT_ABI == ABI_AIX -+ ? 1 : 11)); - for (i = 0; i < 64 - info->first_fp_reg_save; i++) - { - rtx addr, mem; ---- gcc/config/rs6000/rs6000.md (revision 151728) -+++ gcc/config/rs6000/rs6000.md (revision 151729) -@@ -15436,6 +15436,19 @@ (define_insn "*return_and_restore_fpregs - [(set_attr "type" "branch") - (set_attr "length" "4")]) - -+(define_insn "*return_and_restore_fpregs_aix_" -+ [(match_parallel 0 "any_parallel_operand" -+ [(return) -+ (use (match_operand:P 1 "register_operand" "l")) -+ (use (match_operand:P 2 "symbol_ref_operand" "s")) -+ (use (match_operand:P 3 "gpc_reg_operand" "r")) -+ (set (match_operand:DF 4 "gpc_reg_operand" "=d") -+ (match_operand:DF 5 "memory_operand" "m"))])] -+ "" -+ "b %z2" -+ [(set_attr "type" "branch") -+ (set_attr "length" "4")]) -+ - ; This is used in compiling the unwind routines. - (define_expand "eh_return" - [(use (match_operand 0 "general_operand" ""))] ---- gcc/config/rs6000/sysv4.h (revision 151728) -+++ gcc/config/rs6000/sysv4.h (revision 151729) -@@ -272,27 +272,25 @@ do { \ - #endif - - /* Define cutoff for using external functions to save floating point. -- Currently on 64-bit V.4, always use inline stores. When optimizing -- for size on 32-bit targets, use external functions when -- profitable. */ --#define FP_SAVE_INLINE(FIRST_REG) (optimize_size && !TARGET_64BIT \ -+ When optimizing for size, use external functions when profitable. */ -+#define FP_SAVE_INLINE(FIRST_REG) (optimize_size \ - ? ((FIRST_REG) == 62 \ - || (FIRST_REG) == 63) \ - : (FIRST_REG) < 64) - /* And similarly for general purpose registers. */ - #define GP_SAVE_INLINE(FIRST_REG) ((FIRST_REG) < 32 \ -- && (TARGET_64BIT || !optimize_size)) -+ && !optimize_size) - - /* Put jump tables in read-only memory, rather than in .text. */ - #define JUMP_TABLES_IN_TEXT_SECTION 0 - - /* Prefix and suffix to use to saving floating point. */ - #define SAVE_FP_PREFIX "_savefpr_" --#define SAVE_FP_SUFFIX (TARGET_64BIT ? "_l" : "") -+#define SAVE_FP_SUFFIX "" - - /* Prefix and suffix to use to restoring floating point. */ - #define RESTORE_FP_PREFIX "_restfpr_" --#define RESTORE_FP_SUFFIX (TARGET_64BIT ? "_l" : "") -+#define RESTORE_FP_SUFFIX "" - - /* Type used for ptrdiff_t, as a string used in a declaration. */ - #define PTRDIFF_TYPE "int" diff --git a/gcc44-vta-cfgexpand-ptr-mode-pr41248.patch b/gcc44-vta-cfgexpand-ptr-mode-pr41248.patch deleted file mode 100644 index 27dc43d..0000000 --- a/gcc44-vta-cfgexpand-ptr-mode-pr41248.patch +++ /dev/null @@ -1,151 +0,0 @@ -for gcc/ChangeLog -from Alexandre Oliva - - PR debug/41248 - * cfgexpand.c (convert_debug_memory_address): New. - (expand_debug_expr): Convert base address and offset to the same - mode. Use it to convert addresses to other modes. Accept - ptr_mode addresses. - -for gcc/testsuite/ChangeLog -from Alexandre Oliva - - PR debug/41248 - * gcc.dg/pr41248.c: New. - -Index: gcc/cfgexpand.c -=================================================================== ---- gcc/cfgexpand.c.orig 2009-09-07 19:00:20.000000000 -0300 -+++ gcc/cfgexpand.c 2009-09-07 19:17:27.000000000 -0300 -@@ -1966,6 +1966,38 @@ unwrap_constant (rtx x) - return ret; - } - -+/* Convert X to MODE, that must be Pmode or ptr_mode, without emitting -+ any rtl. */ -+ -+static rtx -+convert_debug_memory_address (enum machine_mode mode, rtx x) -+{ -+ enum machine_mode xmode = GET_MODE (x); -+ -+#ifndef POINTERS_EXTEND_UNSIGNED -+ gcc_assert (mode == Pmode); -+ gcc_assert (xmode == mode || xmode == VOIDmode); -+#else -+ gcc_assert (mode == Pmode || mode == ptr_mode); -+ -+ if (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode) -+ return x; -+ -+ if (GET_MODE_BITSIZE (mode) < GET_MODE_BITSIZE (xmode)) -+ x = simplify_gen_subreg (mode, x, xmode, -+ subreg_lowpart_offset -+ (mode, xmode)); -+ else if (POINTERS_EXTEND_UNSIGNED > 0) -+ x = gen_rtx_ZERO_EXTEND (mode, x); -+ else if (!POINTERS_EXTEND_UNSIGNED) -+ x = gen_rtx_SIGN_EXTEND (mode, x); -+ else -+ gcc_unreachable (); -+#endif /* POINTERS_EXTEND_UNSIGNED */ -+ -+ return x; -+} -+ - /* Return an RTX equivalent to the value of the tree expression - EXP. */ - -@@ -2141,6 +2173,7 @@ expand_debug_expr (tree exp) - return NULL; - - gcc_assert (GET_MODE (op0) == Pmode -+ || GET_MODE (op0) == ptr_mode - || GET_CODE (op0) == CONST_INT - || GET_CODE (op0) == CONST_DOUBLE); - -@@ -2167,6 +2200,7 @@ expand_debug_expr (tree exp) - return NULL; - - gcc_assert (GET_MODE (op0) == Pmode -+ || GET_MODE (op0) == ptr_mode - || GET_CODE (op0) == CONST_INT - || GET_CODE (op0) == CONST_DOUBLE); - -@@ -2199,13 +2233,32 @@ expand_debug_expr (tree exp) - - if (offset) - { -+ enum machine_mode addrmode, offmode; -+ - gcc_assert (MEM_P (op0)); - -+ op0 = XEXP (op0, 0); -+ addrmode = GET_MODE (op0); -+ if (addrmode == VOIDmode) -+ addrmode = Pmode; -+ - op1 = expand_debug_expr (offset); - if (!op1) - return NULL; - -- op0 = gen_rtx_MEM (mode, gen_rtx_PLUS (Pmode, XEXP (op0, 0), op1)); -+ offmode = GET_MODE (op1); -+ if (offmode == VOIDmode) -+ offmode = TYPE_MODE (TREE_TYPE (offset)); -+ -+ if (addrmode != offmode) -+ op1 = simplify_gen_subreg (addrmode, op1, offmode, -+ subreg_lowpart_offset (addrmode, -+ offmode)); -+ -+ /* Don't use offset_address here, we don't need a -+ recognizable address, and we don't want to generate -+ code. */ -+ op0 = gen_rtx_MEM (mode, gen_rtx_PLUS (addrmode, op0, op1)); - } - - if (MEM_P (op0)) -@@ -2525,7 +2578,9 @@ expand_debug_expr (tree exp) - if (!op0 || !MEM_P (op0)) - return NULL; - -- return XEXP (op0, 0); -+ op0 = convert_debug_memory_address (mode, XEXP (op0, 0)); -+ -+ return op0; - - case VECTOR_CST: - exp = build_constructor_from_list (TREE_TYPE (exp), -Index: gcc/testsuite/gcc.dg/pr41248.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ gcc/testsuite/gcc.dg/pr41248.c 2009-09-07 19:17:27.000000000 -0300 -@@ -0,0 +1,27 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -g" } */ -+ -+struct __gcov_var { -+ unsigned int offset; -+ unsigned int buffer[(1 << 10) + 1]; -+} __gcov_var; -+unsigned int * gcov_write_words (unsigned int words) { -+ unsigned int *result; -+ result = &__gcov_var.buffer[__gcov_var.offset]; -+ return result; -+} -+ -+struct gcov_ctr_summary { }; -+struct gcov_summary { -+ unsigned int checksum; -+ struct gcov_ctr_summary ctrs[1]; -+}; -+void __gcov_write_unsigned (unsigned int); -+void __gcov_write_summary (unsigned int tag, -+ const struct gcov_summary *summary) -+{ -+ unsigned ix; -+ const struct gcov_ctr_summary *csum; -+ __gcov_write_unsigned (summary->checksum); -+ for (csum = summary->ctrs, ix = 1; ix--; csum++) { } -+} diff --git a/sources b/sources index c118a41..70d0e1a 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -d80d46cdb567914d34408afcd3c4d5af gcc-4.4.1-20090918.tar.bz2 +25ef066c0ea8770f562eed45a9e1619f gcc-4.4.1-20090923.tar.bz2