commit gcc41 for openSUSE:Factory
Hello community, here is the log from the commit of package gcc41 for openSUSE:Factory checked in at Fri May 1 02:14:35 CEST 2009. -------- --- gcc41/cross-avr-gcc.changes 2009-04-16 01:55:32.000000000 +0200 +++ gcc41/cross-avr-gcc.changes 2009-04-21 15:38:36.000000000 +0200 @@ -1,0 +2,14 @@ +Mon Apr 20 16:22:27 CEST 2009 - rguenther@suse.de + +- Downgrade to SLE10 head version plus patches that accumulated + in STABLE. May serve as a base for fixing bnc#485521. +- Add patch to fix makeinfo detection. +- Add patch to fix ld version detection. +- Fix ldconfig calls. + +------------------------------------------------------------------- +Sat Apr 18 14:54:39 CEST 2009 - rguenther@suse.de + +- Adjust Ada BuildRequires check. + +------------------------------------------------------------------- gcc41.changes: same change libgcj41.changes: same change calling whatdependson for head-i586 Old: ---- gcc-4.1.3-20080612.tar.bz2 pr29166.diff New: ---- barcelona.patch gcc-4.1.2-20070115.tar.bz2 gcc41-binutils-version.patch gcc41-makeinfo.patch gcc-amdfam10-alignloop.diff ia64-bad-prologue-generation.patch note-gnu-stack.diff nov277135.diff nov341254-altivec.diff nov341254-pic.diff nov354405.diff nov376357.diff nov394409.diff nov480052.diff nov494022.diff nov495844.diff pr30113.patch pr34130.patch pr34641.patch sse5-suse.patch01 warn-enum.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cross-avr-gcc.spec ++++++ --- /var/tmp/diff_new_pack.NA7724/_old 2009-05-01 02:08:04.000000000 +0200 +++ /var/tmp/diff_new_pack.NA7724/_new 2009-05-01 02:08:04.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package cross-avr-gcc (Version 4.1.3_20080612) +# spec file for package cross-avr-gcc (Version 4.1.2_20070115) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -34,8 +34,8 @@ %define biarch_targets x86_64 s390x powerpc64 powerpc Url: http://gcc.gnu.org/ License: BSD 3-Clause; GPL v2 or later; LGPL v2.1 or later; X11/MIT -Version: 4.1.3_20080612 -Release: 33 +Version: 4.1.2_20070115 +Release: 9 %define gcc_version %(echo %version | sed 's/_.*//') %define snapshot_date %(echo %version | sed 's/[34]\.[0-4]\.[0-6]//' | sed 's/_/-/') %define binsuffix -4.1 @@ -57,6 +57,8 @@ Patch2: gcc-noalias-warn.diff Patch5: boehm-gc-strict-aliasing.patch Patch7: acats-timeout.patch +Patch8: gcc41-makeinfo.patch +Patch9: gcc41-binutils-version.patch Patch10: program-transform-name.diff Patch12: gcc4-ppc64-m32-m64-multilib-only.patch Patch23: libjava-no-multilib.diff @@ -78,11 +80,16 @@ Patch97: nov189571-2.diff Patch98: nvl199137.patch Patch100: pr28755.patch -Patch105: pr29166.diff -Patch106: fix-ada-build.diff -Patch107: pr20218.patch -Patch108: pr29558.patch +Patch101: pr30113.patch +Patch102: ia64-bad-prologue-generation.patch +Patch103: pr34130.patch +Patch104: nov480052.diff +Patch105: pr34641.patch +Patch107: fix-ada-build.diff +Patch108: pr20218.patch +Patch109: pr29558.patch Patch110: pr29512.patch +Patch111: nov495844.diff Patch123: gcc41-no-unwind-tables.diff # A set of patches from the RH srpm Patch51: gcc41-ia64-stack-protector.patch @@ -90,6 +97,7 @@ Patch57: gcc41-ppc32-retaddr.patch Patch54: gcc41-ldbl-default.patch Patch50: gcc41-ldbl-default-libstdc++.patch +Patch52: note-gnu-stack.diff Patch53: gcc41-strncat-chk.patch # general improvement patches Patch60: pr25626.patch @@ -104,9 +112,15 @@ Patch69: gcc41-ssse3.patch Patch70: pr27880.diff Patch72: Wprofile-mismatch.patch -Patch73: parentheses-mathematical-5.diff -Patch74: Wuninitialized.patch -Patch75: fpreserve-function-arguments4.patch +Patch73: fpreserve-function-arguments4.patch +Patch74: warn-enum.diff +Patch75: nov277135.diff +Patch76: nov376357.diff +Patch77: nov394409.diff +Patch78: nov354405.diff +Patch79: nov494022.diff +Patch80: parentheses-mathematical-5.diff +Patch81: Wuninitialized.patch # Greyhound (aka AMD Family 10h) support Patch200: gcc-amdfam10-suse-1.patch Patch201: gcc-amdfam10-suse-2.patch @@ -121,8 +135,13 @@ Patch210: gcc-amdfam10-suse-11.patch Patch211: gcc-amdfam10-suse-12.patch Patch212: gcc-amdfam10-suse-20.patch +Patch213: gcc-amdfam10-alignloop.diff +Patch214: barcelona.patch +Patch215: sse5-suse.patch01 # POWER6 support Patch300: gcc-4.1.0-power6.diff +Patch301: nov341254-pic.diff +Patch302: nov341254-altivec.diff %if "%{gcc_target_arch}" == "avr" # Joerg Wunsch places his cross-avr-gcc-patches there: # http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files @@ -173,6 +192,8 @@ %patch2 %patch5 %patch7 +%patch8 +%patch9 %patch10 %if !%{build_nof} %patch12 @@ -196,17 +217,23 @@ %patch97 %patch98 -p1 %patch100 +%patch101 +%patch102 -p1 +%patch103 +%patch104 %patch105 -%patch106 %patch107 %patch108 +%patch109 %patch110 +%patch111 %patch123 %patch51 %patch55 %patch57 %patch54 %patch50 +%patch52 %patch53 cd libstdc++-v3 %patch60 @@ -225,6 +252,12 @@ %patch73 %patch74 %patch75 +%patch76 +%patch77 +%patch78 +%patch79 +%patch80 +%patch81 %patch200 %patch201 %patch202 @@ -238,7 +271,12 @@ %patch210 %patch211 %patch212 +%patch213 -p1 +%patch214 +%patch215 %patch300 +%patch301 -p1 +%patch302 -p1 %if "%{gcc_target_arch}" == "avr" %patch1000 %patch1001 @@ -326,11 +364,22 @@ # to install a cross glibc, which we don't, or make the whole # thing point to the native glibc, which is in /, hence the # --with-sysroot=/ -CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ -TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ %if %{build_ada} -CC="gcc%{binsuffix}" GNATBIND="gnatbind%{binsuffix}" \ +# Using the host gnatmake like +# CC="gcc%{hostsuffix}" GNATBIND="gnatbind%{hostsuffix}" +# GNATMAKE="gnatmake%{hostsuffix}" +# doesn't work due to PR33857, so an un-suffixed gnatmake has to be +# available +mkdir -p host-tools/bin +cp -a /usr/bin/gnatmake%{hostsuffix} host-tools/bin/gnatmake +cp -a /usr/bin/gnatlink%{hostsuffix} host-tools/bin/gnatlink +cp -a /usr/bin/gnatbind%{hostsuffix} host-tools/bin/gnatbind +cp -a /usr/bin/gcc%{hostsuffix} host-tools/bin/gcc +ln -sf /usr/%{_lib} host-tools/%{_lib} +export PATH="`pwd`/host-tools/bin:$PATH" %endif +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ +TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ ../configure \ %if 0%{?gcc_target_arch:1} && 0%{!?gcc_icecream:1} %else @@ -415,6 +464,14 @@ %{_prefix} %changelog +* Mon Apr 20 2009 rguenther@suse.de +- Downgrade to SLE10 head version plus patches that accumulated + in STABLE. May serve as a base for fixing bnc#485521. +- Add patch to fix makeinfo detection. +- Add patch to fix ld version detection. +- Fix ldconfig calls. +* Sat Apr 18 2009 rguenther@suse.de +- Adjust Ada BuildRequires check. * Thu Apr 16 2009 ro@suse.de - buildfix: refresh patch gcc41-ia64-stack-protector.patch * Mon Mar 16 2009 rguenther@suse.de ++++++ gcc41.spec ++++++ --- /var/tmp/diff_new_pack.NA7724/_old 2009-05-01 02:08:05.000000000 +0200 +++ /var/tmp/diff_new_pack.NA7724/_new 2009-05-01 02:08:05.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package gcc41 (Version 4.1.3_20080612) +# spec file for package gcc41 (Version 4.1.2_20070115) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -52,10 +52,16 @@ Name: gcc41 BuildRequires: bison flex gettext-devel glibc-devel-32bit perl texinfo zlib-devel %if %{build_ada} -BuildRequires: gcc-ada gcc41-ada +%if %{suse_version} > 1010 +%define hostsuffix -4.1 +BuildRequires: gcc41-ada +%else +%define hostsuffix %{nil} +BuildRequires: gcc-ada +%endif %endif %if %{build_libjava} -BuildRequires: gtk2-devel libart_lgpl-devel unzip update-desktop-files +BuildRequires: gtk2-devel libart_lgpl-devel unzip %endif %if %{build_fortran} BuildRequires: mpfr-devel @@ -118,8 +124,8 @@ %define biarch_targets x86_64 s390x powerpc64 powerpc Url: http://gcc.gnu.org/ License: GPL v2 or later -Version: 4.1.3_20080612 -Release: 32 +Version: 4.1.2_20070115 +Release: 8 %define gcc_version %(echo %version | sed 's/_.*//') %define snapshot_date %(echo %version | sed 's/[34]\.[0-4]\.[0-6]//' | sed 's/_/-/') %define binsuffix -4.1 @@ -148,6 +154,8 @@ Patch2: gcc-noalias-warn.diff Patch5: boehm-gc-strict-aliasing.patch Patch7: acats-timeout.patch +Patch8: gcc41-makeinfo.patch +Patch9: gcc41-binutils-version.patch Patch10: program-transform-name.diff Patch12: gcc4-ppc64-m32-m64-multilib-only.patch Patch23: libjava-no-multilib.diff @@ -169,11 +177,16 @@ Patch97: nov189571-2.diff Patch98: nvl199137.patch Patch100: pr28755.patch -Patch105: pr29166.diff -Patch106: fix-ada-build.diff -Patch107: pr20218.patch -Patch108: pr29558.patch +Patch101: pr30113.patch +Patch102: ia64-bad-prologue-generation.patch +Patch103: pr34130.patch +Patch104: nov480052.diff +Patch105: pr34641.patch +Patch107: fix-ada-build.diff +Patch108: pr20218.patch +Patch109: pr29558.patch Patch110: pr29512.patch +Patch111: nov495844.diff Patch123: gcc41-no-unwind-tables.diff # A set of patches from the RH srpm Patch51: gcc41-ia64-stack-protector.patch @@ -181,6 +194,7 @@ Patch57: gcc41-ppc32-retaddr.patch Patch54: gcc41-ldbl-default.patch Patch50: gcc41-ldbl-default-libstdc++.patch +Patch52: note-gnu-stack.diff Patch53: gcc41-strncat-chk.patch # general improvement patches Patch60: pr25626.patch @@ -195,9 +209,15 @@ Patch69: gcc41-ssse3.patch Patch70: pr27880.diff Patch72: Wprofile-mismatch.patch -Patch73: parentheses-mathematical-5.diff -Patch74: Wuninitialized.patch -Patch75: fpreserve-function-arguments4.patch +Patch73: fpreserve-function-arguments4.patch +Patch74: warn-enum.diff +Patch75: nov277135.diff +Patch76: nov376357.diff +Patch77: nov394409.diff +Patch78: nov354405.diff +Patch79: nov494022.diff +Patch80: parentheses-mathematical-5.diff +Patch81: Wuninitialized.patch # Greyhound (aka AMD Family 10h) support Patch200: gcc-amdfam10-suse-1.patch Patch201: gcc-amdfam10-suse-2.patch @@ -212,8 +232,13 @@ Patch210: gcc-amdfam10-suse-11.patch Patch211: gcc-amdfam10-suse-12.patch Patch212: gcc-amdfam10-suse-20.patch +Patch213: gcc-amdfam10-alignloop.diff +Patch214: barcelona.patch +Patch215: sse5-suse.patch01 # POWER6 support Patch300: gcc-4.1.0-power6.diff +Patch301: nov341254-pic.diff +Patch302: nov341254-altivec.diff %if "%{gcc_target_arch}" == "avr" # Joerg Wunsch places his cross-avr-gcc-patches there: # http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files @@ -372,10 +397,10 @@ The GCC team. %post -n libgcc41 -%run_ldconfig +/sbin/ldconfig %postun -n libgcc41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -392,10 +417,10 @@ Libgcc is needed for dynamically linked C programs. %post -n libgcc41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libgcc41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -412,10 +437,10 @@ Libgcc is needed for dynamically linked C programs. %post -n libgcc41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libgcc41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -444,10 +469,10 @@ et.al. %post -n libstdc++41 -%run_ldconfig +/sbin/ldconfig %postun -n libstdc++41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -474,10 +499,10 @@ et.al. %post -n libstdc++41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libstdc++41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -504,10 +529,10 @@ et.al. %post -n libstdc++41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libstdc++41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END %package info @@ -584,10 +609,10 @@ %post -n libobjc41 -%run_ldconfig +/sbin/ldconfig %postun -n libobjc41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -609,10 +634,10 @@ The library for the GNU Objective C compiler. %post -n libobjc41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libobjc41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -634,10 +659,10 @@ The library for the GNU Objective C compiler. %post -n libobjc41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libobjc41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END %package obj-c++ @@ -717,10 +742,10 @@ The GCC team. %post -n libada41 -%run_ldconfig +/sbin/ldconfig %postun -n libada41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -787,10 +812,10 @@ The GCC team. %post -n libgfortran41 -%run_ldconfig +/sbin/ldconfig %postun -n libgfortran41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -814,10 +839,10 @@ of the GNU Compiler Collection (GCC). %post -n libgfortran41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libgfortran41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -841,10 +866,10 @@ of the GNU Compiler Collection (GCC). %post -n libgfortran41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libgfortran41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -868,10 +893,10 @@ %post -n libmudflap41 -%run_ldconfig +/sbin/ldconfig %postun -n libmudflap41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -893,10 +918,10 @@ This is the Mudflap Extension Runtime Library. %post -n libmudflap41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libmudflap41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -918,10 +943,10 @@ This is the Mudflap Extension Runtime Library. %post -n libmudflap41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libmudflap41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END %package java @@ -957,10 +982,10 @@ %post -n libgcj41 -%run_ldconfig +/sbin/ldconfig %postun -n libgcj41 -%run_ldconfig +/sbin/ldconfig %package -n libgcj41-devel License: GPL v2 or later; LGPL v2.1 or later @@ -1011,10 +1036,10 @@ %post -n libffi41 -%run_ldconfig +/sbin/ldconfig %postun -n libffi41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -1030,10 +1055,10 @@ A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language. %post -n libffi41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libffi41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -1049,10 +1074,10 @@ A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language. %post -n libffi41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libffi41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -1272,6 +1297,8 @@ %patch2 %patch5 %patch7 +%patch8 +%patch9 %patch10 %if !%{build_nof} %patch12 @@ -1295,17 +1322,23 @@ %patch97 %patch98 -p1 %patch100 +%patch101 +%patch102 -p1 +%patch103 +%patch104 %patch105 -%patch106 %patch107 %patch108 +%patch109 %patch110 +%patch111 %patch123 %patch51 %patch55 %patch57 %patch54 %patch50 +%patch52 %patch53 cd libstdc++-v3 %patch60 @@ -1324,6 +1357,12 @@ %patch73 %patch74 %patch75 +%patch76 +%patch77 +%patch78 +%patch79 +%patch80 +%patch81 %patch200 %patch201 %patch202 @@ -1337,7 +1376,12 @@ %patch210 %patch211 %patch212 +%patch213 -p1 +%patch214 +%patch215 %patch300 +%patch301 -p1 +%patch302 -p1 %if "%{gcc_target_arch}" == "avr" %patch1000 %patch1001 @@ -1425,11 +1469,22 @@ # to install a cross glibc, which we don't, or make the whole # thing point to the native glibc, which is in /, hence the # --with-sysroot=/ -CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ -TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ %if %{build_ada} -CC="gcc%{binsuffix}" GNATBIND="gnatbind%{binsuffix}" \ +# Using the host gnatmake like +# CC="gcc%{hostsuffix}" GNATBIND="gnatbind%{hostsuffix}" +# GNATMAKE="gnatmake%{hostsuffix}" +# doesn't work due to PR33857, so an un-suffixed gnatmake has to be +# available +mkdir -p host-tools/bin +cp -a /usr/bin/gnatmake%{hostsuffix} host-tools/bin/gnatmake +cp -a /usr/bin/gnatlink%{hostsuffix} host-tools/bin/gnatlink +cp -a /usr/bin/gnatbind%{hostsuffix} host-tools/bin/gnatbind +cp -a /usr/bin/gcc%{hostsuffix} host-tools/bin/gcc +ln -sf /usr/%{_lib} host-tools/%{_lib} +export PATH="`pwd`/host-tools/bin:$PATH" %endif +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ +TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ ../configure \ %if 0%{?gcc_target_arch:1} && 0%{!?gcc_icecream:1} %else @@ -1495,17 +1550,21 @@ --host=%{GCCDIST} # COMMON-END # Only run profiled bootstrap on archs where it works -%ifarch %ix86 x86_64 ppc ppc64 ia64 -make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL -%else +#%ifarch %ix86 x86_64 ppc ppc64 ia64 +#make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL +#%else make bootstrap-lean BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL -%endif +#%endif #make -C gcc proto make info %if %{run_tests} echo "Run testsuite" -make -k check $PARALLEL || true (make -C %{GCCDIST}/libstdc++-v3 check-abi || true) +mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.log %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.log +mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.sum %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.sum +make -k check $PARALLEL || true +mkdir ../testresults +../contrib/test_summary > ../testresults/test_summary.txt %endif %install @@ -1661,18 +1720,7 @@ chmod a+x $RPM_BUILD_ROOT%{_libdir}/libgna*-*.so # LIBJAVA-DELETE-END %endif -#ln -sf gcc%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/cc%{binsuffix} -#ln -sf g++%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix} rm -f $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix} -#mkdir -p $RPM_BUILD_ROOT/lib -#%if !%{gcc_for_opt} -#cat <<\EOF > $RPM_BUILD_ROOT/lib/cpp -##!/bin/sh -## Traditionally, /lib/cpp only knew about C -#exec %{_prefix}/bin/cpp -xc "$@" -#EOF -#chmod 755 $RPM_BUILD_ROOT/lib/cpp -#%endif %if %{biarch} %if %{build_primary_64bit} # move around some libs that end in wrong paths @@ -1726,7 +1774,6 @@ %endif %endif %if %{run_tests} -mkdir ../testresults cp `find . -name "*.sum"` ../testresults/ cp `find . -name "*.log" \! -name "config.log" |grep -v 'acats/tests' ` ../testresults/ chmod 644 ../testresults/* @@ -1914,11 +1961,13 @@ %{libsubdir}/include/mm3dnow.h %{libsubdir}/include/mmintrin.h %{libsubdir}/include/ammintrin.h +%{libsubdir}/include/bmmintrin.h %{libsubdir}/include/emmintrin.h %{libsubdir}/include/pmmintrin.h %{libsubdir}/include/xmmintrin.h %{libsubdir}/include/tmmintrin.h %{libsubdir}/include/mm_malloc.h +%{libsubdir}/include/mmintrin-common.h %endif %{libsubdir}/include/mf-runtime.h %versmainlib *crt*.o @@ -2352,11 +2401,20 @@ %files -n gcc41-testresults %defattr(-,root,root) +%doc testresults/test_summary.txt %doc testresults/*.sum %doc testresults/*.log %endif %changelog +* Mon Apr 20 2009 rguenther@suse.de +- Downgrade to SLE10 head version plus patches that accumulated + in STABLE. May serve as a base for fixing bnc#485521. +- Add patch to fix makeinfo detection. +- Add patch to fix ld version detection. +- Fix ldconfig calls. +* Sat Apr 18 2009 rguenther@suse.de +- Adjust Ada BuildRequires check. * Thu Apr 16 2009 ro@suse.de - buildfix: refresh patch gcc41-ia64-stack-protector.patch * Mon Mar 16 2009 rguenther@suse.de ++++++ libgcj41.spec ++++++ --- /var/tmp/diff_new_pack.NA7724/_old 2009-05-01 02:08:05.000000000 +0200 +++ /var/tmp/diff_new_pack.NA7724/_new 2009-05-01 02:08:05.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package libgcj41 (Version 4.1.3_20080612) +# spec file for package libgcj41 (Version 4.1.2_20070115) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -65,10 +65,16 @@ Name: libgcj41 BuildRequires: bison flex gettext-devel glibc-devel-32bit perl texinfo zlib-devel %if %{build_ada} -BuildRequires: gcc-ada gcc41-ada +%if %{suse_version} > 1010 +%define hostsuffix -4.1 +BuildRequires: gcc41-ada +%else +%define hostsuffix %{nil} +BuildRequires: gcc-ada +%endif %endif %if %{build_libjava} -BuildRequires: gtk2-devel libart_lgpl-devel unzip update-desktop-files +BuildRequires: gtk2-devel libart_lgpl-devel unzip %endif %if %{build_fortran} BuildRequires: mpfr-devel @@ -131,8 +137,8 @@ %define biarch_targets x86_64 s390x powerpc64 powerpc Url: http://gcc.gnu.org/ License: GPL v2 or later; LGPL v2.1 or later -Version: 4.1.3_20080612 -Release: 43 +Version: 4.1.2_20070115 +Release: 10 %define gcc_version %(echo %version | sed 's/_.*//') %define snapshot_date %(echo %version | sed 's/[34]\.[0-4]\.[0-6]//' | sed 's/_/-/') %define binsuffix -4.1 @@ -161,6 +167,8 @@ Patch2: gcc-noalias-warn.diff Patch5: boehm-gc-strict-aliasing.patch Patch7: acats-timeout.patch +Patch8: gcc41-makeinfo.patch +Patch9: gcc41-binutils-version.patch Patch10: program-transform-name.diff Patch12: gcc4-ppc64-m32-m64-multilib-only.patch Patch23: libjava-no-multilib.diff @@ -182,11 +190,16 @@ Patch97: nov189571-2.diff Patch98: nvl199137.patch Patch100: pr28755.patch -Patch105: pr29166.diff -Patch106: fix-ada-build.diff -Patch107: pr20218.patch -Patch108: pr29558.patch +Patch101: pr30113.patch +Patch102: ia64-bad-prologue-generation.patch +Patch103: pr34130.patch +Patch104: nov480052.diff +Patch105: pr34641.patch +Patch107: fix-ada-build.diff +Patch108: pr20218.patch +Patch109: pr29558.patch Patch110: pr29512.patch +Patch111: nov495844.diff Patch123: gcc41-no-unwind-tables.diff # A set of patches from the RH srpm Patch51: gcc41-ia64-stack-protector.patch @@ -194,6 +207,7 @@ Patch57: gcc41-ppc32-retaddr.patch Patch54: gcc41-ldbl-default.patch Patch50: gcc41-ldbl-default-libstdc++.patch +Patch52: note-gnu-stack.diff Patch53: gcc41-strncat-chk.patch # general improvement patches Patch60: pr25626.patch @@ -208,9 +222,15 @@ Patch69: gcc41-ssse3.patch Patch70: pr27880.diff Patch72: Wprofile-mismatch.patch -Patch73: parentheses-mathematical-5.diff -Patch74: Wuninitialized.patch -Patch75: fpreserve-function-arguments4.patch +Patch73: fpreserve-function-arguments4.patch +Patch74: warn-enum.diff +Patch75: nov277135.diff +Patch76: nov376357.diff +Patch77: nov394409.diff +Patch78: nov354405.diff +Patch79: nov494022.diff +Patch80: parentheses-mathematical-5.diff +Patch81: Wuninitialized.patch # Greyhound (aka AMD Family 10h) support Patch200: gcc-amdfam10-suse-1.patch Patch201: gcc-amdfam10-suse-2.patch @@ -225,8 +245,13 @@ Patch210: gcc-amdfam10-suse-11.patch Patch211: gcc-amdfam10-suse-12.patch Patch212: gcc-amdfam10-suse-20.patch +Patch213: gcc-amdfam10-alignloop.diff +Patch214: barcelona.patch +Patch215: sse5-suse.patch01 # POWER6 support Patch300: gcc-4.1.0-power6.diff +Patch301: nov341254-pic.diff +Patch302: nov341254-altivec.diff %if "%{gcc_target_arch}" == "avr" # Joerg Wunsch places his cross-avr-gcc-patches there: # http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files @@ -255,10 +280,10 @@ %post -%run_ldconfig +/sbin/ldconfig %postun -%run_ldconfig +/sbin/ldconfig %package -n libgcj41-devel License: GPL v2 or later; LGPL v2.1 or later @@ -309,10 +334,10 @@ %post -n libffi41 -%run_ldconfig +/sbin/ldconfig %postun -n libffi41 -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -328,10 +353,10 @@ A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language. %post -n libffi41-32bit -%run_ldconfig +/sbin/ldconfig %postun -n libffi41-32bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -347,10 +372,10 @@ A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language. %post -n libffi41-64bit -%run_ldconfig +/sbin/ldconfig %postun -n libffi41-64bit -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN # PACKAGE-BEGIN @@ -570,6 +595,8 @@ %patch2 %patch5 %patch7 +%patch8 +%patch9 %patch10 %if !%{build_nof} %patch12 @@ -593,17 +620,23 @@ %patch97 %patch98 -p1 %patch100 +%patch101 +%patch102 -p1 +%patch103 +%patch104 %patch105 -%patch106 %patch107 %patch108 +%patch109 %patch110 +%patch111 %patch123 %patch51 %patch55 %patch57 %patch54 %patch50 +%patch52 %patch53 cd libstdc++-v3 %patch60 @@ -622,6 +655,12 @@ %patch73 %patch74 %patch75 +%patch76 +%patch77 +%patch78 +%patch79 +%patch80 +%patch81 %patch200 %patch201 %patch202 @@ -635,7 +674,12 @@ %patch210 %patch211 %patch212 +%patch213 -p1 +%patch214 +%patch215 %patch300 +%patch301 -p1 +%patch302 -p1 %if "%{gcc_target_arch}" == "avr" %patch1000 %patch1001 @@ -723,11 +767,22 @@ # to install a cross glibc, which we don't, or make the whole # thing point to the native glibc, which is in /, hence the # --with-sysroot=/ -CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ -TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ %if %{build_ada} -CC="gcc%{binsuffix}" GNATBIND="gnatbind%{binsuffix}" \ +# Using the host gnatmake like +# CC="gcc%{hostsuffix}" GNATBIND="gnatbind%{hostsuffix}" +# GNATMAKE="gnatmake%{hostsuffix}" +# doesn't work due to PR33857, so an un-suffixed gnatmake has to be +# available +mkdir -p host-tools/bin +cp -a /usr/bin/gnatmake%{hostsuffix} host-tools/bin/gnatmake +cp -a /usr/bin/gnatlink%{hostsuffix} host-tools/bin/gnatlink +cp -a /usr/bin/gnatbind%{hostsuffix} host-tools/bin/gnatbind +cp -a /usr/bin/gcc%{hostsuffix} host-tools/bin/gcc +ln -sf /usr/%{_lib} host-tools/%{_lib} +export PATH="`pwd`/host-tools/bin:$PATH" %endif +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ +TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ ../configure \ %if 0%{?gcc_target_arch:1} && 0%{!?gcc_icecream:1} %else @@ -793,17 +848,21 @@ --host=%{GCCDIST} # COMMON-END # Only run profiled bootstrap on archs where it works -%ifarch %ix86 x86_64 ppc ppc64 ia64 -make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL -%else +#%ifarch %ix86 x86_64 ppc ppc64 ia64 +#make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL +#%else make bootstrap-lean BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL -%endif +#%endif #make -C gcc proto make info %if %{run_tests} echo "Run testsuite" -make -k check $PARALLEL || true (make -C %{GCCDIST}/libstdc++-v3 check-abi || true) +mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.log %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.log +mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.sum %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.sum +make -k check $PARALLEL || true +mkdir ../testresults +../contrib/test_summary > ../testresults/test_summary.txt %endif %install @@ -870,18 +929,7 @@ %endif done %endif -#ln -sf gcc%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/cc%{binsuffix} -#ln -sf g++%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix} rm -f $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix} -#mkdir -p $RPM_BUILD_ROOT/lib -#%if !%{gcc_for_opt} -#cat <<\EOF > $RPM_BUILD_ROOT/lib/cpp -##!/bin/sh -## Traditionally, /lib/cpp only knew about C -#exec %{_prefix}/bin/cpp -xc "$@" -#EOF -#chmod 755 $RPM_BUILD_ROOT/lib/cpp -#%endif %if %{biarch} %if %{build_primary_64bit} # move around some libs that end in wrong paths @@ -935,7 +983,6 @@ %endif %endif %if %{run_tests} -mkdir ../testresults cp `find . -name "*.sum"` ../testresults/ cp `find . -name "*.log" \! -name "config.log" |grep -v 'acats/tests' ` ../testresults/ chmod 644 ../testresults/* @@ -1163,11 +1210,20 @@ %files -n gcc41-testresults %defattr(-,root,root) +%doc testresults/test_summary.txt %doc testresults/*.sum %doc testresults/*.log %endif %changelog +* Mon Apr 20 2009 rguenther@suse.de +- Downgrade to SLE10 head version plus patches that accumulated + in STABLE. May serve as a base for fixing bnc#485521. +- Add patch to fix makeinfo detection. +- Add patch to fix ld version detection. +- Fix ldconfig calls. +* Sat Apr 18 2009 rguenther@suse.de +- Adjust Ada BuildRequires check. * Thu Apr 16 2009 ro@suse.de - buildfix: refresh patch gcc41-ia64-stack-protector.patch * Mon Mar 16 2009 rguenther@suse.de ++++++ barcelona.patch ++++++ Index: gcc/config/i386/i386.c =================================================================== --- gcc/config/i386/i386.c.orig +++ gcc/config/i386/i386.c @@ -1650,6 +1650,10 @@ override_options (void) {"amdfam10", PROCESSOR_AMDFAM10, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW | PTA_64BIT | PTA_3DNOW_A | PTA_SSE | PTA_SSE2| PTA_SSE3 | PTA_SSE4A | PTA_POPCNT | PTA_ABM}, + {"barcelona", PROCESSOR_AMDFAM10, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW + | PTA_64BIT | PTA_3DNOW_A | PTA_SSE + | PTA_SSE2 | PTA_SSE3 | PTA_POPCNT + | PTA_ABM | PTA_SSE4A}, }; int const pta_size = ARRAY_SIZE (processor_alias_table); Index: gcc/config.gcc =================================================================== --- gcc/config.gcc.orig +++ gcc/config.gcc @@ -2396,7 +2396,7 @@ if test x$with_cpu = x ; then ;; i686-*-* | i786-*-*) case ${target_noncanonical} in - amdfam10-*) + amdfam10-*|barcelona-*) with_cpu=amdfam10 ;; k8-*|opteron-*|athlon_64-*) @@ -2436,7 +2436,7 @@ if test x$with_cpu = x ; then ;; x86_64-*-*) case ${target_noncanonical} in - amdfam10-*) + amdfam10-*|barcelona-*) with_cpu=amdfam10 ;; k8-*|opteron-*|athlon_64-*) @@ -2668,7 +2668,7 @@ case "${target}" in esac # OK ;; - "" | k8 | opteron | athlon64 | athlon-fx | nocona | generic | amdfam10 ) + "" | k8 | opteron | athlon64 | athlon-fx | nocona | generic | amdfam10 | barcelona ) # OK ;; *) Index: gcc/doc/invoke.texi =================================================================== --- gcc/doc/invoke.texi.orig +++ gcc/doc/invoke.texi @@ -9074,7 +9074,7 @@ instruction set support. @item k8, opteron, athlon64, athlon-fx AMD K8 core based CPUs with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.) -@item amdfam10 +@item amdfam10, barcelona AMD Family 10 core based CPUs with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE4A, 3dNOW!, enhanced 3dNOW!, ABM and 64-bit instruction set extensions.) ++++++ gcc-4.1.3-20080612.tar.bz2 -> gcc-4.1.2-20070115.tar.bz2 ++++++ gcc41/gcc-4.1.3-20080612.tar.bz2 gcc41/gcc-4.1.2-20070115.tar.bz2 differ: byte 11, line 1 ++++++ gcc41-binutils-version.patch ++++++ 2007-04-23 Matthias Klose <doko@debian.org> Backport from mainline: 2007-02-27 Richard Guenther <rguenther@suse.de> * acinclude.m4: Adjust regular expression for ld version extraction. * configure: Regenerate. 2007-09-13 H.J. Lu <hongjiu.lu@intel.com> PR bootstrap/33418 * configure.ac (ld_vers): Support Linux linker. * configure: Regenerated. 2007-09-23 H.J. Lu <hongjiu.lu@intel.com> * configure.ac (ld_vers): Support GNU linker version xx.xx.* * configure: Regenerated. Index: libstdc++-v3/configure =================================================================== --- libstdc++-v3/configure.orig 2009-04-21 14:26:28.000000000 +0200 +++ libstdc++-v3/configure 2009-04-21 14:33:06.000000000 +0200 @@ -8282,7 +8282,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -53011,7 +53011,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -74289,7 +74289,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -75730,7 +75730,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -77047,7 +77047,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -79151,7 +79151,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -79970,7 +79970,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -81289,7 +81289,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -83000,7 +83000,7 @@ echo "${ECHO_T}$glibcxx_cv_WRITEV" >&6 if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -84161,7 +84161,7 @@ _ACEOF if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` @@ -85106,7 +85106,7 @@ done if test x"$with_gnu_ld" = x"yes"; then ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) $3=0; print ($1*100+$2)*100+$3 }'` Index: libstdc++-v3/acinclude.m4 =================================================================== --- libstdc++-v3/acinclude.m4.orig 2009-04-21 14:26:28.000000000 +0200 +++ libstdc++-v3/acinclude.m4 2009-04-21 14:33:06.000000000 +0200 @@ -225,7 +225,7 @@ AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES] if test x"$with_gnu_ld" = x"yes"; then changequote(,) ldver=`$LD --version 2>/dev/null | head -1 | \ - sed -e 's/GNU ld version \([0-9.][0-9.]*\).*/\1/'` + sed -e 's/GNU ld \(version \)\{0,1\}\(([^)]*) \)\{0,1\}\([0-9.][0-9.]*\).*/\3/'` changequote([,]) glibcxx_gnu_ld_version=`echo $ldver | \ $AWK -F. '{ if (NF<3) [$]3=0; print ([$]1*100+[$]2)*100+[$]3 }'` Index: gcc/configure =================================================================== --- gcc/configure.orig 2009-04-21 14:33:05.000000000 +0200 +++ gcc/configure 2009-04-21 14:33:06.000000000 +0200 @@ -14138,9 +14138,7 @@ else ld_ver=`$gcc_cv_ld --version 2>/dev/null | sed 1q` if echo "$ld_ver" | grep GNU > /dev/null; then ld_vers=`echo $ld_ver | sed -n \ - -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \ - -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \ - -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \ + -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p' \ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \ Index: gcc/configure.ac =================================================================== --- gcc/configure.ac.orig 2009-04-21 14:33:05.000000000 +0200 +++ gcc/configure.ac 2009-04-21 14:33:06.000000000 +0200 @@ -1994,9 +1994,7 @@ else if echo "$ld_ver" | grep GNU > /dev/null; then changequote(,)dnl ld_vers=`echo $ld_ver | sed -n \ - -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \ - -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \ - -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)$,\1,p' \ + -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*.*\)$,\1,p' \ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \ -e 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)[ ].*$,\1,p' \ ++++++ gcc41-makeinfo.patch ++++++ 2007-09-23 Jakub Jelinek <jakub@redhat.com> * configure.ac (MAKEINFO): Handle makeinfo version 4.10 and above. * configure: Regenerated. 2007-09-15 Alan Modra <amodra@bigpond.net.au> * configure.in: Correct makeinfo version check. * configure: Regenerate. Index: configure =================================================================== --- configure (revision 128694) +++ configure (revision 128695) @@ -3549,7 +3549,7 @@ case " $build_configdirs " in # For an installed makeinfo, we require it to be from texinfo 4.2 or # higher, else we use the "missing" dummy. if ${MAKEINFO} --version \ - | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])' >/dev/null 2>&1; then + | egrep 'texinfo[^0-9]*(4\.([2-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then : else MAKEINFO="$MISSING makeinfo" Index: gcc/configure =================================================================== --- gcc/configure (revision 128694) +++ gcc/configure (revision 128695) @@ -7495,7 +7495,7 @@ else echo "configure:7495: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; - 4.[2-9]*) + 4.[2-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*) gcc_cv_prog_makeinfo_modern=yes;; *) gcc_cv_prog_makeinfo_modern=no;; esac Index: gcc/configure.ac =================================================================== --- gcc/configure.ac (revision 128694) +++ gcc/configure.ac (revision 128695) @@ -833,7 +833,7 @@ MISSING="${CONFIG_SHELL-/bin/sh} $srcdir # that we can use it. gcc_AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version, [GNU texinfo.* \([0-9][0-9.]*\)], - [4.[2-9]*]) + [4.[2-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*]) if test $gcc_cv_prog_makeinfo_modern = no; then MAKEINFO="$MISSING makeinfo" AC_MSG_WARN([ Index: configure.in =================================================================== --- configure.in (revision 128694) +++ configure.in (revision 128695) @@ -2134,7 +2134,7 @@ changequote(,) # For an installed makeinfo, we require it to be from texinfo 4.2 or # higher, else we use the "missing" dummy. if ${MAKEINFO} --version \ - | egrep 'texinfo[^0-9]*([1-3][0-9]|4\.[2-9]|[5-9])' >/dev/null 2>&1; then + | egrep 'texinfo[^0-9]*(4\.([2-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then : else MAKEINFO="$MISSING makeinfo" ++++++ gcc4-ppc64-m32-m64-multilib-only.patch ++++++ --- /var/tmp/diff_new_pack.NA7724/_old 2009-05-01 02:08:06.000000000 +0200 +++ /var/tmp/diff_new_pack.NA7724/_new 2009-05-01 02:08:06.000000000 +0200 @@ -1,10 +1,8 @@ -Index: gcc/config/rs6000/t-linux64 -=================================================================== ---- gcc/config/rs6000/t-linux64.orig 2007-10-02 15:05:30.000000000 +0200 -+++ gcc/config/rs6000/t-linux64 2007-10-02 15:17:55.000000000 +0200 -@@ -14,11 +14,11 @@ TARGET_LIBGCC2_CFLAGS += -mno-minimal-to - # it doesn't tell anything about the 32bit libraries on those systems. Set - # MULTILIB_OSDIRNAMES according to what is found on the target. +--- gcc/config/rs6000/t-linux64 2003-06-03 05:11:45.000000000 -0400 ++++ gcc/config/rs6000/t-linux64 2003-06-11 17:07:16.000000000 -0400 +@@ -4,13 +4,13 @@ LIB2FUNCS_EXTRA = tramp.S $(srcdir)/conf + # Modify the shared lib version file + SHLIB_MKMAP_OPTS = -v dotsyms=1 -MULTILIB_OPTIONS = m64/m32 msoft-float -MULTILIB_DIRNAMES = 64 32 nof @@ -13,8 +11,12 @@ MULTILIB_EXTRA_OPTS = fPIC mstrict-align -MULTILIB_EXCEPTIONS = m64/msoft-float -MULTILIB_EXCLUSIONS = m64/!m32/msoft-float +-MULTILIB_OSDIRNAMES = ../lib64 ../lib nof +-MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) +MULTILIB_EXCEPTIONS = +MULTILIB_EXCLUSIONS = - MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) nof - MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) ++MULTILIB_OSDIRNAMES = ../lib64 ../lib ++MULTILIB_MATCHES = + + TARGET_LIBGCC2_CFLAGS = -mno-minimal-toc -fPIC ++++++ gcc-amdfam10-alignloop.diff ++++++ Index: gcc-4.1.2-20070115/gcc/config/i386/i386.c =================================================================== --- gcc-4.1.2-20070115.orig/gcc/config/i386/i386.c +++ gcc-4.1.2-20070115/gcc/config/i386/i386.c @@ -1583,7 +1583,7 @@ override_options (void) {&nocona_cost, 0, 0, 0, 0, 0, 0, 0}, {&generic32_cost, 0, 0, 16, 7, 16, 7, 16}, {&generic64_cost, 0, 0, 16, 7, 16, 7, 16}, - {&amdfam10_cost, 0, 0, 32, 7, 32, 7, 32} + {&amdfam10_cost, 0, 0, 32, 24, 32, 7, 32} }; static const char * const cpu_names[] = TARGET_CPU_DEFAULT_NAMES; ++++++ gcc.spec.in ++++++ --- /var/tmp/diff_new_pack.NA7724/_old 2009-05-01 02:08:06.000000000 +0200 +++ /var/tmp/diff_new_pack.NA7724/_new 2009-05-01 02:08:06.000000000 +0200 @@ -57,10 +57,16 @@ Name: gcc@base_ver@@gcc_suffix@ BuildRequires: bison flex gettext-devel glibc-devel-32bit perl texinfo zlib-devel %if %{build_ada} -BuildRequires: gcc-ada gcc@base_ver@-ada +%if %{suse_version} > 1010 +%define hostsuffix -4.1 +BuildRequires: gcc41-ada +%else +%define hostsuffix %{nil} +BuildRequires: gcc-ada +%endif %endif %if %{build_libjava} -BuildRequires: gtk2-devel libart_lgpl-devel update-desktop-files unzip +BuildRequires: gtk2-devel libart_lgpl-devel unzip %endif %if %{build_fortran} BuildRequires: mpfr-devel @@ -133,7 +139,7 @@ URL: http://gcc.gnu.org/ License: GPL -Version: 4.1.3_20080612 +Version: 4.1.2_20070115 Release: 1 %define gcc_version %(echo %version | sed 's/_.*//') %define snapshot_date %(echo %version | sed 's/[34]\.[0-4]\.[0-6]//' | sed 's/_/-/') @@ -165,6 +171,8 @@ Patch2: gcc-noalias-warn.diff Patch5: boehm-gc-strict-aliasing.patch Patch7: acats-timeout.patch +Patch8: gcc41-makeinfo.patch +Patch9: gcc41-binutils-version.patch Patch10: program-transform-name.diff Patch12: gcc4-ppc64-m32-m64-multilib-only.patch Patch23: libjava-no-multilib.diff @@ -186,11 +194,16 @@ Patch97: nov189571-2.diff Patch98: nvl199137.patch Patch100: pr28755.patch -Patch105: pr29166.diff -Patch106: fix-ada-build.diff -Patch107: pr20218.patch -Patch108: pr29558.patch +Patch101: pr30113.patch +Patch102: ia64-bad-prologue-generation.patch +Patch103: pr34130.patch +Patch104: nov480052.diff +Patch105: pr34641.patch +Patch107: fix-ada-build.diff +Patch108: pr20218.patch +Patch109: pr29558.patch Patch110: pr29512.patch +Patch111: nov495844.diff Patch123: gcc41-no-unwind-tables.diff # A set of patches from the RH srpm Patch51: gcc41-ia64-stack-protector.patch @@ -198,6 +211,7 @@ Patch57: gcc41-ppc32-retaddr.patch Patch54: gcc41-ldbl-default.patch Patch50: gcc41-ldbl-default-libstdc++.patch +Patch52: note-gnu-stack.diff Patch53: gcc41-strncat-chk.patch # general improvement patches Patch60: pr25626.patch @@ -212,9 +226,15 @@ Patch69: gcc41-ssse3.patch Patch70: pr27880.diff Patch72: Wprofile-mismatch.patch -Patch73: parentheses-mathematical-5.diff -Patch74: Wuninitialized.patch -Patch75: fpreserve-function-arguments4.patch +Patch73: fpreserve-function-arguments4.patch +Patch74: warn-enum.diff +Patch75: nov277135.diff +Patch76: nov376357.diff +Patch77: nov394409.diff +Patch78: nov354405.diff +Patch79: nov494022.diff +Patch80: parentheses-mathematical-5.diff +Patch81: Wuninitialized.patch # Greyhound (aka AMD Family 10h) support Patch200: gcc-amdfam10-suse-1.patch Patch201: gcc-amdfam10-suse-2.patch @@ -229,8 +249,13 @@ Patch210: gcc-amdfam10-suse-11.patch Patch211: gcc-amdfam10-suse-12.patch Patch212: gcc-amdfam10-suse-20.patch +Patch213: gcc-amdfam10-alignloop.diff +Patch214: barcelona.patch +Patch215: sse5-suse.patch01 # POWER6 support Patch300: gcc-4.1.0-power6.diff +Patch301: nov341254-pic.diff +Patch302: nov341254-altivec.diff %if "%{gcc_target_arch}" == "avr" @@ -334,10 +359,10 @@ Libgcc is needed for dynamically linked C programs. %post -n libgcc@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig %postun -n libgcc@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN @@ -362,10 +387,10 @@ et.al. %post -n libstdc++@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig %postun -n libstdc++@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-END @@ -413,10 +438,10 @@ The library for the GNU Objective C compiler. %post -n libobjc@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig %postun -n libobjc@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-END %package obj-c++ @@ -475,10 +500,10 @@ 1003.5 Binding (Florist). %post -n libada@base_ver@@gcc_suffix@ -%run_ldconfig +/sbin/ldconfig %postun -n libada@base_ver@@gcc_suffix@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-BEGIN %package fortran@variant@ @@ -511,10 +536,10 @@ of the GNU Compiler Collection (GCC). %post -n libgfortran@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig %postun -n libgfortran@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN @@ -534,10 +559,10 @@ This is the Mudflap Extension Runtime Library. %post -n libmudflap@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig %postun -n libmudflap@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-END @@ -569,10 +594,10 @@ Source code for this package is in gcc. %post -n libgcj@base_ver@@gcc_suffix@ -%run_ldconfig +/sbin/ldconfig %postun -n libgcj@base_ver@@gcc_suffix@ -%run_ldconfig +/sbin/ldconfig %package -n libgcj@base_ver@-devel@gcc_suffix@ Summary: Include Files and Libraries mandatory for Development. @@ -614,10 +639,10 @@ A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language. %post -n libffi@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig %postun -n libffi@base_ver@@gcc_suffix@@variant@ -%run_ldconfig +/sbin/ldconfig # PACKAGE-END # PACKAGE-BEGIN @@ -824,6 +849,8 @@ %patch2 %patch5 %patch7 +%patch8 +%patch9 %patch10 %if !%{build_nof} %patch12 @@ -847,17 +874,23 @@ %patch97 %patch98 -p1 %patch100 +%patch101 +%patch102 -p1 +%patch103 +%patch104 %patch105 -%patch106 %patch107 %patch108 +%patch109 %patch110 +%patch111 %patch123 %patch51 %patch55 %patch57 %patch54 %patch50 +%patch52 %patch53 cd libstdc++-v3 %patch60 @@ -876,6 +909,12 @@ %patch73 %patch74 %patch75 +%patch76 +%patch77 +%patch78 +%patch79 +%patch80 +%patch81 %patch200 %patch201 %patch202 @@ -889,7 +928,12 @@ %patch210 %patch211 %patch212 +%patch213 -p1 +%patch214 +%patch215 %patch300 +%patch301 -p1 +%patch302 -p1 %if "%{gcc_target_arch}" == "avr" @@ -989,11 +1033,22 @@ # thing point to the native glibc, which is in /, hence the # --with-sysroot=/ -CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ -TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ %if %{build_ada} -CC="gcc%{binsuffix}" GNATBIND="gnatbind%{binsuffix}" \ +# Using the host gnatmake like +# CC="gcc%{hostsuffix}" GNATBIND="gnatbind%{hostsuffix}" +# GNATMAKE="gnatmake%{hostsuffix}" +# doesn't work due to PR33857, so an un-suffixed gnatmake has to be +# available +mkdir -p host-tools/bin +cp -a /usr/bin/gnatmake%{hostsuffix} host-tools/bin/gnatmake +cp -a /usr/bin/gnatlink%{hostsuffix} host-tools/bin/gnatlink +cp -a /usr/bin/gnatbind%{hostsuffix} host-tools/bin/gnatbind +cp -a /usr/bin/gcc%{hostsuffix} host-tools/bin/gcc +ln -sf /usr/%{_lib} host-tools/%{_lib} +export PATH="`pwd`/host-tools/bin:$PATH" %endif +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \ +TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \ ../configure \ %if 0%{?gcc_target_arch:1} && 0%{!?gcc_icecream:1} %else @@ -1061,17 +1116,21 @@ # COMMON-END # Only run profiled bootstrap on archs where it works -%ifarch %ix86 x86_64 ppc ppc64 ia64 -make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL -%else +#%ifarch %ix86 x86_64 ppc ppc64 ia64 +#make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL +#%else make bootstrap-lean BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL -%endif +#%endif #make -C gcc proto make info %if %{run_tests} echo "Run testsuite" -make -k check $PARALLEL || true (make -C %{GCCDIST}/libstdc++-v3 check-abi || true) +mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.log %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.log +mv %{GCCDIST}/libstdc++-v3/testsuite/libstdc++.sum %{GCCDIST}/libstdc++-v3/testsuite/libstdc++-abi.sum +make -k check $PARALLEL || true +mkdir ../testresults +../contrib/test_summary > ../testresults/test_summary.txt %endif %install @@ -1236,18 +1295,7 @@ # LIBJAVA-DELETE-END %endif -#ln -sf gcc%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/cc%{binsuffix} -#ln -sf g++%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix} rm -f $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix} -#mkdir -p $RPM_BUILD_ROOT/lib -#%if !%{gcc_for_opt} -#cat <<\EOF > $RPM_BUILD_ROOT/lib/cpp -##!/bin/sh -## Traditionally, /lib/cpp only knew about C -#exec %{_prefix}/bin/cpp -xc "$@" -#EOF -#chmod 755 $RPM_BUILD_ROOT/lib/cpp -#%endif %if %{biarch} %if %{build_primary_64bit} @@ -1304,7 +1352,6 @@ %endif %if %{run_tests} -mkdir ../testresults cp `find . -name "*.sum"` ../testresults/ cp `find . -name "*.log" \! -name "config.log" |grep -v 'acats/tests' ` ../testresults/ chmod 644 ../testresults/* @@ -1499,11 +1546,13 @@ %{libsubdir}/include/mm3dnow.h %{libsubdir}/include/mmintrin.h %{libsubdir}/include/ammintrin.h +%{libsubdir}/include/bmmintrin.h %{libsubdir}/include/emmintrin.h %{libsubdir}/include/pmmintrin.h %{libsubdir}/include/xmmintrin.h %{libsubdir}/include/tmmintrin.h %{libsubdir}/include/mm_malloc.h +%{libsubdir}/include/mmintrin-common.h %endif %{libsubdir}/include/mf-runtime.h %versmainlib *crt*.o @@ -1877,6 +1926,7 @@ %if %{run_tests} %files -n gcc@base_ver@@gcc_suffix@-testresults %defattr(-,root,root) +%doc testresults/test_summary.txt %doc testresults/*.sum %doc testresults/*.log %endif ++++++ ia64-bad-prologue-generation.patch ++++++ From: Andreas Schwab <andreas@suse.de> Subject: Fix bad prologue generation on ia64 References: 201157 PR29166 This fixes the prologue generation on ia64. The problem is that the return pointer is saved between the general registers and the branch registers, causing it to wind up in the middle of the gr/br/fr spill area when it is saved to memory. When any of the preserved general registers need to be spilled as well the location of these regsisters is off-by-8 compared to the location described by the unwind information. :ADDPATCH target/ia64: Andreas. 2006-11-24 Andreas Schwab <schwab@suse.de> PR target/29166 * config/ia64/ia64.c (ia64_compute_frame_size): Account space for save of BR0 in extra_spill_size instead of spill_size. (ia64_expand_prologue): Save BR0 outside of the gr/br/fr spill area. (ia64_expand_epilogue): Restore BR0 from its new location. testsuite/: * g++.dg/eh/pr29166.C: New test. Index: gcc-4.1.0/gcc/config/ia64/ia64.c =================================================================== --- gcc-4.1.0.orig/gcc/config/ia64/ia64.c +++ gcc-4.1.0/gcc/config/ia64/ia64.c @@ -2398,7 +2398,7 @@ ia64_compute_frame_size (HOST_WIDE_INT s current_frame_info.reg_save_b0 = find_gr_spill (1); if (current_frame_info.reg_save_b0 == 0) { - spill_size += 8; + extra_spill_size += 8; n_spilled += 1; } @@ -2427,7 +2427,7 @@ ia64_compute_frame_size (HOST_WIDE_INT s if (regs_ever_live[BR_REG (0)] && ! call_used_regs[BR_REG (0)]) { SET_HARD_REG_BIT (mask, BR_REG (0)); - spill_size += 8; + extra_spill_size += 8; n_spilled += 1; } @@ -3107,6 +3107,31 @@ ia64_expand_prologue (void) } } + /* Save the return pointer. */ + if (TEST_HARD_REG_BIT (current_frame_info.mask, BR_REG (0))) + { + reg = gen_rtx_REG (DImode, BR_REG (0)); + if (current_frame_info.reg_save_b0 != 0) + { + alt_reg = gen_rtx_REG (DImode, current_frame_info.reg_save_b0); + insn = emit_move_insn (alt_reg, reg); + RTX_FRAME_RELATED_P (insn) = 1; + + /* Even if we're not going to generate an epilogue, we still + need to save the register so that EH works. */ + if (! epilogue_p) + emit_insn (gen_prologue_use (alt_reg)); + } + else + { + alt_regno = next_scratch_gr_reg (); + alt_reg = gen_rtx_REG (DImode, alt_regno); + emit_move_insn (alt_reg, reg); + do_spill (gen_movdi_x, alt_reg, cfa_off, reg); + cfa_off -= 8; + } + } + if (current_frame_info.reg_save_gp) { insn = emit_move_insn (gen_rtx_REG (DImode, @@ -3133,32 +3158,6 @@ ia64_expand_prologue (void) cfa_off -= 8; } - /* Handle BR0 specially -- it may be getting stored permanently in - some GR register. */ - if (TEST_HARD_REG_BIT (current_frame_info.mask, BR_REG (0))) - { - reg = gen_rtx_REG (DImode, BR_REG (0)); - if (current_frame_info.reg_save_b0 != 0) - { - alt_reg = gen_rtx_REG (DImode, current_frame_info.reg_save_b0); - insn = emit_move_insn (alt_reg, reg); - RTX_FRAME_RELATED_P (insn) = 1; - - /* Even if we're not going to generate an epilogue, we still - need to save the register so that EH works. */ - if (! epilogue_p) - emit_insn (gen_prologue_use (alt_reg)); - } - else - { - alt_regno = next_scratch_gr_reg (); - alt_reg = gen_rtx_REG (DImode, alt_regno); - emit_move_insn (alt_reg, reg); - do_spill (gen_movdi_x, alt_reg, cfa_off, reg); - cfa_off -= 8; - } - } - /* Spill the rest of the BR registers. */ for (regno = BR_REG (1); regno <= BR_REG (7); ++regno) if (TEST_HARD_REG_BIT (current_frame_info.mask, regno)) @@ -3292,6 +3291,22 @@ ia64_expand_epilogue (int sibcall_p) emit_move_insn (reg, alt_reg); } + /* Restore the return pointer. */ + if (TEST_HARD_REG_BIT (current_frame_info.mask, BR_REG (0))) + { + if (current_frame_info.reg_save_b0 != 0) + alt_reg = gen_rtx_REG (DImode, current_frame_info.reg_save_b0); + else + { + alt_regno = next_scratch_gr_reg (); + alt_reg = gen_rtx_REG (DImode, alt_regno); + do_restore (gen_movdi_x, alt_reg, cfa_off); + cfa_off -= 8; + } + reg = gen_rtx_REG (DImode, BR_REG (0)); + emit_move_insn (reg, alt_reg); + } + /* We should now be at the base of the gr/br/fr spill area. */ gcc_assert (cfa_off == (current_frame_info.spill_cfa_off + current_frame_info.spill_size)); @@ -3310,23 +3325,7 @@ ia64_expand_epilogue (int sibcall_p) cfa_off -= 8; } - /* Restore the branch registers. Handle B0 specially, as it may - have gotten stored in some GR register. */ - if (TEST_HARD_REG_BIT (current_frame_info.mask, BR_REG (0))) - { - if (current_frame_info.reg_save_b0 != 0) - alt_reg = gen_rtx_REG (DImode, current_frame_info.reg_save_b0); - else - { - alt_regno = next_scratch_gr_reg (); - alt_reg = gen_rtx_REG (DImode, alt_regno); - do_restore (gen_movdi_x, alt_reg, cfa_off); - cfa_off -= 8; - } - reg = gen_rtx_REG (DImode, BR_REG (0)); - emit_move_insn (reg, alt_reg); - } - + /* Restore the branch registers. */ for (regno = BR_REG (1); regno <= BR_REG (7); ++regno) if (TEST_HARD_REG_BIT (current_frame_info.mask, regno)) { Index: gcc-4.1.0/gcc/testsuite/g++.dg/eh/pr29166.C =================================================================== --- /dev/null +++ gcc-4.1.0/gcc/testsuite/g++.dg/eh/pr29166.C @@ -0,0 +1,197 @@ +// PR 29166: r4-r7 corrupted when unwinding. +// { dg-do run } + +class Ex +{ +public: + int val; + + Ex( int v ) + : val( v ) + { } + +}; + +void doIt() +{ + int OFF( 1000 ); + register int v1=OFF+1,v2=OFF+2,v3=OFF+3,v4=OFF+4,v5=OFF+5,v6=OFF+6,v7=OFF+7,v8=OFF+8,v9=OFF+9,v10=OFF+10; + register int v11=OFF+11,v12=OFF+12,v13=OFF+13,v14=OFF+14,v15=OFF+15,v16=OFF+16,v17=OFF+17,v18=OFF+18,v19=OFF+19,v20=OFF+20; + register int v21=OFF+21,v22=OFF+22,v23=OFF+23,v24=OFF+24,v25=OFF+25,v26=OFF+26,v27=OFF+27,v28=OFF+28,v29=OFF+29,v30=OFF+30; + register int v31=OFF+31,v32=OFF+32,v33=OFF+33,v34=OFF+34,v35=OFF+35,v36=OFF+36,v37=OFF+37,v38=OFF+38,v39=OFF+39,v40=OFF+40; + register int v41=OFF+41,v42=OFF+42,v43=OFF+43,v44=OFF+44,v45=OFF+45,v46=OFF+46,v47=OFF+47,v48=OFF+48,v49=OFF+49,v50=OFF+50; + register int v51=OFF+51,v52=OFF+52,v53=OFF+53,v54=OFF+54,v55=OFF+55,v56=OFF+56,v57=OFF+57,v58=OFF+58,v59=OFF+59,v60=OFF+60; + register int v61=OFF+61,v62=OFF+62,v63=OFF+63,v64=OFF+64,v65=OFF+65,v66=OFF+66,v67=OFF+67,v68=OFF+68,v69=OFF+69,v70=OFF+70; + register int v71=OFF+71,v72=OFF+72,v73=OFF+73,v74=OFF+74,v75=OFF+75,v76=OFF+76,v77=OFF+77,v78=OFF+78,v79=OFF+79,v80=OFF+80; + register int v81=OFF+81,v82=OFF+82,v83=OFF+83,v84=OFF+84,v85=OFF+85,v86=OFF+86,v87=OFF+87,v88=OFF+88,v89=OFF+89,v90=OFF+90; + register int v91=OFF+91,v92=OFF+92,v93=OFF+93,v94=OFF+94,v95=OFF+95,v96=OFF+96,v97=OFF+97,v98=OFF+98,v99=OFF+99,v100=OFF+100; + register int v101=OFF+101,v102=OFF+102,v103=OFF+103,v104=OFF+104,v105=OFF+105,v106=OFF+106,v107=OFF+107,v108=OFF+108,v109=OFF+109,v110=OFF+110; + register int v111=OFF+111,v112=OFF+112,v113=OFF+113,v114=OFF+114,v115=OFF+115,v116=OFF+116,v117=OFF+117,v118=OFF+118,v119=OFF+119,v120=OFF+120; + register int v121=OFF+121,v122=OFF+122,v123=OFF+123,v124=OFF+124,v125=OFF+125,v126=OFF+126,v127=OFF+127,v128=OFF+128,v129=OFF+129,v130=OFF+130; + register int v131=OFF+131,v132=OFF+132,v133=OFF+133,v134=OFF+134,v135=OFF+135,v136=OFF+136,v137=OFF+137,v138=OFF+138,v139=OFF+139,v140=OFF+140; + register int v141=OFF+141,v142=OFF+142,v143=OFF+143,v144=OFF+144,v145=OFF+145,v146=OFF+146,v147=OFF+147,v148=OFF+148,v149=OFF+149,v150=OFF+150; + register int v151=OFF+151,v152=OFF+152,v153=OFF+153,v154=OFF+154,v155=OFF+155,v156=OFF+156,v157=OFF+157,v158=OFF+158,v159=OFF+159,v160=OFF+160; + register int v161=OFF+161,v162=OFF+162,v163=OFF+163,v164=OFF+164,v165=OFF+165,v166=OFF+166,v167=OFF+167,v168=OFF+168,v169=OFF+169,v170=OFF+170; + register int v171=OFF+171,v172=OFF+172,v173=OFF+173,v174=OFF+174,v175=OFF+175,v176=OFF+176,v177=OFF+177,v178=OFF+178,v179=OFF+179,v180=OFF+180; + register int v181=OFF+181,v182=OFF+182,v183=OFF+183,v184=OFF+184,v185=OFF+185,v186=OFF+186,v187=OFF+187,v188=OFF+188,v189=OFF+189,v190=OFF+190; + register int v191=OFF+191,v192=OFF+192,v193=OFF+193,v194=OFF+194,v195=OFF+195,v196=OFF+196,v197=OFF+197,v198=OFF+198,v199=OFF+199,v200=OFF+200; + register int v201=OFF+201,v202=OFF+202,v203=OFF+203,v204=OFF+204,v205=OFF+205,v206=OFF+206,v207=OFF+207,v208=OFF+208,v209=OFF+209,v210=OFF+210; + register int v211=OFF+211,v212=OFF+212,v213=OFF+213,v214=OFF+214,v215=OFF+215,v216=OFF+216,v217=OFF+217,v218=OFF+218,v219=OFF+219,v220=OFF+220; + register int v231=OFF+231,v232=OFF+232,v233=OFF+233,v234=OFF+234,v235=OFF+235,v236=OFF+236,v237=OFF+237,v238=OFF+238,v239=OFF+239,v240=OFF+240; + register int v241=OFF+241,v242=OFF+242,v243=OFF+243,v244=OFF+244,v245=OFF+245,v246=OFF+246,v247=OFF+247,v248=OFF+248,v249=OFF+249,v250=OFF+250; + register int v251=OFF+251,v252=OFF+252,v253=OFF+253,v254=OFF+254,v255=OFF+255,v256=OFF+256,v257=OFF+257,v258=OFF+258,v259=OFF+259,v260=OFF+260; + register int v261=OFF+261,v262=OFF+262,v263=OFF+263,v264=OFF+264,v265=OFF+265,v266=OFF+266,v267=OFF+267,v268=OFF+268,v269=OFF+269,v270=OFF+270; + register int v271=OFF+271,v272=OFF+272,v273=OFF+273,v274=OFF+274,v275=OFF+275,v276=OFF+276,v277=OFF+277,v278=OFF+278,v279=OFF+279,v280=OFF+280; + register int v281=OFF+281,v282=OFF+282,v283=OFF+283,v284=OFF+284,v285=OFF+285,v286=OFF+286,v287=OFF+287,v288=OFF+288,v289=OFF+289,v290=OFF+290; + register int v291=OFF+291,v292=OFF+292,v293=OFF+293,v294=OFF+294,v295=OFF+295,v296=OFF+296,v297=OFF+297,v298=OFF+298,v299=OFF+299,v300=OFF+300; + + register int sum = 0; + sum +=v1+v2+v3+v4+v5+v6+v7+v8+v9+v10; + sum +=v11+v12+v13+v14+v15+v16+v17+v18+v19+v20; + sum +=v21+v22+v23+v24+v25+v26+v27+v28+v29+v30; + sum +=v31+v32+v33+v34+v35+v36+v37+v38+v39+v40; + sum +=v41+v42+v43+v44+v45+v46+v47+v48+v49+v50; + sum +=v51+v52+v53+v54+v55+v56+v57+v58+v59+v60; + sum +=v61+v62+v63+v64+v65+v66+v67+v68+v69+v70; + sum +=v71+v72+v73+v74+v75+v76+v77+v78+v79+v80; + sum +=v81+v82+v83+v84+v85+v86+v87+v88+v89+v90; + sum +=v91+v92+v93+v94+v95+v96+v97+v98+v99+v100; + sum +=v101+v102+v103+v104+v105+v106+v107+v108+v109+v110; + sum +=v111+v112+v113+v114+v115+v116+v117+v118+v119+v120; + sum +=v121+v122+v123+v124+v125+v126+v127+v128+v129+v130; + sum +=v131+v132+v133+v134+v135+v136+v137+v138+v139+v140; + sum +=v141+v142+v143+v144+v145+v146+v147+v148+v149+v150; + sum +=v151+v152+v153+v154+v155+v156+v157+v158+v159+v160; + sum +=v161+v162+v163+v164+v165+v166+v167+v168+v169+v170; + sum +=v171+v172+v173+v174+v175+v176+v177+v178+v179+v180; + sum +=v181+v182+v183+v184+v185+v186+v187+v188+v189+v190; + sum +=v191+v192+v193+v194+v195+v196+v197+v198+v199+v200; + sum +=v201+v202+v203+v204+v205+v206+v207+v208+v209+v210; + sum +=v211+v212+v213+v214+v215+v216+v217+v218+v219+v220; + sum +=v231+v232+v233+v234+v235+v236+v237+v238+v239+v240; + sum +=v241+v242+v243+v244+v245+v246+v247+v248+v249+v250; + sum +=v251+v252+v253+v254+v255+v256+v257+v258+v259+v260; + sum +=v261+v262+v263+v264+v265+v266+v267+v268+v269+v270; + sum +=v271+v272+v273+v274+v275+v276+v277+v278+v279+v280; + sum +=v281+v282+v283+v284+v285+v286+v287+v288+v289+v290; + sum +=v291+v292+v293+v294+v295+v296+v297+v298+v299+v300; + + throw Ex( sum ); +} + +void test() +{ + try { + doIt(); + } catch( Ex& ) { } +} + +int main(int argc, char** argv) +{ + int OFF(0); + register int v1=OFF+1,v2=OFF+2,v3=OFF+3,v4=OFF+4,v5=OFF+5,v6=OFF+6,v7=OFF+7,v8=OFF+8,v9=OFF+9,v10=OFF+10; + register int v11=OFF+11,v12=OFF+12,v13=OFF+13,v14=OFF+14,v15=OFF+15,v16=OFF+16,v17=OFF+17,v18=OFF+18,v19=OFF+19,v20=OFF+20; + register int v21=OFF+21,v22=OFF+22,v23=OFF+23,v24=OFF+24,v25=OFF+25,v26=OFF+26,v27=OFF+27,v28=OFF+28,v29=OFF+29,v30=OFF+30; + register int v31=OFF+31,v32=OFF+32,v33=OFF+33,v34=OFF+34,v35=OFF+35,v36=OFF+36,v37=OFF+37,v38=OFF+38,v39=OFF+39,v40=OFF+40; + register int v41=OFF+41,v42=OFF+42,v43=OFF+43,v44=OFF+44,v45=OFF+45,v46=OFF+46,v47=OFF+47,v48=OFF+48,v49=OFF+49,v50=OFF+50; + register int v51=OFF+51,v52=OFF+52,v53=OFF+53,v54=OFF+54,v55=OFF+55,v56=OFF+56,v57=OFF+57,v58=OFF+58,v59=OFF+59,v60=OFF+60; + register int v61=OFF+61,v62=OFF+62,v63=OFF+63,v64=OFF+64,v65=OFF+65,v66=OFF+66,v67=OFF+67,v68=OFF+68,v69=OFF+69,v70=OFF+70; + register int v71=OFF+71,v72=OFF+72,v73=OFF+73,v74=OFF+74,v75=OFF+75,v76=OFF+76,v77=OFF+77,v78=OFF+78,v79=OFF+79,v80=OFF+80; + register int v81=OFF+81,v82=OFF+82,v83=OFF+83,v84=OFF+84,v85=OFF+85,v86=OFF+86,v87=OFF+87,v88=OFF+88,v89=OFF+89,v90=OFF+90; + register int v91=OFF+91,v92=OFF+92,v93=OFF+93,v94=OFF+94,v95=OFF+95,v96=OFF+96,v97=OFF+97,v98=OFF+98,v99=OFF+99,v100=OFF+100; + register int v101=OFF+101,v102=OFF+102,v103=OFF+103,v104=OFF+104,v105=OFF+105,v106=OFF+106,v107=OFF+107,v108=OFF+108,v109=OFF+109,v110=OFF+110; + register int v111=OFF+111,v112=OFF+112,v113=OFF+113,v114=OFF+114,v115=OFF+115,v116=OFF+116,v117=OFF+117,v118=OFF+118,v119=OFF+119,v120=OFF+120; + register int v121=OFF+121,v122=OFF+122,v123=OFF+123,v124=OFF+124,v125=OFF+125,v126=OFF+126,v127=OFF+127,v128=OFF+128,v129=OFF+129,v130=OFF+130; + register int v131=OFF+131,v132=OFF+132,v133=OFF+133,v134=OFF+134,v135=OFF+135,v136=OFF+136,v137=OFF+137,v138=OFF+138,v139=OFF+139,v140=OFF+140; + register int v141=OFF+141,v142=OFF+142,v143=OFF+143,v144=OFF+144,v145=OFF+145,v146=OFF+146,v147=OFF+147,v148=OFF+148,v149=OFF+149,v150=OFF+150; + register int v151=OFF+151,v152=OFF+152,v153=OFF+153,v154=OFF+154,v155=OFF+155,v156=OFF+156,v157=OFF+157,v158=OFF+158,v159=OFF+159,v160=OFF+160; + register int v161=OFF+161,v162=OFF+162,v163=OFF+163,v164=OFF+164,v165=OFF+165,v166=OFF+166,v167=OFF+167,v168=OFF+168,v169=OFF+169,v170=OFF+170; + register int v171=OFF+171,v172=OFF+172,v173=OFF+173,v174=OFF+174,v175=OFF+175,v176=OFF+176,v177=OFF+177,v178=OFF+178,v179=OFF+179,v180=OFF+180; + register int v181=OFF+181,v182=OFF+182,v183=OFF+183,v184=OFF+184,v185=OFF+185,v186=OFF+186,v187=OFF+187,v188=OFF+188,v189=OFF+189,v190=OFF+190; + register int v191=OFF+191,v192=OFF+192,v193=OFF+193,v194=OFF+194,v195=OFF+195,v196=OFF+196,v197=OFF+197,v198=OFF+198,v199=OFF+199,v200=OFF+200; + register int v201=OFF+201,v202=OFF+202,v203=OFF+203,v204=OFF+204,v205=OFF+205,v206=OFF+206,v207=OFF+207,v208=OFF+208,v209=OFF+209,v210=OFF+210; + register int v211=OFF+211,v212=OFF+212,v213=OFF+213,v214=OFF+214,v215=OFF+215,v216=OFF+216,v217=OFF+217,v218=OFF+218,v219=OFF+219,v220=OFF+220; + register int v231=OFF+231,v232=OFF+232,v233=OFF+233,v234=OFF+234,v235=OFF+235,v236=OFF+236,v237=OFF+237,v238=OFF+238,v239=OFF+239,v240=OFF+240; + register int v241=OFF+241,v242=OFF+242,v243=OFF+243,v244=OFF+244,v245=OFF+245,v246=OFF+246,v247=OFF+247,v248=OFF+248,v249=OFF+249,v250=OFF+250; + register int v251=OFF+251,v252=OFF+252,v253=OFF+253,v254=OFF+254,v255=OFF+255,v256=OFF+256,v257=OFF+257,v258=OFF+258,v259=OFF+259,v260=OFF+260; + register int v261=OFF+261,v262=OFF+262,v263=OFF+263,v264=OFF+264,v265=OFF+265,v266=OFF+266,v267=OFF+267,v268=OFF+268,v269=OFF+269,v270=OFF+270; + register int v271=OFF+271,v272=OFF+272,v273=OFF+273,v274=OFF+274,v275=OFF+275,v276=OFF+276,v277=OFF+277,v278=OFF+278,v279=OFF+279,v280=OFF+280; + register int v281=OFF+281,v282=OFF+282,v283=OFF+283,v284=OFF+284,v285=OFF+285,v286=OFF+286,v287=OFF+287,v288=OFF+288,v289=OFF+289,v290=OFF+290; + register int v291=OFF+291,v292=OFF+292,v293=OFF+293,v294=OFF+294,v295=OFF+295,v296=OFF+296,v297=OFF+297,v298=OFF+298,v299=OFF+299,v300=OFF+300; + + int sum_before, sum_after; + + { + int sum( 0 ); + sum +=v1+v2+v3+v4+v5+v6+v7+v8+v9+v10; + sum +=v11+v12+v13+v14+v15+v16+v17+v18+v19+v20; + sum +=v21+v22+v23+v24+v25+v26+v27+v28+v29+v30; + sum +=v31+v32+v33+v34+v35+v36+v37+v38+v39+v40; + sum +=v41+v42+v43+v44+v45+v46+v47+v48+v49+v50; + sum +=v51+v52+v53+v54+v55+v56+v57+v58+v59+v60; + sum +=v61+v62+v63+v64+v65+v66+v67+v68+v69+v70; + sum +=v71+v72+v73+v74+v75+v76+v77+v78+v79+v80; + sum +=v81+v82+v83+v84+v85+v86+v87+v88+v89+v90; + sum +=v91+v92+v93+v94+v95+v96+v97+v98+v99+v100; + sum +=v101+v102+v103+v104+v105+v106+v107+v108+v109+v110; + sum +=v111+v112+v113+v114+v115+v116+v117+v118+v119+v120; + sum +=v121+v122+v123+v124+v125+v126+v127+v128+v129+v130; + sum +=v131+v132+v133+v134+v135+v136+v137+v138+v139+v140; + sum +=v141+v142+v143+v144+v145+v146+v147+v148+v149+v150; + sum +=v151+v152+v153+v154+v155+v156+v157+v158+v159+v160; + sum +=v161+v162+v163+v164+v165+v166+v167+v168+v169+v170; + sum +=v171+v172+v173+v174+v175+v176+v177+v178+v179+v180; + sum +=v181+v182+v183+v184+v185+v186+v187+v188+v189+v190; + sum +=v191+v192+v193+v194+v195+v196+v197+v198+v199+v200; + sum +=v201+v202+v203+v204+v205+v206+v207+v208+v209+v210; + sum +=v211+v212+v213+v214+v215+v216+v217+v218+v219+v220; + sum +=v231+v232+v233+v234+v235+v236+v237+v238+v239+v240; + sum +=v241+v242+v243+v244+v245+v246+v247+v248+v249+v250; + sum +=v251+v252+v253+v254+v255+v256+v257+v258+v259+v260; + sum +=v261+v262+v263+v264+v265+v266+v267+v268+v269+v270; + sum +=v271+v272+v273+v274+v275+v276+v277+v278+v279+v280; + sum +=v281+v282+v283+v284+v285+v286+v287+v288+v289+v290; + sum +=v291+v292+v293+v294+v295+v296+v297+v298+v299+v300; + + sum_before = sum; + } + + test(); + + { + int sum( 0 ); + sum +=v1+v2+v3+v4+v5+v6+v7+v8+v9+v10; + sum +=v11+v12+v13+v14+v15+v16+v17+v18+v19+v20; + sum +=v21+v22+v23+v24+v25+v26+v27+v28+v29+v30; + sum +=v31+v32+v33+v34+v35+v36+v37+v38+v39+v40; + sum +=v41+v42+v43+v44+v45+v46+v47+v48+v49+v50; + sum +=v51+v52+v53+v54+v55+v56+v57+v58+v59+v60; + sum +=v61+v62+v63+v64+v65+v66+v67+v68+v69+v70; + sum +=v71+v72+v73+v74+v75+v76+v77+v78+v79+v80; + sum +=v81+v82+v83+v84+v85+v86+v87+v88+v89+v90; + sum +=v91+v92+v93+v94+v95+v96+v97+v98+v99+v100; + sum +=v101+v102+v103+v104+v105+v106+v107+v108+v109+v110; + sum +=v111+v112+v113+v114+v115+v116+v117+v118+v119+v120; + sum +=v121+v122+v123+v124+v125+v126+v127+v128+v129+v130; + sum +=v131+v132+v133+v134+v135+v136+v137+v138+v139+v140; + sum +=v141+v142+v143+v144+v145+v146+v147+v148+v149+v150; + sum +=v151+v152+v153+v154+v155+v156+v157+v158+v159+v160; + sum +=v161+v162+v163+v164+v165+v166+v167+v168+v169+v170; + sum +=v171+v172+v173+v174+v175+v176+v177+v178+v179+v180; + sum +=v181+v182+v183+v184+v185+v186+v187+v188+v189+v190; + sum +=v191+v192+v193+v194+v195+v196+v197+v198+v199+v200; + sum +=v201+v202+v203+v204+v205+v206+v207+v208+v209+v210; + sum +=v211+v212+v213+v214+v215+v216+v217+v218+v219+v220; + sum +=v231+v232+v233+v234+v235+v236+v237+v238+v239+v240; + sum +=v241+v242+v243+v244+v245+v246+v247+v248+v249+v250; + sum +=v251+v252+v253+v254+v255+v256+v257+v258+v259+v260; + sum +=v261+v262+v263+v264+v265+v266+v267+v268+v269+v270; + sum +=v271+v272+v273+v274+v275+v276+v277+v278+v279+v280; + sum +=v281+v282+v283+v284+v285+v286+v287+v288+v289+v290; + sum +=v291+v292+v293+v294+v295+v296+v297+v298+v299+v300; + + sum_after = sum; + } + + return sum_before != sum_after; +} ++++++ note-gnu-stack.diff ++++++ http://gcc.gnu.org/viewcvs?view=rev&revision=107432 2005-05-04 Jakub Jelinek <jakub@redhat.com> Revert: 2005-04-29 Alan Modra <amodra@bigpond.net.au> PR target/21098 * config/rs6000/rs6000.c (rs6000_elf_end_indicate_exec_stack): New. * config/rs6000/linux64.h (TARGET_ASM_FILE_END): Use the above. 2004-09-20 Jakub Jelinek <jakub@redhat.com> * config/rs6000/ppc-asm.h: Add .note.GNU-stack section also on ppc64-linux. * config/ia64/lib1funcs.asm: Add .note.GNU-stack section on ia64-linux. * config/ia64/crtbegin.asm: Likewise. * config/ia64/crtend.asm: Likewise. * config/ia64/crti.asm: Likewise. * config/ia64/crtn.asm: Likewise. 2004-05-14 Jakub Jelinek <jakub@redhat.com> * config/ia64/linux.h (TARGET_ASM_FILE_END): Define. boehm-gc/ 2005-02-08 Jakub Jelinek <jakub@redhat.com> * ia64_save_regs_in_stack.s: Moved to... * ia64_save_regs_in_stack.S: ... this. Add .note.GNU-stack on Linux. libffi/ 2005-02-08 Jakub Jelinek <jakub@redhat.com> * src/alpha/osf.S: Add .note.GNU-stack on Linux. * src/s390/sysv.S: Likewise. * src/powerpc/linux64.S: Likewise. * src/powerpc/linux64_closure.S: Likewise. * src/powerpc/ppc_closure.S: Likewise. * src/powerpc/sysv.S: Likewise. * src/x86/unix64.S: Likewise. * src/x86/sysv.S: Likewise. * src/sparc/v8.S: Likewise. * src/sparc/v9.S: Likewise. * src/m68k/sysv.S: Likewise. * src/ia64/unix.S: Likewise. * src/arm/sysv.S: Likewise. Index: gcc/config/ia64/linux.h =================================================================== --- gcc/config/ia64/linux.h (revision 107431) +++ gcc/config/ia64/linux.h (revision 107432) @@ -5,6 +5,8 @@ #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux"); +#define TARGET_ASM_FILE_END file_end_indicate_exec_stack + /* This is for -profile to use -lc_p instead of -lc. */ #undef CC1_SPEC #define CC1_SPEC "%{profile:-p} %{G*}" Index: gcc/config/ia64/lib1funcs.asm =================================================================== --- gcc/config/ia64/lib1funcs.asm (revision 107431) +++ gcc/config/ia64/lib1funcs.asm (revision 107432) @@ -792,3 +792,7 @@ __floattitf: } .endp __floattitf #endif + +#ifdef __linux__ +.section .note.GNU-stack; .previous +#endif Index: gcc/config/ia64/crti.asm =================================================================== --- gcc/config/ia64/crti.asm (revision 107431) +++ gcc/config/ia64/crti.asm (revision 107432) @@ -64,3 +64,7 @@ _fini: .body # end of crti.asm + +#ifdef __linux__ +.section .note.GNU-stack; .previous +#endif Index: gcc/config/ia64/crtn.asm =================================================================== --- gcc/config/ia64/crtn.asm (revision 107431) +++ gcc/config/ia64/crtn.asm (revision 107432) @@ -54,3 +54,7 @@ br.ret.sptk.many b0 # end of crtn.asm + +#ifdef __linux__ +.section .note.GNU-stack; .previous +#endif Index: gcc/config/ia64/crtend.asm =================================================================== --- gcc/config/ia64/crtend.asm (revision 107431) +++ gcc/config/ia64/crtend.asm (revision 107432) @@ -122,3 +122,7 @@ __do_global_ctors_aux: br.ret.sptk.many rp .endp __do_global_ctors_aux + +#ifdef __linux__ +.section .note.GNU-stack; .previous +#endif Index: gcc/config/ia64/crtbegin.asm =================================================================== --- gcc/config/ia64/crtbegin.asm (revision 107431) +++ gcc/config/ia64/crtbegin.asm (revision 107432) @@ -255,3 +255,7 @@ __do_jv_register_classes: .weak __cxa_finalize #endif .weak _Jv_RegisterClasses + +#ifdef __linux__ +.section .note.GNU-stack; .previous +#endif Index: gcc/config/rs6000/linux64.h =================================================================== --- gcc/config/rs6000/linux64.h (revision 107431) +++ gcc/config/rs6000/linux64.h (revision 107432) @@ -543,7 +543,7 @@ while (0) #undef DRAFT_V4_STRUCT_RET #define DRAFT_V4_STRUCT_RET (!TARGET_64BIT) -#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack +#define TARGET_ASM_FILE_END file_end_indicate_exec_stack #define TARGET_POSIX_IO Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 107431) +++ gcc/config/rs6000/rs6000.c (revision 107432) @@ -611,7 +611,6 @@ static void rs6000_file_start (void); static unsigned int rs6000_elf_section_type_flags (tree, const char *, int); static void rs6000_elf_asm_out_constructor (rtx, int); static void rs6000_elf_asm_out_destructor (rtx, int); -static void rs6000_elf_end_indicate_exec_stack (void) ATTRIBUTE_UNUSED; static void rs6000_elf_select_section (tree, int, unsigned HOST_WIDE_INT); static void rs6000_elf_unique_section (tree, int); static void rs6000_elf_select_rtx_section (enum machine_mode, rtx, @@ -18068,13 +18067,6 @@ rs6000_elf_declare_function_name (FILE * } ASM_OUTPUT_LABEL (file, name); } - -static void -rs6000_elf_end_indicate_exec_stack (void) -{ - if (TARGET_32BIT) - file_end_indicate_exec_stack (); -} #endif #if TARGET_XCOFF Index: gcc/config/rs6000/ppc-asm.h =================================================================== --- gcc/config/rs6000/ppc-asm.h (revision 107431) +++ gcc/config/rs6000/ppc-asm.h (revision 107432) @@ -158,7 +158,7 @@ GLUE(.L,name): \ .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) #endif -#if defined __linux__ && !defined __powerpc64__ +#if defined __linux__ .section .note.GNU-stack .previous #endif Index: boehm-gc/ia64_save_regs_in_stack.s =================================================================== --- boehm-gc/ia64_save_regs_in_stack.s (revision 107431) +++ boehm-gc/ia64_save_regs_in_stack.s (revision 107432) @@ -1,12 +0,0 @@ - .text - .align 16 - .global GC_save_regs_in_stack - .proc GC_save_regs_in_stack -GC_save_regs_in_stack: - .body - flushrs - ;; - mov r8=ar.bsp - br.ret.sptk.few rp - .endp GC_save_regs_in_stack - Index: boehm-gc/ia64_save_regs_in_stack.S =================================================================== --- boehm-gc/ia64_save_regs_in_stack.S (revision 0) +++ boehm-gc/ia64_save_regs_in_stack.S (revision 107432) @@ -0,0 +1,15 @@ + .text + .align 16 + .global GC_save_regs_in_stack + .proc GC_save_regs_in_stack +GC_save_regs_in_stack: + .body + flushrs + ;; + mov r8=ar.bsp + br.ret.sptk.few rp + .endp GC_save_regs_in_stack + +#ifdef __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/powerpc/ppc_closure.S =================================================================== --- libffi/src/powerpc/ppc_closure.S (revision 107431) +++ libffi/src/powerpc/ppc_closure.S (revision 107432) @@ -326,3 +326,7 @@ END(ffi_closure_SYSV) .LEFDE1: #endif + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/powerpc/sysv.S =================================================================== --- libffi/src/powerpc/sysv.S (revision 107431) +++ libffi/src/powerpc/sysv.S (revision 107432) @@ -209,3 +209,7 @@ END(ffi_call_SYSV) .align 2 .LEFDE1: #endif + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/powerpc/linux64_closure.S =================================================================== --- libffi/src/powerpc/linux64_closure.S (revision 107431) +++ libffi/src/powerpc/linux64_closure.S (revision 107432) @@ -204,3 +204,7 @@ ffi_closure_LINUX64: .align 3 .LEFDE1: #endif + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/powerpc/linux64.S =================================================================== --- libffi/src/powerpc/linux64.S (revision 107431) +++ libffi/src/powerpc/linux64.S (revision 107432) @@ -178,3 +178,7 @@ ffi_call_LINUX64: .align 3 .LEFDE1: #endif + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/arm/sysv.S =================================================================== --- libffi/src/arm/sysv.S (revision 107431) +++ libffi/src/arm/sysv.S (revision 107432) @@ -207,3 +207,6 @@ LSYM(Lepilogue): .ffi_call_SYSV_end: .size CNAME(ffi_call_SYSV),.ffi_call_SYSV_end-CNAME(ffi_call_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/m68k/sysv.S =================================================================== --- libffi/src/m68k/sysv.S (revision 107431) +++ libffi/src/m68k/sysv.S (revision 107432) @@ -95,3 +95,7 @@ epilogue: unlk %a6 rts .size ffi_call_SYSV,.-ffi_call_SYSV + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/alpha/osf.S =================================================================== --- libffi/src/alpha/osf.S (revision 107431) +++ libffi/src/alpha/osf.S (revision 107432) @@ -356,4 +356,8 @@ $LASFDE3: .byte 16 # uleb128 offset 16*-8 .align 3 $LEFDE3: + +#ifdef __linux__ + .section .note.GNU-stack,"",@progbits +#endif #endif Index: libffi/src/x86/sysv.S =================================================================== --- libffi/src/x86/sysv.S (revision 107431) +++ libffi/src/x86/sysv.S (revision 107432) @@ -376,3 +376,7 @@ ffi_closure_raw_SYSV: #endif #endif /* ifndef __x86_64__ */ + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/x86/unix64.S =================================================================== --- libffi/src/x86/unix64.S (revision 107431) +++ libffi/src/x86/unix64.S (revision 107432) @@ -410,3 +410,7 @@ ffi_closure_unix64: .LEFDE3: #endif /* __x86_64__ */ + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/s390/sysv.S =================================================================== --- libffi/src/s390/sysv.S (revision 107431) +++ libffi/src/s390/sysv.S (revision 107432) @@ -427,3 +427,6 @@ ffi_closure_SYSV: #endif +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/ia64/unix.S =================================================================== --- libffi/src/ia64/unix.S (revision 107431) +++ libffi/src/ia64/unix.S (revision 107432) @@ -553,3 +553,7 @@ ffi_closure_unix: data8 @pcrel(.Lld_hfa_float) // FFI_IA64_TYPE_HFA_FLOAT data8 @pcrel(.Lld_hfa_double) // FFI_IA64_TYPE_HFA_DOUBLE data8 @pcrel(.Lld_hfa_ldouble) // FFI_IA64_TYPE_HFA_LDOUBLE + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/sparc/v9.S =================================================================== --- libffi/src/sparc/v9.S (revision 107431) +++ libffi/src/sparc/v9.S (revision 107432) @@ -300,3 +300,7 @@ longdouble1: .align 8 .LLEFDE2: #endif + +#ifdef __linux__ + .section .note.GNU-stack,"",@progbits +#endif Index: libffi/src/sparc/v8.S =================================================================== --- libffi/src/sparc/v8.S (revision 107431) +++ libffi/src/sparc/v8.S (revision 107432) @@ -265,3 +265,7 @@ done2: .byte 0x1f ! uleb128 0x1f .align WS .LLEFDE2: + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"",@progbits +#endif ++++++ nov189571-2.diff ++++++ ++++ 1368 lines (skipped) ++++ between gcc41/nov189571-2.diff ++++ and gcc41/nov189571-2.diff ++++++ nov277135.diff ++++++ 2007-05-08 Andreas Krebbel <krebbel1@de.ibm.com> * loop.c (move_movables): Remove REG_EQUAL notes for conditional invariants as well. * gcc.dg/20070507-1.c: New testcase. Index: gcc/loop.c =================================================================== --- gcc/loop.c (revision 124546) +++ gcc/loop.c (revision 124547) @@ -2561,7 +2561,7 @@ move_movables (struct loop *loop, struct like this as a result of record_jump_cond. */ if ((temp = find_reg_note (i1, REG_EQUAL, NULL_RTX)) - && ! loop_invariant_p (loop, XEXP (temp, 0))) + && loop_invariant_p (loop, XEXP (temp, 0)) != 1) remove_note (i1, temp); } Index: gcc/testsuite/gcc.dg/20070507-1.c =================================================================== --- gcc/testsuite/gcc.dg/20070507-1.c (revision 0) +++ gcc/testsuite/gcc.dg/20070507-1.c (revision 124547) @@ -0,0 +1,103 @@ +/* This failed on s390x due to bug in loop.c. + loop.c failed to remove a REG_EQUAL note when + hoisting an insn from a loop body. */ + +/* { dg-options "-O3 -fPIC" } */ +/* { dg-do run } */ + +typedef __SIZE_TYPE__ size_t; +int memcmp(const void *s1, const void *s2, size_t n); + +typedef struct +{ + char name[30]; + int a; +} LOCAL; + +int global = 0; +int sy = 1; +int subroutine_offset; + +LOCAL local = { "local", 0 }; +LOCAL keywords = { "keywords", 1 }; +int local_table = 0; +int keywords_table = 0; + +void __attribute__((noinline)) bar (char *p_buffer) +{ + p_buffer[255] = 1; +} + +int __attribute__((noinline)) foo (char *p_str1) +{ + global = 1; + return 1; +} + +int __attribute__((noinline)) loop_next (int *p_table, char *p_table_head) +{ + static loop_next = 0; + + if (loop_next == 1) + return 1; + + loop_next = 1; + return 0; +} + +int +main () +{ + char buffer[256]; + int ende = 0; + int index; + int local_base = 2; + + keywords.a = 1; + for (sy = 0;; sy++) + { + for (index = 1;;) + { + bar (buffer); + if (buffer[sy] != 0) + { + ende = 1; + break; + }; + if (foo (buffer)) + { + keywords.a += index - 1; + break; + } + index++; + } + if (ende) + break; + } + + subroutine_offset = 0; + + for (;;) + { + if (loop_next (&keywords_table, (char*)&keywords)) + break; + + if ((!memcmp (keywords.name, "+++", 3))) + local_base = 100; + else + local_base = 0; + + if ((!memcmp (keywords.name, "+++", 3))) + subroutine_offset += local_table; + + for (;;) + { + if (loop_next (&local_table, (char*)&local)) + break;; + if ((local.a == 0)) + continue;; + foo (local.name); + } + } + return 0; +} ++++++ nov341254-altivec.diff ++++++ --- gcc-4.1.2-20070115/gcc/reload1.c.orig 2006-06-22 21:41:03.000000000 +0530 +++ gcc-4.1.2-20070115/gcc/reload1.c 2007-11-10 13:59:25.000000000 +0530 @@ -880,16 +880,8 @@ reload (rtx first, int global) { int something_changed; int did_spill; - HOST_WIDE_INT starting_frame_size; - /* Round size of stack frame to stack_alignment_needed. This must be done - here because the stack size may be a part of the offset computation - for register elimination, and there might have been new stack slots - created in the last iteration of this loop. */ - if (cfun->stack_alignment_needed) - assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed); - starting_frame_size = get_frame_size (); set_initial_elim_offsets (); @@ -956,6 +948,20 @@ reload (rtx first, int global) /* If we allocated another stack slot, redo elimination bookkeeping. */ if (starting_frame_size != get_frame_size ()) continue; + if (starting_frame_size && cfun->stack_alignment_needed) + { + /* If we have a stack frame, we must align it now. The + stack size may be a part of the offset computation for + register elimination. So if this changes the stack size, + then repeat the elimination bookkeeping. We don't + realign when there is no stack, as that will cause a + stack frame when none is needed should + STARTING_FRAME_OFFSET not be already aligned to + STACK_BOUNDARY. */ + assign_stack_local (BLKmode, 0, cfun->stack_alignment_needed); + if (starting_frame_size != get_frame_size ()) + continue; + } if (caller_save_needed) { ++++++ nov341254-pic.diff ++++++ --- gcc-4.1.2-20070115/gcc/config/rs6000/rs6000.c.orig 2007-11-10 13:33:29.000000000 +0530 +++ gcc-4.1.2-20070115/gcc/config/rs6000/rs6000.c 2007-11-10 13:51:40.000000000 +0530 @@ -12842,6 +12842,7 @@ rs6000_stack_info (void) int reg_size = TARGET_32BIT ? 4 : 8; int ehrd_size; int save_align; + int first_gp; HOST_WIDE_INT non_fixed_size; /* Zero all fields portably. */ @@ -12862,14 +12863,19 @@ rs6000_stack_info (void) /* Calculate which registers need to be saved & save area size. */ info_ptr->first_gp_reg_save = first_reg_to_save (); /* Assume that we will have to save RS6000_PIC_OFFSET_TABLE_REGNUM, - even if it currently looks like we won't. */ + even if it currently looks like we won't. Reload may need it to + get at a constant; if so, it will have already created a constant + pool entry for it. */ if (((TARGET_TOC && TARGET_MINIMAL_TOC) || (flag_pic == 1 && DEFAULT_ABI == ABI_V4) || (flag_pic && DEFAULT_ABI == ABI_DARWIN)) + && current_function_uses_const_pool && info_ptr->first_gp_reg_save > RS6000_PIC_OFFSET_TABLE_REGNUM) - info_ptr->gp_size = reg_size * (32 - RS6000_PIC_OFFSET_TABLE_REGNUM); + first_gp = RS6000_PIC_OFFSET_TABLE_REGNUM; else - info_ptr->gp_size = reg_size * (32 - info_ptr->first_gp_reg_save); + first_gp = info_ptr->first_gp_reg_save; + + info_ptr->gp_size = reg_size * (32 - first_gp); /* For the SPE, we have an additional upper 32-bits on each GPR. Ideally we should save the entire 64-bits only when the upper @@ -12957,7 +12963,7 @@ rs6000_stack_info (void) + info_ptr->parm_size); if (TARGET_SPE_ABI && info_ptr->spe_64bit_regs_used != 0) - info_ptr->spe_gp_size = 8 * (32 - info_ptr->first_gp_reg_save); + info_ptr->spe_gp_size = 8 * (32 - first_gp); else info_ptr->spe_gp_size = 0; ++++++ nov354405.diff ++++++ 2007-04-29 Bernd Schmidt <bernd.schmidt@analog.com> * reload.c (combine_reloads): When trying to use a dying register, check whether it's uninitialized and don't use if so. Index: gcc/reload.c =================================================================== --- gcc/reload.c (revision 124267) +++ gcc/reload.c (working copy) @@ -1867,7 +1867,12 @@ || ! (TEST_HARD_REG_BIT (reg_class_contents[(int) rld[secondary_out].class], REGNO (XEXP (note, 0))))))) - && ! fixed_regs[REGNO (XEXP (note, 0))]) + && ! fixed_regs[REGNO (XEXP (note, 0))] + /* Check that we don't use a hardreg for an uninitialized + pseudo. See also find_dummy_reload(). */ + && (ORIGINAL_REGNO (XEXP (note, 0)) < FIRST_PSEUDO_REGISTER + || ! bitmap_bit_p (ENTRY_BLOCK_PTR->il.rtl->global_live_at_end, + ORIGINAL_REGNO (XEXP (note, 0))))) { rld[output_reload].reg_rtx = gen_rtx_REG (rld[output_reload].outmode, ++++++ nov376357.diff ++++++ See also http://gcc.gnu.org/ml/gcc-patches/2006-12/msg01769.html . 2007-01-03 Jakub Jelinek <jakub@redhat.com> * unwind-dw2.c (SIGNAL_FRAME_BIT, EXTENDED_CONTEXT_BIT): Define. (struct _Unwind_Context): Rename args_size to flags, remove signal_frame field, add a new args_size field and version field. (_Unwind_IsSignalFrame, _Unwind_SetSignalFrame, _Unwind_IsExtendedContext): New inline functions. (_Unwind_GetGR, _Unwind_SetGR, _Unwind_GetGRPtr, _Unwind_SetGRPtr): Assume by_value array is only present if _Unwind_IsExtendedContext. (_Unwind_GetIPInfo, execute_cfa_program, uw_frame_state_for): Use _Unwind_IsSignalFrame. (__frame_state_for): Initialize context.flags to EXTENDED_CONTEXT_BIT. (uw_update_context_1): Use _Unwind_SetSignalFrame. (uw_init_context_1): Initialize context->flags to EXTENDED_CONTEXT_BIT. * config/rs6000/linux-unwind.h (frob_update_context): Use _Unwind_SetSignalFrame. Index: gcc/unwind-dw2.c =================================================================== --- gcc/unwind-dw2.c (revision 120406) +++ gcc/unwind-dw2.c (revision 120407) @@ -70,8 +70,15 @@ struct _Unwind_Context void *ra; void *lsda; struct dwarf_eh_bases bases; + /* Signal frame context. */ +#define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1) + /* Context which has version/args_size/by_value fields. */ +#define EXTENDED_CONTEXT_BIT ((~(_Unwind_Word) 0 >> 2) + 1) + _Unwind_Word flags; + /* 0 for now, can be increased when further fields are added to + struct _Unwind_Context. */ + _Unwind_Word version; _Unwind_Word args_size; - char signal_frame; char by_value[DWARF_FRAME_REGISTERS+1]; }; @@ -123,6 +130,27 @@ read_8u (const void *p) { const union un static inline unsigned long read_8s (const void *p) { const union unaligned *up = p; return up->s8; } +static inline _Unwind_Word +_Unwind_IsSignalFrame (struct _Unwind_Context *context) +{ + return (context->flags & SIGNAL_FRAME_BIT) ? 1 : 0; +} + +static inline void +_Unwind_SetSignalFrame (struct _Unwind_Context *context, int val) +{ + if (val) + context->flags |= SIGNAL_FRAME_BIT; + else + context->flags &= ~SIGNAL_FRAME_BIT; +} + +static inline _Unwind_Word +_Unwind_IsExtendedContext (struct _Unwind_Context *context) +{ + return context->flags & EXTENDED_CONTEXT_BIT; +} + /* Get the value of register INDEX as saved in CONTEXT. */ inline _Unwind_Word @@ -141,7 +169,7 @@ _Unwind_GetGR (struct _Unwind_Context *c size = dwarf_reg_size_table[index]; ptr = context->reg[index]; - if (context->by_value[index]) + if (_Unwind_IsExtendedContext (context) && context->by_value[index]) return (_Unwind_Word) (_Unwind_Internal_Ptr) ptr; /* This will segfault if the register hasn't been saved. */ @@ -180,7 +208,7 @@ _Unwind_SetGR (struct _Unwind_Context *c gcc_assert (index < (int) sizeof(dwarf_reg_size_table)); size = dwarf_reg_size_table[index]; - if (context->by_value[index]) + if (_Unwind_IsExtendedContext (context) && context->by_value[index]) { context->reg[index] = (void *) (_Unwind_Internal_Ptr) val; return; @@ -203,7 +231,7 @@ static inline void * _Unwind_GetGRPtr (struct _Unwind_Context *context, int index) { index = DWARF_REG_TO_UNWIND_COLUMN (index); - if (context->by_value[index]) + if (_Unwind_IsExtendedContext (context) && context->by_value[index]) return &context->reg[index]; return context->reg[index]; } @@ -214,7 +242,8 @@ static inline void _Unwind_SetGRPtr (struct _Unwind_Context *context, int index, void *p) { index = DWARF_REG_TO_UNWIND_COLUMN (index); - context->by_value[index] = 0; + if (_Unwind_IsExtendedContext (context)) + context->by_value[index] = 0; context->reg[index] = p; } @@ -256,7 +285,7 @@ _Unwind_GetIP (struct _Unwind_Context *c inline _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) { - *ip_before_insn = context->signal_frame != 0; + *ip_before_insn = _Unwind_IsSignalFrame (context); return (_Unwind_Ptr) context->ra; } @@ -824,7 +853,8 @@ execute_cfa_program (const unsigned char reflected at the point immediately before the call insn. In signal frames, return address is after last completed instruction, so we add 1 to return address to make the comparison <=. */ - while (insn_ptr < insn_end && fs->pc < context->ra + context->signal_frame) + while (insn_ptr < insn_end + && fs->pc < context->ra + _Unwind_IsSignalFrame (context)) { unsigned char insn = *insn_ptr++; _Unwind_Word reg, utmp; @@ -1063,7 +1093,7 @@ uw_frame_state_for (struct _Unwind_Conte if (context->ra == 0) return _URC_END_OF_STACK; - fde = _Unwind_Find_FDE (context->ra + context->signal_frame - 1, + fde = _Unwind_Find_FDE (context->ra + _Unwind_IsSignalFrame (context) - 1, &context->bases); if (fde == NULL) { @@ -1142,6 +1172,7 @@ __frame_state_for (void *pc_target, stru int reg; memset (&context, 0, sizeof (struct _Unwind_Context)); + context.flags = EXTENDED_CONTEXT_BIT; context.ra = pc_target + 1; if (uw_frame_state_for (&context, &fs) != _URC_NO_REASON) @@ -1306,7 +1337,7 @@ uw_update_context_1 (struct _Unwind_Cont break; } - context->signal_frame = fs->signal_frame; + _Unwind_SetSignalFrame (context, fs->signal_frame); #ifdef MD_FROB_UPDATE_CONTEXT MD_FROB_UPDATE_CONTEXT (context, fs); @@ -1366,6 +1397,7 @@ uw_init_context_1 (struct _Unwind_Contex memset (context, 0, sizeof (struct _Unwind_Context)); context->ra = ra; + context->flags = EXTENDED_CONTEXT_BIT; code = uw_frame_state_for (context, &fs); gcc_assert (code == _URC_NO_REASON); Index: gcc/config/rs6000/linux-unwind.h =================================================================== --- gcc/config/rs6000/linux-unwind.h (revision 120406) +++ gcc/config/rs6000/linux-unwind.h (revision 120407) @@ -319,7 +319,7 @@ frob_update_context (struct _Unwind_Cont if (pc[0] == 0x38210000 + SIGNAL_FRAMESIZE && (pc[1] == 0x38000077 || pc[1] == 0x380000AC) && pc[2] == 0x44000002) - context->signal_frame = 1; + _Unwind_SetSignalFrame (context, 1); #else /* li r0, 0x7777; sc (sigreturn old) */ /* li r0, 0x0077; sc (sigreturn new) */ @@ -328,7 +328,7 @@ frob_update_context (struct _Unwind_Cont if ((pc[0] == 0x38007777 || pc[0] == 0x38000077 || pc[0] == 0x38006666 || pc[0] == 0x380000AC) && pc[1] == 0x44000002) - context->signal_frame = 1; + _Unwind_SetSignalFrame (context, 1); #endif #ifdef __powerpc64__ ++++++ nov394409.diff ++++++ Date: Thu, 2 Aug 2007 10:13:08 +0200 From: Andreas Krebbel <Andreas dot Krebbel at de dot ibm dot com> To: gcc-patches at gcc dot gnu dot org Subject: [Committed 4.1 4.2 mainline] S/390: Fix xordi3_cconly pattern Message-ID: <20070802081308.GA25193@blc4eb430604175.ibm.com> Hi, I've applied the attached trivial fix to 4.1 4.2 and mainline. The problem occured first with 4.2 but I think it is safe for 4.1 as well. Bootstrapped with GCC 4.2 on s390x. Bye, -Andreas- 2007-08-02 Andreas Krebbel <krebbel1@de.ibm.com> * config/s390/s390.md ("*xordi3_cconly"): Change xr to xg. Index: gcc/config/s390/s390.md =================================================================== --- gcc/config/s390/s390.md.orig +++ gcc/config/s390/s390.md @@ -5902,7 +5902,7 @@ "s390_match_ccmode(insn, CCTmode) && TARGET_64BIT" "@ xgr\t%0,%2 - xr\t%0,%2" + xg\t%0,%2" [(set_attr "op_type" "RRE,RXY")]) (define_insn "*xordi3_extimm" ++++++ nov480052.diff ++++++ 2007-06-28 Jakub Jelinek <jakub@redhat.com> * config/rs6000/rs6000.c (rs6000_function_ok_for_sibcall): Ensure decl is non-external for AIX ABI. 2007-06-28 David Edelsohn <edelsohn@gnu.org> * config/rs6000/predicates.md (current_file_function_operand): Ensure the symbol is non-external for AIX ABI. Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 126077) +++ gcc/config/rs6000/rs6000.c (revision 126078) @@ -13327,7 +13327,8 @@ rs6000_function_ok_for_sibcall (tree dec } } if (DEFAULT_ABI == ABI_DARWIN - || (*targetm.binds_local_p) (decl)) + || ((*targetm.binds_local_p) (decl) + && (DEFAULT_ABI != ABI_AIX || !DECL_EXTERNAL (decl)))) { tree attr_list = TYPE_ATTRIBUTES (TREE_TYPE (decl)); Index: gcc/config/rs6000/predicates.md =================================================================== --- gcc/config/rs6000/predicates.md (revision 126077) +++ gcc/config/rs6000/predicates.md (revision 126078) @@ -691,7 +691,9 @@ (define_predicate "call_operand" (define_predicate "current_file_function_operand" (and (match_code "symbol_ref") (match_test "(DEFAULT_ABI != ABI_AIX || SYMBOL_REF_FUNCTION_P (op)) - && (SYMBOL_REF_LOCAL_P (op) + && ((SYMBOL_REF_LOCAL_P (op) + && (DEFAULT_ABI != ABI_AIX + || !SYMBOL_REF_EXTERNAL_P (op))) || (op == XEXP (DECL_RTL (current_function_decl), 0)))"))) ++++++ nov494022.diff ++++++ 2008-08-12 Jakub Jelinek <jakub@redhat.com> PR middle-end/37014 * expr.c (expand_expr_real_1): Handle TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR. * dojump.c (do_jump): Likewise. PR middle-end/37014 * gcc.c-torture/compile/20080812-1.c: New test. Index: gcc/dojump.c =================================================================== --- gcc/dojump.c (revision 145698) +++ gcc/dojump.c (working copy) @@ -306,8 +306,6 @@ do_jump (tree exp, rtx if_false_label, r break; } - case TRUTH_ANDIF_EXPR: - case TRUTH_ORIF_EXPR: case COMPOUND_EXPR: /* Lowered by gimplify.c. */ gcc_unreachable (); @@ -517,6 +515,7 @@ do_jump (tree exp, rtx if_false_label, r if (BRANCH_COST >= 4 || TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 1))) goto normal; + case TRUTH_ANDIF_EXPR: if (if_false_label == NULL_RTX) { drop_through_label = gen_label_rtx (); @@ -537,6 +536,7 @@ do_jump (tree exp, rtx if_false_label, r if (BRANCH_COST >= 4 || TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 1))) goto normal; + case TRUTH_ORIF_EXPR: if (if_true_label == NULL_RTX) { drop_through_label = gen_label_rtx (); Index: gcc/expr.c =================================================================== --- gcc/expr.c (revision 145698) +++ gcc/expr.c (working copy) @@ -8264,7 +8264,10 @@ expand_expr_real_1 (tree exp, rtx target /* If no set-flag instruction, must generate a conditional store into a temporary variable. Drop through and handle this like && and ||. */ - + /* Although TRUTH_{AND,OR}IF_EXPR aren't present in GIMPLE, they + are occassionally created by folding during expansion. */ + case TRUTH_ANDIF_EXPR: + case TRUTH_ORIF_EXPR: if (! ignore && (target == 0 || modifier == EXPAND_STACK_PARM @@ -8465,8 +8468,6 @@ expand_expr_real_1 (tree exp, rtx target case POSTDECREMENT_EXPR: case LOOP_EXPR: case EXIT_EXPR: - case TRUTH_ANDIF_EXPR: - case TRUTH_ORIF_EXPR: /* Lowered by gimplify.c. */ gcc_unreachable (); Index: gcc/testsuite/gcc.c-torture/compile/20080812-1.c =================================================================== --- gcc/testsuite/gcc.c-torture/compile/20080812-1.c (revision 0) +++ gcc/testsuite/gcc.c-torture/compile/20080812-1.c (revision 0) @@ -0,0 +1,21 @@ +/* PR middle-end/37014 */ + +void bar (signed char *); + +void +foo (int x, int y) +{ + int i; + signed char a[123], b[123], c; + for (i = 0; i < 123; i++) + { + int e = y - x; + int d = e < 0 ? -e : e; + c = d < 75; + a[y] = c; + b[y] = c; + y--; + } + bar (b); + bar (a); +} ++++++ nov495844.diff ++++++ 2009-04-23 Richard Guenther <rguenther@suse.de> * tree-ssa-loop-ivopts.c (iv_expression_expensive_p): New function. (may_eliminate_iv): Use it. * gcc.dg/tree-ssa/bnc495844.c: New testcase. Index: gcc/tree-ssa-loop-ivopts.c =================================================================== *** gcc/tree-ssa-loop-ivopts.c (revision 146521) --- gcc/tree-ssa-loop-ivopts.c (working copy) *************** iv_elimination_compare (struct ivopts_da *** 3996,4001 **** --- 3996,4045 ---- return (exit->flags & EDGE_TRUE_VALUE ? EQ_EXPR : NE_EXPR); } + /* Returns true if the expression EXPR is considered to be too expensive + for induction variable elimination. */ + + static bool + iv_expression_expensive_p (tree expr) + { + enum tree_code code; + + if (is_gimple_val (expr)) + return false; + + code = TREE_CODE (expr); + if (code == TRUNC_DIV_EXPR + || code == CEIL_DIV_EXPR + || code == FLOOR_DIV_EXPR + || code == ROUND_DIV_EXPR + || code == TRUNC_MOD_EXPR + || code == CEIL_MOD_EXPR + || code == FLOOR_MOD_EXPR + || code == ROUND_MOD_EXPR + || code == EXACT_DIV_EXPR) + { + /* Division by power of two is usually cheap, so we allow it. + Forbid anything else. */ + if (!integer_pow2p (TREE_OPERAND (expr, 1))) + return true; + } + + switch (TREE_CODE_CLASS (code)) + { + case tcc_binary: + case tcc_comparison: + if (iv_expression_expensive_p (TREE_OPERAND (expr, 1))) + return true; + + /* Fallthru. */ + case tcc_unary: + return iv_expression_expensive_p (TREE_OPERAND (expr, 0)); + + default: + return true; + } + } + /* Check whether it is possible to express the condition in USE by comparison of candidate CAND. If so, store the value compared with to BOUND. */ *************** may_eliminate_iv (struct ivopts_data *da *** 4053,4058 **** --- 4097,4106 ---- return false; *bound = cand_value_at (loop, cand, use->stmt, nit); + /* It is unlikely that computing the number of iterations using division + would be more profitable than keeping the original induction variable. */ + if (iv_expression_expensive_p (*bound)) + return false; return true; } Index: gcc/testsuite/gcc.dg/tree-ssa/bnc495844.c =================================================================== *** gcc/testsuite/gcc.dg/tree-ssa/bnc495844.c (revision 0) --- gcc/testsuite/gcc.dg/tree-ssa/bnc495844.c (revision 0) *************** *** 0 **** --- 1,14 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -fdump-tree-optimized" } */ + + unsigned long + foo (const char *d, int len, char *dict, unsigned long o) + { + int point_me; + for (point_me = 0; point_me < len; point_me += 3) + o += dict[point_me]; + return o; + } + + /* { dg-final { scan-tree-dump-not "/\\\[fl\\\] 3" "optimized" } } */ + /* { dg-final { cleanup-tree-dump "optimized" } } */ ++++++ pr30113.patch ++++++ Subject: Bug 30113 Author: rakdver Date: Mon Dec 11 21:29:44 2006 New Revision: 119748 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=119748 Log: PR rtl-optimization/30113 * loop-iv.c (implies_p): Require the mode of the operands to be scalar. Index: gcc/loop-iv.c =================================================================== *** gcc/loop-iv.c (revision 120791) --- gcc/loop-iv.c (working copy) *************** implies_p (rtx a, rtx b) *** 1497,1503 **** mode = VOIDmode; } ! if (mode != VOIDmode && rtx_equal_p (op1, opb1) && simplify_gen_binary (MINUS, mode, opb0, op0) == const1_rtx) return true; --- 1497,1503 ---- mode = VOIDmode; } ! if (SCALAR_INT_MODE_P (mode) && rtx_equal_p (op1, opb1) && simplify_gen_binary (MINUS, mode, opb0, op0) == const1_rtx) return true; ++++++ pr34130.patch ++++++ 2007-11-17 Richard Guenther <rguenther@suse.de> PR middle-end/34130 * fold-const.c (extract_muldiv_1): Do not move negative constants inside ABS_EXPR. * gcc.c-torture/execute/pr34130.c: New testcase. Index: gcc/fold-const.c =================================================================== *** gcc/fold-const.c (revision 130238) --- gcc/fold-const.c (working copy) *************** extract_muldiv_1 (tree t, tree c, enum t *** 6095,6100 **** --- 6095,6103 ---- } break; } + /* If the constant is negative, we cannot simplify this. */ + if (tree_int_cst_sgn (c) == -1) + break; /* FALLTHROUGH */ case NEGATE_EXPR: if ((t1 = extract_muldiv (op0, c, code, wide_type, strict_overflow_p)) Index: gcc/testsuite/gcc.c-torture/execute/pr34130.c =================================================================== *** gcc/testsuite/gcc.c-torture/execute/pr34130.c (revision 0) --- gcc/testsuite/gcc.c-torture/execute/pr34130.c (revision 0) *************** *** 0 **** --- 1,12 ---- + extern void abort (void); + int foo (int i) + { + return -2 * __builtin_abs(i - 2); + } + int main() + { + if (foo(1) != -2 + || foo(3) != -2) + abort (); + return 0; + } ++++++ pr34641.patch ++++++ Subject: GCC 4.1 Fix für GCC Bugzilla 34641 Hallo, ich musste gerade feststellen, dass wir mit 4.1 beim Kernelbuild neuerdings in das gleiche Problem laufen. Ich hatte dazu ulkigerweise schon einen 4.1 Patch auf der Platte rumliegen, also vermute ich, dass ich euch das schoneinmal angetragen hatte. Ich konnte allerdings keinen passenden Bugzilla für Sles 10 finden. Könntest du kurz checken, ob der für Sles 10 SP 3 eingeplant ist? Dank -Andreas- Index: gcc/reload.c =================================================================== *** gcc/reload.c.orig 2008-07-31 14:03:10.000000000 +0200 --- gcc/reload.c 2008-07-31 16:49:52.000000000 +0200 *************** push_reload (rtx in, rtx out, rtx *inloc *** 943,971 **** if (outmode == VOIDmode && out != 0) outmode = GET_MODE (out); ! /* If IN is a pseudo register everywhere-equivalent to a constant, and ! it is not in a hard register, reload straight from the constant, ! since we want to get rid of such pseudo registers. ! Often this is done earlier, but not always in find_reloads_address. */ if (in != 0 && REG_P (in)) { int regno = REGNO (in); ! if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 ! && reg_equiv_constant[regno] != 0) ! in = reg_equiv_constant[regno]; } ! /* Likewise for OUT. Of course, OUT will never be equivalent to ! an actual constant, but it might be equivalent to a memory location ! (in the case of a parameter). */ if (out != 0 && REG_P (out)) { int regno = REGNO (out); ! if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] < 0 ! && reg_equiv_constant[regno] != 0) ! out = reg_equiv_constant[regno]; } /* If we have a read-write operand with an address side-effect, --- 943,975 ---- if (outmode == VOIDmode && out != 0) outmode = GET_MODE (out); ! /* If find_reloads and friends until now missed to replace a pseudo ! with a constant of reg_equiv_constant something went wrong ! beforehand. ! Note that it can't simply be done here if we missed it earlier ! since the constant might need to be pushed into the literal pool ! and the resulting memref would probably need further ! reloading. */ if (in != 0 && REG_P (in)) { int regno = REGNO (in); ! gcc_assert (regno < FIRST_PSEUDO_REGISTER ! || reg_renumber[regno] >= 0 ! || reg_equiv_constant[regno] == NULL_RTX); } ! /* reg_equiv_constant only contains constants which are obviously ! not appropriate as destination. So if we would need to replace ! the destination pseudo with a constant we are in real ! trouble. */ if (out != 0 && REG_P (out)) { int regno = REGNO (out); ! gcc_assert (regno < FIRST_PSEUDO_REGISTER ! || reg_renumber[regno] >= 0 ! || reg_equiv_constant[regno] == NULL_RTX); } /* If we have a read-write operand with an address side-effect, *************** find_reloads_address (enum machine_mode *** 4751,4765 **** { regno = REGNO (ad); ! /* If the register is equivalent to an invariant expression, substitute ! the invariant, and eliminate any eliminable register references. */ ! tem = reg_equiv_constant[regno]; ! if (tem != 0 ! && (tem = eliminate_regs (tem, mode, insn)) ! && strict_memory_address_p (mode, tem)) { ! *loc = ad = tem; ! return 0; } tem = reg_equiv_memory_loc[regno]; --- 4755,4766 ---- { regno = REGNO (ad); ! if (reg_equiv_constant[regno] != 0) { ! find_reloads_address_part (reg_equiv_constant[regno], loc, ! BASE_REG_CLASS, ! GET_MODE (ad), opnum, type, ind_levels); ! return 1; } tem = reg_equiv_memory_loc[regno]; ++++++ sse5-suse.patch01 ++++++ ++++ 6215 lines (skipped) ++++++ warn-enum.diff ++++++ This is for fate #300955, which puts the warning under -Wconversion control. Index: gcc/cp/call.c =================================================================== --- gcc/cp/call.c.orig +++ gcc/cp/call.c @@ -3841,7 +3841,7 @@ build_new_op (enum tree_code code, int f && (TYPE_MAIN_VARIANT (TREE_TYPE (arg1)) != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))) { - warning (0, "comparison between %q#T and %q#T", + warning (OPT_Wconversion, "comparison between %q#T and %q#T", TREE_TYPE (arg1), TREE_TYPE (arg2)); } break; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@Hilbert.suse.de