From 7c074710931251a56f6fb71bebcee17f114e781d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Jan 16 2009 18:34:38 +0000 Subject: 4.4.0-0.3 --- diff --git a/.cvsignore b/.cvsignore index e17de7b..16f2639 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ -gcc-4.3.2-20081105.tar.bz2 -fastjar-0.95.tar.gz +fastjar-0.97.tar.gz +gcc-4.4.0-20090115.tar.bz2 diff --git a/fastjar-0.97-segfault.patch b/fastjar-0.97-segfault.patch new file mode 100644 index 0000000..ab62624 --- /dev/null +++ b/fastjar-0.97-segfault.patch @@ -0,0 +1,29 @@ +2009-01-14 Jakub Jelinek + + * jartool.c (make_manifest): Initialize current_time before + calling unix2dostime on it. + +--- fastjar-0.97/jartool.c.jj 2008-10-15 18:35:37.000000000 +0200 ++++ fastjar-0.97/jartool.c 2009-01-14 15:40:50.000000000 +0100 +@@ -820,6 +820,10 @@ int make_manifest(int jfd, const char *m + int mod_time; /* file modification time */ + struct zipentry *ze; + ++ current_time = time(NULL); ++ if(current_time == (time_t)-1) ++ exit_on_error("time"); ++ + mod_time = unix2dostime(¤t_time); + + /* If we are creating a new manifest, create a META-INF directory entry */ +@@ -828,10 +832,6 @@ int make_manifest(int jfd, const char *m + + memset((file_header + 12), '\0', 16); /*clear mod time, crc, size fields*/ + +- current_time = time(NULL); +- if(current_time == (time_t)-1) +- exit_on_error("time"); +- + PACK_UB2(file_header, LOC_EXTRA, 0); + PACK_UB2(file_header, LOC_COMP, 0); + PACK_UB2(file_header, LOC_FNLEN, nlen); diff --git a/gcc.spec b/gcc.spec new file mode 100644 index 0000000..fd69467 --- /dev/null +++ b/gcc.spec @@ -0,0 +1,1713 @@ +%define DATE 20090115 +%define SVNREV 141601 +%define gcc_version 4.4.0 +# Note, gcc_release must be integer, if you want to add suffixes to +# %{release}, append them after %{gcc_release} on Release: line. +%define gcc_release 0.3 +%define _unpackaged_files_terminate_build 0 +%define multilib_64_archs sparc64 ppc64 s390x x86_64 +%define include_gappletviewer 1 +%ifarch %{ix86} x86_64 ia64 ppc alpha +%define build_ada 1 +%else +%define build_ada 0 +%endif +%define build_java 1 +# If you don't have already a usable gcc-java and libgcj for your arch, +# do on some arch which has it rpmbuild -bc --with java_tar gcc41.spec +# which creates libjava-classes-%{version}-%{release}.tar.bz2 +# With this then on the new arch do rpmbuild -ba -v --with java_bootstrap gcc41.spec +%define bootstrap_java %{?_with_java_bootstrap:%{build_java}}%{!?_with_java_bootstrap:0} +%define build_java_tar %{?_with_java_tar:%{build_java}}%{!?_with_java_tar:0} +%ifarch s390x +%define multilib_32_arch s390 +%endif +%ifarch sparc64 +%define multilib_32_arch sparcv9 +%endif +%ifarch ppc64 +%define multilib_32_arch ppc +%endif +%ifarch x86_64 +%define multilib_32_arch i386 +%endif +Summary: Various compilers (C, C++, Objective-C, Java, ...) +Name: gcc +Version: %{gcc_version} +Release: %{gcc_release} +# libgcc, libgfortran, libmudflap and crtstuff have an exception which allows +# linking it into any kind of programs or shared libraries without +# restrictions. +License: GPLv3+ and GPLv2+ with exceptions +Group: Development/Languages +# The source for this package was pulled from upstream's vcs. Use the +# following commands to generate the tarball: +# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_3-branch@%{SVNREV} gcc-%{version}-%{DATE} +# tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2 +Source0: gcc-%{version}-%{DATE}.tar.bz2 +Source1: libgcc_post_upgrade.c +Source2: README.libgcjwebplugin.so +Source3: protoize.1 +%define fastjar_ver 0.97 +Source4: http://download.savannah.nongnu.org/releases/fastjar/fastjar-%{fastjar_ver}.tar.gz +URL: http://gcc.gnu.org +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +# Need binutils with -pie support >= 2.14.90.0.4-4 +# Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 +# Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 +# Need binutils which support .weakref >= 2.16.91.0.3-1 +# Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 +# Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 +# Need binutils which support --build-id >= 2.17.50.0.17-3 +BuildRequires: binutils >= 2.17.50.0.17-3 +BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, texinfo, sharutils +%if %{build_java} +BuildRequires: /usr/share/java/eclipse-ecj.jar, zip, unzip +%if %{bootstrap_java} +Source10: libjava-classes-%{version}-%{release}.tar.bz2 +%else +BuildRequires: gcc-java, libgcj +%endif +%endif +# Make sure pthread.h doesn't contain __thread tokens +# Make sure glibc supports stack protector +# Make sure glibc supports DT_GNU_HASH +BuildRequires: glibc-devel >= 2.4.90-13 +BuildRequires: elfutils-devel >= 0.72 +%ifarch ppc ppc64 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +BuildRequires: glibc >= 2.3.90-35 +%endif +%ifarch %{multilib_64_archs} sparcv9 ppc +# Ensure glibc{,-devel} is installed for both multilib arches +BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so +%endif +%if %{build_ada} +# Ada requires Ada to build +BuildRequires: gcc-gnat >= 3.1, libgnat >= 3.1 +%endif +%ifarch ia64 +BuildRequires: libunwind >= 0.98 +%endif +Requires: cpp = %{version}-%{release} +# Need .eh_frame ld optimizations +# Need proper visibility support +# Need -pie support +# Need --as-needed/--no-as-needed support +# On ppc64, need omit dot symbols support and --non-overlapping-opd +# Need binutils that owns /usr/bin/c++filt +# Need binutils that support .weakref +# Need binutils that supports --hash-style=gnu +# Need binutils that support mffgpr/mftgpr +# Need binutils that support --build-id +Requires: binutils >= 2.17.50.0.17-3 +# Make sure gdb will understand DW_FORM_strp +Conflicts: gdb < 5.1-2 +Requires: glibc-devel >= 2.2.90-12 +%ifarch ppc ppc64 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +Requires: glibc >= 2.3.90-35 +%endif +Requires: libgcc >= %{version}-%{release} +Requires: libgomp = %{version}-%{release} +%if !%{build_ada} +Obsoletes: gcc-gnat < %{version}-%{release} +Obsoletes: libgnat < %{version}-%{release} +%endif +Prereq: /sbin/install-info +AutoReq: true + +Patch0: gcc44-hack.patch +Patch1: gcc44-build-id.patch +Patch2: gcc44-c++-builtin-redecl.patch +Patch3: gcc44-ia64-libunwind.patch +Patch4: gcc44-java-nomulti.patch +Patch5: gcc44-ppc32-retaddr.patch +Patch7: gcc44-pr27898.patch +Patch8: gcc44-pr32139.patch +Patch9: gcc44-pr33763.patch +Patch10: gcc44-rh330771.patch +Patch11: gcc44-rh341221.patch +Patch12: gcc44-java-debug-iface-type.patch +Patch13: gcc44-i386-libgomp.patch +Patch15: gcc44-sparc-config-detection.patch +Patch16: gcc44-libgomp-omp_h-multilib.patch +Patch20: gcc44-libtool-no-rpath.patch + +Patch1000: fastjar-0.97-segfault.patch + +# On ARM EABI systems, we do want -gnueabi to be part of the +# target triple. +%ifnarch %{arm} +%define _gnu %{nil} +%endif +%ifarch sparcv9 +%define gcc_target_platform sparc64-%{_vendor}-%{_target_os} +%endif +%ifarch ppc +%define gcc_target_platform ppc64-%{_vendor}-%{_target_os} +%endif +%ifnarch sparcv9 ppc +%define gcc_target_platform %{_target_platform} +%endif + +%description +The gcc package contains the GNU Compiler Collection version 4.4. +You'll need this package in order to compile C code. + +%package -n libgcc +Summary: GCC version 4.4 shared support library +Group: System Environment/Libraries +Autoreq: false + +%description -n libgcc +This package contains GCC shared support library which is needed +e.g. for exception handling support. + +%package c++ +Summary: C++ support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libstdc++ = %{version}-%{release} +Requires: libstdc++-devel = %{version}-%{release} +Autoreq: true + +%description c++ +This package adds C++ support to the GNU Compiler Collection. +It includes support for most of the current C++ specification, +including templates and exception handling. + +%package -n libstdc++ +Summary: GNU Standard C++ Library +Group: System Environment/Libraries +Autoreq: true + +%description -n libstdc++ +The libstdc++ package contains a rewritten standard compliant GCC Standard +C++ Library. + +%package -n libstdc++-devel +Summary: Header files and libraries for C++ development +Group: Development/Libraries +Requires: libstdc++ = %{version}-%{release}, %{_prefix}/%{_lib}/libstdc++.so.6 +Autoreq: true + +%description -n libstdc++-devel +This is the GNU implementation of the standard C++ libraries. This +package includes the header files and libraries needed for C++ +development. This includes rewritten implementation of STL. + +%package objc +Summary: Objective-C support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libobjc = %{version}-%{release} +Autoreq: true + +%description objc +gcc-objc provides Objective-C support for the GCC. +Mainly used on systems running NeXTSTEP, Objective-C is an +object-oriented derivative of the C language. + +%package objc++ +Summary: Objective-C++ support for GCC +Group: Development/Languages +Requires: gcc-c++ = %{version}-%{release}, gcc-objc = %{version}-%{release} +Autoreq: true + +%description objc++ +gcc-objc++ package provides Objective-C++ support for the GCC. + +%package -n libobjc +Summary: Objective-C runtime +Group: System Environment/Libraries +Autoreq: true + +%description -n libobjc +This package contains Objective-C shared library which is needed to run +Objective-C dynamically linked programs. + +%package gfortran +Summary: Fortran support +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libgfortran = %{version}-%{release} +BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1 +Prereq: /sbin/install-info +Autoreq: true + +%description gfortran +The gcc-gfortran package provides support for compiling Fortran +programs with the GNU Compiler Collection. + +%package -n libgfortran +Summary: Fortran runtime +Group: System Environment/Libraries +Autoreq: true + +%description -n libgfortran +This package contains Fortran shared library which is needed to run +Fortran dynamically linked programs. + +%package -n libgomp +Summary: GCC OpenMP v3.0 shared support library +Group: System Environment/Libraries +Prereq: /sbin/install-info + +%description -n libgomp +This package contains GCC shared support library which is needed +for OpenMP v3.0 support. + +%package -n libmudflap +Summary: GCC mudflap shared support library +Group: System Environment/Libraries + +%description -n libmudflap +This package contains GCC shared support library which is needed +for mudflap support. + +%package -n libmudflap-devel +Summary: GCC mudflap support +Group: Development/Libraries +Requires: libmudflap = %{version}-%{release} +Requires: gcc = %{version}-%{release} + +%description -n libmudflap-devel +This package contains headers and static libraries for building +mudflap-instrumented programs. + +To instrument a non-threaded program, add -fmudflap +option to GCC and when linking add -lmudflap, for threaded programs +also add -fmudflapth and -lmudflapth. + +%package java +Summary: Java support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libgcj = %{version}-%{release} +Requires: libgcj-devel = %{version}-%{release} +Requires: /usr/share/java/eclipse-ecj.jar +Prereq: /sbin/install-info +Autoreq: true + +%description java +This package adds support for compiling Java(tm) programs and +bytecode into native code. + +%package -n libgcj +Summary: Java runtime library for gcc +Group: System Environment/Libraries +Prereq: /sbin/install-info +Requires: zip >= 2.1 +Requires: gtk2 >= 2.4.0 +Requires: glib2 >= 2.4.0 +Requires: libart_lgpl >= 2.1.0 +%if %{build_java} +BuildRequires: gtk2-devel >= 2.4.0 +BuildRequires: glib2-devel >= 2.4.0 +BuildRequires: xulrunner-devel +BuildRequires: libart_lgpl-devel >= 2.1.0 +BuildRequires: alsa-lib-devel +BuildRequires: libXtst-devel +BuildRequires: libXt-devel +%endif +Autoreq: true + +%description -n libgcj +The Java(tm) runtime library. You will need this package to run your Java +programs compiled using the Java compiler from GNU Compiler Collection (gcj). + +%package -n libgcj-devel +Summary: Libraries for Java development using GCC +Group: Development/Languages +Requires: libgcj = %{version}-%{release}, %{_prefix}/%{_lib}/libgcj.so.10 +Requires: zlib-devel, %{_prefix}/%{_lib}/libz.so +Requires: /bin/awk +Autoreq: false +Autoprov: false + +%description -n libgcj-devel +The Java(tm) static libraries and C header files. You will need this +package to compile your Java programs using the GCC Java compiler (gcj). + +%package -n libgcj-src +Summary: Java library sources from GCC4 preview +Group: System Environment/Libraries +Requires: libgcj = %{version}-%{release} +Autoreq: true + +%description -n libgcj-src +The Java(tm) runtime library sources for use in Eclipse. + +%package -n cpp +Summary: The C Preprocessor +Group: Development/Languages +Prereq: /sbin/install-info +Autoreq: true + +%description -n cpp +Cpp is the GNU C-Compatible Compiler Preprocessor. +Cpp is a macro processor which is used automatically +by the C compiler to transform your program before actual +compilation. It is called a macro processor because it allows +you to define macros, abbreviations for longer +constructs. + +The C preprocessor provides four separate functionalities: the +inclusion of header files (files of declarations that can be +substituted into your program); macro expansion (you can define macros, +and the C preprocessor will replace the macros with their definitions +throughout the program); conditional compilation (using special +preprocessing directives, you can include or exclude parts of the +program according to various conditions); and line control (if you use +a program to combine or rearrange source files into an intermediate +file which is then compiled, you can use line control to inform the +compiler about where each source line originated). + +You should install this package if you are a C programmer and you use +macros. + +%package gnat +Summary: Ada 95 support for GCC +Group: Development/Languages +Requires: gcc = %{version}-%{release} +Requires: libgnat = %{version}-%{release}, libgnat-devel = %{version}-%{release} +Prereq: /sbin/install-info +Autoreq: true + +%description gnat +GNAT is a GNU Ada 95 front-end to GCC. This package includes development tools, +the documents and Ada 95 compiler. + +%package -n libgnat +Summary: GNU Ada 95 runtime shared libraries +Group: System Environment/Libraries +Autoreq: true + +%description -n libgnat +GNAT is a GNU Ada 95 front-end to GCC. This package includes shared libraries, +which are required to run programs compiled with the GNAT. + +%package -n libgnat-devel +Summary: GNU Ada 95 libraries +Group: System Environment/Libraries +Autoreq: true + +%description -n libgnat-devel +GNAT is a GNU Ada 95 front-end to GCC. This package includes libraries, +which are required to compile with the GNAT. + +%prep +%setup -q -n gcc-%{version}-%{DATE} +%patch0 -p0 -b .hack~ +%patch1 -p0 -b .build-id~ +%patch2 -p0 -b .c++-builtin-redecl~ +%patch3 -p0 -b .ia64-libunwind~ +%patch4 -p0 -b .java-nomulti~ +%patch5 -p0 -b .ppc32-retaddr~ +%patch7 -p0 -b .pr27898~ +%patch8 -p0 -b .pr32139~ +%patch9 -p0 -b .pr33763~ +%patch10 -p0 -b .rh330771~ +%patch11 -p0 -b .rh341221~ +%patch12 -p0 -b .java-debug-iface-type~ +%patch13 -p0 -b .i386-libgomp~ +%patch15 -p0 -b .sparc-config-detection~ +%patch16 -p0 -b .libgomp-omp_h-multilib~ +%patch20 -p0 -b .libtool-no-rpath~ + +# This testcase doesn't compile. +rm libjava/testsuite/libjava.lang/PR35020* + +tar xzf %{SOURCE4} + +%patch1000 -p0 -b .fastjar-0.97-segfault~ + +%if %{bootstrap_java} +tar xjf %{SOURCE10} +%endif + +sed -i -e 's/4\.4\.1/4.4.0/' gcc/BASE-VER +echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE + +cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h + +# Hack to avoid building multilib libjava +perl -pi -e 's/^all: all-redirect/ifeq (\$(MULTISUBDIR),)\nall: all-redirect\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^install: install-redirect/ifeq (\$(MULTISUBDIR),)\ninstall: install-redirect\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^check: check-redirect/ifeq (\$(MULTISUBDIR),)\ncheck: check-redirect\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^all: all-recursive/ifeq (\$(MULTISUBDIR),)\nall: all-recursive\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^install: install-recursive/ifeq (\$(MULTISUBDIR),)\ninstall: install-recursive\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in +perl -pi -e 's/^check: check-recursive/ifeq (\$(MULTISUBDIR),)\ncheck: check-recursive\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in + +./contrib/gcc_update --touch + +LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi + +%ifarch ppc +if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/post/powerpc64-linux-gnu/64 + mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32 +fi +%endif +%ifarch sparc +if [ -d libstdc++-v3/config/abi/post/sparc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/post/sparc64-linux-gnu/64 + mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/post/sparc64-linux-gnu/32 +fi +%endif + +%build + +%if %{build_java} +# gjar isn't usable, so even when GCC source tree no longer includes +# fastjar, build it anyway. +mkdir fastjar-%{fastjar_ver}/obj-%{gcc_target_platform} +cd fastjar-%{fastjar_ver}/obj-%{gcc_target_platform} +../configure CFLAGS="$RPM_OPT_FLAGS" --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} +make %{?_smp_mflags} +export PATH=`pwd`${PATH:+:$PATH} +cd ../../ +%endif + +rm -fr obj-%{gcc_target_platform} +mkdir obj-%{gcc_target_platform} +cd obj-%{gcc_target_platform} + +%if %{build_java} +%if !%{bootstrap_java} +# If we don't have gjavah in $PATH, try to build it with the old gij +mkdir java_hacks +cd java_hacks +cp -a ../../libjava/classpath/tools/external external +mkdir -p gnu/classpath/tools +cp -a ../../libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} gnu/classpath/tools/ +cp -a ../../libjava/classpath/tools/resource/gnu/classpath/tools/common/Messages.properties gnu/classpath/tools/common +cp -a ../../libjava/classpath/tools/resource/gnu/classpath/tools/getopt/Messages.properties gnu/classpath/tools/getopt +cd external/asm; for i in `find . -name \*.java`; do gcj --encoding ISO-8859-1 -C $i -I.; done; cd ../.. +for i in `find gnu -name \*.java`; do gcj -C $i -I. -Iexternal/asm/; done +gcj -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main -I. -Iexternal/asm/ `find . -name \*.class` -o gjavah.real +cat > gjavah < ecj1 < gcc64 <<"EOF" +#!/bin/sh +exec /usr/bin/gcc -m64 "$@" +EOF +chmod +x gcc64 +CC=`pwd`/gcc64 +%endif +%ifarch ppc64 +if gcc -m64 -xc -S /dev/null -o - > /dev/null 2>&1; then + cat > gcc64 <<"EOF" +#!/bin/sh +exec /usr/bin/gcc -m64 "$@" +EOF + chmod +x gcc64 + CC=`pwd`/gcc64 +fi +%endif +OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` +case "$OPT_FLAGS" in + *-fasynchronous-unwind-tables*) + sed -i -e 's/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/' \ + ../gcc/Makefile.in + ;; +esac +CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`" XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ + GCJFLAGS="$OPT_FLAGS" \ + ../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ + --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \ + --enable-shared --enable-threads=posix --enable-checking=release \ + --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ +%if !%{build_ada} + --enable-languages=c,c++,objc,obj-c++,java,fortran \ +%else + --enable-languages=c,c++,objc,obj-c++,java,fortran,ada \ +%endif +%if !%{build_java} + --disable-libgcj \ +%else + --enable-java-awt=gtk --disable-dssi --enable-plugin \ + --with-java-home=%{_prefix}/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre \ + --enable-libgcj-multifile \ +%if !%{bootstrap_java} + --enable-java-maintainer-mode \ +%endif + --with-ecj-jar=/usr/share/java/eclipse-ecj.jar \ + --disable-libjava-multilib \ +%endif +%ifarch %{arm} + --disable-sjlj-exceptions \ +%endif +%ifarch ppc ppc64 + --enable-secureplt \ +%endif +%ifarch sparc sparcv9 sparc64 ppc ppc64 s390 s390x alpha + --with-long-double-128 \ +%endif +%ifarch sparc + --disable-linux-futex \ +%endif +%ifarch sparc64 + --with-cpu=ultrasparc \ +%endif +%ifarch sparc sparcv9 + --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7 +%endif +%ifarch ppc + --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 +%endif +%ifarch %{ix86} x86_64 + --with-cpu=generic \ +%endif +%ifarch s390 s390x + --with-tune=z9-109 \ +%endif +%ifnarch sparc sparcv9 ppc + --build=%{gcc_target_platform} +%endif + +#GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap +GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap + +# run the tests. +make %{?_smp_mflags} -k check ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++ RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector/--param=ssp-buffer-size=4}'" || : +echo ====================TESTING========================= +( ../contrib/test_summary || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}' +echo ====================TESTING END===================== +mkdir testlogs-%{_target_platform}-%{version}-%{release} +for i in `find . -name \*.log | grep -F testsuite/ | grep -v 'config.log\|acats\|ada'`; do + ln $i testlogs-%{_target_platform}-%{version}-%{release}/ || : +done +tar cf - testlogs-%{_target_platform}-%{version}-%{release} | bzip2 -9c \ + | uuencode testlogs-%{_target_platform}.tar.bz2 || : +rm -rf testlogs-%{_target_platform}-%{version}-%{release} + +# Make protoize +make -C gcc CC="./xgcc -B ./ -O2" proto + +# Make generated man pages even if Pod::Man is not new enough +perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl +for i in ../gcc/doc/*.texi; do + cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i +done +make -C gcc generated-manpages +for i in ../gcc/doc/*.texi; do mv -f $i.orig $i; done + +# Copy various doc files here and there +cd .. +mkdir -p rpm.doc/gfortran rpm.doc/objc +mkdir -p rpm.doc/boehm-gc rpm.doc/fastjar rpm.doc/libffi rpm.doc/libjava +mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libmudflap,libgomp} +sed -e 's,@VERSION@,%{gcc_version},' %{SOURCE2} > rpm.doc/README.libgcjwebplugin.so + +for i in {gcc,gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libmudflap,libgomp}/ChangeLog*; do + cp -p $i rpm.doc/changelogs/$i +done + +(cd gcc/fortran; for i in ChangeLog*; do + cp -p $i ../../rpm.doc/gfortran/$i +done) +(cd libgfortran; for i in ChangeLog*; do + cp -p $i ../rpm.doc/gfortran/$i.libgfortran +done) +(cd gcc/objc; for i in README*; do + cp -p $i ../../rpm.doc/objc/$i.objc +done) +(cd libobjc; for i in README*; do + cp -p $i ../rpm.doc/objc/$i.libobjc +done) +(cd boehm-gc; for i in ChangeLog*; do + cp -p $i ../rpm.doc/boehm-gc/$i.gc +done) +(cd fastjar-%{fastjar_ver}; for i in ChangeLog* README*; do + cp -p $i ../rpm.doc/fastjar/$i.fastjar +done) +(cd libffi; for i in ChangeLog* README* LICENSE; do + cp -p $i ../rpm.doc/libffi/$i.libffi +done) +(cd libjava; for i in ChangeLog* README*; do + cp -p $i ../rpm.doc/libjava/$i.libjava +done) +cp -p libjava/LIBGCJ_LICENSE rpm.doc/libjava/ + +rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9] +find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9 + +%if %{build_java_tar} +find libjava -name \*.h -type f | xargs grep -l '// DO NOT EDIT THIS FILE - it is machine generated' > libjava-classes.list +find libjava -name \*.class -type f >> libjava-classes.list +find libjava/testsuite -name \*.jar -type f >> libjava-classes.list +tar cf - -T libjava-classes.list | bzip2 -9 > $RPM_SOURCE_DIR/libjava-classes-%{version}-%{release}.tar.bz2 +%endif + +%install +rm -fr $RPM_BUILD_ROOT + +perl -pi -e \ + 's~href="l(ibstdc|atest)~href="http://gcc.gnu.org/onlinedocs/libstdc++/l\1~' \ + libstdc++-v3/doc/html/api.html + +cd obj-%{gcc_target_platform} + +%if %{build_java} +export PATH=`pwd`/../fastjar-%{fastjar_ver}/obj-%{gcc_target_platform}${PATH:+:$PATH} +%if !%{bootstrap_java} +export PATH=`pwd`/java_hacks${PATH:+:$PATH} +%endif +%endif + +TARGET_PLATFORM=%{gcc_target_platform} + +# There are some MP bugs in libstdc++ Makefiles +make -C %{gcc_target_platform}/libstdc++-v3 + +make prefix=$RPM_BUILD_ROOT%{_prefix} mandir=$RPM_BUILD_ROOT%{_mandir} \ + infodir=$RPM_BUILD_ROOT%{_infodir} install +%if %{build_java} +make DESTDIR=$RPM_BUILD_ROOT -C %{gcc_target_platform}/libjava install-src.zip +%endif +%if %{build_ada} +chmod 644 $RPM_BUILD_ROOT%{_infodir}/gnat* +%endif + +FULLPATH=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +FULLEPATH=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} + +# fix some things +ln -sf gcc $RPM_BUILD_ROOT%{_prefix}/bin/cc +mkdir -p $RPM_BUILD_ROOT/lib +ln -sf ..%{_prefix}/bin/cpp $RPM_BUILD_ROOT/lib/cpp +ln -sf gfortran $RPM_BUILD_ROOT%{_prefix}/bin/f95 +rm -f $RPM_BUILD_ROOT%{_infodir}/dir +gzip -9 $RPM_BUILD_ROOT%{_infodir}/*.info* +ln -sf gcc $RPM_BUILD_ROOT%{_prefix}/bin/gnatgcc + +cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`" +for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do + if ! diff -up $cxxconfig $i; then + cat > $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform}/bits/c++config.h < +#if __WORDSIZE == 32 +%ifarch %{multilib_64_archs} +`cat $(find %{gcc_target_platform}/32/libstdc++-v3/include -name c++config.h)` +%else +`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` +%endif +#else +%ifarch %{multilib_64_archs} +`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` +%else +`cat $(find %{gcc_target_platform}/64/libstdc++-v3/include -name c++config.h)` +%endif +#endif +#endif +EOF + break + fi +done + +# Nuke bits/stdc++.h.gch dirs +# 1) there is no bits/stdc++.h header installed, so when gch file can't be +# used, compilation fails +# 2) sometimes it is hard to match the exact options used for building +# libstdc++-v3 or they aren't desirable +# 3) there are multilib issues, conflicts etc. with this +# 4) it is huge +# People can always precompile on their own whatever they want, but +# shipping this for everybody is unnecessary. +rm -rf $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform}/bits/stdc++.h.gch + +%ifarch sparcv9 sparc64 +ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ + $RPM_BUILD_ROOT%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc +%endif +%ifarch ppc ppc64 +ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ + $RPM_BUILD_ROOT%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc +%endif + +%ifarch sparcv9 ppc +FULLLPATH=$FULLPATH/lib32 +%endif +%ifarch sparc64 ppc64 +FULLLPATH=$FULLPATH/lib64 +%endif +if [ -n "$FULLLPATH" ]; then + mkdir -p $FULLLPATH +else + FULLLPATH=$FULLPATH +fi + +find $RPM_BUILD_ROOT -name \*.la | xargs rm -f +%if %{build_java} +# gcj -static doesn't work properly anyway, unless using --whole-archive +# and saving 35MB is not bad. +find $RPM_BUILD_ROOT -name libgcj.a -o -name libgtkpeer.a \ + -o -name libgjsmalsa.a -o -name libgcj-tools.a -o -name libjvm.a \ + -o -name libgij.a -o -name libgcj_bc.a -o -name libjavamath.a \ + | xargs rm -f + +mv $RPM_BUILD_ROOT%{_prefix}/lib/libgcj.spec $FULLPATH/ +sed -i -e 's/lib: /&%%{static:%%eJava programs cannot be linked statically}/' \ + $FULLPATH/libgcj.spec +%endif + +mkdir -p $RPM_BUILD_ROOT/%{_lib} +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcc_s.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 +chmod 755 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 +ln -sf libgcc_s-%{gcc_version}-%{DATE}.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s.so.1 +ln -sf /%{_lib}/libgcc_s.so.1 $FULLPATH/libgcc_s.so +%ifarch sparcv9 ppc +ln -sf /lib64/libgcc_s.so.1 $FULLPATH/64/libgcc_s.so +%endif +%ifarch %{multilib_64_archs} +ln -sf /lib/libgcc_s.so.1 $FULLPATH/32/libgcc_s.so +%endif + +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.spec $FULLPATH/ + +%if %{build_ada} +mv -f $FULLPATH/adalib/libgnarl-*.so $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ +mv -f $FULLPATH/adalib/libgnat-*.so $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ +rm -f $FULLPATH/adalib/libgnarl.so* $FULLPATH/adalib/libgnat.so* +%endif + +mkdir -p $RPM_BUILD_ROOT%{_prefix}/libexec/getconf +if gcc/xgcc -B gcc/ -E -dD -xc /dev/null | grep __LONG_MAX__.*2147483647; then + ln -sf POSIX_V6_ILP32_OFF32 $RPM_BUILD_ROOT%{_prefix}/libexec/getconf/default +else + ln -sf POSIX_V6_LP64_OFF64 $RPM_BUILD_ROOT%{_prefix}/libexec/getconf/default +fi + +%if %{build_java} +pushd ../fastjar-%{fastjar_ver}/obj-%{gcc_target_platform} +make install DESTDIR=$RPM_BUILD_ROOT +popd + +if [ "%{_lib}" != "lib" ]; then + mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{_lib}/pkgconfig + sed '/^libdir/s/lib$/%{_lib}/' $RPM_BUILD_ROOT%{_prefix}/lib/pkgconfig/libgcj-*.pc \ + > $RPM_BUILD_ROOT%{_prefix}/%{_lib}/pkgconfig/`basename $RPM_BUILD_ROOT%{_prefix}/lib/pkgconfig/libgcj-*.pc` +fi +%endif + +pushd $FULLPATH +if [ "%{_lib}" = "lib" ]; then +ln -sf ../../../libobjc.so.2 libobjc.so +ln -sf ../../../libstdc++.so.6.* libstdc++.so +ln -sf ../../../libgfortran.so.3.* libgfortran.so +ln -sf ../../../libgomp.so.1.* libgomp.so +ln -sf ../../../libmudflap.so.0.* libmudflap.so +ln -sf ../../../libmudflapth.so.0.* libmudflapth.so +%if %{build_java} +ln -sf ../../../libgcj.so.10.* libgcj.so +ln -sf ../../../libgcj-tools.so.10.* libgcj-tools.so +ln -sf ../../../libgij.so.10.* libgij.so +%endif +else +ln -sf ../../../../%{_lib}/libobjc.so.2 libobjc.so +ln -sf ../../../../%{_lib}/libstdc++.so.6.* libstdc++.so +ln -sf ../../../../%{_lib}/libgfortran.so.3.* libgfortran.so +ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so +ln -sf ../../../../%{_lib}/libmudflap.so.0.* libmudflap.so +ln -sf ../../../../%{_lib}/libmudflapth.so.0.* libmudflapth.so +%if %{build_java} +ln -sf ../../../../%{_lib}/libgcj.so.10.* libgcj.so +ln -sf ../../../../%{_lib}/libgcj-tools.so.10.* libgcj-tools.so +ln -sf ../../../../%{_lib}/libgij.so.10.* libgij.so +%endif +fi +%if %{build_java} +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcj_bc.so $FULLLPATH/ +%endif +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libstdc++.*a $FULLLPATH/ +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libsupc++.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortran.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.*a . +mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.*a $FULLLPATH/ + +%if %{build_ada} +%ifarch sparcv9 ppc +rm -rf $FULLPATH/64/ada{include,lib} +%endif +%ifarch %{multilib_64_archs} +rm -rf $FULLPATH/32/ada{include,lib} +%endif +if [ "$FULLPATH" != "$FULLLPATH" ]; then +mv -f $FULLPATH/ada{include,lib} $FULLLPATH/ +pushd $FULLLPATH/adalib +if [ "%{_lib}" = "lib" ]; then +ln -sf ../../../../../libgnarl-*.so libgnarl.so +ln -sf ../../../../../libgnarl-*.so libgnarl-4.4.so +ln -sf ../../../../../libgnat-*.so libgnat.so +ln -sf ../../../../../libgnat-*.so libgnat-4.4.so +else +ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl.so +ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl-4.4.so +ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat.so +ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat-4.4.so +fi +popd +else +pushd $FULLPATH/adalib +if [ "%{_lib}" = "lib" ]; then +ln -sf ../../../../libgnarl-*.so libgnarl.so +ln -sf ../../../../libgnarl-*.so libgnarl-4.4.so +ln -sf ../../../../libgnat-*.so libgnat.so +ln -sf ../../../../libgnat-*.so libgnat-4.4.so +else +ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so +ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.4.so +ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so +ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.4.so +fi +popd +fi +%endif + +%ifarch sparcv9 ppc +ln -sf ../../../../../lib64/libobjc.so.2 64/libobjc.so +ln -sf ../`echo ../../../../lib/libstdc++.so.6.* | sed s~/lib/~/lib64/~` 64/libstdc++.so +ln -sf ../`echo ../../../../lib/libgfortran.so.3.* | sed s~/lib/~/lib64/~` 64/libgfortran.so +ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so +rm -f libmudflap.so libmudflapth.so +echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflap.so +echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflapth.so +echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > 64/libmudflap.so +echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > 64/libmudflapth.so +%if %{build_java} +ln -sf ../`echo ../../../../lib/libgcj.so.10.* | sed s~/lib/~/lib64/~` 64/libgcj.so +ln -sf ../`echo ../../../../lib/libgcj-tools.so.10.* | sed s~/lib/~/lib64/~` 64/libgcj-tools.so +ln -sf ../`echo ../../../../lib/libgij.so.10.* | sed s~/lib/~/lib64/~` 64/libgij.so +ln -sf lib32/libgcj_bc.so libgcj_bc.so +ln -sf ../lib64/libgcj_bc.so 64/libgcj_bc.so +%endif +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libsupc++.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgfortran.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libobjc.*a 64/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgomp.*a 64/ +ln -sf lib32/libstdc++.a libstdc++.a +ln -sf ../lib64/libstdc++.a 64/libstdc++.a +ln -sf lib32/libmudflap.a libmudflap.a +ln -sf ../lib64/libmudflap.a 64/libmudflap.a +ln -sf lib32/libmudflapth.a libmudflapth.a +ln -sf ../lib64/libmudflapth.a 64/libmudflapth.a +%if %{build_ada} +ln -sf lib32/adainclude adainclude +ln -sf ../lib64/adainclude 64/adainclude +ln -sf lib32/adalib adalib +ln -sf ../lib64/adalib 64/adalib +%endif +%endif +%ifarch %{multilib_64_archs} +mkdir -p 32 +ln -sf ../../../../libobjc.so.2 32/libobjc.so +ln -sf ../`echo ../../../../lib64/libstdc++.so.6.* | sed s~/../lib64/~/~` 32/libstdc++.so +ln -sf ../`echo ../../../../lib64/libgfortran.so.3.* | sed s~/../lib64/~/~` 32/libgfortran.so +ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so +rm -f libmudflap.so libmudflapth.so +echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflap.so +echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflapth.so +echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > 32/libmudflap.so +echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > 32/libmudflapth.so +%if %{build_java} +ln -sf ../`echo ../../../../lib64/libgcj.so.10.* | sed s~/../lib64/~/~` 32/libgcj.so +ln -sf ../`echo ../../../../lib64/libgcj-tools.so.10.* | sed s~/../lib64/~/~` 32/libgcj-tools.so +ln -sf ../`echo ../../../../lib64/libgij.so.10.* | sed s~/../lib64/~/~` 32/libgij.so +%endif +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libsupc++.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgfortran.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libobjc.*a 32/ +mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgomp.*a 32/ +%endif +%ifarch sparc64 ppc64 +ln -sf ../lib32/libstdc++.a 32/libstdc++.a +ln -sf lib64/libstdc++.a libstdc++.a +ln -sf ../lib32/libmudflap.a 32/libmudflap.a +ln -sf lib64/libmudflap.a libmudflap.a +ln -sf ../lib32/libmudflapth.a 32/libmudflapth.a +ln -sf lib64/libmudflapth.a libmudflapth.a +%if %{build_java} +ln -sf ../lib32/libgcj_bc.so 32/libgcj_bc.so +ln -sf lib64/libgcj_bc.so libgcj_bc.so +%endif +%if %{build_ada} +ln -sf ../lib32/adainclude 32/adainclude +ln -sf lib64/adainclude adainclude +ln -sf ../lib32/adalib 32/adalib +ln -sf lib64/adalib adalib +%endif +%else +%ifarch %{multilib_64_archs} +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libstdc++.a 32/libstdc++.a +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libmudflap.a 32/libmudflap.a +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libmudflapth.a 32/libmudflapth.a +%if %{build_java} +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgcj_bc.so 32/libgcj_bc.so +%endif +%if %{build_ada} +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/adainclude 32/adainclude +ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/adalib 32/adalib +%endif +%endif +%endif + +# Strip debug info from Fortran/ObjC/Java static libraries +strip -g `find . \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \ + -o -name libmudflap.a -o -name libmudflapth.a \ + -o -name libgcc.a -o -name libgcov.a \) -a -type f` +popd +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortran.so.3.* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.so.1.* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.so.0.* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.so.2.* + +%if %{build_ada} +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgnarl*so* +chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgnat*so* +%endif + +mv $FULLPATH/include-fixed/syslimits.h $FULLPATH/include/syslimits.h +mv $FULLPATH/include-fixed/limits.h $FULLPATH/include/limits.h +for h in `find $FULLPATH/include -name \*.h`; do + if grep -q 'It has been auto-edited by fixincludes from' $h; then + rh=`grep -A2 'It has been auto-edited by fixincludes from' $h | tail -1 | sed 's|^.*"\(.*\)".*$|\1|'` + diff -up $rh $h || : + rm -f $h + fi +done + +cat > $RPM_BUILD_ROOT%{_prefix}/bin/c89 <<"EOF" +#!/bin/sh +fl="-std=c89" +for opt; do + case "$opt" in + -ansi|-std=c89|-std=iso9899:1990) fl="";; + -std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2 + exit 1;; + esac +done +exec gcc $fl ${1+"$@"} +EOF +cat > $RPM_BUILD_ROOT%{_prefix}/bin/c99 <<"EOF" +#!/bin/sh +fl="-std=c99" +for opt; do + case "$opt" in + -std=c99|-std=iso9899:1999) fl="";; + -std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2 + exit 1;; + esac +done +exec gcc $fl ${1+"$@"} +EOF +chmod 755 $RPM_BUILD_ROOT%{_prefix}/bin/c?9 + +mkdir -p $RPM_BUILD_ROOT%{_prefix}/sbin +gcc -static -Os %{SOURCE1} -o $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade +strip $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade + +cd .. +%find_lang %{name} +%find_lang cpplib + +# Remove binaries we will not be including, so that they don't end up in +# gcc-debuginfo +rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/{libffi*,libiberty.a} +rm -f $FULLEPATH/install-tools/{mkheaders,fixincl} +rm -f $RPM_BUILD_ROOT%{_prefix}/lib/{32,64}/libiberty.a +rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libssp* +rm -f $RPM_BUILD_ROOT%{_prefix}/bin/gnative2ascii + +%ifarch %{multilib_64_archs} +# Remove libraries for the other arch on multilib arches +rm -f $RPM_BUILD_ROOT%{_prefix}/lib/lib*.so* +rm -f $RPM_BUILD_ROOT%{_prefix}/lib/lib*.a +%else +%ifarch sparcv9 ppc +rm -f $RPM_BUILD_ROOT%{_prefix}/lib64/lib*.so* +rm -f $RPM_BUILD_ROOT%{_prefix}/lib64/lib*.a +%endif +%endif + +%if %{build_java} +mkdir -p $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d +chmod 755 $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version} \ + $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d +touch $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db +%endif + +install -m644 %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/protoize.1 +echo '.so man1/protoize.1' > $RPM_BUILD_ROOT%{_mandir}/man1/unprotoize.1 +chmod 644 $RPM_BUILD_ROOT%{_mandir}/man1/unprotoize.1 + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : + +%preun +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : +fi + +%post -n cpp +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : + +%preun -n cpp +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : +fi + +%post gfortran +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : + +%preun gfortran +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : +fi + +%post java +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gcj.info.gz || : + +%preun java +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gcj.info.gz || : +fi + +%post gnat +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || : +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || : + +%preun gnat +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || : + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || : +fi + +# Because glibc Prereq's libgcc and /sbin/ldconfig +# comes from glibc, it might not exist yet when +# libgcc is installed +%post -n libgcc -p %{_prefix}/sbin/libgcc_post_upgrade + +%post -n libstdc++ -p /sbin/ldconfig + +%postun -n libstdc++ -p /sbin/ldconfig + +%post -n libobjc -p /sbin/ldconfig + +%postun -n libobjc -p /sbin/ldconfig + +%post -n libgcj +/sbin/ldconfig +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz || : + +%preun -n libgcj +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz || : +fi + +%postun -n libgcj -p /sbin/ldconfig + +%post -n libgfortran -p /sbin/ldconfig + +%postun -n libgfortran -p /sbin/ldconfig + +%post -n libgnat -p /sbin/ldconfig + +%postun -n libgnat -p /sbin/ldconfig + +%post -n libgomp +/sbin/ldconfig +/sbin/install-info \ + --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : + +%preun -n libgomp +if [ $1 = 0 ]; then + /sbin/install-info --delete \ + --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : +fi + +%postun -n libgomp -p /sbin/ldconfig + +%post -n libmudflap -p /sbin/ldconfig + +%postun -n libmudflap -p /sbin/ldconfig + +%files -f %{name}.lang +%defattr(-,root,root) +%{_prefix}/bin/cc +%{_prefix}/bin/c89 +%{_prefix}/bin/c99 +%{_prefix}/bin/gcc +%{_prefix}/bin/gcov +%{_prefix}/bin/protoize +%{_prefix}/bin/unprotoize +%ifarch ppc +%{_prefix}/bin/%{_target_platform}-gcc +%endif +%ifarch sparc64 sparcv9 +%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc +%endif +%ifarch ppc64 +%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc +%endif +%{_prefix}/bin/%{gcc_target_platform}-gcc +%{_mandir}/man1/gcc.1* +%{_mandir}/man1/gcov.1* +%{_mandir}/man1/protoize.1* +%{_mandir}/man1/unprotoize.1* +%{_infodir}/gcc* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/SYSCALLS.c.X +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stddef.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdarg.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdfix.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/varargs.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/float.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/limits.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdbool.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/iso646.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/syslimits.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/unwind.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/omp.h +%ifarch %{ix86} x86_64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/emmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/pmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/tmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ammintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/smmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/nmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/bmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/wmmintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/immintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avxintrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/x86intrin.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin-common.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cross-stdarg.h +%endif +%ifarch ia64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ia64intrin.h +%endif +%ifarch ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ppc-asm.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/altivec.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/spe.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/paired.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ppu_intrinsics.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/si2vmx.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/spu2vmx.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/vec_types.h +%endif +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/collect2 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/crt*.o +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcov.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc_eh.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc_s.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.spec +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.so +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/crt*.o +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcov.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc_eh.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc_s.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgomp.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgomp.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflapth.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/crt*.o +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcov.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_eh.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_s.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgomp.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgomp.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.so +%endif +%ifarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.so +%endif +%dir %{_prefix}/libexec/getconf +%{_prefix}/libexec/getconf/default +%doc gcc/README* rpm.doc/changelogs/gcc/ChangeLog* gcc/COPYING* + +%files -n cpp -f cpplib.lang +%defattr(-,root,root) +/lib/cpp +%{_prefix}/bin/cpp +%{_mandir}/man1/cpp.1* +%{_infodir}/cpp* +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1 + +%files -n libgcc +%defattr(-,root,root) +/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 +/%{_lib}/libgcc_s.so.1 +%{_prefix}/sbin/libgcc_post_upgrade +%doc gcc/COPYING.LIB + +%files c++ +%defattr(-,root,root) +%{_prefix}/bin/%{gcc_target_platform}-*++ +%{_prefix}/bin/g++ +%{_prefix}/bin/c++ +%{_mandir}/man1/g++.1* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1plus +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libsupc++.a +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libsupc++.a +%endif +%ifarch sparcv9 ppc %{multilib_64_archs} +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a +%endif +%ifarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a +%endif +%doc rpm.doc/changelogs/gcc/cp/ChangeLog* + +%files -n libstdc++ +%defattr(-,root,root) +%{_prefix}/%{_lib}/libstdc++.so.6* + +%files -n libstdc++-devel +%defattr(-,root,root) +%dir %{_prefix}/include/c++ +%dir %{_prefix}/include/c++/%{gcc_version} +%{_prefix}/include/c++/%{gcc_version}/[^gjos]* +%{_prefix}/include/c++/%{gcc_version}/os* +%{_prefix}/include/c++/%{gcc_version}/s[^u]* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libstdc++.a +%endif +%ifarch sparc64 ppc64 +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libstdc++.a +%endif +%ifnarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a +%endif +%ifnarch sparcv9 ppc %{multilib_64_archs} +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a +%endif +%doc rpm.doc/changelogs/libstdc++-v3/ChangeLog* libstdc++-v3/README* libstdc++-v3/doc/html/ + +%files objc +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/objc +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1obj +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libobjc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libobjc.so +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libobjc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libobjc.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libobjc.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libobjc.so +%endif +%doc rpm.doc/objc/* +%doc libobjc/THREADS* rpm.doc/changelogs/libobjc/ChangeLog* + +%files objc++ +%defattr(-,root,root) +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1objplus + +%files -n libobjc +%defattr(-,root,root) +%{_prefix}/%{_lib}/libobjc.so.2* + +%files gfortran +%defattr(-,root,root) +%{_prefix}/bin/gfortran +%{_prefix}/bin/f95 +%{_mandir}/man1/gfortran.1* +%{_infodir}/gfortran* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.f90 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.mod +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib_kinds.mod +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/f951 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortranbegin.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.so +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortranbegin.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortranbegin.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.so +%endif +%doc rpm.doc/gfortran/* + +%files -n libgfortran +%defattr(-,root,root) +%{_prefix}/%{_lib}/libgfortran.so.3* + +%if %{build_java} +%files java +%defattr(-,root,root) +%{_prefix}/bin/gcj +%{_prefix}/bin/gjavah +%{_prefix}/bin/gcjh +%{_prefix}/bin/jcf-dump +%{_mandir}/man1/gcj.1* +%{_mandir}/man1/jcf-dump.1* +%{_mandir}/man1/gjavah.1* +%{_mandir}/man1/gcjh.1* +%{_infodir}/gcj* +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jc1 +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/ecj1 +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jvgenmain +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj-tools.so +%ifarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj_bc.so +%endif +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgij.so +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj-tools.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj_bc.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgij.so +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj-tools.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj_bc.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgij.so +%endif +%doc rpm.doc/changelogs/gcc/java/ChangeLog* + +%files -n libgcj +%defattr(-,root,root) +%{_prefix}/bin/jv-convert +%{_prefix}/bin/gij +%{_prefix}/bin/gjar +%{_prefix}/bin/fastjar +%{_prefix}/bin/grepjar +%{_prefix}/bin/grmic +%{_prefix}/bin/grmid +%{_prefix}/bin/grmiregistry +%{_prefix}/bin/gtnameserv +%{_prefix}/bin/gkeytool +%{_prefix}/bin/gorbd +%{_prefix}/bin/gserialver +%{_prefix}/bin/gcj-dbtool +%if %{include_gappletviewer} +%{_prefix}/bin/gappletviewer +%{_mandir}/man1/gappletviewer.1* +%endif +%{_prefix}/bin/gjarsigner +%{_mandir}/man1/fastjar.1* +%{_mandir}/man1/grepjar.1* +%{_mandir}/man1/gjar.1* +%{_mandir}/man1/gjarsigner.1* +%{_mandir}/man1/jv-convert.1* +%{_mandir}/man1/gij.1* +%{_mandir}/man1/grmic.1* +%{_mandir}/man1/grmiregistry.1* +%{_mandir}/man1/gcj-dbtool.1* +%{_mandir}/man1/gkeytool.1* +%{_mandir}/man1/gorbd.1* +%{_mandir}/man1/grmid.1* +%{_mandir}/man1/gserialver.1* +%{_mandir}/man1/gtnameserv.1* +%{_infodir}/fastjar.info* +%{_infodir}/cp-tools.info* +%{_prefix}/%{_lib}/libgcj.so.* +%{_prefix}/%{_lib}/libgcj-tools.so.* +%{_prefix}/%{_lib}/libgcj_bc.so.* +%{_prefix}/%{_lib}/libgij.so.* +%dir %{_prefix}/%{_lib}/gcj-%{version} +%{_prefix}/%{_lib}/gcj-%{version}/libgtkpeer.so +%{_prefix}/%{_lib}/gcj-%{version}/libgjsmalsa.so +%{_prefix}/%{_lib}/gcj-%{version}/libjawt.so +%if %{include_gappletviewer} +%{_prefix}/%{_lib}/gcj-%{version}/libgcjwebplugin.so +%endif +%{_prefix}/%{_lib}/gcj-%{version}/libjvm.so +%{_prefix}/%{_lib}/gcj-%{version}/libjavamath.so +%dir %{_prefix}/share/java +%{_prefix}/share/java/[^sl]* +%{_prefix}/share/java/libgcj-%{version}.jar +%dir %{_prefix}/%{_lib}/security +%config(noreplace) %{_prefix}/%{_lib}/security/classpath.security +%{_prefix}/%{_lib}/logging.properties +%dir %{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d +%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_prefix}/%{_lib}/gcj-%{version}/classmap.db +%if %{include_gappletviewer} +%doc rpm.doc/README.libgcjwebplugin.so +%endif + +%files -n libgcj-devel +%defattr(-,root,root) +%{_prefix}/bin/addr2name.awk +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/gcj +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jawt.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jawt_md.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jni.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jni_md.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jvmpi.h +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.spec +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libgcj_bc.so +%endif +%ifarch sparc64 ppc64 +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libgcj_bc.so +%endif +%ifnarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj_bc.so +%endif +%dir %{_prefix}/include/c++ +%dir %{_prefix}/include/c++/%{gcc_version} +%{_prefix}/include/c++/%{gcc_version}/[gj]* +%{_prefix}/include/c++/%{gcc_version}/org +%{_prefix}/include/c++/%{gcc_version}/sun +%{_prefix}/%{_lib}/pkgconfig/libgcj-*.pc +%doc rpm.doc/boehm-gc/* rpm.doc/fastjar/* rpm.doc/libffi/* +%doc rpm.doc/libjava/* + +%files -n libgcj-src +%defattr(-,root,root) +%dir %{_prefix}/share/java +%{_prefix}/share/java/src*.zip +%{_prefix}/share/java/libgcj-tools-%{version}.jar +%endif + +%if %{build_ada} +%files gnat +%defattr(-,root,root) +%{_prefix}/bin/gnat* +%{_infodir}/gnat* +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/libexec/gcc +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} +%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/adalib +%endif +%ifarch %{multilib_64_archs} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/adalib +%endif +%ifarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib +%endif +%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/gnat1 +%doc rpm.doc/changelogs/gcc/ada/ChangeLog* + +%files -n libgnat +%defattr(-,root,root) +%{_prefix}/%{_lib}/libgnat-*.so +%{_prefix}/%{_lib}/libgnarl-*.so + +%files -n libgnat-devel +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adalib +%endif +%ifarch sparc64 ppc64 +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adalib +%endif +%ifnarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib +%endif +%endif + +%files -n libgomp +%defattr(-,root,root) +%{_prefix}/%{_lib}/libgomp.so.1* +%{_infodir}/libgomp.info* +%doc rpm.doc/changelogs/libgomp/ChangeLog* + +%files -n libmudflap +%defattr(-,root,root) +%{_prefix}/%{_lib}/libmudflap.so.0* +%{_prefix}/%{_lib}/libmudflapth.so.0* + +%files -n libmudflap-devel +%defattr(-,root,root) +%dir %{_prefix}/lib/gcc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mf-runtime.h +%ifarch sparcv9 ppc +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libmudflapth.a +%endif +%ifarch sparc64 ppc64 +%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libmudflapth.a +%endif +%ifnarch sparcv9 sparc64 ppc ppc64 +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.a +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.so +%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.so +%endif +%doc rpm.doc/changelogs/libmudflap/ChangeLog* + +%changelog +* Fri Jan 16 2009 Jakub Jelinek 4.4.0-0.3 +- initial 4.4 package, using newly created redhat/gcc-4_4-branch diff --git a/gcc43-aes.patch b/gcc43-aes.patch deleted file mode 100644 index 9a45d45..0000000 --- a/gcc43-aes.patch +++ /dev/null @@ -1,1351 +0,0 @@ -2008-04-04 H.J. Lu - - * config.gcc (extra_headers): Add wmmintrin.h for x86 and x86-64. - - * config/i386/cpuid.h (bit_AES): New. - (bit_PCLMUL): Likewise. - - * config/i386/i386.c (pta_flags): Add PTA_AES and PTA_PCLMUL. - (override_options): Handle PTA_AES and PTA_PCLMUL. Enable - SSE2 if AES or PCLMUL is enabled. - (ix86_builtins): Add IX86_BUILTIN_AESENC128, - IX86_BUILTIN_AESENCLAST128, IX86_BUILTIN_AESDEC128, - IX86_BUILTIN_AESDECLAST128, IX86_BUILTIN_AESIMC128, - IX86_BUILTIN_AESKEYGENASSIST128 and IX86_BUILTIN_PCLMULQDQ128. - (bdesc_sse_3arg): Add IX86_BUILTIN_PCLMULQDQ128. - (bdesc_2arg): Add IX86_BUILTIN_AESENC128, - IX86_BUILTIN_AESENCLAST128, IX86_BUILTIN_AESDEC128, - IX86_BUILTIN_AESDECLAST128 and IX86_BUILTIN_AESKEYGENASSIST128. - (bdesc_1arg): Add IX86_BUILTIN_AESIMC128. - (ix86_init_mmx_sse_builtins): Define __builtin_ia32_aesenc128, - __builtin_ia32_aesenclast128, __builtin_ia32_aesdec128, - __builtin_ia32_aesdeclast128,__builtin_ia32_aesimc128, - __builtin_ia32_aeskeygenassist128 and - __builtin_ia32_pclmulqdq128. - * config/i386/i386.c (ix86_expand_binop_imm_builtin): New. - (ix86_expand_builtin): Use it for IX86_BUILTIN_PSLLDQI128 and - IX86_BUILTIN_PSRLDQI128. Handle IX86_BUILTIN_AESKEYGENASSIST128. - - * config/i386/i386.h (TARGET_AES): New. - (TARGET_PCLMUL): Likewise. - (TARGET_CPU_CPP_BUILTINS): Handle TARGET_AES and TARGET_PCLMUL. - - * config/i386/i386.md (UNSPEC_AESENC): New. - (UNSPEC_AESENCLAST): Likewise. - (UNSPEC_AESDEC): Likewise. - (UNSPEC_AESDECLAST): Likewise. - (UNSPEC_AESIMC): Likewise. - (UNSPEC_AESKEYGENASSIST): Likewise. - (UNSPEC_PCLMULQDQ): Likewise. - - * config/i386/i386.opt (maes): New. - (mpclmul): Likewise. - - * config/i386/sse.md (aesenc): New pattern. - (aesenclast): Likewise. - (aesdec): Likewise. - (aesdeclast): Likewise. - (aesimc): Likewise. - (aeskeygenassist): Likewise. - (pclmulqdq): Likewise. - - * config/i386/wmmintrin.h: New. - - * doc/extend.texi: Document AES and PCLMUL built-in function. - - * doc/invoke.texi: Document -maes and -mpclmul. - - * g++.dg/other/i386-2.C: Include . - * g++.dg/other/i386-3.C: Likewise. - * gcc.target/i386/sse-13.c: Likewise. - * gcc.target/i386/sse-14.c: Likewise. - - * gcc.target/i386/aes-check.h: New. - * gcc.target/i386/aesdec.c: Likewise. - * gcc.target/i386/aesdeclast.c: Likewise. - * gcc.target/i386/aesenc.c: Likewise. - * gcc.target/i386/aesenclast.c: Likewise. - * gcc.target/i386/aesimc.c: Likewise. - * gcc.target/i386/aeskeygenassist.c: Likewise. - * gcc.target/i386/pclmulqdq.c: Likewise. - * gcc.target/i386/pclmul-check.h: Likewise. - - * gcc.target/i386/i386.exp (check_effective_target_aes): New. - (check_effective_target_pclmul): Likewise. - ---- gcc/config.gcc (revision 133901) -+++ gcc/config.gcc (revision 133902) -@@ -309,13 +309,15 @@ i[34567]86-*-*) - cpu_type=i386 - extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h - pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h -- nmmintrin.h bmmintrin.h mmintrin-common.h" -+ nmmintrin.h bmmintrin.h mmintrin-common.h -+ wmmintrin.h" - ;; - x86_64-*-*) - cpu_type=i386 - extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h - pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h -- nmmintrin.h bmmintrin.h mmintrin-common.h" -+ nmmintrin.h bmmintrin.h mmintrin-common.h -+ wmmintrin.h" - need_64bit_hwint=yes - ;; - ia64-*-*) ---- gcc/config/i386/i386.h (revision 133901) -+++ gcc/config/i386/i386.h (revision 133902) -@@ -395,6 +395,8 @@ extern int x86_prefetch_sse; - #define TARGET_SAHF x86_sahf - #define TARGET_RECIP x86_recip - #define TARGET_FUSED_MADD x86_fused_muladd -+#define TARGET_AES (TARGET_SSE2 && x86_aes) -+#define TARGET_PCLMUL (TARGET_SSE2 && x86_pclmul) - - #define ASSEMBLER_DIALECT (ix86_asm_dialect) - -@@ -683,6 +685,10 @@ extern const char *host_detect_local_cpu - builtin_define ("__SSE4_1__"); \ - if (TARGET_SSE4_2) \ - builtin_define ("__SSE4_2__"); \ -+ if (TARGET_AES) \ -+ builtin_define ("__AES__"); \ -+ if (TARGET_PCLMUL) \ -+ builtin_define ("__PCLMUL__"); \ - if (TARGET_SSE4A) \ - builtin_define ("__SSE4A__"); \ - if (TARGET_SSE5) \ ---- gcc/config/i386/i386.md (revision 133901) -+++ gcc/config/i386/i386.md (revision 133902) -@@ -186,6 +186,17 @@ (define_constants - (UNSPEC_FRCZ 156) - (UNSPEC_CVTPH2PS 157) - (UNSPEC_CVTPS2PH 158) -+ -+ ; For AES support -+ (UNSPEC_AESENC 159) -+ (UNSPEC_AESENCLAST 160) -+ (UNSPEC_AESDEC 161) -+ (UNSPEC_AESDECLAST 162) -+ (UNSPEC_AESIMC 163) -+ (UNSPEC_AESKEYGENASSIST 164) -+ -+ ; For PCLMUL support -+ (UNSPEC_PCLMUL 165) - ]) - - (define_constants ---- gcc/config/i386/wmmintrin.h (revision 0) -+++ gcc/config/i386/wmmintrin.h (revision 133902) -@@ -0,0 +1,123 @@ -+/* Copyright (C) 2008 Free Software Foundation, Inc. -+ -+ This file is part of GCC. -+ -+ GCC is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2, or (at your option) -+ any later version. -+ -+ GCC is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GCC; see the file COPYING. If not, write to -+ the Free Software Foundation, 59 Temple Place - Suite 330, -+ Boston, MA 02111-1307, USA. */ -+ -+/* As a special exception, if you include this header file into source -+ files compiled by GCC, this header file does not by itself cause -+ the resulting executable to be covered by the GNU General Public -+ License. This exception does not however invalidate any other -+ reasons why the executable file might be covered by the GNU General -+ Public License. */ -+ -+/* Implemented from the specification included in the Intel C++ Compiler -+ User Guide and Reference, version 10.1. */ -+ -+#ifndef _WMMINTRIN_H_INCLUDED -+#define _WMMINTRIN_H_INCLUDED -+ -+/* We need definitions from the SSE2 header file. */ -+#include -+ -+#if !defined (__AES__) && !defined (__PCLMUL__) -+# error "AES/PCLMUL instructions not enabled" -+#else -+ -+/* AES */ -+ -+#ifdef __AES__ -+/* Performs 1 round of AES decryption of the first m128i using -+ the second m128i as a round key. */ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_aesdec_si128 (__m128i __X, __m128i __Y) -+{ -+ return (__m128i) __builtin_ia32_aesdec128 ((__v2di)__X, (__v2di)__Y); -+} -+ -+/* Performs the last round of AES decryption of the first m128i -+ using the second m128i as a round key. */ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_aesdeclast_si128 (__m128i __X, __m128i __Y) -+{ -+ return (__m128i) __builtin_ia32_aesdeclast128 ((__v2di)__X, -+ (__v2di)__Y); -+} -+ -+/* Performs 1 round of AES encryption of the first m128i using -+ the second m128i as a round key. */ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_aesenc_si128 (__m128i __X, __m128i __Y) -+{ -+ return (__m128i) __builtin_ia32_aesenc128 ((__v2di)__X, (__v2di)__Y); -+} -+ -+/* Performs the last round of AES encryption of the first m128i -+ using the second m128i as a round key. */ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_aesenclast_si128 (__m128i __X, __m128i __Y) -+{ -+ return (__m128i) __builtin_ia32_aesenclast128 ((__v2di)__X, (__v2di)__Y); -+} -+ -+/* Performs the InverseMixColumn operation on the source m128i -+ and stores the result into m128i destination. */ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_aesimc_si128 (__m128i __X) -+{ -+ return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X); -+} -+ -+/* Generates a m128i round key for the input m128i AES cipher key and -+ byte round constant. The second parameter must be a compile time -+ constant. */ -+#ifdef __OPTIMIZE__ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_aeskeygenassist_si128 (__m128i __X, const int __C) -+{ -+ return (__m128i) __builtin_ia32_aeskeygenassist128 ((__v2di)__X, __C); -+} -+#else -+#define _mm_aeskeygenassist_si128(X, C) \ -+ ((__m128i) __builtin_ia32_aeskeygenassist128 ((__v2di)(__m128i)(X), \ -+ (int)(C))) -+#endif -+#endif /* __AES__ */ -+ -+/* PCLMUL */ -+ -+#ifdef __PCLMUL__ -+/* Performs carry-less integer multiplication of 64-bit halves of -+ 128-bit input operands. The third parameter inducates which 64-bit -+ haves of the input parameters v1 and v2 should be used. It must be -+ a compile time constant. */ -+#ifdef __OPTIMIZE__ -+extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) -+_mm_clmulepi64_si128 (__m128i __X, __m128i __Y, const int __I) -+{ -+ return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X, -+ (__v2di)__Y, __I); -+} -+#else -+#define _mm_clmulepi64_si128(X, Y, I) \ -+ ((__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)(__m128i)(X), \ -+ (__v2di)(__m128i)(Y), (int)(I))) -+#endif -+#endif /* __PCLMUL__ */ -+ -+#endif /* __AES__/__PCLMUL__ */ -+ -+#endif /* _WMMINTRIN_H_INCLUDED */ ---- gcc/config/i386/cpuid.h (revision 133901) -+++ gcc/config/i386/cpuid.h (revision 133902) -@@ -33,11 +33,13 @@ - - /* %ecx */ - #define bit_SSE3 (1 << 0) -+#define bit_PCLMUL (1 << 1) - #define bit_SSSE3 (1 << 9) - #define bit_CMPXCHG16B (1 << 13) - #define bit_SSE4_1 (1 << 19) - #define bit_SSE4_2 (1 << 20) - #define bit_POPCNT (1 << 23) -+#define bit_AES (1 << 25) - - /* %edx */ - #define bit_CMPXCHG8B (1 << 8) ---- gcc/config/i386/sse.md (revision 133901) -+++ gcc/config/i386/sse.md (revision 133902) -@@ -7897,3 +7897,80 @@ (define_insn "sse5_pcom_tf3" - } - [(set_attr "type" "ssecmp") - (set_attr "mode" "TI")]) -+ -+(define_insn "aesenc" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0") -+ (match_operand:V2DI 2 "nonimmediate_operand" "xm")] -+ UNSPEC_AESENC))] -+ "TARGET_AES" -+ "aesenc\t{%2, %0|%0, %2}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) -+ -+(define_insn "aesenclast" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0") -+ (match_operand:V2DI 2 "nonimmediate_operand" "xm")] -+ UNSPEC_AESENCLAST))] -+ "TARGET_AES" -+ "aesenclast\t{%2, %0|%0, %2}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) -+ -+(define_insn "aesdec" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0") -+ (match_operand:V2DI 2 "nonimmediate_operand" "xm")] -+ UNSPEC_AESDEC))] -+ "TARGET_AES" -+ "aesdec\t{%2, %0|%0, %2}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) -+ -+(define_insn "aesdeclast" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0") -+ (match_operand:V2DI 2 "nonimmediate_operand" "xm")] -+ UNSPEC_AESDECLAST))] -+ "TARGET_AES" -+ "aesdeclast\t{%2, %0|%0, %2}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) -+ -+(define_insn "aesimc" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "nonimmediate_operand" "xm")] -+ UNSPEC_AESIMC))] -+ "TARGET_AES" -+ "aesimc\t{%1, %0|%0, %1}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) -+ -+(define_insn "aeskeygenassist" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "nonimmediate_operand" "xm") -+ (match_operand:SI 2 "const_0_to_255_operand" "n")] -+ UNSPEC_AESKEYGENASSIST))] -+ "TARGET_AES" -+ "aeskeygenassist\t{%2, %1, %0|%0, %1, %2}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) -+ -+(define_insn "pclmulqdq" -+ [(set (match_operand:V2DI 0 "register_operand" "=x") -+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0") -+ (match_operand:V2DI 2 "nonimmediate_operand" "xm") -+ (match_operand:SI 3 "const_0_to_255_operand" "n")] -+ UNSPEC_PCLMUL))] -+ "TARGET_PCLMUL" -+ "pclmulqdq\t{%3, %2, %0|%0, %2, %3}" -+ [(set_attr "type" "sselog1") -+ (set_attr "prefix_extra" "1") -+ (set_attr "mode" "TI")]) ---- gcc/config/i386/i386.opt (revision 133901) -+++ gcc/config/i386/i386.opt (revision 133902) -@@ -275,3 +275,11 @@ Target Report Var(x86_fused_muladd) Init - Enable automatic generation of fused floating point multiply-add instructions - if the ISA supports such instructions. The -mfused-madd option is on by - default. -+ -+maes -+Target Report RejectNegative Var(x86_aes) -+Support AES built-in functions and code generation -+ -+mpclmul -+Target Report RejectNegative Var(x86_pclmul) -+Support PCLMUL built-in functions and code generation ---- gcc/config/i386/i386.c (revision 133901) -+++ gcc/config/i386/i386.c (revision 133902) -@@ -2077,7 +2077,9 @@ override_options (void) - PTA_NO_SAHF = 1 << 13, - PTA_SSE4_1 = 1 << 14, - PTA_SSE4_2 = 1 << 15, -- PTA_SSE5 = 1 << 16 -+ PTA_SSE5 = 1 << 16, -+ PTA_AES = 1 << 17, -+ PTA_PCLMUL = 1 << 18 - }; - - static struct pta -@@ -2384,6 +2386,10 @@ override_options (void) - x86_prefetch_sse = true; - if (!(TARGET_64BIT && (processor_alias_table[i].flags & PTA_NO_SAHF))) - x86_sahf = true; -+ if (processor_alias_table[i].flags & PTA_AES) -+ x86_aes = true; -+ if (processor_alias_table[i].flags & PTA_PCLMUL) -+ x86_pclmul = true; - - break; - } -@@ -2427,6 +2433,14 @@ override_options (void) - if (i == pta_size) - error ("bad value (%s) for -mtune= switch", ix86_tune_string); - -+ /* Enable SSE2 if AES or PCLMUL is enabled. */ -+ if ((x86_aes || x86_pclmul) -+ && !(ix86_isa_flags_explicit & OPTION_MASK_ISA_SSE2)) -+ { -+ ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET; -+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET; -+ } -+ - ix86_tune_mask = 1u << ix86_tune; - for (i = 0; i < X86_TUNE_LAST; ++i) - ix86_tune_features[i] &= ix86_tune_mask; -@@ -17545,6 +17559,17 @@ enum ix86_builtins - - IX86_BUILTIN_PCMPGTQ, - -+ /* AES instructions */ -+ IX86_BUILTIN_AESENC128, -+ IX86_BUILTIN_AESENCLAST128, -+ IX86_BUILTIN_AESDEC128, -+ IX86_BUILTIN_AESDECLAST128, -+ IX86_BUILTIN_AESIMC128, -+ IX86_BUILTIN_AESKEYGENASSIST128, -+ -+ /* PCLMUL instruction */ -+ IX86_BUILTIN_PCLMULQDQ128, -+ - /* TFmode support builtins. */ - IX86_BUILTIN_INFQ, - IX86_BUILTIN_FABSQ, -@@ -17900,6 +17925,9 @@ static const struct builtin_description - { OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_pblendw, "__builtin_ia32_pblendw128", IX86_BUILTIN_PBLENDW128, UNKNOWN, 0 }, - { OPTION_MASK_ISA_ROUND, CODE_FOR_sse4_1_roundsd, 0, IX86_BUILTIN_ROUNDSD, UNKNOWN, 0 }, - { OPTION_MASK_ISA_ROUND, CODE_FOR_sse4_1_roundss, 0, IX86_BUILTIN_ROUNDSS, UNKNOWN, 0 }, -+ -+ /* PCLMUL */ -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_pclmulqdq, 0, IX86_BUILTIN_PCLMULQDQ128, UNKNOWN, 0 }, - }; - - static const struct builtin_description bdesc_2arg[] = -@@ -18210,6 +18238,13 @@ static const struct builtin_description - - /* SSE4.2 */ - { OPTION_MASK_ISA_SSE4_2, CODE_FOR_sse4_2_gtv2di3, "__builtin_ia32_pcmpgtq", IX86_BUILTIN_PCMPGTQ, UNKNOWN, 0 }, -+ -+ /* AES */ -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_aesenc, 0, IX86_BUILTIN_AESENC128, UNKNOWN, 0 }, -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_aesenclast, 0, IX86_BUILTIN_AESENCLAST128, UNKNOWN, 0 }, -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_aesdec, 0, IX86_BUILTIN_AESDEC128, UNKNOWN, 0 }, -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_aesdeclast, 0, IX86_BUILTIN_AESDECLAST128, UNKNOWN, 0 }, -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_aeskeygenassist, 0, IX86_BUILTIN_AESKEYGENASSIST128, UNKNOWN, 0 }, - }; - - static const struct builtin_description bdesc_1arg[] = -@@ -18285,6 +18320,9 @@ static const struct builtin_description - /* Fake 1 arg builtins with a constant smaller than 8 bits as the 2nd arg. */ - { OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_roundpd, 0, IX86_BUILTIN_ROUNDPD, UNKNOWN, 0 }, - { OPTION_MASK_ISA_SSE4_1, CODE_FOR_sse4_1_roundps, 0, IX86_BUILTIN_ROUNDPS, UNKNOWN, 0 }, -+ -+ /* AES */ -+ { OPTION_MASK_ISA_SSE2, CODE_FOR_aesimc, 0, IX86_BUILTIN_AESIMC128, UNKNOWN, 0 }, - }; - - /* SSE5 */ -@@ -19518,6 +19556,25 @@ ix86_init_mmx_sse_builtins (void) - NULL_TREE); - def_builtin_const (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_64BIT, "__builtin_ia32_crc32di", ftype, IX86_BUILTIN_CRC32DI); - -+ /* AES */ -+ if (TARGET_AES) -+ { -+ /* Define AES built-in functions only if AES is enabled. */ -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_aesenc128", v2di_ftype_v2di_v2di, IX86_BUILTIN_AESENC128); -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_aesenclast128", v2di_ftype_v2di_v2di, IX86_BUILTIN_AESENCLAST128); -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_aesdec128", v2di_ftype_v2di_v2di, IX86_BUILTIN_AESDEC128); -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_aesdeclast128", v2di_ftype_v2di_v2di, IX86_BUILTIN_AESDECLAST128); -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_aesimc128", v2di_ftype_v2di, IX86_BUILTIN_AESIMC128); -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_aeskeygenassist128", v2di_ftype_v2di_int, IX86_BUILTIN_AESKEYGENASSIST128); -+ } -+ -+ /* PCLMUL */ -+ if (TARGET_PCLMUL) -+ { -+ /* Define PCLMUL built-in function only if PCLMUL is enabled. */ -+ def_builtin_const (OPTION_MASK_ISA_SSE2, "__builtin_ia32_pclmulqdq128", v2di_ftype_v2di_v2di_int, IX86_BUILTIN_PCLMULQDQ128); -+ } -+ - /* AMDFAM10 SSE4A New built-ins */ - def_builtin (OPTION_MASK_ISA_SSE4A, "__builtin_ia32_movntsd", void_ftype_pdouble_v2df, IX86_BUILTIN_MOVNTSD); - def_builtin (OPTION_MASK_ISA_SSE4A, "__builtin_ia32_movntss", void_ftype_pfloat_v4sf, IX86_BUILTIN_MOVNTSS); -@@ -19793,6 +19850,44 @@ ix86_expand_crc32 (enum insn_code icode, - return target; - } - -+/* Subroutine of ix86_expand_builtin to take care of binop insns -+ with an immediate. */ -+ -+static rtx -+ix86_expand_binop_imm_builtin (enum insn_code icode, tree exp, -+ rtx target) -+{ -+ rtx pat; -+ tree arg0 = CALL_EXPR_ARG (exp, 0); -+ tree arg1 = CALL_EXPR_ARG (exp, 1); -+ rtx op0 = expand_normal (arg0); -+ rtx op1 = expand_normal (arg1); -+ enum machine_mode tmode = insn_data[icode].operand[0].mode; -+ enum machine_mode mode0 = insn_data[icode].operand[1].mode; -+ enum machine_mode mode1 = insn_data[icode].operand[2].mode; -+ -+ if (! (*insn_data[icode].operand[1].predicate) (op0, mode1)) -+ { -+ op0 = copy_to_reg (op0); -+ op0 = simplify_gen_subreg (mode0, op0, GET_MODE (op0), 0); -+ } -+ -+ if (! (*insn_data[icode].operand[2].predicate) (op1, mode1)) -+ { -+ error ("the last operand must be an immediate"); -+ return const0_rtx; -+ } -+ -+ target = gen_reg_rtx (V2DImode); -+ pat = GEN_FCN (icode) (simplify_gen_subreg (tmode, target, -+ V2DImode, 0), -+ op0, op1); -+ if (! pat) -+ return 0; -+ emit_insn (pat); -+ return target; -+} -+ - /* Subroutine of ix86_expand_builtin to take care of binop insns. */ - - static rtx -@@ -20889,34 +20984,18 @@ ix86_expand_builtin (tree exp, rtx targe - return target; - - case IX86_BUILTIN_PSLLDQI128: -+ return ix86_expand_binop_imm_builtin (CODE_FOR_sse2_ashlti3, -+ exp, target); -+ break; -+ - case IX86_BUILTIN_PSRLDQI128: -- icode = (fcode == IX86_BUILTIN_PSLLDQI128 ? CODE_FOR_sse2_ashlti3 -- : CODE_FOR_sse2_lshrti3); -- arg0 = CALL_EXPR_ARG (exp, 0); -- arg1 = CALL_EXPR_ARG (exp, 1); -- op0 = expand_normal (arg0); -- op1 = expand_normal (arg1); -- tmode = insn_data[icode].operand[0].mode; -- mode1 = insn_data[icode].operand[1].mode; -- mode2 = insn_data[icode].operand[2].mode; -+ return ix86_expand_binop_imm_builtin (CODE_FOR_sse2_lshrti3, -+ exp, target); -+ break; - -- if (! (*insn_data[icode].operand[1].predicate) (op0, mode1)) -- { -- op0 = copy_to_reg (op0); -- op0 = simplify_gen_subreg (mode1, op0, GET_MODE (op0), 0); -- } -- if (! (*insn_data[icode].operand[2].predicate) (op1, mode2)) -- { -- error ("shift must be an immediate"); -- return const0_rtx; -- } -- target = gen_reg_rtx (V2DImode); -- pat = GEN_FCN (icode) (simplify_gen_subreg (tmode, target, V2DImode, 0), -- op0, op1); -- if (! pat) -- return 0; -- emit_insn (pat); -- return target; -+ case IX86_BUILTIN_AESKEYGENASSIST128: -+ return ix86_expand_binop_imm_builtin (CODE_FOR_aeskeygenassist, -+ exp, target); - - case IX86_BUILTIN_FEMMS: - emit_insn (gen_mmx_femms ()); ---- gcc/doc/extend.texi (revision 133901) -+++ gcc/doc/extend.texi (revision 133902) -@@ -8013,6 +8013,27 @@ depending on the size of @code{unsigned - Generates the @code{popcntq} machine instruction. - @end table - -+The following built-in functions are available when @option{-maes} is -+used. All of them generate the machine instruction that is part of the -+name. -+ -+@smallexample -+v2di __builtin_ia32_aesenc128 (v2di, v2di) -+v2di __builtin_ia32_aesenclast128 (v2di, v2di) -+v2di __builtin_ia32_aesdec128 (v2di, v2di) -+v2di __builtin_ia32_aesdeclast128 (v2di, v2di) -+v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) -+v2di __builtin_ia32_aesimc128 (v2di) -+@end smallexample -+ -+The following built-in function is available when @option{-mpclmul} is -+used. -+ -+@table @code -+@item v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int) -+Generates the @code{pclmulqdq} machine instruction. -+@end table -+ - The following built-in functions are available when @option{-msse4a} is used. - All of them generate the machine instruction that is part of the name. - ---- gcc/doc/invoke.texi (revision 133901) -+++ gcc/doc/invoke.texi (revision 133902) -@@ -551,6 +551,7 @@ Objective-C and Objective-C++ Dialects}. - -mno-wide-multiply -mrtd -malign-double @gol - -mpreferred-stack-boundary=@var{num} -mcld -mcx16 -msahf -mrecip @gol - -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 @gol -+-maes -mpclmul @gol - -msse4a -m3dnow -mpopcnt -mabm -msse5 @gol - -mthreads -mno-align-stringops -minline-all-stringops @gol - -mpush-args -maccumulate-outgoing-args -m128bit-long-double @gol -@@ -10732,6 +10733,10 @@ preferred alignment to @option{-mpreferr - @itemx -mno-sse4.2 - @item -msse4 - @itemx -mno-sse4 -+@itemx -maes -+@itemx -mno-aes -+@itemx -mpclmul -+@itemx -mno-pclmul - @item -msse4a - @item -mno-sse4a - @item -msse5 -@@ -10749,8 +10754,8 @@ preferred alignment to @option{-mpreferr - @opindex m3dnow - @opindex mno-3dnow - These switches enable or disable the use of instructions in the MMX, --SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4A, SSE5, ABM or 3DNow!@: extended --instruction sets. -+SSE, SSE2, SSE3, SSSE3, SSE4.1, AES, PCLMUL, SSE4A, SSE5, ABM or -+3DNow!@: extended instruction sets. - These extensions are also available as built-in functions: see - @ref{X86 Built-in Functions}, for details of the functions enabled and - disabled by these switches. ---- gcc/testsuite/gcc.target/i386/sse-14.c (revision 133901) -+++ gcc/testsuite/gcc.target/i386/sse-14.c (revision 133902) -@@ -1,14 +1,15 @@ - /* { dg-do compile } */ --/* { dg-options "-O0 -march=k8 -m3dnow -msse4 -msse5" } */ -+/* { dg-options "-O0 -march=k8 -m3dnow -msse4 -msse5 -maes -mpclmul" } */ - - /* Test that the intrinsics compile without optimization. All of them are -- defined as inline functions in {,x,e,p,t,s,a,b}mmintrin.h and mm3dnow.h -+ defined as inline functions in {,x,e,p,t,s,w,a,b}mmintrin.h and mm3dnow.h - that reference the proper builtin functions. Defining away "extern" and - "__inline" results in all of them being compiled as proper functions. */ - - #define extern - #define __inline - -+#include - #include - #include - #include -@@ -44,6 +45,10 @@ - test_1x (_mm_extracti_si64, __m128i, __m128i, 1, 1) - test_2x (_mm_inserti_si64, __m128i, __m128i, __m128i, 1, 1) - -+/* wmmintrin.h */ -+test_1 (_mm_aeskeygenassist_si128, __m128i, __m128i, 1) -+test_2 (_mm_clmulepi64_si128, __m128i, __m128i, __m128i, 1) -+ - /* smmintrin.h */ - test_2 (_mm_blend_epi16, __m128i, __m128i, __m128i, 1) - test_2 (_mm_blend_ps, __m128, __m128, __m128, 1) ---- gcc/testsuite/gcc.target/i386/i386.exp (revision 133901) -+++ gcc/testsuite/gcc.target/i386/i386.exp (revision 133902) -@@ -51,6 +51,34 @@ proc check_effective_target_sse4 { } { - } "-O2 -msse4.1" ] - } - -+# Return 1 if aes instructions can be compiled. -+proc check_effective_target_aes { } { -+ return [check_no_compiler_messages aes object { -+ typedef long long __m128i __attribute__ ((__vector_size__ (16))); -+ typedef long long __v2di __attribute__ ((__vector_size__ (16))); -+ -+ __m128i _mm_aesimc_si128 (__m128i __X) -+ { -+ return (__m128i) __builtin_ia32_aesimc128 ((__v2di)__X); -+ } -+ } "-O2 -maes" ] -+} -+ -+# Return 1 if pclmul instructions can be compiled. -+proc check_effective_target_pclmul { } { -+ return [check_no_compiler_messages pclmul object { -+ typedef long long __m128i __attribute__ ((__vector_size__ (16))); -+ typedef long long __v2di __attribute__ ((__vector_size__ (16))); -+ -+ __m128i pclmulqdq_test (__m128i __X, __m128i __Y) -+ { -+ return (__m128i) __builtin_ia32_pclmulqdq128 ((__v2di)__X, -+ (__v2di)__Y, -+ 1); -+ } -+ } "-O2 -mpclmul" ] -+} -+ - # Return 1 if sse4a instructions can be compiled. - proc check_effective_target_sse4a { } { - return [check_no_compiler_messages sse4a object { ---- gcc/testsuite/gcc.target/i386/aesdeclast.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/aesdeclast.c (revision 133902) -@@ -0,0 +1,69 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target aes } */ -+/* { dg-options "-O2 -maes" } */ -+ -+#include -+#include -+ -+#include "aes-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+ -+static __m128i src1[NUM]; -+static __m128i src2[NUM]; -+static __m128i edst[NUM]; -+ -+static __m128i resdst[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one set of -+ input/output vectors). */ -+ -+static void -+init_data (__m128i *s1, __m128i *s2, __m128i *d) -+{ -+ int i; -+ -+ for (i = 0; i < NUM; i++) -+ { -+ s1[i] = _mm_setr_epi32 (0x5d53475d, 0x63746f72, -+ 0x73745665, 0x7b5b5465); -+ s2[i] = _mm_setr_epi32 (0x726f6e5d, 0x5b477565, -+ 0x68617929, 0x48692853); -+ d[i] = _mm_setr_epi32 (0x72a593d0, 0xd410637b, -+ 0x6b317f95, 0xc5a391ef); -+ } -+} -+ -+static void -+aes_test (void) -+{ -+ int i; -+ -+ init_data (src1, src2, edst); -+ -+ for (i = 0; i < NUM; i += 16) -+ { -+ resdst[i] = _mm_aesdeclast_si128 (src1[i], src2[i]); -+ resdst[i + 1] = _mm_aesdeclast_si128 (src1[i + 1], src2[i + 1]); -+ resdst[i + 2] = _mm_aesdeclast_si128 (src1[i + 2], src2[i + 2]); -+ resdst[i + 3] = _mm_aesdeclast_si128 (src1[i + 3], src2[i + 3]); -+ resdst[i + 4] = _mm_aesdeclast_si128 (src1[i + 4], src2[i + 4]); -+ resdst[i + 5] = _mm_aesdeclast_si128 (src1[i + 5], src2[i + 5]); -+ resdst[i + 6] = _mm_aesdeclast_si128 (src1[i + 6], src2[i + 6]); -+ resdst[i + 7] = _mm_aesdeclast_si128 (src1[i + 7], src2[i + 7]); -+ resdst[i + 8] = _mm_aesdeclast_si128 (src1[i + 8], src2[i + 8]); -+ resdst[i + 9] = _mm_aesdeclast_si128 (src1[i + 9], src2[i + 9]); -+ resdst[i + 10] = _mm_aesdeclast_si128 (src1[i + 10], src2[i + 10]); -+ resdst[i + 11] = _mm_aesdeclast_si128 (src1[i + 11], src2[i + 11]); -+ resdst[i + 12] = _mm_aesdeclast_si128 (src1[i + 12], src2[i + 12]); -+ resdst[i + 13] = _mm_aesdeclast_si128 (src1[i + 13], src2[i + 13]); -+ resdst[i + 14] = _mm_aesdeclast_si128 (src1[i + 14], src2[i + 14]); -+ resdst[i + 15] = _mm_aesdeclast_si128 (src1[i + 15], src2[i + 15]); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ if (memcmp (edst + i, resdst + i, sizeof (__m128i))) -+ abort (); -+} ---- gcc/testsuite/gcc.target/i386/pclmulqdq.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/pclmulqdq.c (revision 133902) -@@ -0,0 +1,87 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target pclmul } */ -+/* { dg-options "-O2 -mpclmul" } */ -+ -+#include -+#include -+ -+#include "pclmul-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+ -+static __m128i s1[NUM]; -+static __m128i s2[NUM]; -+/* We need this array to generate mem form of inst */ -+static __m128i s2m[NUM]; -+ -+static __m128i e_00[NUM]; -+static __m128i e_01[NUM]; -+static __m128i e_10[NUM]; -+static __m128i e_11[NUM]; -+ -+static __m128i d_00[NUM]; -+static __m128i d_01[NUM]; -+static __m128i d_10[NUM]; -+static __m128i d_11[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one set -+ of input/output vectors). */ -+static void -+init_data (__m128i *ls1, __m128i *ls2, __m128i *le_00, __m128i *le_01, -+ __m128i *le_10, __m128i *le_11) -+{ -+ int i; -+ -+ for (i = 0; i < NUM; i++) -+ { -+ ls1[i] = _mm_set_epi32 (0x7B5B5465, 0x73745665, -+ 0x63746F72, 0x5D53475D); -+ ls2[i] = _mm_set_epi32 (0x48692853, 0x68617929, -+ 0x5B477565, 0x726F6E5D); -+ s2m[i] = _mm_set_epi32 (0x48692853, 0x68617929, -+ 0x5B477565, 0x726F6E5D); -+ le_00[i] = _mm_set_epi32 (0x1D4D84C8, 0x5C3440C0, -+ 0x929633D5, 0xD36F0451); -+ le_01[i] = _mm_set_epi32 (0x1A2BF6DB, 0x3A30862F, -+ 0xBABF262D, 0xF4B7D5C9); -+ le_10[i] = _mm_set_epi32 (0x1BD17C8D, 0x556AB5A1, -+ 0x7FA540AC, 0x2A281315); -+ le_11[i] = _mm_set_epi32 (0x1D1E1F2C, 0x592E7C45, -+ 0xD66EE03E, 0x410FD4ED); -+ } -+} -+ -+static void -+pclmul_test (void) -+{ -+ int i; -+ -+ init_data (s1, s2, e_00, e_01, e_10, e_11); -+ -+ for (i = 0; i < NUM; i += 2) -+ { -+ d_00[i] = _mm_clmulepi64_si128 (s1[i], s2m[i], 0x00); -+ d_01[i] = _mm_clmulepi64_si128 (s1[i], s2[i], 0x01); -+ d_10[i] = _mm_clmulepi64_si128 (s1[i], s2[i], 0x10); -+ d_11[i] = _mm_clmulepi64_si128 (s1[i], s2[i], 0x11); -+ -+ d_11[i + 1] = _mm_clmulepi64_si128 (s1[i + 1], s2[i + 1], 0x11); -+ d_00[i + 1] = _mm_clmulepi64_si128 (s1[i + 1], s2[i + 1], 0x00); -+ d_10[i + 1] = _mm_clmulepi64_si128 (s1[i + 1], s2m[i + 1], 0x10); -+ d_01[i + 1] = _mm_clmulepi64_si128 (s1[i + 1], s2[i + 1], 0x01); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ { -+ if (memcmp (d_00 + i, e_00 + i, sizeof (__m128i))) -+ abort (); -+ if (memcmp (d_01 + i, e_01 + i, sizeof (__m128i))) -+ abort (); -+ if (memcmp (d_10 + i, e_10 + i, sizeof (__m128i))) -+ abort (); -+ if (memcmp(d_11 + i, e_11 + i, sizeof (__m128i))) -+ abort (); -+ } -+} ---- gcc/testsuite/gcc.target/i386/aes-check.h (revision 0) -+++ gcc/testsuite/gcc.target/i386/aes-check.h (revision 133902) -@@ -0,0 +1,30 @@ -+#include -+#include -+ -+#include "cpuid.h" -+ -+static void aes_test (void); -+ -+int -+main () -+{ -+ unsigned int eax, ebx, ecx, edx; -+ -+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) -+ return 0; -+ -+ /* Run AES test only if host has AES support. */ -+ if (ecx & bit_AES) -+ { -+ aes_test (); -+#ifdef DEBUG -+ printf ("PASSED\n"); -+#endif -+ } -+#ifdef DEBUG -+ else -+ printf ("SKIPPED\n"); -+#endif -+ -+ return 0; -+} ---- gcc/testsuite/gcc.target/i386/pclmul-check.h (revision 0) -+++ gcc/testsuite/gcc.target/i386/pclmul-check.h (revision 133902) -@@ -0,0 +1,30 @@ -+#include -+#include -+ -+#include "cpuid.h" -+ -+static void pclmul_test (void); -+ -+int -+main () -+{ -+ unsigned int eax, ebx, ecx, edx; -+ -+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) -+ return 0; -+ -+ /* Run PCLMULQDQ test only if host has PCLMULQDQ support. */ -+ if (ecx & bit_PCLMUL) -+ { -+ pclmul_test (); -+#ifdef DEBUG -+ printf ("PASSED\n"); -+#endif -+ } -+#ifdef DEBUG -+ else -+ printf ("SKIPPED\n"); -+#endif -+ -+ return 0; -+} ---- gcc/testsuite/gcc.target/i386/aeskeygenassist.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/aeskeygenassist.c (revision 133902) -@@ -0,0 +1,66 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target aes } */ -+/* { dg-options "-O2 -maes" } */ -+ -+#include -+#include -+ -+#include "aes-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+#define IMM8 1 -+ -+static __m128i src1[NUM]; -+static __m128i edst[NUM]; -+ -+static __m128i resdst[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one set -+ of input/output vectors). */ -+ -+static void -+init_data (__m128i *s1, __m128i *d) -+{ -+ int i; -+ for (i = 0; i < NUM; i++) -+ { -+ s1[i] = _mm_setr_epi32 (0x16157e2b, 0xa6d2ae28, -+ 0x8815f7ab, 0x3c4fcf09); -+ d[i] = _mm_setr_epi32 (0x24b5e434, 0x3424b5e5, -+ 0xeb848a01, 0x01eb848b); -+ } -+} -+ -+static void -+aes_test (void) -+{ -+ int i; -+ -+ init_data (src1, edst); -+ -+ for (i = 0; i < NUM; i += 16) -+ { -+ resdst[i] = _mm_aeskeygenassist_si128 (src1[i], IMM8); -+ resdst[i + 1] = _mm_aeskeygenassist_si128 (src1[i + 1], IMM8); -+ resdst[i + 2] = _mm_aeskeygenassist_si128 (src1[i + 2], IMM8); -+ resdst[i + 3] = _mm_aeskeygenassist_si128 (src1[i + 3], IMM8); -+ resdst[i + 4] = _mm_aeskeygenassist_si128 (src1[i + 4], IMM8); -+ resdst[i + 5] = _mm_aeskeygenassist_si128 (src1[i + 5], IMM8); -+ resdst[i + 6] = _mm_aeskeygenassist_si128 (src1[i + 6], IMM8); -+ resdst[i + 7] = _mm_aeskeygenassist_si128 (src1[i + 7], IMM8); -+ resdst[i + 8] = _mm_aeskeygenassist_si128 (src1[i + 8], IMM8); -+ resdst[i + 9] = _mm_aeskeygenassist_si128 (src1[i + 9], IMM8); -+ resdst[i + 10] = _mm_aeskeygenassist_si128 (src1[i + 10], IMM8); -+ resdst[i + 11] = _mm_aeskeygenassist_si128 (src1[i + 11], IMM8); -+ resdst[i + 12] = _mm_aeskeygenassist_si128 (src1[i + 12], IMM8); -+ resdst[i + 13] = _mm_aeskeygenassist_si128 (src1[i + 13], IMM8); -+ resdst[i + 14] = _mm_aeskeygenassist_si128 (src1[i + 14], IMM8); -+ resdst[i + 15] = _mm_aeskeygenassist_si128 (src1[i + 15], IMM8); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ if (memcmp(edst + i, resdst + i, sizeof (__m128i))) -+ abort (); -+} ---- gcc/testsuite/gcc.target/i386/aesenclast.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/aesenclast.c (revision 133902) -@@ -0,0 +1,68 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target aes } */ -+/* { dg-options "-O2 -maes" } */ -+ -+#include -+#include -+ -+#include "aes-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+ -+static __m128i src1[NUM]; -+static __m128i src2[NUM]; -+static __m128i edst[NUM]; -+ -+static __m128i resdst[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one -+ set of input/output vectors). */ -+ -+static void -+init_data (__m128i *s1, __m128i *s2, __m128i *d) -+{ -+ int i; -+ for (i = 0; i < NUM; i++) -+ { -+ s1[i] = _mm_setr_epi32 (0x5d53475d, 0x63746f72, -+ 0x73745665, 0x7b5b5465); -+ s2[i] = _mm_setr_epi32 (0x726f6e5d, 0x5b477565, -+ 0x68617929, 0x48692853); -+ d[i] = _mm_setr_epi32 (0x53fdc611, 0x177ec425, -+ 0x938c5964, 0xc7fb881e); -+ } -+} -+ -+static void -+aes_test (void) -+{ -+ int i; -+ -+ init_data (src1, src2, edst); -+ -+ for (i = 0; i < NUM; i += 16) -+ { -+ resdst[i] = _mm_aesenclast_si128 (src1[i], src2[i]); -+ resdst[i + 1] = _mm_aesenclast_si128 (src1[i + 1], src2[i + 1]); -+ resdst[i + 2] = _mm_aesenclast_si128 (src1[i + 2], src2[i + 2]); -+ resdst[i + 3] = _mm_aesenclast_si128 (src1[i + 3], src2[i + 3]); -+ resdst[i + 4] = _mm_aesenclast_si128 (src1[i + 4], src2[i + 4]); -+ resdst[i + 5] = _mm_aesenclast_si128 (src1[i + 5], src2[i + 5]); -+ resdst[i + 6] = _mm_aesenclast_si128 (src1[i + 6], src2[i + 6]); -+ resdst[i + 7] = _mm_aesenclast_si128 (src1[i + 7], src2[i + 7]); -+ resdst[i + 8] = _mm_aesenclast_si128 (src1[i + 8], src2[i + 8]); -+ resdst[i + 9] = _mm_aesenclast_si128 (src1[i + 9], src2[i + 9]); -+ resdst[i + 10] = _mm_aesenclast_si128 (src1[i + 10], src2[i + 10]); -+ resdst[i + 11] = _mm_aesenclast_si128 (src1[i + 11], src2[i + 11]); -+ resdst[i + 12] = _mm_aesenclast_si128 (src1[i + 12], src2[i + 12]); -+ resdst[i + 13] = _mm_aesenclast_si128 (src1[i + 13], src2[i + 13]); -+ resdst[i + 14] = _mm_aesenclast_si128 (src1[i + 14], src2[i + 14]); -+ resdst[i + 15] = _mm_aesenclast_si128 (src1[i + 15], src2[i + 15]); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ if (memcmp(edst + i, resdst + i, sizeof (__m128i))) -+ abort (); -+} ---- gcc/testsuite/gcc.target/i386/aesimc.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/aesimc.c (revision 133902) -@@ -0,0 +1,66 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target aes } */ -+/* { dg-options "-O2 -maes" } */ -+ -+#include -+#include -+ -+#include "aes-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+ -+static __m128i src1[NUM]; -+static __m128i edst[NUM]; -+ -+static __m128i resdst[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one set -+ of input/output vectors). */ -+ -+static void -+init_data (__m128i *s1, __m128i *d) -+{ -+ int i; -+ -+ for (i = 0; i < NUM; i++) -+ { -+ s1[i] = _mm_setr_epi32 (0x5d53475d, 0x63746f72, -+ 0x73745665, 0x7b5b5465); -+ d[i] = _mm_setr_epi32 (0x81c3b3e5, 0x2b18330a, -+ 0x44b109c8, 0x627a6f66); -+ } -+} -+ -+static void -+aes_test (void) -+{ -+ int i; -+ -+ init_data (src1, edst); -+ -+ for (i = 0; i < NUM; i += 16) -+ { -+ resdst[i] = _mm_aesimc_si128 (src1[i]); -+ resdst[i + 1] = _mm_aesimc_si128 (src1[i + 1]); -+ resdst[i + 2] = _mm_aesimc_si128 (src1[i + 2]); -+ resdst[i + 3] = _mm_aesimc_si128 (src1[i + 3]); -+ resdst[i + 4] = _mm_aesimc_si128 (src1[i + 4]); -+ resdst[i + 5] = _mm_aesimc_si128 (src1[i + 5]); -+ resdst[i + 6] = _mm_aesimc_si128 (src1[i + 6]); -+ resdst[i + 7] = _mm_aesimc_si128 (src1[i + 7]); -+ resdst[i + 8] = _mm_aesimc_si128 (src1[i + 8]); -+ resdst[i + 9] = _mm_aesimc_si128 (src1[i + 9]); -+ resdst[i + 10] = _mm_aesimc_si128 (src1[i + 10]); -+ resdst[i + 11] = _mm_aesimc_si128 (src1[i + 11]); -+ resdst[i + 12] = _mm_aesimc_si128 (src1[i + 12]); -+ resdst[i + 13] = _mm_aesimc_si128 (src1[i + 13]); -+ resdst[i + 14] = _mm_aesimc_si128 (src1[i + 14]); -+ resdst[i + 15] = _mm_aesimc_si128 (src1[i + 15]); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ if (memcmp(edst + i, resdst + i, sizeof (__m128i))) -+ abort (); -+} ---- gcc/testsuite/gcc.target/i386/aesenc.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/aesenc.c (revision 133902) -@@ -0,0 +1,68 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target aes } */ -+/* { dg-options "-O2 -maes" } */ -+ -+#include -+#include -+ -+#include "aes-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+ -+static __m128i src1[NUM]; -+static __m128i src2[NUM]; -+static __m128i edst[NUM]; -+ -+static __m128i resdst[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one set -+ of input/output vectors). */ -+ -+static void -+init_data (__m128i *s1, __m128i *s2, __m128i *d) -+{ -+ int i; -+ for (i = 0; i < NUM; i++) -+ { -+ s1[i] = _mm_setr_epi32 (0x5d53475d, 0x63746f72, -+ 0x73745665, 0x7b5b5465); -+ s2[i] = _mm_setr_epi32 (0x726f6e5d, 0x5b477565, -+ 0x68617929, 0x48692853); -+ d[i] = _mm_setr_epi32 (0xded7e595, 0x8b104b58, -+ 0x9fdba3c5, 0xa8311c2f); -+ } -+} -+ -+static void -+aes_test (void) -+{ -+ int i; -+ -+ init_data (src1, src2, edst); -+ -+ for (i = 0; i < NUM; i += 16) -+ { -+ resdst[i] = _mm_aesenc_si128 (src1[i], src2[i]); -+ resdst[i + 1] = _mm_aesenc_si128 (src1[i + 1], src2[i + 1]); -+ resdst[i + 2] = _mm_aesenc_si128 (src1[i + 2], src2[i + 2]); -+ resdst[i + 3] = _mm_aesenc_si128 (src1[i + 3], src2[i + 3]); -+ resdst[i + 4] = _mm_aesenc_si128 (src1[i + 4], src2[i + 4]); -+ resdst[i + 5] = _mm_aesenc_si128 (src1[i + 5], src2[i + 5]); -+ resdst[i + 6] = _mm_aesenc_si128 (src1[i + 6], src2[i + 6]); -+ resdst[i + 7] = _mm_aesenc_si128 (src1[i + 7], src2[i + 7]); -+ resdst[i + 8] = _mm_aesenc_si128 (src1[i + 8], src2[i + 8]); -+ resdst[i + 9] = _mm_aesenc_si128 (src1[i + 9], src2[i + 9]); -+ resdst[i + 10] = _mm_aesenc_si128 (src1[i + 10], src2[i + 10]); -+ resdst[i + 11] = _mm_aesenc_si128 (src1[i + 11], src2[i + 11]); -+ resdst[i + 12] = _mm_aesenc_si128 (src1[i + 12], src2[i + 12]); -+ resdst[i + 13] = _mm_aesenc_si128 (src1[i + 13], src2[i + 13]); -+ resdst[i + 14] = _mm_aesenc_si128 (src1[i + 14], src2[i + 14]); -+ resdst[i + 15] = _mm_aesenc_si128 (src1[i + 15], src2[i + 15]); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ if (memcmp (edst + i, resdst + i, sizeof (__m128i))) -+ abort (); -+} ---- gcc/testsuite/gcc.target/i386/sse-13.c (revision 133901) -+++ gcc/testsuite/gcc.target/i386/sse-13.c (revision 133902) -@@ -1,8 +1,8 @@ - /* { dg-do compile } */ --/* { dg-options "-O2 -march=k8 -m3dnow -msse4 -msse5" } */ -+/* { dg-options "-O2 -march=k8 -m3dnow -msse4 -msse5 -maes -mpclmul" } */ - - /* Test that the intrinsics compile with optimization. All of them are -- defined as inline functions in {,x,e,p,t,s,a,b}mmintrin.h and mm3dnow.h -+ defined as inline functions in {,x,e,p,t,s,w,a,b}mmintrin.h and mm3dnow.h - that reference the proper builtin functions. Defining away "extern" and - "__inline" results in all of them being compiled as proper functions. */ - -@@ -15,6 +15,10 @@ - #define __builtin_ia32_extrqi(X, I, L) __builtin_ia32_extrqi(X, 1, 1) - #define __builtin_ia32_insertqi(X, Y, I, L) __builtin_ia32_insertqi(X, Y, 1, 1) - -+/* wmmintrin.h */ -+#define __builtin_ia32_aeskeygenassist128(X, C) __builtin_ia32_aeskeygenassist128(X, 1) -+#define __builtin_ia32_pclmulqdq128(X, Y, I) __builtin_ia32_pclmulqdq128(X, Y, 1) -+ - /* smmintrin.h */ - #define __builtin_ia32_pblendw128(X, Y, M) __builtin_ia32_pblendw128 (X, Y, 1) - #define __builtin_ia32_blendps(X, Y, M) __builtin_ia32_blendps(X, Y, 1) -@@ -92,6 +96,7 @@ - #define __builtin_ia32_protdi(A, B) __builtin_ia32_protdi(A,1) - #define __builtin_ia32_protqi(A, B) __builtin_ia32_protqi(A,1) - -+#include - #include - #include - #include ---- gcc/testsuite/gcc.target/i386/aesdec.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/aesdec.c (revision 133902) -@@ -0,0 +1,67 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target aes } */ -+/* { dg-options "-O2 -maes" } */ -+ -+#include -+#include -+ -+#include "aes-check.h" -+ -+extern void abort (void); -+ -+#define NUM 1024 -+ -+static __m128i src1[NUM]; -+static __m128i src2[NUM]; -+static __m128i edst[NUM]; -+ -+static __m128i resdst[NUM]; -+ -+/* Initialize input/output vectors. (Currently, there is only one set -+ of input/output vectors). */ -+static void -+init_data (__m128i *s1, __m128i *s2, __m128i *d) -+{ -+ int i; -+ for (i = 0; i < NUM; i++) -+ { -+ s1[i] = _mm_setr_epi32 (0x5d53475d, 0x63746f72, -+ 0x73745665, 0x7b5b5465); -+ s2[i] = _mm_setr_epi32 (0x726f6e5d, 0x5b477565, -+ 0x68617929, 0x48692853); -+ d[i] = _mm_setr_epi32 (0xb730392a, 0xb58eb95e, -+ 0xfaea2787, 0x138ac342); -+ } -+} -+ -+static void -+aes_test (void) -+{ -+ int i; -+ -+ init_data (src1, src2, edst); -+ -+ for (i = 0; i < NUM; i += 16) -+ { -+ resdst[i] = _mm_aesdec_si128 (src1[i], src2[i]); -+ resdst[i + 1] = _mm_aesdec_si128 (src1[i + 1], src2[i + 1]); -+ resdst[i + 2] = _mm_aesdec_si128 (src1[i + 2], src2[i + 2]); -+ resdst[i + 3] = _mm_aesdec_si128 (src1[i + 3], src2[i + 3]); -+ resdst[i + 4] = _mm_aesdec_si128 (src1[i + 4], src2[i + 4]); -+ resdst[i + 5] = _mm_aesdec_si128 (src1[i + 5], src2[i + 5]); -+ resdst[i + 6] = _mm_aesdec_si128 (src1[i + 6], src2[i + 6]); -+ resdst[i + 7] = _mm_aesdec_si128 (src1[i + 7], src2[i + 7]); -+ resdst[i + 8] = _mm_aesdec_si128 (src1[i + 8], src2[i + 8]); -+ resdst[i + 9] = _mm_aesdec_si128 (src1[i + 9], src2[i + 9]); -+ resdst[i + 10] = _mm_aesdec_si128 (src1[i + 10], src2[i + 10]); -+ resdst[i + 11] = _mm_aesdec_si128 (src1[i + 11], src2[i + 11]); -+ resdst[i + 12] = _mm_aesdec_si128 (src1[i + 12], src2[i + 12]); -+ resdst[i + 13] = _mm_aesdec_si128 (src1[i + 13], src2[i + 13]); -+ resdst[i + 14] = _mm_aesdec_si128 (src1[i + 14], src2[i + 14]); -+ resdst[i + 15] = _mm_aesdec_si128 (src1[i + 15], src2[i + 15]); -+ } -+ -+ for (i = 0; i < NUM; i++) -+ if (memcmp (edst + i, resdst + i, sizeof (__m128i))) -+ abort (); -+} ---- gcc/testsuite/g++.dg/other/i386-2.C (revision 133901) -+++ gcc/testsuite/g++.dg/other/i386-2.C (revision 133902) -@@ -1,8 +1,9 @@ --/* Test that {,x,e,p,t,s,a,b}mmintrin.h, mm3dnow.h and mm_malloc.h are -+/* Test that {,x,e,p,t,s,w,a,b}mmintrin.h, mm3dnow.h and mm_malloc.h are - usable with -O -pedantic-errors. */ - /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ --/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -msse4 -msse5" } */ -+/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -msse4 -msse5 -maes -mpclmul" } */ - -+#include - #include - #include - #include ---- gcc/testsuite/g++.dg/other/i386-3.C (revision 133901) -+++ gcc/testsuite/g++.dg/other/i386-3.C (revision 133902) -@@ -1,8 +1,9 @@ --/* Test that {,x,e,p,t,s,a,b}mmintrin.h, mm3dnow.h and mm_malloc.h are -+/* Test that {,x,e,p,t,s,w,a,b}mmintrin.h, mm3dnow.h and mm_malloc.h are - usable with -O -fkeep-inline-functions. */ - /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ --/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -msse4 -msse5" } */ -+/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -maes -mpclmul -msse4 -msse5" } */ - -+#include - #include - #include - #include diff --git a/gcc43-altivec-tests.patch b/gcc43-altivec-tests.patch deleted file mode 100644 index 0b7a456..0000000 --- a/gcc43-altivec-tests.patch +++ /dev/null @@ -1,42 +0,0 @@ -2008-08-26 Janis Johnson - - * g++.dg/ext/altivec-3.C: Move AltiVec code out of main. - -2008-04-04 Janis Johnson - - * gcc.dg/var-expand3.c: Skip for powerpc-linux if not on AltiVec HW. - ---- gcc/testsuite/g++.dg/ext/altivec-3.C (revision 139609) -+++ gcc/testsuite/g++.dg/ext/altivec-3.C (revision 139610) -@@ -120,16 +120,19 @@ void baz2 (int i, ... ) - CHECK_INVARIANT (vec_all_eq (vxi.v, vx_g.v)); - } - --int main(void) -+void main1(void) - { - CHECK_INVARIANT (sizeof(struct foo) == 8 && sizeof(struct vfoo) == 48); - -- altivec_check(); -- - bar(i_1, x_g, (short)i_2, (float)d_2, ld_1, (char)i_1, d_3); - baz(i_1, v_g, i_1, vx_g, i_1, v2_g, i_1, vx2_g); - quux(i_1, v_g, v_g); - baz2(i_1, vx_g); -- -+} -+ -+int main(void) -+{ -+ altivec_check(); -+ main1(); - return 0; - } ---- gcc/testsuite/gcc.dg/var-expand3.c (revision 133910) -+++ gcc/testsuite/gcc.dg/var-expand3.c (revision 133911) -@@ -1,4 +1,4 @@ --/* { dg-do run { target { powerpc*-*-* && powerpc_altivec_ok } } }} */ -+/* { dg-do run { target { powerpc*-*-* && vmx_hw } } }} */ - /* { dg-options "-O2 -funroll-loops -ffast-math -fvariable-expansion-in-unroller -maltivec -dL" } */ - - #include "altivec.h" diff --git a/gcc43-build-id.patch b/gcc43-build-id.patch deleted file mode 100644 index 3f9a415..0000000 --- a/gcc43-build-id.patch +++ /dev/null @@ -1,74 +0,0 @@ -2007-07-22 Roland McGrath - - * config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for - non-relocatable link. - * config/linux.h (LINK_EH_SPEC): Likewise. - * config/sparc/linux.h (LINK_EH_SPEC): Likewise. - * config/sparc/linux64.h (LINK_EH_SPEC): Likewise. - * config/alpha/elf.h (LINK_EH_SPEC): Likewise. - * config/ia64/linux.h (LINK_EH_SPEC): Likewise. - ---- gcc/config/rs6000/sysv4.h.~1~ -+++ gcc/config/rs6000/sysv4.h -@@ -906,7 +906,7 @@ extern int fixuplabelno; - %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}" - - #if defined(HAVE_LD_EH_FRAME_HDR) --# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ ---- gcc/config/linux.h.~1~ -+++ gcc/config/linux.h -@@ -85,7 +85,7 @@ Boston, MA 02110-1301, USA. */ - } while (0) - - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - /* Define this so we can compile MS code for use with WINE. */ ---- gcc/config/sparc/linux64.h.~1~ -+++ gcc/config/sparc/linux64.h -@@ -316,7 +316,7 @@ do { \ - #define DITF_CONVERSION_LIBFUNCS 1 - - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - #ifdef HAVE_AS_TLS ---- gcc/config/sparc/linux.h.~1~ -+++ gcc/config/sparc/linux.h -@@ -188,7 +188,7 @@ do { \ - #define DITF_CONVERSION_LIBFUNCS 1 - - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif - - #ifdef HAVE_AS_TLS ---- gcc/config/alpha/elf.h.~1~ -+++ gcc/config/alpha/elf.h -@@ -453,5 +453,5 @@ extern int alpha_this_gpdisp_sequence_nu - I imagine that other systems will catch up. In the meantime, it - doesn't harm to make sure that the data exists to be used later. */ - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " - #endif ---- gcc/config/ia64/linux.h.~1~ -+++ gcc/config/ia64/linux.h -@@ -56,7 +56,7 @@ do { \ - Signalize that because we have fde-glibc, we don't need all C shared libs - linked against -lgcc_s. */ - #undef LINK_EH_SPEC --#define LINK_EH_SPEC "" -+#define LINK_EH_SPEC "%{!r:--build-id} " - - #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h" - diff --git a/gcc43-c++-builtin-redecl.patch b/gcc43-c++-builtin-redecl.patch deleted file mode 100644 index 77655ad..0000000 --- a/gcc43-c++-builtin-redecl.patch +++ /dev/null @@ -1,102 +0,0 @@ -2007-10-02 Jakub Jelinek - - * decl.c (duplicate_decls): When redeclaring a builtin function, - keep the merged decl builtin whenever types match, even if new - decl defines a function. - - * gcc.dg/builtins-65.c: New test. - * g++.dg/ext/builtin10.C: New test. - ---- gcc/cp/decl.c.jj 2007-10-01 22:11:09.000000000 +0200 -+++ gcc/cp/decl.c 2007-10-02 11:39:46.000000000 +0200 -@@ -1988,23 +1988,21 @@ duplicate_decls (tree newdecl, tree oldd - DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl); - DECL_RESULT (olddecl) = DECL_RESULT (newdecl); - } -+ /* If redeclaring a builtin function, it stays built in. */ -+ if (types_match && DECL_BUILT_IN (olddecl)) -+ { -+ DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl); -+ DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); -+ /* If we're keeping the built-in definition, keep the rtl, -+ regardless of declaration matches. */ -+ COPY_DECL_RTL (olddecl, newdecl); -+ } - if (new_defines_function) - /* If defining a function declared with other language - linkage, use the previously declared language linkage. */ - SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl)); - else if (types_match) - { -- /* If redeclaring a builtin function, and not a definition, -- it stays built in. */ -- if (DECL_BUILT_IN (olddecl)) -- { -- DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl); -- DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); -- /* If we're keeping the built-in definition, keep the rtl, -- regardless of declaration matches. */ -- COPY_DECL_RTL (olddecl, newdecl); -- } -- - DECL_RESULT (newdecl) = DECL_RESULT (olddecl); - /* Don't clear out the arguments if we're redefining a function. */ - if (DECL_ARGUMENTS (olddecl)) ---- gcc/testsuite/gcc.dg/builtins-65.c.jj 2007-10-02 11:23:51.000000000 +0200 -+++ gcc/testsuite/gcc.dg/builtins-65.c 2007-10-02 11:24:12.000000000 +0200 -@@ -0,0 +1,25 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O2" } */ -+ -+typedef __SIZE_TYPE__ size_t; -+extern void __chk_fail (void); -+extern int snprintf (char *, size_t, const char *, ...); -+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...) -+{ -+ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b) -+ __chk_fail (); -+ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ()); -+} -+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf"); -+ -+char buf[10]; -+ -+int -+main (void) -+{ -+ snprintf (buf, 10, "%d%d\n", 10, 10); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "mysnprintf" } } */ -+/* { dg-final { scan-assembler-not "__chk_fail" } } */ ---- gcc/testsuite/g++.dg/ext/builtin10.C.jj 2007-10-02 11:19:45.000000000 +0200 -+++ gcc/testsuite/g++.dg/ext/builtin10.C 2007-10-02 11:23:26.000000000 +0200 -@@ -0,0 +1,27 @@ -+// { dg-do compile } -+// { dg-options "-O2" } -+ -+typedef __SIZE_TYPE__ size_t; -+extern "C" { -+extern void __chk_fail (void); -+extern int snprintf (char *, size_t, const char *, ...); -+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...) -+{ -+ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b) -+ __chk_fail (); -+ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ()); -+} -+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf"); -+} -+ -+char buf[10]; -+ -+int -+main (void) -+{ -+ snprintf (buf, 10, "%d%d\n", 10, 10); -+ return 0; -+} -+ -+// { dg-final { scan-assembler "mysnprintf" } } -+// { dg-final { scan-assembler-not "__chk_fail" } } diff --git a/gcc43-i386-libgomp.patch b/gcc43-i386-libgomp.patch deleted file mode 100644 index 2ad3b24..0000000 --- a/gcc43-i386-libgomp.patch +++ /dev/null @@ -1,61 +0,0 @@ -Build i386.rpm libgomp and libsupc++.a(guard.o) as i486+, pre-i486 -hardware isn't supported because NPTL doesn't support it anyway. - ---- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100 -+++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100 -@@ -44,14 +44,14 @@ if test $enable_linux_futex = yes; then - ;; - - # Note that bare i386 is not included here. We need cmpxchg. -- i[456]86-*-linux*) -+ i[3456]86-*-linux*) - config_path="linux/x86 linux posix" - case " ${CC} ${CFLAGS} " in - *" -m64 "*) - ;; - *) - if test -z "$with_arch"; then -- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" -+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" - fi - esac - ;; -@@ -63,7 +63,7 @@ if test $enable_linux_futex = yes; then - config_path="linux/x86 linux posix" - case " ${CC} ${CFLAGS} " in - *" -m32 "*) -- XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686" -+ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" - ;; - esac - ;; ---- libstdc++-v3/libsupc++/guard.cc.jj 2008-03-01 00:58:24.000000000 +0100 -+++ libstdc++-v3/libsupc++/guard.cc 2008-03-27 14:08:44.000000000 +0100 -@@ -35,6 +35,27 @@ - #include - #include - #include -+#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS -+# define _GLIBCXX_ATOMIC_BUILTINS 1 -+# define __sync_val_compare_and_swap(a, b, c) \ -+ ({ \ -+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \ -+ int sltas; \ -+ __asm __volatile ("lock; cmpxchgl %3, (%1)" \ -+ : "=a" (sltas) \ -+ : "r" (a), "0" (b), "r" (c) : "memory"); \ -+ sltas; \ -+ }) -+# define __sync_lock_test_and_set(a, b) \ -+ ({ \ -+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \ -+ int sltas; \ -+ __asm __volatile ("xchgl (%1), %0" \ -+ : "=r" (sltas) \ -+ : "r" (a), "0" (b) : "memory"); \ -+ sltas; \ -+ }) -+#endif - #if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \ - && defined(_GLIBCXX_ATOMIC_BUILTINS) && defined(_GLIBCXX_HAVE_LINUX_FUTEX) - # include diff --git a/gcc43-ia64-libunwind.patch b/gcc43-ia64-libunwind.patch deleted file mode 100644 index 8e10979..0000000 --- a/gcc43-ia64-libunwind.patch +++ /dev/null @@ -1,538 +0,0 @@ -2004-11-27 Jakub Jelinek - - * config.gcc (ia64*-*-linux*): If native and libelf is installed, - use ia64/t-glibc-no-libunwind instead of the other t-*unwind* - fragments. - * config/ia64/t-glibc-no-libunwind: New file. - * config/ia64/change-symver.c: New file. - * config/ia64/unwind-ia64.c: If USE_SYMVER_GLOBAL and SHARED, - define _Unwind_* to __symverglobal_Unwind_*. - (alias): Undefine. - (symverglobal): Define. Use it on _Unwind_*. - * config/ia64/mkmap-symver-multi.awk: New file. - * config/ia64/libgcc-ia64-no-libunwind.ver: New file. - ---- gcc/config.gcc.jj 2004-10-04 08:55:44.000000000 -0400 -+++ gcc/config.gcc 2004-11-13 05:23:50.000000000 -0500 -@@ -1185,9 +1185,16 @@ ia64*-*-freebsd*) - ;; - ia64*-*-linux*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h ia64/sysv4.h ia64/linux.h" -- tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc" -- if test x$with_system_libunwind != xyes ; then -- tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" -+ tmake_file="${tmake_file} ia64/t-ia64" -+ if test x${target} = x${host} && test x${target} = x${build} \ -+ && grep gelf_getverdef /usr/include/gelf.h > /dev/null 2>&1 \ -+ && test -f /usr/lib/libelf.so; then -+ tmake_file="${tmake_file} ia64/t-glibc-no-libunwind" -+ else -+ tmake_file="${tmake_file} t-libunwind ia64/t-glibc" -+ if test x$with_system_libunwind != xyes ; then -+ tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" -+ fi - fi - target_cpu_default="MASK_GNU_AS|MASK_GNU_LD" - extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o" ---- gcc/config/ia64/t-glibc-no-libunwind.jj 2004-02-18 10:27:36.000000000 -0500 -+++ gcc/config/ia64/t-glibc-no-libunwind 2004-11-15 09:56:33.000000000 -0500 -@@ -0,0 +1,30 @@ -+# Don't use system libunwind library on IA-64 GLIBC based system, -+# but make _Unwind_* symbols unversioned, so that created programs -+# are usable even when libgcc_s uses libunwind. -+LIB2ADDEH += $(srcdir)/config/ia64/fde-glibc.c -+SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64-no-libunwind.ver -+SHLIB_MKMAP = $(srcdir)/config/ia64/mkmap-symver-multi.awk -+ -+SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ -+ -Wl,--soname=$(SHLIB_SONAME) \ -+ -Wl,--version-script=$(SHLIB_MAP) \ -+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \ -+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \ -+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \ -+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \ -+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \ -+ else true; fi && \ -+ gcc -O2 -o $(SHLIB_DIR)/$(SHLIB_SONAME).tweak \ -+ $$(gcc_srcdir)/config/ia64/change-symver.c -lelf && \ -+ $(SHLIB_DIR)/$(SHLIB_SONAME).tweak $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ -+ GCC_3.4.2 _GLOBAL_ \ -+ _Unwind_GetGR _Unwind_RaiseException _Unwind_GetRegionStart _Unwind_SetIP \ -+ _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_Resume \ -+ _Unwind_DeleteException _Unwind_SetGR _Unwind_ForcedUnwind \ -+ _Unwind_Backtrace _Unwind_FindEnclosingFunction _Unwind_GetCFA \ -+ _Unwind_Resume_or_Rethrow _Unwind_GetBSP && \ -+ rm -f $(SHLIB_DIR)/$(SHLIB_SONAME).tweak && \ -+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \ -+ $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) -+ -+TARGET_LIBGCC2_CFLAGS += -DUSE_SYMVER_GLOBAL ---- gcc/config/ia64/change-symver.c.jj 2004-02-18 10:27:36.000000000 -0500 -+++ gcc/config/ia64/change-symver.c 2004-11-13 05:23:50.000000000 -0500 -@@ -0,0 +1,211 @@ -+#define _GNU_SOURCE 1 -+#define _FILE_OFFSET_BITS 64 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+int -+compute_veridx (const char *name, Elf *elf, Elf_Data *verd, GElf_Shdr *verd_shdr) -+{ -+ if (strcmp (name, "_GLOBAL_") == 0) -+ return 1; -+ -+ int cnt; -+ size_t offset = 0; -+ for (cnt = verd_shdr->sh_info; --cnt >= 0; ) -+ { -+ GElf_Verdef defmem; -+ GElf_Verdef *def; -+ GElf_Verdaux auxmem; -+ GElf_Verdaux *aux; -+ unsigned int auxoffset; -+ -+ /* Get the data at the next offset. */ -+ def = gelf_getverdef (verd, offset, &defmem); -+ if (def == NULL) -+ break; -+ -+ auxoffset = offset + def->vd_aux; -+ aux = gelf_getverdaux (verd, auxoffset, &auxmem); -+ if (aux == NULL) -+ break; -+ -+ if (strcmp (name, elf_strptr (elf, verd_shdr->sh_link, -+ aux->vda_name)) == 0) -+ return def->vd_ndx; -+ -+ /* Find the next offset. */ -+ offset += def->vd_next; -+ } -+ -+ return -1; -+} -+ -+int -+main (int argc, char **argv) -+{ -+ if (argc < 4) -+ error (1, 0, "Usage: change_symver library from_symver to_symver symbol...\nExample: change_symver libfoo.so FOO_1.0 *global* bar baz"); -+ -+ const char *fname = argv[1]; -+ -+ /* Open the file. */ -+ int fd; -+ fd = open (fname, O_RDWR); -+ if (fd == -1) -+ error (1, errno, fname); -+ -+ elf_version (EV_CURRENT); -+ -+ /* Now get the ELF descriptor. */ -+ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); -+ if (elf == NULL || elf_kind (elf) != ELF_K_ELF) -+ error (1, 0, "Couldn't open %s: %s", fname, elf_errmsg (-1)); -+ -+ size_t shstrndx; -+ /* Get the section header string table index. */ -+ if (elf_getshstrndx (elf, &shstrndx) < 0) -+ error (1, 0, "cannot get shstrndx from %s", fname); -+ -+ GElf_Ehdr ehdr_mem; -+ GElf_Ehdr *ehdr; -+ -+ /* We need the ELF header in a few places. */ -+ ehdr = gelf_getehdr (elf, &ehdr_mem); -+ if (ehdr == NULL) -+ error (1, 0, "couldn't get ELF headers %s: %s", fname, elf_errmsg (-1)); -+ -+ Elf_Scn *scn = NULL; -+ GElf_Shdr shdr_mem, verd_shdr, ver_shdr, dynsym_shdr; -+ Elf_Data *ver = NULL, *verd = NULL, *dynsym = NULL; -+ -+ while ((scn = elf_nextscn (elf, scn)) != NULL) -+ { -+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); -+ -+ if (shdr == NULL) -+ error (1, 0, "couldn't get shdr from %s", fname); -+ -+ if ((shdr->sh_flags & SHF_ALLOC) != 0) -+ { -+ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); -+ Elf_Data **p; -+ -+ if (strcmp (name, ".gnu.version") == 0) -+ { -+ p = &ver; -+ ver_shdr = *shdr; -+ } -+ else if (strcmp (name, ".gnu.version_d") == 0) -+ { -+ p = &verd; -+ verd_shdr = *shdr; -+ } -+ else if (strcmp (name, ".dynsym") == 0) -+ { -+ p = &dynsym; -+ dynsym_shdr = *shdr; -+ } -+ else -+ continue; -+ -+ if (*p != NULL) -+ error (1, 0, "Two %s sections in %s", name, fname); -+ *p = elf_getdata (scn, NULL); -+ if (*p == NULL || elf_getdata (scn, *p) != NULL) -+ error (1, 0, "No data or non-contiguous data in %s section in %s", -+ name, fname); -+ } -+ } -+ -+ if (ver == NULL || verd == NULL || dynsym == NULL) -+ error (1, 0, "Couldn't find one of the needed sections in %s", fname); -+ -+ int from_idx = compute_veridx (argv[2], elf, verd, &verd_shdr); -+ if (from_idx == -1) -+ error (1, 0, "Could not find symbol version %s in %s", argv[2], fname); -+ -+ int to_idx = compute_veridx (argv[3], elf, verd, &verd_shdr); -+ if (to_idx == -1) -+ error (1, 0, "Could not find symbol version %s in %s", argv[3], fname); -+ -+ if (dynsym_shdr.sh_entsize != gelf_fsize (elf, ELF_T_SYM, 1, ehdr->e_version) -+ || dynsym_shdr.sh_size % dynsym_shdr.sh_entsize -+ || ver_shdr.sh_entsize != 2 -+ || (ver_shdr.sh_size & 1) -+ || dynsym_shdr.sh_size / dynsym_shdr.sh_entsize != ver_shdr.sh_size / 2) -+ error (1, 0, "Unexpected sh_size or sh_entsize in %s", fname); -+ -+ size_t nentries = ver_shdr.sh_size / 2; -+ size_t cnt; -+ GElf_Versym array[nentries]; -+ for (cnt = 0; cnt < nentries; ++cnt) -+ { -+ GElf_Versym vsymmem; -+ GElf_Versym *vsym; -+ -+ vsym = gelf_getversym (ver, cnt, &vsymmem); -+ if (vsym == NULL) -+ error (1, 0, "gelt_getversym failed in %s: %s", fname, elf_errmsg (-1)); -+ -+ array[cnt] = *vsym; -+ if (*vsym != from_idx) -+ continue; -+ -+ GElf_Sym sym_mem; -+ GElf_Sym *sym; -+ sym = gelf_getsym (dynsym, cnt, &sym_mem); -+ if (sym == NULL) -+ error (1, 0, "gelt_getsym failed in %s: %s", fname, elf_errmsg (-1)); -+ -+ const char *name = elf_strptr (elf, dynsym_shdr.sh_link, sym->st_name); -+ -+ int argn; -+ for (argn = 4; argn < argc; ++argn) -+ if (fnmatch (argv[argn], name, 0) == 0) -+ { -+ array[cnt] = to_idx; -+ break; -+ } -+ } -+ -+ if (sizeof (array[0]) != 2) -+ abort (); -+ -+#if __BYTE_ORDER == __LITTLE_ENDIAN -+ if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB) -+ ; -+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB) -+#elif __BYTE_ORDER == __BIG_ENDIAN -+ if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB) -+ ; -+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB) -+#else -+# error Unsupported endianity -+#endif -+ { -+ for (cnt = 0; cnt < nentries; ++cnt) -+ array[cnt] = ((array[cnt] & 0xff) << 8) | ((array[cnt] & 0xff00) >> 8); -+ } -+ else -+ error (1, 0, "Unknown EI_DATA %d in %s", ehdr->e_ident[EI_DATA], fname); -+ -+ if (elf_end (elf) != 0) -+ error (1, 0, "couldn't close %s: %s", fname, elf_errmsg (-1)); -+ -+ if (lseek (fd, ver_shdr.sh_offset, SEEK_SET) != (off_t) ver_shdr.sh_offset) -+ error (1, 0, "failed to seek to %zd in %s", (size_t) ver_shdr.sh_offset, -+ fname); -+ -+ if (write (fd, array, 2 * nentries) != (ssize_t) (2 * nentries)) -+ error (1, 0, "failed to write .gnu.version section into %s", fname); -+ -+ close (fd); -+ return 0; -+} ---- gcc/config/ia64/unwind-ia64.c.jj 2004-10-04 08:55:57.000000000 -0400 -+++ gcc/config/ia64/unwind-ia64.c 2004-11-15 09:07:45.000000000 -0500 -@@ -51,6 +51,51 @@ - #define UNW_FLAG_UHANDLER(x) ((x) & 0x0000000200000000L) - #define UNW_LENGTH(x) ((x) & 0x00000000ffffffffL) - -+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED) -+extern _Unwind_Reason_Code __symverglobal_Unwind_Backtrace -+ (_Unwind_Trace_Fn, void *); -+extern void __symverglobal_Unwind_DeleteException -+ (struct _Unwind_Exception *); -+extern void * __symverglobal_Unwind_FindEnclosingFunction (void *); -+extern _Unwind_Reason_Code __symverglobal_Unwind_ForcedUnwind -+ (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); -+extern _Unwind_Word __symverglobal_Unwind_GetCFA -+ (struct _Unwind_Context *); -+extern _Unwind_Word __symverglobal_Unwind_GetBSP -+ (struct _Unwind_Context *); -+extern _Unwind_Word __symverglobal_Unwind_GetGR -+ (struct _Unwind_Context *, int ); -+extern _Unwind_Ptr __symverglobal_Unwind_GetIP (struct _Unwind_Context *); -+extern void *__symverglobal_Unwind_GetLanguageSpecificData -+ (struct _Unwind_Context *); -+extern _Unwind_Ptr __symverglobal_Unwind_GetRegionStart -+ (struct _Unwind_Context *); -+extern _Unwind_Reason_Code __symverglobal_Unwind_RaiseException -+ (struct _Unwind_Exception *); -+extern void __symverglobal_Unwind_Resume (struct _Unwind_Exception *); -+extern _Unwind_Reason_Code __symverglobal_Unwind_Resume_or_Rethrow -+ (struct _Unwind_Exception *); -+extern void __symverglobal_Unwind_SetGR -+ (struct _Unwind_Context *, int, _Unwind_Word); -+extern void __symverglobal_Unwind_SetIP -+ (struct _Unwind_Context *, _Unwind_Ptr); -+#define _Unwind_Backtrace __symverglobal_Unwind_Backtrace -+#define _Unwind_DeleteException __symverglobal_Unwind_DeleteException -+#define _Unwind_FindEnclosingFunction __symverglobal_Unwind_FindEnclosingFunction -+#define _Unwind_ForcedUnwind __symverglobal_Unwind_ForcedUnwind -+#define _Unwind_GetBSP __symverglobal_Unwind_GetBSP -+#define _Unwind_GetCFA __symverglobal_Unwind_GetCFA -+#define _Unwind_GetGR __symverglobal_Unwind_GetGR -+#define _Unwind_GetIP __symverglobal_Unwind_GetIP -+#define _Unwind_GetLanguageSpecificData __symverglobal_Unwind_GetLanguageSpecificData -+#define _Unwind_GetRegionStart __symverglobal_Unwind_GetRegionStart -+#define _Unwind_RaiseException __symverglobal_Unwind_RaiseException -+#define _Unwind_Resume __symverglobal_Unwind_Resume -+#define _Unwind_Resume_or_Rethrow __symverglobal_Unwind_Resume_or_Rethrow -+#define _Unwind_SetGR __symverglobal_Unwind_SetGR -+#define _Unwind_SetIP __symverglobal_Unwind_SetIP -+#endif -+ - enum unw_application_register - { - UNW_AR_BSP, -@@ -2402,4 +2447,44 @@ alias (_Unwind_SetGR); - alias (_Unwind_SetIP); - #endif - -+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED) -+#undef alias -+#define symverglobal(name, version) \ -+__typeof (__symverglobal##name) __symverlocal##name \ -+ __attribute__ ((alias ("__symverglobal" #name))); \ -+__asm__ (".symver __symverglobal" #name"," #name "@@GCC_3.4.2");\ -+__asm__ (".symver __symverlocal" #name"," #name "@" #version) -+ -+#undef _Unwind_Backtrace -+#undef _Unwind_DeleteException -+#undef _Unwind_FindEnclosingFunction -+#undef _Unwind_ForcedUnwind -+#undef _Unwind_GetBSP -+#undef _Unwind_GetCFA -+#undef _Unwind_GetGR -+#undef _Unwind_GetIP -+#undef _Unwind_GetLanguageSpecificData -+#undef _Unwind_GetRegionStart -+#undef _Unwind_RaiseException -+#undef _Unwind_Resume -+#undef _Unwind_Resume_or_Rethrow -+#undef _Unwind_SetGR -+#undef _Unwind_SetIP -+symverglobal (_Unwind_Backtrace, GCC_3.3); -+symverglobal (_Unwind_DeleteException, GCC_3.0); -+symverglobal (_Unwind_FindEnclosingFunction, GCC_3.3); -+symverglobal (_Unwind_ForcedUnwind, GCC_3.0); -+symverglobal (_Unwind_GetBSP, GCC_3.3.2); -+symverglobal (_Unwind_GetCFA, GCC_3.3); -+symverglobal (_Unwind_GetGR, GCC_3.0); -+symverglobal (_Unwind_GetIP, GCC_3.0); -+symverglobal (_Unwind_GetLanguageSpecificData, GCC_3.0); -+symverglobal (_Unwind_GetRegionStart, GCC_3.0); -+symverglobal (_Unwind_RaiseException, GCC_3.0); -+symverglobal (_Unwind_Resume, GCC_3.0); -+symverglobal (_Unwind_Resume_or_Rethrow, GCC_3.3); -+symverglobal (_Unwind_SetGR, GCC_3.0); -+symverglobal (_Unwind_SetIP, GCC_3.0); -+#endif -+ - #endif ---- gcc/config/ia64/mkmap-symver-multi.awk.jj 2004-02-18 10:27:36.000000000 -0500 -+++ gcc/config/ia64/mkmap-symver-multi.awk 2004-11-15 09:46:50.000000000 -0500 -@@ -0,0 +1,133 @@ -+# Generate an ELF symbol version map a-la Solaris and GNU ld. -+# Contributed by Richard Henderson -+# -+# This file is part of GCC. -+# -+# GCC is free software; you can redistribute it and/or modify it under -+# the terms of the GNU General Public License as published by the Free -+# Software Foundation; either version 2, or (at your option) any later -+# version. -+# -+# GCC is distributed in the hope that it will be useful, but WITHOUT -+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -+# License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with GCC; see the file COPYING. If not, write to the Free -+# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -+# 02110-1301, USA. -+ -+BEGIN { -+ state = "nm"; -+ sawsymbol = 0; -+} -+ -+# Remove comment and blank lines. -+/^ *#/ || /^ *$/ { -+ next; -+} -+ -+# We begin with nm input. Collect the set of symbols that are present -+# so that we can not emit them into the final version script -- Solaris -+# complains at us if we do. -+ -+state == "nm" && /^%%/ { -+ state = "ver"; -+ next; -+} -+ -+state == "nm" && ($1 == "U" || $2 == "U") { -+ next; -+} -+ -+state == "nm" && NF == 3 { -+ if ($3 ~ /^[^@]*@GCC_[0-9.]*$/) { -+ def[$3] = 1 -+ tl=$3 -+ sub(/^.*@/,"",tl) -+ ver[$3] = tl -+ } else { -+ sub(/@@?GCC_[0-9.]*$/,"",$3) -+ def[$3] = 1; -+ } -+ sawsymbol = 1; -+ next; -+} -+ -+state == "nm" { -+ next; -+} -+ -+# Now we process a simplified variant of the Solaris symbol version -+# script. We have one symbol per line, no semicolons, simple markers -+# for beginning and ending each section, and %inherit markers for -+# describing version inheritence. A symbol may appear in more than -+# one symbol version, and the last seen takes effect. -+ -+NF == 3 && $1 == "%inherit" { -+ inherit[$2] = $3; -+ next; -+} -+ -+NF == 2 && $2 == "{" { -+ libs[$1] = 1; -+ thislib = $1; -+ next; -+} -+ -+$1 == "}" { -+ thislib = ""; -+ next; -+} -+ -+{ -+ ver[$1] = thislib; -+ next; -+} -+ -+END { -+ if (!sawsymbol) -+ { -+ print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2"; -+ exit 1; -+ } -+ for (l in libs) -+ output(l); -+} -+ -+function output(lib) { -+ if (done[lib]) -+ return; -+ done[lib] = 1; -+ if (inherit[lib]) -+ output(inherit[lib]); -+ -+ empty=1 -+ for (sym in ver) -+ if ((ver[sym] == lib) && (sym in def)) -+ { -+ if (empty) -+ { -+ printf("%s {\n", lib); -+ printf(" global:\n"); -+ empty = 0; -+ } -+ symp = sym; -+ sub(/@GCC_[0-9.]*$/,"",symp); -+ printf("\t%s;\n", symp); -+ if (dotsyms) -+ printf("\t.%s;\n", symp); -+ } -+ -+ if (empty) -+ { -+ for (l in libs) -+ if (inherit[l] == lib) -+ inherit[l] = inherit[lib]; -+ } -+ else if (inherit[lib]) -+ printf("} %s;\n", inherit[lib]); -+ else -+ printf ("\n local:\n\t*;\n};\n"); -+} ---- gcc/config/ia64/libgcc-ia64-no-libunwind.ver.jj 2004-02-18 10:27:36.000000000 -0500 -+++ gcc/config/ia64/libgcc-ia64-no-libunwind.ver 2004-11-15 09:19:56.000000000 -0500 -@@ -0,0 +1,17 @@ -+GCC_3.4.2 { -+ _Unwind_GetGR -+ _Unwind_RaiseException -+ _Unwind_GetRegionStart -+ _Unwind_SetIP -+ _Unwind_GetIP -+ _Unwind_GetLanguageSpecificData -+ _Unwind_Resume -+ _Unwind_DeleteException -+ _Unwind_SetGR -+ _Unwind_ForcedUnwind -+ _Unwind_Backtrace -+ _Unwind_FindEnclosingFunction -+ _Unwind_GetCFA -+ _Unwind_Resume_or_Rethrow -+ _Unwind_GetBSP -+} diff --git a/gcc43-java-debug-iface-type.patch b/gcc43-java-debug-iface-type.patch deleted file mode 100644 index 63a1b50..0000000 --- a/gcc43-java-debug-iface-type.patch +++ /dev/null @@ -1,17 +0,0 @@ -2008-01-25 Jakub Jelinek - - * lang.c (java_classify_record): Revert 2007-12-20 change. - ---- gcc/java/lang.c 2007-12-27 09:09:49.000000000 +0100 -+++ gcc/java/lang.c 2008-01-25 17:43:57.000000000 +0100 -@@ -965,9 +965,7 @@ java_classify_record (tree type) - if (! CLASS_P (type)) - return RECORD_IS_STRUCT; - -- /* ??? GDB does not support DW_TAG_interface_type as of December, -- 2007. Re-enable this at a later time. */ -- if (0 && CLASS_INTERFACE (TYPE_NAME (type))) -+ if (CLASS_INTERFACE (TYPE_NAME (type))) - return RECORD_IS_INTERFACE; - - return RECORD_IS_CLASS; diff --git a/gcc43-java-nomulti.patch b/gcc43-java-nomulti.patch deleted file mode 100644 index f07ead8..0000000 --- a/gcc43-java-nomulti.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100 -+++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100 -@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode, - [allow rebuilding of .class and .h files])) - AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes) - -+AC_ARG_ENABLE(libjava-multilib, -+ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib])) -+if test "$enable_libjava_multilib" = no; then -+ multilib=no -+ ac_configure_args="$ac_configure_args --disable-multilib" -+fi -+ - # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. - GCC_NO_EXECUTABLES - ---- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100 -+++ libjava/configure 2007-12-07 18:39:58.000000000 +0100 -@@ -1018,6 +1018,8 @@ Optional Features: - --enable-gconf-peer compile GConf native peers for util.preferences - --enable-java-maintainer-mode - allow rebuilding of .class and .h files -+ --enable-libjava-multilib -+ build libjava as multilib - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-maintainer-mode enable make rules and dependencies not useful -@@ -1848,6 +1850,16 @@ else - fi - - -+# Check whether --enable-libjava-multilib was given. -+if test "${enable_libjava_multilib+set}" = set; then -+ enableval=$enable_libjava_multilib; -+fi -+ -+if test "$enable_libjava_multilib" = no; then -+ multilib=no -+ ac_configure_args="$ac_configure_args --disable-multilib" -+fi -+ - # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. - - diff --git a/gcc43-libgomp-omp_h-multilib.patch b/gcc43-libgomp-omp_h-multilib.patch deleted file mode 100644 index d0e98d1..0000000 --- a/gcc43-libgomp-omp_h-multilib.patch +++ /dev/null @@ -1,17 +0,0 @@ -2008-06-09 Jakub Jelinek - - * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. - ---- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200 -+++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200 -@@ -42,8 +42,8 @@ typedef struct - - typedef struct - { -- unsigned char _x[@OMP_NEST_LOCK_SIZE@] -- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); -+ unsigned char _x[8 + sizeof (void *)] -+ __attribute__((__aligned__(sizeof (void *)))); - } omp_nest_lock_t; - #endif - diff --git a/gcc43-libtool-no-rpath.patch b/gcc43-libtool-no-rpath.patch deleted file mode 100644 index 466c661..0000000 --- a/gcc43-libtool-no-rpath.patch +++ /dev/null @@ -1,27 +0,0 @@ -libtool sucks. ---- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 -+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 -@@ -5394,6 +5394,7 @@ EOF - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then -@@ -6071,6 +6072,7 @@ EOF - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then -@@ -6120,6 +6122,7 @@ EOF - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then diff --git a/gcc43-ppc32-retaddr.patch b/gcc43-ppc32-retaddr.patch deleted file mode 100644 index e9ae1bc..0000000 --- a/gcc43-ppc32-retaddr.patch +++ /dev/null @@ -1,86 +0,0 @@ -2005-11-28 Jakub Jelinek - - * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0, - read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx - instead of doing an extran indirection from frame_pointer_rtx. - - * gcc.dg/20051128-1.c: New test. - ---- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100 -+++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100 -@@ -13166,17 +13166,22 @@ rs6000_return_addr (int count, rtx frame - don't try to be too clever here. */ - if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic)) - { -+ rtx x; - cfun->machine->ra_needs_full_frame = 1; - -- return -- gen_rtx_MEM -- (Pmode, -- memory_address -- (Pmode, -- plus_constant (copy_to_reg -- (gen_rtx_MEM (Pmode, -- memory_address (Pmode, frame))), -- RETURN_ADDRESS_OFFSET))); -+ if (count == 0) -+ { -+ gcc_assert (frame == frame_pointer_rtx); -+ x = arg_pointer_rtx; -+ } -+ else -+ { -+ x = memory_address (Pmode, frame); -+ x = copy_to_reg (gen_rtx_MEM (Pmode, x)); -+ } -+ -+ x = plus_constant (x, RETURN_ADDRESS_OFFSET); -+ return gen_rtx_MEM (Pmode, memory_address (Pmode, x)); - } - - cfun->machine->ra_need_lr = 1; ---- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200 -+++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100 -@@ -0,0 +1,41 @@ -+/* { dg-do run } */ -+/* { dg-options "-O2 -fpic" } */ -+ -+extern void exit (int); -+extern void abort (void); -+ -+int b; -+ -+struct A -+{ -+ void *pad[147]; -+ void *ra, *h; -+ long o; -+}; -+ -+void -+__attribute__((noinline)) -+foo (struct A *a, void *x) -+{ -+ __builtin_memset (a, 0, sizeof (a)); -+ if (!b) -+ exit (0); -+} -+ -+void -+__attribute__((noinline)) -+bar (void) -+{ -+ struct A a; -+ -+ __builtin_unwind_init (); -+ foo (&a, __builtin_return_address (0)); -+} -+ -+int -+main (void) -+{ -+ bar (); -+ abort (); -+ return 0; -+} diff --git a/gcc43-ppc64-ia64-GNU-stack.patch b/gcc43-ppc64-ia64-GNU-stack.patch deleted file mode 100644 index d49f2b9..0000000 --- a/gcc43-ppc64-ia64-GNU-stack.patch +++ /dev/null @@ -1,86 +0,0 @@ -2007-08-27 Jakub Jelinek - - * config/rs6000/rs6000.c (rs6000_elf_end_indicate_exec_stack): New. - * config/rs6000/linux64.h (TARGET_ASM_FILE_END): Use - rs6000_elf_end_indicate_exec_stack. - * config/ia64/ia64.c (ia64_linux_file_end): new. - * config/ia64/linux.h (TARGET_ASM_FILE_END): Use ia64_linux_file_end. - ---- gcc/config/rs6000/rs6000.c.jj 2007-12-07 18:41:08.000000000 +0100 -+++ gcc/config/rs6000/rs6000.c 2007-12-07 18:42:12.000000000 +0100 -@@ -746,6 +746,7 @@ static void rs6000_file_start (void); - static int rs6000_elf_reloc_rw_mask (void); - 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_asm_init_sections (void); - static section *rs6000_elf_select_rtx_section (enum machine_mode, rtx, - unsigned HOST_WIDE_INT); -@@ -20418,6 +20419,20 @@ 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 (); -+ else -+ { -+ int saved_trampolines_created = trampolines_created; -+ trampolines_created = 0; -+ file_end_indicate_exec_stack (); -+ trampolines_created = saved_trampolines_created; -+ } -+} - #endif - - #if TARGET_XCOFF ---- gcc/config/rs6000/linux64.h.jj 2007-12-07 17:18:06.000000000 +0100 -+++ gcc/config/rs6000/linux64.h 2007-12-07 18:41:21.000000000 +0100 -@@ -504,7 +504,7 @@ extern int dot_symbols; - #undef DRAFT_V4_STRUCT_RET - #define DRAFT_V4_STRUCT_RET (!TARGET_64BIT) - --#define TARGET_ASM_FILE_END file_end_indicate_exec_stack -+#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack - - #define TARGET_POSIX_IO - ---- gcc/config/ia64/linux.h.jj 2007-12-07 18:17:43.000000000 +0100 -+++ gcc/config/ia64/linux.h 2007-12-07 18:41:21.000000000 +0100 -@@ -5,7 +5,7 @@ - - #define TARGET_VERSION fprintf (stderr, " (IA-64) Linux"); - --#define TARGET_ASM_FILE_END file_end_indicate_exec_stack -+#define TARGET_ASM_FILE_END ia64_linux_file_end - - /* This is for -profile to use -lc_p instead of -lc. */ - #undef CC1_SPEC ---- gcc/config/ia64/ia64.c.jj 2007-12-07 15:41:58.000000000 +0100 -+++ gcc/config/ia64/ia64.c 2007-12-07 18:43:18.000000000 +0100 -@@ -262,6 +262,8 @@ static section *ia64_select_rtx_section - static void ia64_output_dwarf_dtprel (FILE *, int, rtx) - ATTRIBUTE_UNUSED; - static unsigned int ia64_section_type_flags (tree, const char *, int); -+static void ia64_linux_file_end (void) -+ ATTRIBUTE_UNUSED; - static void ia64_init_libfuncs (void) - ATTRIBUTE_UNUSED; - static void ia64_hpux_init_libfuncs (void) -@@ -9957,4 +9959,13 @@ ia64_c_mode_for_suffix (char suffix) - return VOIDmode; - } - -+static void -+ia64_linux_file_end (void) -+{ -+ int saved_trampolines_created = trampolines_created; -+ trampolines_created = 0; -+ file_end_indicate_exec_stack (); -+ trampolines_created = saved_trampolines_created; -+} -+ - #include "gt-ia64.h" diff --git a/gcc43-pr27898.patch b/gcc43-pr27898.patch deleted file mode 100644 index 172bb81..0000000 --- a/gcc43-pr27898.patch +++ /dev/null @@ -1,16 +0,0 @@ -2006-08-18 Jakub Jelinek - - PR c/27898 - * gcc.dg/pr27898.c: New test. - ---- gcc/testsuite/gcc.dg/pr27898.c.jj 2006-08-18 09:19:33.000000000 +0200 -+++ gcc/testsuite/gcc.dg/pr27898.c 2006-08-18 09:19:27.000000000 +0200 -@@ -0,0 +1,8 @@ -+/* PR c/27898 */ -+/* { dg-do compile } */ -+/* { dg-options "--combine" } */ -+/* { dg-additional-sources "pr27898.c" } */ -+ -+union u { struct { int i; }; }; -+ -+extern int foo (union u *); diff --git a/gcc43-pr29609-2.patch b/gcc43-pr29609-2.patch deleted file mode 100644 index e057605..0000000 --- a/gcc43-pr29609-2.patch +++ /dev/null @@ -1,105 +0,0 @@ -2008-10-09 Jakub Jelinek - - * tree-ssa-live.c (remove_unused_locals): Mark all edge's goto_block - as used. - * gimple-low.c (lower_return_expr, lower_builtin_setjmp): Set - TREE_BLOCK on the newly created stmts. - * tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Only set - goto_block on edges if goto_locus is known. - ---- gcc/tree-ssa-live.c.jj 2008-10-07 21:25:57.000000000 +0200 -+++ gcc/tree-ssa-live.c 2008-10-09 00:25:20.000000000 +0200 -@@ -591,6 +591,8 @@ remove_unused_locals (void) - { - block_stmt_iterator bsi; - tree phi, def; -+ edge_iterator ei; -+ edge e; - - /* Walk the statements. */ - for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) -@@ -614,6 +616,10 @@ remove_unused_locals (void) - mark_all_vars_used (&arg, NULL); - } - } -+ -+ FOR_EACH_EDGE (e, ei, bb->succs) -+ if (e->goto_locus) -+ TREE_USED (e->goto_block) = true; - } - - /* Remove unmarked local vars from unexpanded_var_list. */ ---- gcc/gimple-low.c.jj 2008-10-07 21:25:58.000000000 +0200 -+++ gcc/gimple-low.c 2008-10-09 00:42:31.000000000 +0200 -@@ -590,6 +590,7 @@ lower_return_expr (tree_stmt_iterator *t - found: - t = build1 (GOTO_EXPR, void_type_node, label); - SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt)); -+ TREE_BLOCK (t) = TREE_BLOCK (stmt); - tsi_link_before (tsi, t, TSI_SAME_STMT); - tsi_delink (tsi); - } -@@ -672,6 +673,7 @@ lower_builtin_setjmp (tree_stmt_iterator - t = implicit_built_in_decls[BUILT_IN_SETJMP_SETUP]; - t = build_call_expr (t, 2, CALL_EXPR_ARG (stmt, 0), arg); - SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt)); -+ TREE_BLOCK (t) = TREE_BLOCK (stmt); - tsi_link_before (tsi, t, TSI_SAME_STMT); - - /* Build 'DEST = 0' and insert. */ -@@ -680,6 +682,7 @@ lower_builtin_setjmp (tree_stmt_iterator - t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest), - integer_zero_node)); - SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt)); -+ TREE_BLOCK (t) = TREE_BLOCK (stmt); - tsi_link_before (tsi, t, TSI_SAME_STMT); - } - -@@ -696,6 +699,7 @@ lower_builtin_setjmp (tree_stmt_iterator - t = implicit_built_in_decls[BUILT_IN_SETJMP_RECEIVER]; - t = build_call_expr (t, 1, arg); - SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt)); -+ TREE_BLOCK (t) = TREE_BLOCK (stmt); - tsi_link_before (tsi, t, TSI_SAME_STMT); - - /* Build 'DEST = 1' and insert. */ -@@ -704,6 +708,7 @@ lower_builtin_setjmp (tree_stmt_iterator - t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest), - integer_one_node)); - SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt)); -+ TREE_BLOCK (t) = TREE_BLOCK (stmt); - tsi_link_before (tsi, t, TSI_SAME_STMT); - } - ---- gcc/tree-cfg.c.jj 2008-10-07 21:39:14.000000000 +0200 -+++ gcc/tree-cfg.c 2008-10-09 00:00:48.000000000 +0200 -@@ -634,7 +634,8 @@ make_cond_expr_edges (basic_block bb) - #else - e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry)); - #endif -- e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry)); -+ if (e->goto_locus) -+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry)); - e = make_edge (bb, else_bb, EDGE_FALSE_VALUE); - if (e) - { -@@ -643,7 +644,8 @@ make_cond_expr_edges (basic_block bb) - #else - e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry)); - #endif -- e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry)); -+ if (e->goto_locus) -+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry)); - } - - /* We do not need the gotos anymore. */ -@@ -843,7 +845,8 @@ make_goto_expr_edges (basic_block bb) - #else - e->goto_locus = EXPR_LOCUS (goto_t); - #endif -- e->goto_block = TREE_BLOCK (goto_t); -+ if (e->goto_locus) -+ e->goto_block = TREE_BLOCK (goto_t); - bsi_remove (&last, true); - return; - } diff --git a/gcc43-pr29609-3.patch b/gcc43-pr29609-3.patch deleted file mode 100644 index 72791cd..0000000 --- a/gcc43-pr29609-3.patch +++ /dev/null @@ -1,168 +0,0 @@ -2008-10-09 Jakub Jelinek - - * rtl.h (locator_eq): New decl. - * cfglayout.c (locator_scope): New function. - (insn_scope): Use it. - (locator_eq): New function. - (fixup_reorder_chain): Search for last insn in src bb - that has locator set or first insn in dest bb. Use - locator_eq instead of == to compare locators. - * cfgrtl.c (cfg_layout_merge_blocks): Likewise. - * cfgcleanup.c (try_forward_edges): Use locator_eq instead of - == to compare locators. - ---- gcc/cfglayout.c.jj 2008-10-07 21:35:33.000000000 +0200 -+++ gcc/cfglayout.c 2008-10-09 11:18:51.000000000 +0200 -@@ -448,13 +448,12 @@ change_scope (rtx orig_insn, tree s1, tr - } - } - --/* Return lexical scope block insn belong to. */ -+/* Return lexical scope block locator belongs to. */ - static tree --insn_scope (const_rtx insn) -+locator_scope (int loc) - { - int max = VEC_length (int, block_locators_locs); - int min = 0; -- int loc = INSN_LOCATOR (insn); - - /* When block_locators_locs was initialized, the pro- and epilogue - insns didn't exist yet and can therefore not be found this way. -@@ -488,6 +487,13 @@ insn_scope (const_rtx insn) - return VEC_index (tree, block_locators_blocks, min); - } - -+/* Return lexical scope block insn belongs to. */ -+static tree -+insn_scope (const_rtx insn) -+{ -+ return locator_scope (INSN_LOCATOR (insn)); -+} -+ - /* Return line number of the statement specified by the locator. */ - static location_t - locator_location (int loc) -@@ -551,6 +557,17 @@ insn_file (const_rtx insn) - return locator_file (INSN_LOCATOR (insn)); - } - -+/* Return true if LOC1 and LOC2 locators have the same location and scope. */ -+bool -+locator_eq (int loc1, int loc2) -+{ -+ if (loc1 == loc2) -+ return true; -+ if (locator_location (loc1) != locator_location (loc2)) -+ return false; -+ return locator_scope (loc1) == locator_scope (loc2); -+} -+ - /* Rebuild all the NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes based - on the scope tree and the newly reordered instructions. */ - -@@ -901,24 +918,30 @@ fixup_reorder_chain (void) - if (e->goto_locus && !(e->flags & EDGE_ABNORMAL)) - { - basic_block nb; -+ rtx end; - -- if (simplejump_p (BB_END (e->src))) -+ insn = BB_END (e->src); -+ end = PREV_INSN (BB_HEAD (e->src)); -+ while (insn != end -+ && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0)) -+ insn = PREV_INSN (insn); -+ if (insn != end -+ && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus)) -+ continue; -+ if (simplejump_p (BB_END (e->src)) -+ && INSN_LOCATOR (BB_END (e->src)) == 0) - { -- if (INSN_LOCATOR (BB_END (e->src)) == (int) e->goto_locus) -- continue; -- if (INSN_LOCATOR (BB_END (e->src)) == 0) -- { -- INSN_LOCATOR (BB_END (e->src)) = e->goto_locus; -- continue; -- } -+ INSN_LOCATOR (BB_END (e->src)) = e->goto_locus; -+ continue; - } - if (e->dest != EXIT_BLOCK_PTR) - { - insn = BB_HEAD (e->dest); -- if (!INSN_P (insn)) -- insn = next_insn (insn); -- if (insn && INSN_P (insn) -- && INSN_LOCATOR (insn) == (int) e->goto_locus) -+ end = NEXT_INSN (BB_END (e->dest)); -+ while (insn != end && !INSN_P (insn)) -+ insn = NEXT_INSN (insn); -+ if (insn != end && INSN_LOCATOR (insn) -+ && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus)) - continue; - } - nb = split_edge (e); ---- gcc/rtl.h.jj 2008-10-07 21:25:44.000000000 +0200 -+++ gcc/rtl.h 2008-10-09 11:15:57.000000000 +0200 -@@ -1622,6 +1622,7 @@ extern int insn_line (const_rtx); - extern const char * insn_file (const_rtx); - extern int locator_line (int); - extern const char * locator_file (int); -+extern bool locator_eq (int, int); - extern int prologue_locator, epilogue_locator; - - /* In jump.c */ ---- gcc/cfgrtl.c.jj 2008-10-07 21:35:33.000000000 +0200 -+++ gcc/cfgrtl.c 2008-10-09 10:37:03.000000000 +0200 -@@ -2623,19 +2623,21 @@ cfg_layout_merge_blocks (basic_block a, - some unique locus, emit a nop with that locus in between. */ - if (!optimize && EDGE_SUCC (a, 0)->goto_locus) - { -- rtx insn = BB_END (a); -+ rtx insn = BB_END (a), end = PREV_INSN (BB_HEAD (a)); - int goto_locus = EDGE_SUCC (a, 0)->goto_locus; - -- if (NOTE_P (insn)) -- insn = prev_nonnote_insn (insn); -- if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus) -+ while (insn != end && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0)) -+ insn = PREV_INSN (insn); -+ if (insn != end && locator_eq (INSN_LOCATOR (insn), goto_locus)) - goto_locus = 0; - else - { - insn = BB_HEAD (b); -- if (!INSN_P (insn)) -- insn = next_insn (insn); -- if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus) -+ end = NEXT_INSN (BB_END (b)); -+ while (insn != end && !INSN_P (insn)) -+ insn = NEXT_INSN (insn); -+ if (insn != end && INSN_LOCATOR (insn) != 0 -+ && locator_eq (INSN_LOCATOR (insn), goto_locus)) - goto_locus = 0; - } - if (goto_locus) ---- gcc/cfgcleanup.c.jj 2008-10-07 21:35:33.000000000 +0200 -+++ gcc/cfgcleanup.c 2008-10-09 11:07:40.000000000 +0200 -@@ -482,7 +482,7 @@ try_forward_edges (int mode, basic_block - blocks with different locus are not optimized out. */ - int locus = single_succ_edge (target)->goto_locus; - -- if (locus && goto_locus && locus != goto_locus) -+ if (locus && goto_locus && !locator_eq (locus, goto_locus)) - counter = n_basic_blocks; - else if (locus) - goto_locus = locus; -@@ -491,7 +491,8 @@ try_forward_edges (int mode, basic_block - { - locus = INSN_LOCATOR (BB_END (target)); - -- if (locus && goto_locus && locus != goto_locus) -+ if (locus && goto_locus -+ && !locator_eq (locus, goto_locus)) - counter = n_basic_blocks; - else if (locus) - goto_locus = locus; diff --git a/gcc43-pr29609.patch b/gcc43-pr29609.patch deleted file mode 100644 index 1a8dfbf..0000000 --- a/gcc43-pr29609.patch +++ /dev/null @@ -1,899 +0,0 @@ -2008-10-08 Jakub Jelinek - - * cfgexpand.c (expand_gimple_cond_expr): Convert also goto_block and - goto_locus of true_edge into RTL locator. - -2008-10-07 Jakub Jelinek - - PR debug/29609 - PR debug/36690 - PR debug/37616 - * basic-block.h (struct edge_def): Add goto_block field. - * cfglayout.c (fixup_reorder_chain): Ensure that there is at least - one insn with locus corresponding to edge's goto_locus if !optimize. - * profile.c (branch_prob): Copy edge's goto_block. - * cfgrtl.c (force_nonfallthru_and_redirect): Use goto_locus for - emitted jumps. - (cfg_layout_merge_blocks): Emit a nop with edge's goto_locus - locator in between the merged basic blocks if !optimize and needed. - * cfgexpand.c (expand_gimple_cond_expr): Convert goto_block and - goto_locus into RTL locator. For unconditional jump use that - locator for the jump insn. - (expand_gimple_basic_block): Convert goto_block and goto_locus into - RTL locator for all remaining edges. For unconditional jump - use that locator for the jump insn. - * cfgcleanup.c (try_forward_edges): Avoid the optimization if - there is more than one edge or insn locator along the forwarding - edges and !optimize. If there is just one, set e->goto_locus. - * tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Set also - edge's goto_block. - (move_block_to_fn): Adjust edge's goto_block. - - * gcc.dg/debug/pr29609-1.c: New test. - * gcc.dg/debug/pr29609-2.c: New test. - * gcc.dg/debug/pr36690-1.c: New test. - * gcc.dg/debug/pr36690-2.c: New test. - * gcc.dg/debug/pr36690-3.c: New test. - * gcc.dg/debug/pr37616.c: New test. - * gcc.dg/debug/dwarf2/pr29609-1.c: New test. - * gcc.dg/debug/dwarf2/pr29609-2.c: New test. - * gcc.dg/debug/dwarf2/pr36690-1.c: New test. - * gcc.dg/debug/dwarf2/pr36690-2.c: New test. - * gcc.dg/debug/dwarf2/pr36690-3.c: New test. - * gcc.dg/debug/dwarf2/pr37616.c: New test. - ---- gcc/profile.c (revision 140947) -+++ gcc/profile.c (revision 140948) -@@ -825,7 +825,9 @@ branch_prob (void) - #endif - { - basic_block new = split_edge (e); -- single_succ_edge (new)->goto_locus = e->goto_locus; -+ edge ne = single_succ_edge (new); -+ ne->goto_locus = e->goto_locus; -+ ne->goto_block = e->goto_block; - } - if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL)) - && e->dest != EXIT_BLOCK_PTR) ---- gcc/cfgexpand.c (revision 140947) -+++ gcc/cfgexpand.c (revision 140948) -@@ -1316,7 +1316,12 @@ expand_gimple_cond_expr (basic_block bb, - add_reg_br_prob_note (last, true_edge->probability); - maybe_dump_rtl_for_tree_stmt (stmt, last); - if (true_edge->goto_locus) -- set_curr_insn_source_location (location_from_locus (true_edge->goto_locus)); -+ { -+ set_curr_insn_source_location (location_from_locus (true_edge->goto_locus)); -+ set_curr_insn_block (true_edge->goto_block); -+ true_edge->goto_locus = curr_insn_locator (); -+ } -+ true_edge->goto_block = NULL; - false_edge->flags |= EDGE_FALLTHRU; - return NULL; - } -@@ -1326,7 +1331,12 @@ expand_gimple_cond_expr (basic_block bb, - add_reg_br_prob_note (last, false_edge->probability); - maybe_dump_rtl_for_tree_stmt (stmt, last); - if (false_edge->goto_locus) -- set_curr_insn_source_location (location_from_locus (false_edge->goto_locus)); -+ { -+ set_curr_insn_source_location (location_from_locus (false_edge->goto_locus)); -+ set_curr_insn_block (false_edge->goto_block); -+ false_edge->goto_locus = curr_insn_locator (); -+ } -+ false_edge->goto_block = NULL; - true_edge->flags |= EDGE_FALLTHRU; - return NULL; - } -@@ -1334,6 +1344,13 @@ expand_gimple_cond_expr (basic_block bb, - jumpif (pred, label_rtx_for_bb (true_edge->dest)); - add_reg_br_prob_note (last, true_edge->probability); - last = get_last_insn (); -+ if (false_edge->goto_locus) -+ { -+ set_curr_insn_source_location (location_from_locus (false_edge->goto_locus)); -+ set_curr_insn_block (false_edge->goto_block); -+ false_edge->goto_locus = curr_insn_locator (); -+ } -+ false_edge->goto_block = NULL; - emit_jump (label_rtx_for_bb (false_edge->dest)); - - BB_END (bb) = last; -@@ -1356,9 +1373,13 @@ expand_gimple_cond_expr (basic_block bb, - - maybe_dump_rtl_for_tree_stmt (stmt, last2); - -- if (false_edge->goto_locus) -- set_curr_insn_source_location (location_from_locus (false_edge->goto_locus)); -- -+ if (true_edge->goto_locus) -+ { -+ set_curr_insn_source_location (location_from_locus (true_edge->goto_locus)); -+ set_curr_insn_block (true_edge->goto_block); -+ true_edge->goto_locus = curr_insn_locator (); -+ } -+ true_edge->goto_block = NULL; - return new_bb; - } - -@@ -1613,19 +1634,21 @@ expand_gimple_basic_block (basic_block b - } - } - -- /* Expand implicit goto. */ -+ /* Expand implicit goto and convert goto_locus. */ - FOR_EACH_EDGE (e, ei, bb->succs) - { -- if (e->flags & EDGE_FALLTHRU) -- break; -- } -- -- if (e && e->dest != bb->next_bb) -- { -- emit_jump (label_rtx_for_bb (e->dest)); -- if (e->goto_locus) -- set_curr_insn_source_location (location_from_locus (e->goto_locus)); -- e->flags &= ~EDGE_FALLTHRU; -+ if (e->goto_locus && e->goto_block) -+ { -+ set_curr_insn_source_location (location_from_locus (e->goto_locus)); -+ set_curr_insn_block (e->goto_block); -+ e->goto_locus = curr_insn_locator (); -+ } -+ e->goto_block = NULL; -+ if ((e->flags & EDGE_FALLTHRU) && e->dest != bb->next_bb) -+ { -+ emit_jump (label_rtx_for_bb (e->dest)); -+ e->flags &= ~EDGE_FALLTHRU; -+ } - } - - do_pending_stack_adjust (); ---- gcc/cfgcleanup.c (revision 140947) -+++ gcc/cfgcleanup.c (revision 140948) -@@ -429,7 +429,7 @@ try_forward_edges (int mode, basic_block - for (ei = ei_start (b->succs); (e = ei_safe_edge (ei)); ) - { - basic_block target, first; -- int counter; -+ int counter, goto_locus; - bool threaded = false; - int nthreaded_edges = 0; - bool may_thread = first_pass | df_get_bb_dirty (b); -@@ -447,6 +447,7 @@ try_forward_edges (int mode, basic_block - - target = first = e->dest; - counter = NUM_FIXED_BLOCKS; -+ goto_locus = e->goto_locus; - - /* If we are partitioning hot/cold basic_blocks, we don't want to mess - up jumps that cross between hot/cold sections. -@@ -476,6 +477,27 @@ try_forward_edges (int mode, basic_block - new_target = single_succ (target); - if (target == new_target) - counter = n_basic_blocks; -+ else if (!optimize) -+ { -+ /* When not optimizing, ensure that edges or forwarder -+ blocks with different locus are not optimized out. */ -+ int locus = single_succ_edge (target)->goto_locus; -+ -+ if (locus && goto_locus && locus != goto_locus) -+ counter = n_basic_blocks; -+ else if (locus) -+ goto_locus = locus; -+ -+ if (INSN_P (BB_END (target))) -+ { -+ locus = INSN_LOCATOR (BB_END (target)); -+ -+ if (locus && goto_locus && locus != goto_locus) -+ counter = n_basic_blocks; -+ else if (locus) -+ goto_locus = locus; -+ } -+ } - } - - /* Allow to thread only over one edge at time to simplify updating -@@ -539,6 +561,8 @@ try_forward_edges (int mode, basic_block - int edge_frequency; - int n = 0; - -+ e->goto_locus = goto_locus; -+ - /* Don't force if target is exit block. */ - if (threaded && target != EXIT_BLOCK_PTR) - { ---- gcc/cfglayout.c (revision 140947) -+++ gcc/cfglayout.c (revision 140948) -@@ -887,6 +887,46 @@ fixup_reorder_chain (void) - if (e && !can_fallthru (e->src, e->dest)) - force_nonfallthru (e); - } -+ -+ /* Ensure goto_locus from edges has some instructions with that locus -+ in RTL. */ -+ if (!optimize) -+ FOR_EACH_BB (bb) -+ { -+ edge e; -+ edge_iterator ei; -+ -+ FOR_EACH_EDGE (e, ei, bb->succs) -+ if (e->goto_locus && !(e->flags & EDGE_ABNORMAL)) -+ { -+ basic_block nb; -+ -+ if (simplejump_p (BB_END (e->src))) -+ { -+ if (INSN_LOCATOR (BB_END (e->src)) == (int) e->goto_locus) -+ continue; -+ if (INSN_LOCATOR (BB_END (e->src)) == 0) -+ { -+ INSN_LOCATOR (BB_END (e->src)) = e->goto_locus; -+ continue; -+ } -+ } -+ if (e->dest != EXIT_BLOCK_PTR) -+ { -+ insn = BB_HEAD (e->dest); -+ if (!INSN_P (insn)) -+ insn = next_insn (insn); -+ if (insn && INSN_P (insn) -+ && INSN_LOCATOR (insn) == (int) e->goto_locus) -+ continue; -+ } -+ nb = split_edge (e); -+ if (!INSN_P (BB_END (nb))) -+ BB_END (nb) = emit_insn_after_noloc (gen_nop (), BB_END (nb), -+ nb); -+ INSN_LOCATOR (BB_END (nb)) = e->goto_locus; -+ } -+ } - } - - /* Perform sanity checks on the insn chain. ---- gcc/basic-block.h (revision 140947) -+++ gcc/basic-block.h (revision 140948) -@@ -129,7 +129,8 @@ struct edge_def GTY(()) - /* Auxiliary info specific to a pass. */ - PTR GTY ((skip (""))) aux; - -- /* Location of any goto implicit in the edge, during tree-ssa. */ -+ /* Location of any goto implicit in the edge and associated BLOCK. */ -+ tree goto_block; - source_locus goto_locus; - - /* The index number corresponding to this edge in the edge vector ---- gcc/tree-cfg.c (revision 140947) -+++ gcc/tree-cfg.c (revision 140948) -@@ -634,6 +634,7 @@ make_cond_expr_edges (basic_block bb) - #else - e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry)); - #endif -+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry)); - e = make_edge (bb, else_bb, EDGE_FALSE_VALUE); - if (e) - { -@@ -642,6 +643,7 @@ make_cond_expr_edges (basic_block bb) - #else - e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry)); - #endif -+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry)); - } - - /* We do not need the gotos anymore. */ -@@ -841,6 +843,7 @@ make_goto_expr_edges (basic_block bb) - #else - e->goto_locus = EXPR_LOCUS (goto_t); - #endif -+ e->goto_block = TREE_BLOCK (goto_t); - bsi_remove (&last, true); - return; - } -@@ -5874,6 +5877,23 @@ move_block_to_fn (struct function *dest_ - update_stmt (stmt); - pop_cfun (); - } -+ -+ FOR_EACH_EDGE (e, ei, bb->succs) -+ if (e->goto_locus) -+ { -+ tree block = e->goto_block; -+ if (d->orig_block == NULL_TREE -+ || block == d->orig_block) -+ e->goto_block = d->new_block; -+#ifdef ENABLE_CHECKING -+ else if (block != d->new_block) -+ { -+ while (block && block != d->orig_block) -+ block = BLOCK_SUPERCONTEXT (block); -+ gcc_assert (block); -+ } -+#endif -+ } - } - - /* Examine the statements in BB (which is in SRC_CFUN); find and return ---- gcc/cfgrtl.c (revision 140947) -+++ gcc/cfgrtl.c (revision 140948) -@@ -1009,6 +1009,7 @@ force_nonfallthru_and_redirect (edge e, - rtx note; - edge new_edge; - int abnormal_edge_flags = 0; -+ int loc; - - /* In the case the last instruction is conditional jump to the next - instruction, first redirect the jump itself and then continue -@@ -1127,11 +1128,15 @@ force_nonfallthru_and_redirect (edge e, - else - jump_block = e->src; - -+ if (e->goto_locus && e->goto_block == NULL) -+ loc = e->goto_locus; -+ else -+ loc = 0; - e->flags &= ~EDGE_FALLTHRU; - if (target == EXIT_BLOCK_PTR) - { - #ifdef HAVE_return -- emit_jump_insn_after_noloc (gen_return (), BB_END (jump_block)); -+ emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc); - #else - gcc_unreachable (); - #endif -@@ -1139,7 +1144,7 @@ force_nonfallthru_and_redirect (edge e, - else - { - rtx label = block_label (target); -- emit_jump_insn_after_noloc (gen_jump (label), BB_END (jump_block)); -+ emit_jump_insn_after_setloc (gen_jump (label), BB_END (jump_block), loc); - JUMP_LABEL (BB_END (jump_block)) = label; - LABEL_NUSES (label)++; - } -@@ -2606,6 +2611,32 @@ cfg_layout_merge_blocks (basic_block a, - try_redirect_by_replacing_jump (EDGE_SUCC (a, 0), b, true); - gcc_assert (!JUMP_P (BB_END (a))); - -+ /* When not optimizing and the edge is the only place in RTL which holds -+ some unique locus, emit a nop with that locus in between. */ -+ if (!optimize && EDGE_SUCC (a, 0)->goto_locus) -+ { -+ rtx insn = BB_END (a); -+ int goto_locus = EDGE_SUCC (a, 0)->goto_locus; -+ -+ if (NOTE_P (insn)) -+ insn = prev_nonnote_insn (insn); -+ if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus) -+ goto_locus = 0; -+ else -+ { -+ insn = BB_HEAD (b); -+ if (!INSN_P (insn)) -+ insn = next_insn (insn); -+ if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus) -+ goto_locus = 0; -+ } -+ if (goto_locus) -+ { -+ BB_END (a) = emit_insn_after_noloc (gen_nop (), BB_END (a), a); -+ INSN_LOCATOR (BB_END (a)) = goto_locus; -+ } -+ } -+ - /* Possible line number notes should appear in between. */ - if (b->il.rtl->header) - { ---- gcc/testsuite/gcc.dg/debug/pr36690-1.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/pr36690-1.c (revision 140948) -@@ -0,0 +1,23 @@ -+/* PR debug/36690 */ -+/* Verify that break func is hit. -+ This version of the test just checks that it can be compiled, linked -+ and executed, further testing is done in corresponding gcc.dg/dwarf2/ -+ test and hopefully in gdb testsuite. */ -+/* { dg-do run } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+int i; -+ -+void -+func (void) -+{ -+ while (i == 1) -+ i = 0; -+} -+ -+int -+main (void) -+{ -+ func (); -+ return 0; -+} ---- gcc/testsuite/gcc.dg/debug/pr36690-2.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/pr36690-2.c (revision 140948) -@@ -0,0 +1,40 @@ -+/* PR debug/36690 */ -+/* Verify that breakpoint can be put on goto f1, it is hit and -+ varz at that spot is defined and contains 5. Nowhere else -+ in the function should be varz in the scope. -+ This version of the test just checks that it can be compiled, linked -+ and executed, further testing is done in corresponding gcc.dg/dwarf2/ -+ test and hopefully in gdb testsuite. */ -+/* { dg-do run } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+int cnt; -+ -+void -+bar (int i) -+{ -+ cnt += i; -+} -+ -+void -+foo (int i) -+{ -+ if (!i) -+ bar (0); -+ else -+ { -+ static int varz = 5; -+ goto f1; -+ } -+ bar (1); -+f1: -+ bar (2); -+} -+ -+int -+main (void) -+{ -+ foo (0); -+ foo (1); -+ return 0; -+} ---- gcc/testsuite/gcc.dg/debug/pr29609-1.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/pr29609-1.c (revision 140948) -@@ -0,0 +1,33 @@ -+/* PR debug/29609 */ -+/* Verify that breakpoint on the break is hit. -+ This version of the test just checks that it can be compiled, linked -+ and executed, further testing is done in corresponding gcc.dg/dwarf2/ -+ test and hopefully in gdb testsuite. */ -+/* { dg-do run } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+extern void abort (void); -+ -+int -+foo (void) -+{ -+ int a, i; -+ -+ for (i = 1; i <= 10; i++) -+ { -+ if (i < 3) -+ a = 1; -+ else -+ break; -+ a = 5; -+ } -+ return a; -+} -+ -+int -+main (void) -+{ -+ if (foo () != 5) -+ abort (); -+ return 0; -+} ---- gcc/testsuite/gcc.dg/debug/pr36690-3.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/pr36690-3.c (revision 140948) -@@ -0,0 +1,47 @@ -+/* PR debug/36690 */ -+/* { dg-do run } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+int cnt; -+ -+void -+bar (int i) -+{ -+ cnt += i; -+} -+ -+void -+foo (int i, int j) -+{ -+ if (j) -+ { -+ bar (i + 1); -+ goto f1; -+ } -+ bar (i + 2); -+ goto f2; -+f1: -+ if (i > 10) -+ goto f3; -+f2: -+ if (i > 40) -+ goto f4; -+ else -+ goto f5; -+f3: -+ bar (i); -+f4: -+ bar (i); -+f5: -+ bar (i); -+} -+ -+int -+main (void) -+{ -+ foo (0, 1); -+ foo (11, 1); -+ foo (21, 0); -+ foo (41, 0); -+ return 0; -+} ---- gcc/testsuite/gcc.dg/debug/pr29609-2.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/pr29609-2.c (revision 140948) -@@ -0,0 +1,53 @@ -+/* PR debug/29609 */ -+/* Verify that breakpoint on both goto failure; stmts is hit. -+ This version of the test just checks that it can be compiled, linked -+ and executed, further testing is done in corresponding gcc.dg/dwarf2/ -+ test and hopefully in gdb testsuite. */ -+/* { dg-do run } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+extern void abort (void); -+int x; -+ -+int -+foo (void) -+{ -+ return 0 ^ x; -+} -+ -+int -+bar (void) -+{ -+ return 1 ^ x; -+} -+ -+int -+baz (void) -+{ -+ int c; -+ -+ if (!foo ()) -+ goto failure; -+ -+ if (!bar ()) -+ goto failure; -+ -+ return 0; -+ -+failure: -+ return 1; -+} -+ -+int -+main (void) -+{ -+ if (baz () != 1) -+ abort (); -+ x = 1; -+ if (baz () != 1) -+ abort (); -+ x = 2; -+ if (baz () != 0) -+ abort (); -+ return 0; -+} ---- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c (revision 140948) -@@ -0,0 +1,22 @@ -+/* PR debug/36690 */ -+/* Verify that break func is hit. */ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -gdwarf-2 -dA" } */ -+ -+int i; -+ -+void -+func (void) -+{ -+ while (i == 1) -+ i = 0; -+} -+ -+int -+main (void) -+{ -+ func (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "pr36690-1.c:11" } } */ ---- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c (revision 140948) -@@ -0,0 +1,39 @@ -+/* PR debug/36690 */ -+/* Verify that breakpoint can be put on goto f1, it is hit and -+ varz at that spot is defined and contains 5. Nowhere else -+ in the function should be varz in the scope. */ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -gdwarf-2 -dA" } */ -+ -+int cnt; -+ -+void -+bar (int i) -+{ -+ cnt += i; -+} -+ -+void -+foo (int i) -+{ -+ if (!i) -+ bar (0); -+ else -+ { -+ static int varz = 5; -+ goto f1; -+ } -+ bar (1); -+f1: -+ bar (2); -+} -+ -+int -+main (void) -+{ -+ foo (0); -+ foo (1); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "pr36690-2.c:24" } } */ ---- gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c (revision 140948) -@@ -0,0 +1,32 @@ -+/* PR debug/29609 */ -+/* Verify that breakpoint on the break is hit. */ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -gdwarf-2 -dA" } */ -+ -+void abort (void); -+ -+int -+foo (void) -+{ -+ int a, i; -+ -+ for (i = 1; i <= 10; i++) -+ { -+ if (i < 3) -+ a = 1; -+ else -+ break; -+ a = 5; -+ } -+ return a; -+} -+ -+int -+main (void) -+{ -+ if (foo () != 5) -+ abort (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "pr29609-1.c:18" } } */ ---- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c (revision 140948) -@@ -0,0 +1,53 @@ -+/* PR debug/36690 */ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -gdwarf-2 -dA" } */ -+ -+int cnt; -+ -+void -+bar (int i) -+{ -+ cnt += i; -+} -+ -+void -+foo (int i, int j) -+{ -+ if (j) -+ { -+ bar (i + 1); -+ goto f1; -+ } -+ bar (i + 2); -+ goto f2; -+f1: -+ if (i > 10) -+ goto f3; -+f2: -+ if (i > 40) -+ goto f4; -+ else -+ goto f5; -+f3: -+ bar (i); -+f4: -+ bar (i); -+f5: -+ bar (i); -+} -+ -+int -+main (void) -+{ -+ foo (0, 1); -+ foo (11, 1); -+ foo (21, 0); -+ foo (41, 0); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "pr36690-3.c:19" } } */ -+/* { dg-final { scan-assembler "pr36690-3.c:22" } } */ -+/* { dg-final { scan-assembler "pr36690-3.c:25" } } */ -+/* { dg-final { scan-assembler "pr36690-3.c:28" } } */ -+/* { dg-final { scan-assembler "pr36690-3.c:30" } } */ ---- gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c (revision 140948) -@@ -0,0 +1,53 @@ -+/* PR debug/29609 */ -+/* Verify that breakpoint on both goto failure; stmts is hit. */ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -gdwarf-2 -dA" } */ -+ -+extern void abort (void); -+int x; -+ -+int -+foo (void) -+{ -+ return 0 ^ x; -+} -+ -+int -+bar (void) -+{ -+ return 1 ^ x; -+} -+ -+int -+baz (void) -+{ -+ int c; -+ -+ if (!foo ()) -+ goto failure; -+ -+ if (!bar ()) -+ goto failure; -+ -+ return 0; -+ -+failure: -+ return 1; -+} -+ -+int -+main (void) -+{ -+ if (baz () != 1) -+ abort (); -+ x = 1; -+ if (baz () != 1) -+ abort (); -+ x = 2; -+ if (baz () != 0) -+ abort (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "pr29609-2.c:27" } } */ -+/* { dg-final { scan-assembler "pr29609-2.c:30" } } */ ---- gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c (revision 140948) -@@ -0,0 +1,41 @@ -+/* PR debug/37616 */ -+/* Test that one can put breakpoints onto continue, exitlab and break -+ and actually see program reaching those breakpoints. */ -+/* { dg-do compile } */ -+/* { dg-options "-O0 -gdwarf-2 -dA" } */ -+ -+extern void abort (void); -+ -+int -+foo (int parm) -+{ -+ int varj, varm; -+ -+ for (varj = 0; varj < 10; varj++) -+ { -+ if (varj == 5) -+ continue; -+ if (varj == 7 && !parm) -+ goto exitlab; -+ if (varj == 9) -+ break; -+ varm = varj; -+ } -+ -+exitlab: -+ return varm; -+} -+ -+int -+main (void) -+{ -+ if (foo (0) != 6) -+ abort (); -+ if (foo (1) != 8) -+ abort (); -+ return 0; -+} -+ -+/* { dg-final { scan-assembler "pr37616.c:17" } } */ -+/* { dg-final { scan-assembler "pr37616.c:19" } } */ -+/* { dg-final { scan-assembler "pr37616.c:21" } } */ ---- gcc/testsuite/gcc.dg/debug/pr37616.c (revision 0) -+++ gcc/testsuite/gcc.dg/debug/pr37616.c (revision 140948) -@@ -0,0 +1,40 @@ -+/* PR debug/37616 */ -+/* Test that one can put breakpoints onto continue, exitlab and break -+ and actually see program reaching those breakpoints. -+ This version of the test just checks that it can be compiled, linked -+ and executed, further testing is done in corresponding gcc.dg/dwarf2/ -+ test and hopefully in gdb testsuite. */ -+/* { dg-do run } */ -+/* { dg-options "-O0 -g -dA" } */ -+ -+extern void abort (void); -+ -+int -+foo (int parm) -+{ -+ int varj, varm; -+ -+ for (varj = 0; varj < 10; varj++) -+ { -+ if (varj == 5) -+ continue; -+ if (varj == 7 && !parm) -+ goto exitlab; -+ if (varj == 9) -+ break; -+ varm = varj; -+ } -+ -+exitlab: -+ return varm; -+} -+ -+int -+main (void) -+{ -+ if (foo (0) != 6) -+ abort (); -+ if (foo (1) != 8) -+ abort (); -+ return 0; -+} diff --git a/gcc43-pr32139.patch b/gcc43-pr32139.patch deleted file mode 100644 index f356967..0000000 --- a/gcc43-pr32139.patch +++ /dev/null @@ -1,19 +0,0 @@ -2007-06-01 Jakub Jelinek - - PR tree-optimization/32139 - * gcc.c-torture/compile/20070531-1.c: New test. - ---- gcc/testsuite/gcc.c-torture/compile/20070531-1.c.jj 2007-05-31 13:47:22.000000000 +0200 -+++ gcc/testsuite/gcc.c-torture/compile/20070531-1.c 2007-06-01 10:57:15.000000000 +0200 -@@ -0,0 +1,11 @@ -+/* PR tree-optimization/32139 */ -+int foo (void); -+int bar (void) __attribute__ ((const)); -+ -+int -+test (int x) -+{ -+ int a = (x == 10000 ? foo : bar) (); -+ int b = (x == 10000 ? foo : bar) (); -+ return a + b; -+} diff --git a/gcc43-pr33763.patch b/gcc43-pr33763.patch deleted file mode 100644 index 9e9c90d..0000000 --- a/gcc43-pr33763.patch +++ /dev/null @@ -1,153 +0,0 @@ -2007-11-06 Jakub Jelinek - - PR tree-optimization/33763 - * gcc.dg/pr33763.c: New test. - * g++.dg/opt/inline13.C: New test. - -2007-11-06 Jan Hubicka - - PR tree-optimization/33763 - * tree-inline.c (expand_call_inline): Silently ignore always_inline - attribute for redefined extern inline functions. - ---- gcc/tree-inline.c.jj 2007-11-06 09:29:04.000000000 +0100 -+++ gcc/tree-inline.c 2007-11-06 16:19:12.000000000 +0100 -@@ -2582,6 +2582,12 @@ expand_call_inline (basic_block bb, tree - if (!cgraph_inline_p (cg_edge, &reason)) - { - if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) -+ /* For extern inline functions that get redefined we always -+ silently ignored alway_inline flag. Better behaviour would -+ be to be able to keep both bodies and use extern inline body -+ for inlining, but we can't do that because frontends overwrite -+ the body. */ -+ && !cg_edge->callee->local.redefined_extern_inline - /* Avoid warnings during early inline pass. */ - && (!flag_unit_at_a_time || cgraph_global_info_ready)) - { ---- gcc/testsuite/gcc.dg/pr33763.c.jj 2007-11-06 16:19:12.000000000 +0100 -+++ gcc/testsuite/gcc.dg/pr33763.c 2007-11-06 16:19:12.000000000 +0100 -@@ -0,0 +1,60 @@ -+/* PR tree-optimization/33763 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2" } */ -+ -+typedef struct -+{ -+ void *a; -+ void *b; -+} T; -+extern void *foo (const char *, const char *); -+extern void *bar (void *, const char *, T); -+extern int baz (const char *, int); -+ -+extern inline __attribute__ ((always_inline, gnu_inline)) int -+baz (const char *x, int y) -+{ -+ return 2; -+} -+ -+int -+baz (const char *x, int y) -+{ -+ return 1; -+} -+ -+int xa, xb; -+ -+static void * -+inl (const char *x, const char *y) -+{ -+ T t = { &xa, &xb }; -+ int *f = (int *) __builtin_malloc (sizeof (int)); -+ const char *z; -+ int o = 0; -+ void *r = 0; -+ -+ for (z = y; *z; z++) -+ { -+ if (*z == 'r') -+ o |= 1; -+ if (*z == 'w') -+ o |= 2; -+ } -+ if (o == 1) -+ *f = baz (x, 0); -+ if (o == 2) -+ *f = baz (x, 1); -+ if (o == 3) -+ *f = baz (x, 2); -+ -+ if (o && *f > 0) -+ r = bar (f, "w", t); -+ return r; -+} -+ -+void * -+foo (const char *x, const char *y) -+{ -+ return inl (x, y); -+} ---- gcc/testsuite/g++.dg/opt/inline13.C.jj 2007-11-06 16:20:20.000000000 +0100 -+++ gcc/testsuite/g++.dg/opt/inline13.C 2007-11-06 16:21:30.000000000 +0100 -@@ -0,0 +1,60 @@ -+// PR tree-optimization/33763 -+// { dg-do compile } -+// { dg-options "-O2" } -+ -+typedef struct -+{ -+ void *a; -+ void *b; -+} T; -+extern void *foo (const char *, const char *); -+extern void *bar (void *, const char *, T); -+extern int baz (const char *, int); -+ -+extern inline __attribute__ ((always_inline, gnu_inline)) int -+baz (const char *x, int y) -+{ -+ return 2; -+} -+ -+int -+baz (const char *x, int y) -+{ -+ return 1; -+} -+ -+int xa, xb; -+ -+static void * -+inl (const char *x, const char *y) -+{ -+ T t = { &xa, &xb }; -+ int *f = (int *) __builtin_malloc (sizeof (int)); -+ const char *z; -+ int o = 0; -+ void *r = 0; -+ -+ for (z = y; *z; z++) -+ { -+ if (*z == 'r') -+ o |= 1; -+ if (*z == 'w') -+ o |= 2; -+ } -+ if (o == 1) -+ *f = baz (x, 0); -+ if (o == 2) -+ *f = baz (x, 1); -+ if (o == 3) -+ *f = baz (x, 2); -+ -+ if (o && *f > 0) -+ r = bar (f, "w", t); -+ return r; -+} -+ -+void * -+foo (const char *x, const char *y) -+{ -+ return inl (x, y); -+} diff --git a/gcc43-pr34037.patch b/gcc43-pr34037.patch deleted file mode 100644 index 2c5a163..0000000 --- a/gcc43-pr34037.patch +++ /dev/null @@ -1,118 +0,0 @@ -2008-09-11 Jakub Jelinek - - PR debug/34037 - * gimplify.c (gimplify_type_sizes): When not optimizing, ensure - TYPE_MIN_VALUE and TYPE_MAX_VALUE is not is not DECL_IGNORED_P - VAR_DECL. - * cfgexpand.c (expand_used_vars): Keep DECL_ARTIFICIAL - !DECL_IGNORED_P vars in unexpanded_var_list list for instantiate_decls, - ggc_free other TREE_LIST nodes from that chain. - * function.c (instantiate_decls): Instantiate also DECL_RTL - of vars in cfun->unexpanded_var_list, free that list afterwards. - ---- gcc/gimplify.c.jj 2008-09-10 20:50:11.000000000 +0200 -+++ gcc/gimplify.c 2008-09-11 13:54:22.000000000 +0200 -@@ -7105,6 +7105,18 @@ gimplify_type_sizes (tree type, gimple_s - /* These types may not have declarations, so handle them here. */ - gimplify_type_sizes (TREE_TYPE (type), list_p); - gimplify_type_sizes (TYPE_DOMAIN (type), list_p); -+ /* When not optimizing, ensure VLA bounds aren't removed. */ -+ if (!optimize -+ && TYPE_DOMAIN (type) -+ && INTEGRAL_TYPE_P (TYPE_DOMAIN (type))) -+ { -+ t = TYPE_MIN_VALUE (TYPE_DOMAIN (type)); -+ if (t && TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t)) -+ DECL_IGNORED_P (t) = 0; -+ t = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); -+ if (t && TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t)) -+ DECL_IGNORED_P (t) = 0; -+ } - break; - - case RECORD_TYPE: ---- gcc/cfgexpand.c.jj 2008-09-09 16:08:04.000000000 +0200 -+++ gcc/cfgexpand.c 2008-09-11 15:01:00.000000000 +0200 -@@ -1440,7 +1440,7 @@ estimated_stack_frame_size (void) - static void - expand_used_vars (void) - { -- tree t, outer_block = DECL_INITIAL (current_function_decl); -+ tree t, next, outer_block = DECL_INITIAL (current_function_decl); - - /* Compute the phase of the stack frame for this function. */ - { -@@ -1453,11 +1453,15 @@ expand_used_vars (void) - - /* At this point all variables on the unexpanded_var_list with TREE_USED - set are not associated with any block scope. Lay them out. */ -- for (t = cfun->unexpanded_var_list; t; t = TREE_CHAIN (t)) -+ t = cfun->unexpanded_var_list; -+ cfun->unexpanded_var_list = NULL_TREE; -+ for (; t; t = next) - { - tree var = TREE_VALUE (t); - bool expand_now = false; - -+ next = TREE_CHAIN (t); -+ - /* We didn't set a block for static or extern because it's hard - to tell the difference between a global variable (re)declared - in a local scope, and one that's really declared there to -@@ -1484,9 +1488,25 @@ expand_used_vars (void) - TREE_USED (var) = 1; - - if (expand_now) -- expand_one_var (var, true, true); -+ { -+ expand_one_var (var, true, true); -+ if (DECL_ARTIFICIAL (var) && !DECL_IGNORED_P (var)) -+ { -+ rtx rtl = DECL_RTL_IF_SET (var); -+ -+ /* Keep artificial non-ignored vars in cfun->unexpanded_var_list -+ chain until instantiate_decls. */ -+ if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT)) -+ { -+ TREE_CHAIN (t) = cfun->unexpanded_var_list; -+ cfun->unexpanded_var_list = t; -+ continue; -+ } -+ } -+ } -+ -+ ggc_free (t); - } -- cfun->unexpanded_var_list = NULL_TREE; - - /* At this point, all variables within the block tree with TREE_USED - set are actually used by the optimized function. Lay them out. */ ---- gcc/function.c.jj 2008-09-09 21:13:24.000000000 +0200 -+++ gcc/function.c 2008-09-11 14:56:47.000000000 +0200 -@@ -1645,7 +1645,7 @@ instantiate_decls_1 (tree let) - static void - instantiate_decls (tree fndecl) - { -- tree decl; -+ tree decl, t, next; - - /* Process all parameters of the function. */ - for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl)) -@@ -1661,6 +1661,17 @@ instantiate_decls (tree fndecl) - - /* Now process all variables defined in the function or its subblocks. */ - instantiate_decls_1 (DECL_INITIAL (fndecl)); -+ -+ t = cfun->unexpanded_var_list; -+ cfun->unexpanded_var_list = NULL_TREE; -+ for (; t; t = next) -+ { -+ next = TREE_CHAIN (t); -+ decl = TREE_VALUE (t); -+ if (DECL_RTL_SET_P (decl)) -+ instantiate_decl_rtl (DECL_RTL (decl)); -+ ggc_free (t); -+ } - } - - /* Pass through the INSNS of function FNDECL and convert virtual register diff --git a/gcc43-pr36741-revert.patch b/gcc43-pr36741-revert.patch deleted file mode 100644 index 5a67d96..0000000 --- a/gcc43-pr36741-revert.patch +++ /dev/null @@ -1,47 +0,0 @@ -Revert: -2008-08-28 Dodji Seketeli - - PR c++/36741 - * tree.c (int_fits_type_p): Don't forget unsigned integers - of type sizetype which higher end word equals -1. - - * g++.dg/other/new-size-type.C: New test. - ---- gcc/tree.c (revision 139711) -+++ gcc/tree.c (revision 139710) -@@ -6296,21 +6296,6 @@ int_fits_type_p (const_tree c, const_tre - for "unknown if constant fits", 0 for "constant known *not* to fit" and 1 - for "constant known to fit". */ - -- if (TREE_TYPE (c) == sizetype -- && TYPE_UNSIGNED (TREE_TYPE (c)) -- && TREE_INT_CST_HIGH (c) == -1 -- && !TREE_OVERFLOW (c)) -- /* So c is an unsigned integer which type is sizetype. -- sizetype'd integers are sign extended even though they are -- unsigned. If the integer value fits in the lower end word of c, -- and if the higher end word has all its bits set to 1, that -- means the higher end bits are set to 1 only for sign extension. -- So let's convert c into an equivalent zero extended unsigned -- integer. */ -- c = force_fit_type_double (size_type_node, -- TREE_INT_CST_LOW (c), -- TREE_INT_CST_HIGH (c), -- false, false); - /* Check if C >= type_low_bound. */ - if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST) - { ---- gcc/testsuite/g++.dg/other/new-size-type.C (revision 139711) -+++ gcc/testsuite/g++.dg/other/new-size-type.C (revision 139710) -@@ -1,10 +1,10 @@ - // Contributed by Dodji Seketeli - // Origin: PR c++/36741 - - #include - const char* - foo() - { -- return new char[~static_cast(0)];// { dg-bogus "large" } -+ return new char[~static_cast(0)];// { dg-bogus "large" "" { xfail *-*-* } } - } - diff --git a/gcc43-pr37189.patch b/gcc43-pr37189.patch deleted file mode 100644 index 2e61f3d..0000000 --- a/gcc43-pr37189.patch +++ /dev/null @@ -1,117 +0,0 @@ -2008-09-03 Jakub Jelinek - - PR c++/37189 - * cp-tree.h (defer_mark_used_calls, deferred_mark_used_calls): New - extern decls. - * decl2.c (mark_used): If defer_mark_used_calls, push decl into - deferred_mark_used_calls vector and exit early. - * decl.c (defer_mark_used_calls, deferred_mark_used_calls): New - variables. - (finish_function): Set defer_mark_used_calls for the duration of the - function. Call mark_used on any queued decls. - - PR c++/37189 - * g++.dg/gomp/pr37189.C: New test. - ---- gcc/cp/decl2.c (revision 139954) -+++ gcc/cp/decl2.c (revision 139955) -@@ -3776,6 +3776,15 @@ mark_used (tree decl) - /* If we don't need a value, then we don't need to synthesize DECL. */ - if (skip_evaluation) - return; -+ -+ /* If within finish_function, defer the rest until that function -+ finishes, otherwise it might recurse. */ -+ if (defer_mark_used_calls) -+ { -+ VEC_safe_push (tree, gc, deferred_mark_used_calls, decl); -+ return; -+ } -+ - /* Normally, we can wait until instantiation-time to synthesize - DECL. However, if DECL is a static data member initialized with - a constant, we need the value right now because a reference to ---- gcc/cp/decl.c (revision 139954) -+++ gcc/cp/decl.c (revision 139955) -@@ -227,6 +227,11 @@ struct named_label_entry GTY(()) - function, two inside the body of a function in a local class, etc.) */ - int function_depth; - -+/* To avoid unwanted recursion, finish_function defers all mark_used calls -+ encountered during its execution until it finishes. */ -+bool defer_mark_used_calls; -+VEC(tree, gc) *deferred_mark_used_calls; -+ - /* States indicating how grokdeclarator() should handle declspecs marked - with __attribute__((deprecated)). An object declared as - __attribute__((deprecated)) suppresses warnings of uses of other -@@ -12033,6 +12038,9 @@ finish_function (int flags) - if (fndecl == NULL_TREE) - return error_mark_node; - -+ gcc_assert (!defer_mark_used_calls); -+ defer_mark_used_calls = true; -+ - if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl) - && DECL_VIRTUAL_P (fndecl) - && !processing_template_decl) -@@ -12232,6 +12240,17 @@ finish_function (int flags) - cxx_pop_function_context and then reset via pop_function_context. */ - current_function_decl = NULL_TREE; - -+ defer_mark_used_calls = false; -+ if (deferred_mark_used_calls) -+ { -+ unsigned int i; -+ tree decl; -+ -+ for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++) -+ mark_used (decl); -+ VEC_free (tree, gc, deferred_mark_used_calls); -+ } -+ - return fndecl; - } - ---- gcc/cp/cp-tree.h (revision 139954) -+++ gcc/cp/cp-tree.h (revision 139955) -@@ -4381,6 +4381,9 @@ extern void initialize_artificial_var ( - extern tree check_var_type (tree, tree); - extern tree reshape_init (tree, tree); - -+extern bool defer_mark_used_calls; -+extern GTY(()) VEC(tree, gc) *deferred_mark_used_calls; -+ - /* in decl2.c */ - extern bool check_java_method (tree); - extern tree build_memfn_type (tree, tree, cp_cv_quals); ---- gcc/testsuite/g++.dg/gomp/pr37189.C (revision 0) -+++ gcc/testsuite/g++.dg/gomp/pr37189.C (revision 139955) -@@ -0,0 +1,27 @@ -+// PR c++/37189 -+// { dg-do compile } -+// { dg-options "-fopenmp" } -+ -+struct S -+{ -+ S () {} -+ S (S const &) {} -+}; -+ -+struct T -+{ -+ S s; -+}; -+ -+void -+bar (T &) -+{ -+} -+ -+int -+foo () -+{ -+ T t; -+ #pragma omp task -+ bar (t); -+} diff --git a/gcc43-pr37738.patch b/gcc43-pr37738.patch deleted file mode 100644 index 90c3235..0000000 --- a/gcc43-pr37738.patch +++ /dev/null @@ -1,276 +0,0 @@ -2008-10-07 Jakub Jelinek - - * f95-lang.c (poplevel): Don't clear BLOCK_VARS if functionbody. - * trans-decl.c (gfc_build_qualified_array): Build accurate debug type - even if nest. - (build_entry_thunks, gfc_generate_function_code, - gfc_generate_constructors): Ensure DECL_SAVED_TREE is a BIND_EXPR - with DECL_INITIAL as its BLOCK. - - PR debug/37738 - * dwarf2out.c (common_block_die_table): New variable. - (common_block_die_table_hash, common_block_die_table_eq): New - functions. - (gen_variable_die): Look up a DW_TAG_common_block die for a particular - COMMON block in the current scope rather than globally. Optimize - DW_OP_addr SYMBOL_REF DW_OP_plus_uconst off into - DW_OP_addr SYMBOL_REF+off. - - * gfortran.dg/debug/pr37738.f: New test. - ---- gcc/testsuite/gfortran.dg/debug/pr37738.f (revision 0) -+++ gcc/testsuite/gfortran.dg/debug/pr37738.f (revision 140945) -@@ -0,0 +1,30 @@ -+C PR debug/37738 -+C { dg-do compile } -+C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "*" } { "-gdwarf-2" } } -+C { dg-options "-dA" } -+ -+ subroutine a -+ integer*4 a_i, c_i -+ common /block/a_i, c_i -+ a_i = 1 -+ c_i = 4 -+ end subroutine a -+ subroutine b -+ integer*4 b_i -+ common /block/b_i, d_i -+ b_i = 2 -+ d_i = 5 -+ end subroutine b -+ subroutine c -+ integer*4 a_i, c_i -+ common /block/a_i, c_i -+ if (a_i .ne. 2) call abort -+ if (c_i .ne. 5) call abort -+ end subroutine c -+ program abc -+ call a -+ call b -+ call c -+ end program abc -+ -+C { dg-final { scan-assembler-times "DIE\[^\n\]*DW_TAG_common_block" 3 } } ---- gcc/dwarf2out.c (revision 140943) -+++ gcc/dwarf2out.c (revision 140945) -@@ -4748,6 +4748,10 @@ static GTY((param_is (struct dwarf_file_ - The key is a DECL_UID() which is a unique number identifying each decl. */ - static GTY ((param_is (struct die_struct))) htab_t decl_die_table; - -+/* A hash table of references to DIE's that describe COMMON blocks. -+ The key is DECL_UID() ^ die_parent. */ -+static GTY ((param_is (struct die_struct))) htab_t common_block_die_table; -+ - /* Node of the variable location list. */ - struct var_loc_node GTY ((chain_next ("%h.next"))) - { -@@ -4960,6 +4964,8 @@ static void equate_type_number_to_die (t - static hashval_t decl_die_table_hash (const void *); - static int decl_die_table_eq (const void *, const void *); - static dw_die_ref lookup_decl_die (tree); -+static hashval_t common_block_die_table_hash (const void *); -+static int common_block_die_table_eq (const void *, const void *); - static hashval_t decl_loc_table_hash (const void *); - static int decl_loc_table_eq (const void *, const void *); - static var_loc_list *lookup_decl_loc (const_tree); -@@ -13812,6 +13818,26 @@ gen_subprogram_die (tree decl, dw_die_re - - } - -+/* Returns a hash value for X (which really is a die_struct). */ -+ -+static hashval_t -+common_block_die_table_hash (const void *x) -+{ -+ const_dw_die_ref d = (const_dw_die_ref) x; -+ return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent); -+} -+ -+/* Return nonzero if decl_id and die_parent of die_struct X is the same -+ as decl_id and die_parent of die_struct Y. */ -+ -+static int -+common_block_die_table_eq (const void *x, const void *y) -+{ -+ const_dw_die_ref d = (const_dw_die_ref) x; -+ const_dw_die_ref e = (const_dw_die_ref) y; -+ return d->decl_id == e->decl_id && d->die_parent == e->die_parent; -+} -+ - /* Generate a DIE to represent a declared data object. */ - - static void -@@ -13853,6 +13879,7 @@ gen_variable_die (tree decl, dw_die_ref - tree field; - dw_die_ref com_die; - dw_loc_descr_ref loc; -+ die_node com_die_arg; - - var_die = lookup_decl_die (decl); - if (var_die) -@@ -13863,21 +13890,41 @@ gen_variable_die (tree decl, dw_die_ref - if (loc) - { - if (off) -- add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst, -+ { -+ /* Optimize the common case. */ -+ if (loc->dw_loc_opc == DW_OP_addr -+ && loc->dw_loc_next == NULL -+ && GET_CODE (loc->dw_loc_oprnd1.v.val_addr) -+ == SYMBOL_REF) -+ loc->dw_loc_oprnd1.v.val_addr -+ = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off); -+ else -+ add_loc_descr (&loc, -+ new_loc_descr (DW_OP_plus_uconst, - off, 0)); -+ } - add_AT_loc (var_die, DW_AT_location, loc); - remove_AT (var_die, DW_AT_declaration); - } - } - return; - } -+ -+ if (common_block_die_table == NULL) -+ common_block_die_table -+ = htab_create_ggc (10, common_block_die_table_hash, -+ common_block_die_table_eq, NULL); -+ - field = TREE_OPERAND (DECL_VALUE_EXPR (decl), 0); -- com_die = lookup_decl_die (com_decl); -+ com_die_arg.decl_id = DECL_UID (com_decl); -+ com_die_arg.die_parent = context_die; -+ com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg); - loc = loc_descriptor_from_tree (com_decl); - if (com_die == NULL) - { - const char *cnam - = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl)); -+ void **slot; - - com_die = new_die (DW_TAG_common_block, context_die, decl); - add_name_and_src_coords_attributes (com_die, com_decl); -@@ -13891,7 +13938,9 @@ gen_variable_die (tree decl, dw_die_ref - else if (DECL_EXTERNAL (decl)) - add_AT_flag (com_die, DW_AT_declaration, 1); - add_pubname_string (cnam, com_die); /* ??? needed? */ -- equate_decl_number_to_die (com_decl, com_die); -+ com_die->decl_id = DECL_UID (com_decl); -+ slot = htab_find_slot (common_block_die_table, com_die, INSERT); -+ *slot = (void *) com_die; - } - else if (get_AT (com_die, DW_AT_location) == NULL && loc) - { -@@ -13907,7 +13956,17 @@ gen_variable_die (tree decl, dw_die_ref - if (loc) - { - if (off) -- add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst, off, 0)); -+ { -+ /* Optimize the common case. */ -+ if (loc->dw_loc_opc == DW_OP_addr -+ && loc->dw_loc_next == NULL -+ && GET_CODE (loc->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF) -+ loc->dw_loc_oprnd1.v.val_addr -+ = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off); -+ else -+ add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst, -+ off, 0)); -+ } - add_AT_loc (var_die, DW_AT_location, loc); - } - else if (DECL_EXTERNAL (decl)) ---- gcc/fortran/f95-lang.c (revision 140943) -+++ gcc/fortran/f95-lang.c (revision 140945) -@@ -457,14 +457,8 @@ poplevel (int keep, int reverse, int fun - current_binding_level = current_binding_level->level_chain; - - if (functionbody) -- { -- /* This is the top level block of a function. The ..._DECL chain stored -- in BLOCK_VARS are the function's parameters (PARM_DECL nodes). Don't -- leave them in the BLOCK because they are found in the FUNCTION_DECL -- instead. */ -- DECL_INITIAL (current_function_decl) = block_node; -- BLOCK_VARS (block_node) = 0; -- } -+ /* This is the top level block of a function. */ -+ DECL_INITIAL (current_function_decl) = block_node; - else if (current_binding_level == global_binding_level) - /* When using gfc_start_block/gfc_finish_block from middle-end hooks, - don't add newly created BLOCKs as sublocks of global_binding_level. */ ---- gcc/fortran/trans-decl.c (revision 140943) -+++ gcc/fortran/trans-decl.c (revision 140945) -@@ -704,7 +704,7 @@ gfc_build_qualified_array (tree decl, gf - layout_type (type); - } - -- if (nest || write_symbols == NO_DEBUG) -+ if (write_symbols == NO_DEBUG) - return; - - if (TYPE_NAME (type) != NULL_TREE -@@ -1761,7 +1761,7 @@ build_entry_thunks (gfc_namespace * ns) - - thunk_fndecl = thunk_sym->backend_decl; - -- gfc_start_block (&body); -+ gfc_init_block (&body); - - /* Pass extra parameter identifying this entry point. */ - tmp = build_int_cst (gfc_array_index_type, el->id); -@@ -1869,8 +1869,12 @@ build_entry_thunks (gfc_namespace * ns) - - /* Finish off this function and send it for code generation. */ - DECL_SAVED_TREE (thunk_fndecl) = gfc_finish_block (&body); -+ tmp = getdecls (); - poplevel (1, 0, 1); - BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl; -+ DECL_SAVED_TREE (thunk_fndecl) -+ = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl), -+ DECL_INITIAL (thunk_fndecl)); - - /* Output the GENERIC tree. */ - dump_function (TDI_original, thunk_fndecl); -@@ -3652,7 +3656,7 @@ gfc_generate_function_code (gfc_namespac - - trans_function_start (sym); - -- gfc_start_block (&block); -+ gfc_init_block (&block); - - if (ns->entries && ns->proc_name->ts.type == BT_CHARACTER) - { -@@ -3886,11 +3890,16 @@ gfc_generate_function_code (gfc_namespac - saved_function_decls = NULL_TREE; - - DECL_SAVED_TREE (fndecl) = gfc_finish_block (&block); -+ decl = getdecls (); - - /* Finish off this function and send it for code generation. */ - poplevel (1, 0, 1); - BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; - -+ DECL_SAVED_TREE (fndecl) -+ = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl), -+ DECL_INITIAL (fndecl)); -+ - /* Output the GENERIC tree. */ - dump_function (TDI_original, fndecl); - -@@ -3969,9 +3978,13 @@ gfc_generate_constructors (void) - DECL_SAVED_TREE (fndecl) = build_stmt (EXPR_STMT, tmp); - } - -+ decl = getdecls (); - poplevel (1, 0, 1); - - BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; -+ DECL_SAVED_TREE (fndecl) -+ = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl), -+ DECL_INITIAL (fndecl)); - - free_after_parsing (cfun); - free_after_compilation (cfun); diff --git a/gcc43-pr37858.patch b/gcc43-pr37858.patch deleted file mode 100644 index 21fa405..0000000 --- a/gcc43-pr37858.patch +++ /dev/null @@ -1,32 +0,0 @@ -2008-11-03 Jakub Jelinek - - PR middle-end/37858 - * passes.c (execute_one_pass): Don't look at cfun->curr_properties - for ipa and simple ipa passes. - - * gcc.dg/pr37858.c: New test. - ---- gcc/passes.c (revision 141544) -+++ gcc/passes.c (revision 141545) -@@ -1289,6 +1289,7 @@ execute_one_pass (struct opt_pass *pass) - if (initializing_dump - && dump_file - && graph_dump_format != no_graph -+ && cfun - && (cfun->curr_properties & (PROP_cfg | PROP_rtl)) - == (PROP_cfg | PROP_rtl)) - { ---- gcc/testsuite/gcc.dg/pr37858.c (revision 0) -+++ gcc/testsuite/gcc.dg/pr37858.c (revision 141545) -@@ -0,0 +1,11 @@ -+/* PR middle-end/37858 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2 -fdump-ipa-early_local_cleanups -dv" } */ -+ -+int -+main (void) -+{ -+ return 0; -+} -+ -+/* { dg-final { cleanup-ipa-dump "early_local_cleanups" } } */ diff --git a/gcc43-pr37870.patch b/gcc43-pr37870.patch deleted file mode 100644 index 3e43d4f..0000000 --- a/gcc43-pr37870.patch +++ /dev/null @@ -1,79 +0,0 @@ -2008-10-29 Jakub Jelinek - - PR middle-end/37870 - * expmed.c (extract_bit_field_1): If int_mode_for_mode returns - BLKmode for non-memory, convert using a wider MODE_INT mode - or through memory. - - * gcc.target/i386/pr37870.c: New test. - ---- gcc/expmed.c (revision 141429) -+++ gcc/expmed.c (revision 141430) -@@ -1278,9 +1278,8 @@ extract_bit_field_1 (rtx str_rtx, unsign - { - if (MEM_P (op0)) - op0 = adjust_address (op0, imode, 0); -- else -+ else if (imode != BLKmode) - { -- gcc_assert (imode != BLKmode); - op0 = gen_lowpart (imode, op0); - - /* If we got a SUBREG, force it into a register since we -@@ -1288,6 +1287,24 @@ extract_bit_field_1 (rtx str_rtx, unsign - if (GET_CODE (op0) == SUBREG) - op0 = force_reg (imode, op0); - } -+ else if (REG_P (op0)) -+ { -+ rtx reg, subreg; -+ imode = smallest_mode_for_size (GET_MODE_BITSIZE (GET_MODE (op0)), -+ MODE_INT); -+ reg = gen_reg_rtx (imode); -+ subreg = gen_lowpart_SUBREG (GET_MODE (op0), reg); -+ emit_move_insn (subreg, op0); -+ op0 = reg; -+ bitnum += SUBREG_BYTE (subreg) * BITS_PER_UNIT; -+ } -+ else -+ { -+ rtx mem = assign_stack_temp (GET_MODE (op0), -+ GET_MODE_SIZE (GET_MODE (op0)), 0); -+ emit_move_insn (mem, op0); -+ op0 = adjust_address (mem, BLKmode, 0); -+ } - } - } - ---- gcc/testsuite/gcc.target/i386/pr37870.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/pr37870.c (revision 141430) -@@ -0,0 +1,29 @@ -+/* PR middle-end/37870 */ -+/* { dg-do run } */ -+/* { dg-options "-O2" } */ -+ -+unsigned int -+foo (long double x) -+{ -+ struct { char a[8]; unsigned int b:7; } c; -+ __builtin_memcpy (&c, &x, sizeof (c)); -+ return c.b; -+} -+ -+unsigned int -+bar (long double x) -+{ -+ union { struct { char a[8]; unsigned int b:7; } c; long double d; } u; -+ u.d = x; -+ return u.c.b; -+} -+ -+int -+main (void) -+{ -+ if (foo (1.245L) != bar (1.245L) -+ || foo (245.67L) != bar (245.67L) -+ || foo (0.00567L) != bar (0.00567L)) -+ __builtin_abort (); -+ return 0; -+} diff --git a/gcc43-pr37879.patch b/gcc43-pr37879.patch deleted file mode 100644 index a6deb97..0000000 --- a/gcc43-pr37879.patch +++ /dev/null @@ -1,59 +0,0 @@ -2008-10-27 Jakub Jelinek - - PR tree-optimization/37879 - * predict.c (tree_estimate_probability): Check if last_stmt is - non-NULL before dereferencing it. - - * gcc.dg/pr37879.c: New test. - ---- gcc/predict.c (revision 141389) -+++ gcc/predict.c (revision 141390) -@@ -1374,6 +1374,7 @@ tree_estimate_probability (void) - { - edge e; - edge_iterator ei; -+ tree last; - - FOR_EACH_EDGE (e, ei, bb->succs) - { -@@ -1396,7 +1397,8 @@ tree_estimate_probability (void) - && e->dest != EXIT_BLOCK_PTR - && single_succ_p (e->dest) - && single_succ_edge (e->dest)->dest == EXIT_BLOCK_PTR -- && TREE_CODE (last_stmt (e->dest)) == RETURN_EXPR) -+ && (last = last_stmt (e->dest)) != NULL_TREE -+ && TREE_CODE (last) == RETURN_EXPR) - { - edge e1; - edge_iterator ei1; ---- gcc/testsuite/gcc.dg/pr37879.c (revision 0) -+++ gcc/testsuite/gcc.dg/pr37879.c (revision 141390) -@@ -0,0 +1,28 @@ -+/* PR tree-optimization/37879 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2" } */ -+ -+static inline void bar (int) __attribute__ ((noreturn)); -+void baz () __attribute__ ((noreturn)); -+ -+inline int -+foo (int i) -+{ -+ return i; -+} -+ -+int i = 23; -+static inline void -+bar (int j) -+{ -+ if (j) -+ asm (""); -+} /* { dg-warning "does return" } */ -+ -+void -+baz () -+{ -+ int j; -+ bar (foo (j = i++)); -+ asm (""); -+} diff --git a/gcc43-pr37924.patch b/gcc43-pr37924.patch deleted file mode 100644 index 62baac2..0000000 --- a/gcc43-pr37924.patch +++ /dev/null @@ -1,106 +0,0 @@ -2008-10-28 Jakub Jelinek - - PR c/37924 - * combine.c (make_compound_operation): Don't call make_extraction with - non-positive length. - (simplify_shift_const_1): Canonicalize count even if complement_p. - - * gcc.c-torture/execute/pr37924.c: New test. - ---- gcc/combine.c (revision 141412) -+++ gcc/combine.c (revision 141413) -@@ -7024,7 +7024,8 @@ make_compound_operation (rtx x, enum rtx - if (GET_CODE (rhs) == CONST_INT - && GET_CODE (lhs) == ASHIFT - && GET_CODE (XEXP (lhs, 1)) == CONST_INT -- && INTVAL (rhs) >= INTVAL (XEXP (lhs, 1))) -+ && INTVAL (rhs) >= INTVAL (XEXP (lhs, 1)) -+ && INTVAL (rhs) < mode_width) - { - new = make_compound_operation (XEXP (lhs, 0), next_code); - new = make_extraction (mode, new, -@@ -7044,6 +7045,7 @@ make_compound_operation (rtx x, enum rtx - && (OBJECT_P (SUBREG_REG (lhs)))) - && GET_CODE (rhs) == CONST_INT - && INTVAL (rhs) < HOST_BITS_PER_WIDE_INT -+ && INTVAL (rhs) < mode_width - && (new = extract_left_shift (lhs, INTVAL (rhs))) != 0) - new = make_extraction (mode, make_compound_operation (new, next_code), - 0, NULL_RTX, mode_width - INTVAL (rhs), -@@ -9023,11 +9025,6 @@ simplify_shift_const_1 (enum rtx_code co - if (GET_CODE (varop) == CLOBBER) - return NULL_RTX; - -- /* If we discovered we had to complement VAROP, leave. Making a NOT -- here would cause an infinite loop. */ -- if (complement_p) -- break; -- - /* Convert ROTATERT to ROTATE. */ - if (code == ROTATERT) - { -@@ -9073,6 +9070,11 @@ simplify_shift_const_1 (enum rtx_code co - } - } - -+ /* If we discovered we had to complement VAROP, leave. Making a NOT -+ here would cause an infinite loop. */ -+ if (complement_p) -+ break; -+ - /* An arithmetic right shift of a quantity known to be -1 or 0 - is a no-op. */ - if (code == ASHIFTRT ---- gcc/testsuite/gcc.c-torture/execute/pr37924.c (revision 0) -+++ gcc/testsuite/gcc.c-torture/execute/pr37924.c (revision 141413) -@@ -0,0 +1,50 @@ -+/* PR c/37924 */ -+ -+extern void abort (void); -+ -+signed char a; -+unsigned char b; -+ -+int -+test1 (void) -+{ -+ int c = -1; -+ return ((unsigned int) (a ^ c)) >> 9; -+} -+ -+int -+test2 (void) -+{ -+ int c = -1; -+ return ((unsigned int) (b ^ c)) >> 9; -+} -+ -+int -+main (void) -+{ -+ a = 0; -+ if (test1 () != (-1U >> 9)) -+ abort (); -+ a = 0x40; -+ if (test1 () != (-1U >> 9)) -+ abort (); -+ a = 0x80; -+ if (test1 () != (a < 0) ? 0 : (-1U >> 9)) -+ abort (); -+ a = 0xff; -+ if (test1 () != (a < 0) ? 0 : (-1U >> 9)) -+ abort (); -+ b = 0; -+ if (test2 () != (-1U >> 9)) -+ abort (); -+ b = 0x40; -+ if (test2 () != (-1U >> 9)) -+ abort (); -+ b = 0x80; -+ if (test2 () != (-1U >> 9)) -+ abort (); -+ b = 0xff; -+ if (test2 () != (-1U >> 9)) -+ abort (); -+ return 0; -+} diff --git a/gcc43-rh251682.patch b/gcc43-rh251682.patch deleted file mode 100644 index e96ae6f..0000000 --- a/gcc43-rh251682.patch +++ /dev/null @@ -1,89 +0,0 @@ -2008-04-01 Jakub Jelinek - - PR pch/13675 - * files.c (struct _cpp_file): Remove pch field. - (pch_open_file): Don't set file->pch, just file->pchname. - (should_stack_file): After pfile->cb.read_pch call - free pchname and clear pchname, don't close file->fd. - Test file->pchname instead of file->pch. Don't close fd after cb. - (_cpp_stack_include): Test file->pchname instead of file->pch. - - * c-pch.c (c_common_read_pch): On error close (fd) resp. fclose (f). - ---- libcpp/files.c.jj 2008-02-18 23:50:17.000000000 +0100 -+++ libcpp/files.c 2008-03-31 15:59:01.000000000 +0200 -@@ -106,9 +106,6 @@ struct _cpp_file - - /* If BUFFER above contains the true contents of the file. */ - bool buffer_valid; -- -- /* File is a PCH (on return from find_include_file). */ -- bool pch; - }; - - /* A singly-linked list for all searches for a given file name, with -@@ -322,9 +319,7 @@ pch_open_file (cpp_reader *pfile, _cpp_f - } - closedir (pchdir); - } -- if (valid) -- file->pch = true; -- else -+ if (!valid) - *invalid_pch = true; - } - -@@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _c - return false; - - /* Handle PCH files immediately; don't stack them. */ -- if (file->pch) -+ if (file->pchname) - { - pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path); -- close (file->fd); - file->fd = -1; -+ free ((void *) file->pchname); -+ file->pchname = NULL; - return false; - } - -@@ -916,7 +912,7 @@ _cpp_stack_include (cpp_reader *pfile, c - complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we - found a PCH file (in which case linemap_add is not called) or we - were included from the command-line. */ -- if (! file->pch && file->err_no == 0 && type != IT_CMDLINE) -+ if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE) - pfile->line_table->highest_location--; - - return _cpp_stack_file (pfile, file, type == IT_IMPORT); ---- gcc/c-pch.c.jj 2008-02-18 23:46:08.000000000 +0100 -+++ gcc/c-pch.c 2008-03-31 15:56:00.000000000 +0200 -@@ -372,6 +372,7 @@ c_common_read_pch (cpp_reader *pfile, co - if (f == NULL) - { - cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen"); -+ close (fd); - return; - } - -@@ -380,6 +381,7 @@ c_common_read_pch (cpp_reader *pfile, co - if (fread (&h, sizeof (h), 1, f) != 1) - { - cpp_errno (pfile, CPP_DL_ERROR, "reading"); -+ fclose (f); - return; - } - -@@ -425,7 +427,10 @@ c_common_read_pch (cpp_reader *pfile, co - gt_pch_restore (f); - - if (cpp_read_state (pfile, name, f, smd) != 0) -- return; -+ { -+ fclose (f); -+ return; -+ } - - fclose (f); - diff --git a/gcc43-rh330771.patch b/gcc43-rh330771.patch deleted file mode 100644 index f52b919..0000000 --- a/gcc43-rh330771.patch +++ /dev/null @@ -1,34 +0,0 @@ -2007-10-16 Jakub Jelinek - - * Makefile.am (libgcj_tools_la_LIBADD): Add. - * Makefile.in: Regenerated. - ---- libjava/Makefile.am.jj 2007-03-17 09:20:30.000000000 +0100 -+++ libjava/Makefile.am 2007-10-16 15:45:14.000000000 +0200 -@@ -277,6 +277,8 @@ EXTRA_libgcj_la_SOURCES = java/lang/Obje - - libgcj_tools_la_SOURCES = classpath/tools/tools.zip - libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes -fsource-filename=$(here)/classpath/tools/all-classes.lst -+## See jv_convert_LDADD. -+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la - libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) ---- libjava/Makefile.in.jj 2007-07-04 21:11:11.000000000 +0200 -+++ libjava/Makefile.in 2007-10-16 15:56:07.000000000 +0200 -@@ -153,7 +153,6 @@ am__objects_1 = gnu/gcj/xlib/lib_gnu_awt - am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1) - lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS) - @XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir) --libgcj_tools_la_LIBADD = - am_libgcj_tools_la_OBJECTS = classpath/tools/libgcj_tools_la-tools.lo - libgcj_tools_la_OBJECTS = $(am_libgcj_tools_la_OBJECTS) - @INTERPRETER_TRUE@am__DEPENDENCIES_1 = gnu/classpath/jdwp.lo \ -@@ -941,6 +940,7 @@ libgcj_la_LINK = $(LIBLINK) - EXTRA_libgcj_la_SOURCES = java/lang/Object.java - libgcj_tools_la_SOURCES = classpath/tools/tools.zip - libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes -fsource-filename=$(here)/classpath/tools/all-classes.lst -+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la - libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \ - -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ - $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) diff --git a/gcc43-rh341221.patch b/gcc43-rh341221.patch deleted file mode 100644 index 28e73b0..0000000 --- a/gcc43-rh341221.patch +++ /dev/null @@ -1,28 +0,0 @@ -2007-10-21 Jakub Jelinek - - * doc/Makefile.am (POD2MAN): Set date from cp-tools.texinfo - timestamp rather than from current date. - * doc/Makefile.in: Regenerated. - ---- libjava/classpath/doc/Makefile.am.jj 2007-12-07 17:55:00.000000000 +0100 -+++ libjava/classpath/doc/Makefile.am 2007-12-07 18:55:28.000000000 +0100 -@@ -30,7 +30,7 @@ TOOLS_MANFILES = \ - gserialver.1 \ - gtnameserv.1 - --POD2MAN = pod2man --center="GNU" --release="$(VERSION)" -+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')" - TEXI2POD = perl $(srcdir)/texi2pod.pl - STAMP = echo timestamp > - ---- libjava/classpath/doc/Makefile.in.jj 2007-12-07 17:55:00.000000000 +0100 -+++ libjava/classpath/doc/Makefile.in 2007-12-07 18:55:43.000000000 +0100 -@@ -357,7 +357,7 @@ TOOLS_MANFILES = \ - gserialver.1 \ - gtnameserv.1 - --POD2MAN = pod2man --center="GNU" --release="$(VERSION)" -+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')" - TEXI2POD = perl $(srcdir)/texi2pod.pl - STAMP = echo timestamp > - @GENINSRC_FALSE@STAMP_GENINSRC = diff --git a/gcc43-sparc-config-detection.patch b/gcc43-sparc-config-detection.patch deleted file mode 100644 index 4ee95d4..0000000 --- a/gcc43-sparc-config-detection.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 -+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 -@@ -2343,7 +2343,7 @@ sparc-*-elf*) - extra_parts="crti.o crtn.o crtbegin.o crtend.o" - use_fixproto=yes - ;; --sparc-*-linux*) # SPARC's running GNU/Linux, libc6 -+sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6 - tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h" - extra_options="${extra_options} sparc/long-double-switch.opt" - tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm" -@@ -2477,7 +2477,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* - esac - need_64bit_hwint=yes - ;; --sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux -+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux - tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h" - extra_options="${extra_options} sparc/long-double-switch.opt" - tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm" ---- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 -+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 -@@ -572,7 +572,7 @@ sparc64-*-openbsd*) - ;; - sparc-*-elf*) - ;; --sparc-*-linux*) # SPARC's running GNU/Linux, libc6 -+sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6 - extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} sparc/t-crtfm" - ;; -@@ -590,7 +590,7 @@ sparc-wrs-vxworks) - ;; - sparc64-*-freebsd*|ultrasparc-*-freebsd*) - ;; --sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux -+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux - extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} sparc/t-crtfm" - ;; diff --git a/gcc43-x86_64-va_start.patch b/gcc43-x86_64-va_start.patch deleted file mode 100644 index efa06bc..0000000 --- a/gcc43-x86_64-va_start.patch +++ /dev/null @@ -1,355 +0,0 @@ -2008-09-02 H.J. Lu - Jakub Jelinek - - * config/i386/i386.c (X86_64_VARARGS_SIZE): Removed. - (setup_incoming_varargs_64): Set/check ix86_varargs_gpr_size and - ix86_varargs_fpr_size. Use ix86_varargs_gpr_size instead of - REGPARM_MAX. Don't set ix86_save_varrargs_registers. - (ix86_va_start): Check ix86_varargs_gpr_size and - ix86_varargs_fpr_size instead of cfun->va_list_gpr_size and - cfun->va_list_fpr_size, respectively. Subtract 8*REGPARM_MAX - from frame pointer if ix86_varargs_gpr_size == 0. - (ix86_compute_frame_layout): Updated. - * config/i386/i386.h (ix86_save_varrargs_registers): Removed. - (ix86_varargs_gpr_size): Define. - (ix86_varargs_fpr_size): Likewise. - (machine_function): Remove save_varrargs_registers. - Add varargs_gpr_size and varargs_fpr_size. - - * gcc.target/i386/amd64-abi-3.c: New test. - * gcc.target/i386/amd64-abi-4.c: Likewise. - * gcc.target/i386/amd64-abi-5.c: Likewise. - * gcc.target/i386/amd64-abi-6.c: Likewise. - ---- gcc/config/i386/i386.h (revision 139909) -+++ gcc/config/i386/i386.h (revision 139910) -@@ -2440,7 +2440,8 @@ struct machine_function GTY(()) - struct stack_local_entry *stack_locals; - const char *some_ld_name; - rtx force_align_arg_pointer; -- int save_varrargs_registers; -+ int varargs_gpr_size; -+ int varargs_fpr_size; - int accesses_prev_frame; - int optimize_mode_switching[MAX_386_ENTITIES]; - int needs_cld; -@@ -2463,7 +2464,8 @@ struct machine_function GTY(()) - }; - - #define ix86_stack_locals (cfun->machine->stack_locals) --#define ix86_save_varrargs_registers (cfun->machine->save_varrargs_registers) -+#define ix86_varargs_gpr_size (cfun->machine->varargs_gpr_size) -+#define ix86_varargs_fpr_size (cfun->machine->varargs_fpr_size) - #define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching) - #define ix86_current_function_needs_cld (cfun->machine->needs_cld) - #define ix86_tls_descriptor_calls_expanded_in_cfun \ ---- gcc/config/i386/i386.c (revision 139909) -+++ gcc/config/i386/i386.c (revision 139910) -@@ -1616,9 +1616,6 @@ rtx ix86_compare_op0 = NULL_RTX; - rtx ix86_compare_op1 = NULL_RTX; - rtx ix86_compare_emitted = NULL_RTX; - --/* Size of the register save area. */ --#define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16) -- - /* Define the structure for the machine field in struct function. */ - - struct stack_local_entry GTY(()) -@@ -4976,11 +4973,22 @@ setup_incoming_varargs_64 (CUMULATIVE_AR - alias_set_type set; - int i; - -- if (! cfun->va_list_gpr_size && ! cfun->va_list_fpr_size) -+ /* GPR size of varargs save area. */ -+ if (cfun->va_list_gpr_size) -+ ix86_varargs_gpr_size = REGPARM_MAX * UNITS_PER_WORD; -+ else -+ ix86_varargs_gpr_size = 0; -+ -+ /* FPR size of varargs save area. We don't need it if we don't pass -+ anything in SSE registers. */ -+ if (cum->sse_nregs && cfun->va_list_fpr_size) -+ ix86_varargs_fpr_size = SSE_REGPARM_MAX * 16; -+ else -+ ix86_varargs_fpr_size = 0; -+ -+ if (! ix86_varargs_gpr_size && ! ix86_varargs_fpr_size) - return; - -- /* Indicate to allocate space on the stack for varargs save area. */ -- ix86_save_varrargs_registers = 1; - /* We need 16-byte stack alignment to save SSE registers. If user - asked for lower preferred_stack_boundary, lets just hope that he knows - what he is doing and won't varargs SSE values. -@@ -5006,7 +5014,7 @@ setup_incoming_varargs_64 (CUMULATIVE_AR - x86_64_int_parameter_registers[i])); - } - -- if (cum->sse_nregs && cfun->va_list_fpr_size) -+ if (ix86_varargs_fpr_size) - { - /* Now emit code to save SSE registers. The AX parameter contains number - of SSE parameter registers used to call this function. We use -@@ -5041,7 +5049,7 @@ setup_incoming_varargs_64 (CUMULATIVE_AR - tmp_reg = gen_reg_rtx (Pmode); - emit_insn (gen_rtx_SET (VOIDmode, tmp_reg, - plus_constant (save_area, -- 8 * REGPARM_MAX + 127))); -+ ix86_varargs_gpr_size + 127))); - mem = gen_rtx_MEM (BLKmode, plus_constant (tmp_reg, -127)); - MEM_NOTRAP_P (mem) = 1; - set_mem_alias_set (mem, set); -@@ -5145,7 +5153,7 @@ ix86_va_start (tree valist, rtx nextarg) - expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); - } - -- if (cfun->va_list_fpr_size) -+ if (TARGET_SSE && cfun->va_list_fpr_size) - { - type = TREE_TYPE (fpr); - t = build2 (GIMPLE_MODIFY_STMT, type, fpr, -@@ -5164,12 +5172,15 @@ ix86_va_start (tree valist, rtx nextarg) - TREE_SIDE_EFFECTS (t) = 1; - expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); - -- if (cfun->va_list_gpr_size || cfun->va_list_fpr_size) -+ if (ix86_varargs_gpr_size || ix86_varargs_fpr_size) - { - /* Find the register save area. - Prologue of the function save it right above stack frame. */ - type = TREE_TYPE (sav); - t = make_tree (type, frame_pointer_rtx); -+ if (!ix86_varargs_gpr_size) -+ t = build2 (POINTER_PLUS_EXPR, type, t, -+ size_int (-8 * REGPARM_MAX)); - t = build2 (GIMPLE_MODIFY_STMT, type, sav, t); - TREE_SIDE_EFFECTS (t) = 1; - expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); -@@ -6079,13 +6090,8 @@ ix86_compute_frame_layout (struct ix86_f - offset += frame->nregs * UNITS_PER_WORD; - - /* Va-arg area */ -- if (ix86_save_varrargs_registers) -- { -- offset += X86_64_VARARGS_SIZE; -- frame->va_arg_size = X86_64_VARARGS_SIZE; -- } -- else -- frame->va_arg_size = 0; -+ frame->va_arg_size = ix86_varargs_gpr_size + ix86_varargs_fpr_size; -+ offset += frame->va_arg_size; - - /* Align start of frame for local function. */ - frame->padding1 = ((offset + stack_alignment_needed - 1) ---- gcc/testsuite/gcc.target/i386/amd64-abi-3.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/amd64-abi-3.c (revision 139910) -@@ -0,0 +1,18 @@ -+/* { dg-do compile } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-options "-O2 -mno-sse" } */ -+/* { dg-final { scan-assembler "subq\[\\t \]*\\\$88,\[\\t \]*%rsp" } } */ -+/* { dg-final { scan-assembler-not "subq\[\\t \]*\\\$216,\[\\t \]*%rsp" } } */ -+ -+#include -+ -+void foo (va_list va_arglist); -+ -+void -+test (int a1, ...) -+{ -+ va_list va_arglist; -+ va_start (va_arglist, a1); -+ foo (va_arglist); -+ va_end (va_arglist); -+} ---- gcc/testsuite/gcc.target/i386/amd64-abi-5.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/amd64-abi-5.c (revision 139910) -@@ -0,0 +1,64 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-options "-O2" } */ -+ -+#include -+#include -+ -+int n1 = 30; -+double n2 = 324; -+double n3 = 39494.94; -+double n4 = 407; -+double n5 = 32.304; -+double n6 = 394.14; -+double n7 = 4.07; -+double n8 = 32.4; -+double n9 = 314.194; -+double n10 = 0.1407; -+ -+int e1; -+double e2; -+double e3; -+double e4; -+double e5; -+double e6; -+double e7; -+double e8; -+double e9; -+double e10; -+ -+static void -+__attribute__((noinline)) -+test (int a1, ...) -+{ -+ e1 = a1; -+ va_list va_arglist; -+ va_start (va_arglist, a1); -+ e2 = va_arg (va_arglist, double); -+ e3 = va_arg (va_arglist, double); -+ e4 = va_arg (va_arglist, double); -+ e5 = va_arg (va_arglist, double); -+ e6 = va_arg (va_arglist, double); -+ e7 = va_arg (va_arglist, double); -+ e8 = va_arg (va_arglist, double); -+ e9 = va_arg (va_arglist, double); -+ e10 = va_arg (va_arglist, double); -+ va_end (va_arglist); -+} -+ -+int -+main () -+{ -+ test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10); -+ assert (n1 == e1); -+ assert (n2 == e2); -+ assert (n3 == e3); -+ assert (n4 == e4); -+ assert (n5 == e5); -+ assert (n6 == e6); -+ assert (n7 == e7); -+ assert (n8 == e8); -+ assert (n9 == e9); -+ assert (n10 == e10); -+ return 0; -+} ---- gcc/testsuite/gcc.target/i386/amd64-abi-4.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/amd64-abi-4.c (revision 139910) -@@ -0,0 +1,47 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-options "-O2 -mno-sse" } */ -+ -+#include -+#include -+ -+int n1 = 30; -+int n2 = 324; -+void *n3 = (void *) &n2; -+int n4 = 407; -+ -+int e1; -+int e2; -+void *e3; -+int e4; -+ -+static void -+__attribute__((noinline)) -+foo (va_list va_arglist) -+{ -+ e2 = va_arg (va_arglist, int); -+ e3 = va_arg (va_arglist, void *); -+ e4 = va_arg (va_arglist, int); -+} -+ -+static void -+__attribute__((noinline)) -+test (int a1, ...) -+{ -+ e1 = a1; -+ va_list va_arglist; -+ va_start (va_arglist, a1); -+ foo (va_arglist); -+ va_end (va_arglist); -+} -+ -+int -+main () -+{ -+ test (n1, n2, n3, n4); -+ assert (n1 == e1); -+ assert (n2 == e2); -+ assert (n3 == e3); -+ assert (n4 == e4); -+ return 0; -+} ---- gcc/testsuite/gcc.target/i386/amd64-abi-6.c (revision 0) -+++ gcc/testsuite/gcc.target/i386/amd64-abi-6.c (revision 139910) -@@ -0,0 +1,71 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target lp64 } */ -+/* { dg-options "-O2" } */ -+ -+#include -+#include -+ -+int n1 = 30; -+double n2 = 324; -+double n3 = 39494.94; -+double n4 = 407; -+double n5 = 32.304; -+double n6 = 394.14; -+double n7 = 4.07; -+double n8 = 32.4; -+double n9 = 314.194; -+double n10 = 0.1407; -+ -+int e1; -+double e2; -+double e3; -+double e4; -+double e5; -+double e6; -+double e7; -+double e8; -+double e9; -+double e10; -+ -+static void -+__attribute__((noinline)) -+foo (va_list va_arglist) -+{ -+ e2 = va_arg (va_arglist, double); -+ e3 = va_arg (va_arglist, double); -+ e4 = va_arg (va_arglist, double); -+ e5 = va_arg (va_arglist, double); -+ e6 = va_arg (va_arglist, double); -+ e7 = va_arg (va_arglist, double); -+ e8 = va_arg (va_arglist, double); -+ e9 = va_arg (va_arglist, double); -+ e10 = va_arg (va_arglist, double); -+} -+ -+static void -+__attribute__((noinline)) -+test (int a1, ...) -+{ -+ va_list va_arglist; -+ e1 = a1; -+ va_start (va_arglist, a1); -+ foo (va_arglist); -+ va_end (va_arglist); -+} -+ -+int -+main () -+{ -+ test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10); -+ assert (n1 == e1); -+ assert (n2 == e2); -+ assert (n3 == e3); -+ assert (n4 == e4); -+ assert (n5 == e5); -+ assert (n6 == e6); -+ assert (n7 == e7); -+ assert (n8 == e8); -+ assert (n9 == e9); -+ assert (n10 == e10); -+ return 0; -+} diff --git a/gcc43.spec b/gcc43.spec deleted file mode 100644 index 97a3e01..0000000 --- a/gcc43.spec +++ /dev/null @@ -1,2058 +0,0 @@ -%define DATE 20081105 -%define SVNREV 141601 -%define gcc_version 4.3.2 -# Note, gcc_release must be integer, if you want to add suffixes to -# %{release}, append them after %{gcc_release} on Release: line. -%define gcc_release 7 -%define _unpackaged_files_terminate_build 0 -%define multilib_64_archs sparc64 ppc64 s390x x86_64 -%define include_gappletviewer 1 -%ifarch %{ix86} x86_64 ia64 ppc alpha -%define build_ada 1 -%else -%define build_ada 0 -%endif -%define build_java 1 -# If you don't have already a usable gcc-java and libgcj for your arch, -# do on some arch which has it rpmbuild -bc --with java_tar gcc41.spec -# which creates libjava-classes-%{version}-%{release}.tar.bz2 -# With this then on the new arch do rpmbuild -ba -v --with java_bootstrap gcc41.spec -%define bootstrap_java %{?_with_java_bootstrap:%{build_java}}%{!?_with_java_bootstrap:0} -%define build_java_tar %{?_with_java_tar:%{build_java}}%{!?_with_java_tar:0} -%ifarch s390x -%define multilib_32_arch s390 -%endif -%ifarch sparc64 -%define multilib_32_arch sparcv9 -%endif -%ifarch ppc64 -%define multilib_32_arch ppc -%endif -%ifarch x86_64 -%define multilib_32_arch i386 -%endif -Summary: Various compilers (C, C++, Objective-C, Java, ...) -Name: gcc -Version: %{gcc_version} -Release: %{gcc_release} -# libgcc, libgfortran, libmudflap and crtstuff have an exception which allows -# linking it into any kind of programs or shared libraries without -# restrictions. -License: GPLv3+ and GPLv2+ with exceptions -Group: Development/Languages -# The source for this package was pulled from upstream's vcs. Use the -# following commands to generate the tarball: -# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_3-branch@%{SVNREV} gcc-%{version}-%{DATE} -# tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2 -Source0: gcc-%{version}-%{DATE}.tar.bz2 -Source1: libgcc_post_upgrade.c -Source2: README.libgcjwebplugin.so -Source3: protoize.1 -%define fastjar_ver 0.95 -Source4: http://download.savannah.nongnu.org/releases/fastjar/fastjar-%{fastjar_ver}.tar.gz -URL: http://gcc.gnu.org -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -# Need binutils with -pie support >= 2.14.90.0.4-4 -# Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 -# Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 -# Need binutils which support .weakref >= 2.16.91.0.3-1 -# Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 -# Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 -# Need binutils which support --build-id >= 2.17.50.0.17-3 -BuildRequires: binutils >= 2.17.50.0.17-3 -BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, texinfo, sharutils -%if %{build_java} -BuildRequires: /usr/share/java/eclipse-ecj.jar, zip, unzip -%if %{bootstrap_java} -Source10: libjava-classes-%{version}-%{release}.tar.bz2 -%else -BuildRequires: gcc-java, libgcj -%endif -%endif -# Make sure pthread.h doesn't contain __thread tokens -# Make sure glibc supports stack protector -# Make sure glibc supports DT_GNU_HASH -BuildRequires: glibc-devel >= 2.4.90-13 -BuildRequires: elfutils-devel >= 0.72 -%ifarch ppc ppc64 s390 s390x sparc sparcv9 alpha -# Make sure glibc supports TFmode long double -BuildRequires: glibc >= 2.3.90-35 -%endif -%ifarch %{multilib_64_archs} sparcv9 ppc -# Ensure glibc{,-devel} is installed for both multilib arches -BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so -%endif -%if %{build_ada} -# Ada requires Ada to build -BuildRequires: gcc-gnat >= 3.1, libgnat >= 3.1 -%endif -%ifarch ia64 -BuildRequires: libunwind >= 0.98 -%endif -Requires: cpp = %{version}-%{release} -# Need .eh_frame ld optimizations -# Need proper visibility support -# Need -pie support -# Need --as-needed/--no-as-needed support -# On ppc64, need omit dot symbols support and --non-overlapping-opd -# Need binutils that owns /usr/bin/c++filt -# Need binutils that support .weakref -# Need binutils that supports --hash-style=gnu -# Need binutils that support mffgpr/mftgpr -# Need binutils that support --build-id -Requires: binutils >= 2.17.50.0.17-3 -# Make sure gdb will understand DW_FORM_strp -Conflicts: gdb < 5.1-2 -Requires: glibc-devel >= 2.2.90-12 -%ifarch ppc ppc64 s390 s390x sparc sparcv9 alpha -# Make sure glibc supports TFmode long double -Requires: glibc >= 2.3.90-35 -%endif -Requires: libgcc >= %{version}-%{release} -Requires: libgomp = %{version}-%{release} -#Obsoletes: gcc3 -#Obsoletes: egcs -%ifarch sparc -#Obsoletes: gcc-sparc32 -#Obsoletes: gcc-c++-sparc32 -%endif -%ifarch ppc -#Obsoletes: gcc-ppc32 -#Obsoletes: gcc-c++-ppc32 -%endif -#Obsoletes: gcc-chill -%if !%{build_ada} -Obsoletes: gcc-gnat < %{version}-%{release} -Obsoletes: libgnat < %{version}-%{release} -%endif -%ifarch sparc sparc64 -#Obsoletes: egcs64 -%endif -#Obsoletes: gcc34 -#Obsoletes: gcc35 -#Obsoletes: gcc4 -Prereq: /sbin/install-info -AutoReq: true - -Patch1: gcc43-build-id.patch -Patch2: gcc43-c++-builtin-redecl.patch -Patch3: gcc43-ia64-libunwind.patch -Patch4: gcc43-java-nomulti.patch -Patch5: gcc43-ppc32-retaddr.patch -Patch6: gcc43-ppc64-ia64-GNU-stack.patch -Patch7: gcc43-pr27898.patch -Patch8: gcc43-pr32139.patch -Patch9: gcc43-pr33763.patch -Patch10: gcc43-rh330771.patch -Patch11: gcc43-rh341221.patch -Patch12: gcc43-java-debug-iface-type.patch -Patch13: gcc43-i386-libgomp.patch -Patch14: gcc43-rh251682.patch -Patch15: gcc43-sparc-config-detection.patch -Patch16: gcc43-libgomp-omp_h-multilib.patch -Patch17: gcc43-x86_64-va_start.patch -Patch18: gcc43-pr37189.patch -Patch19: gcc43-altivec-tests.patch -Patch20: gcc43-libtool-no-rpath.patch -Patch21: gcc43-pr36741-revert.patch -Patch22: gcc43-pr34037.patch -Patch23: gcc43-pr37738.patch -Patch24: gcc43-pr29609.patch -Patch25: gcc43-aes.patch -Patch26: gcc43-pr29609-2.patch -Patch27: gcc43-pr29609-3.patch -Patch28: gcc43-pr37870.patch -Patch29: gcc43-pr37858.patch -Patch30: gcc43-pr37879.patch -Patch31: gcc43-pr37924.patch - -# On ARM EABI systems, we do want -gnueabi to be part of the -# target triple. -%ifnarch %{arm} -%define _gnu %{nil} -%endif -%ifarch sparcv9 -%define gcc_target_platform sparc64-%{_vendor}-%{_target_os} -%endif -%ifarch ppc -%define gcc_target_platform ppc64-%{_vendor}-%{_target_os} -%endif -%ifnarch sparcv9 ppc -%define gcc_target_platform %{_target_platform} -%endif - -%description -The gcc package contains the GNU Compiler Collection version 4.3. -You'll need this package in order to compile C code. - -%package -n libgcc -Summary: GCC version 4.3 shared support library -Group: System Environment/Libraries -Autoreq: false - -%description -n libgcc -This package contains GCC shared support library which is needed -e.g. for exception handling support. - -%package c++ -Summary: C++ support for GCC -Group: Development/Languages -Requires: gcc = %{version}-%{release} -Requires: libstdc++ = %{version}-%{release} -Requires: libstdc++-devel = %{version}-%{release} -#Obsoletes: gcc3-c++ -#Obsoletes: gcc34-c++ -#Obsoletes: gcc35-c++ -#Obsoletes: gcc4-c++ -Autoreq: true - -%description c++ -This package adds C++ support to the GNU Compiler Collection. -It includes support for most of the current C++ specification, -including templates and exception handling. - -%package -n libstdc++ -Summary: GNU Standard C++ Library -Group: System Environment/Libraries -#Obsoletes: libstdc++3 -#Obsoletes: libstdc++34 -Autoreq: true - -%description -n libstdc++ -The libstdc++ package contains a rewritten standard compliant GCC Standard -C++ Library. - -%package -n libstdc++-devel -Summary: Header files and libraries for C++ development -Group: Development/Libraries -Requires: libstdc++ = %{version}-%{release}, %{_prefix}/%{_lib}/libstdc++.so.6 -#Obsoletes: libstdc++3-devel -#Obsoletes: libstdc++34-devel -Autoreq: true - -%description -n libstdc++-devel -This is the GNU implementation of the standard C++ libraries. This -package includes the header files and libraries needed for C++ -development. This includes rewritten implementation of STL. - -%package objc -Summary: Objective-C support for GCC -Group: Development/Languages -Requires: gcc = %{version}-%{release} -Requires: libobjc = %{version}-%{release} -#Obsoletes: gcc3-objc -Autoreq: true - -%description objc -gcc-objc provides Objective-C support for the GCC. -Mainly used on systems running NeXTSTEP, Objective-C is an -object-oriented derivative of the C language. - -%package objc++ -Summary: Objective-C++ support for GCC -Group: Development/Languages -Requires: gcc-c++ = %{version}-%{release}, gcc-objc = %{version}-%{release} -Autoreq: true - -%description objc++ -gcc-objc++ package provides Objective-C++ support for the GCC. - -%package -n libobjc -Summary: Objective-C runtime -Group: System Environment/Libraries -Autoreq: true - -%description -n libobjc -This package contains Objective-C shared library which is needed to run -Objective-C dynamically linked programs. - -%package gfortran -Summary: Fortran 95 support -Group: Development/Languages -Requires: gcc = %{version}-%{release} -Requires: libgfortran = %{version}-%{release} -BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1 -Prereq: /sbin/install-info -#Obsoletes: gcc3-g77 -#Obsoletes: gcc-g77 -#Obsoletes: gcc4-gfortran -Autoreq: true - -%description gfortran -The gcc-gfortran package provides support for compiling Fortran 95 -programs with the GNU Compiler Collection. - -%package -n libgfortran -Summary: Fortran 95 runtime -Group: System Environment/Libraries -#Obsoletes: libf2c -Autoreq: true - -%description -n libgfortran -This package contains Fortran 95 shared library which is needed to run -Fortran 95 dynamically linked programs. - -%package -n libgomp -Summary: GCC OpenMP v3.0 shared support library -Group: System Environment/Libraries -Prereq: /sbin/install-info - -%description -n libgomp -This package contains GCC shared support library which is needed -for OpenMP v3.0 support. - -%package -n libmudflap -Summary: GCC mudflap shared support library -Group: System Environment/Libraries - -%description -n libmudflap -This package contains GCC shared support library which is needed -for mudflap support. - -%package -n libmudflap-devel -Summary: GCC mudflap support -Group: Development/Libraries -Requires: libmudflap = %{version}-%{release} -Requires: gcc = %{version}-%{release} - -%description -n libmudflap-devel -This package contains headers and static libraries for building -mudflap-instrumented programs. - -To instrument a non-threaded program, add -fmudflap -option to GCC and when linking add -lmudflap, for threaded programs -also add -fmudflapth and -lmudflapth. - -%package java -Summary: Java support for GCC -Group: Development/Languages -Requires: gcc = %{version}-%{release} -Requires: libgcj = %{version}-%{release} -Requires: libgcj-devel = %{version}-%{release} -Requires: /usr/share/java/eclipse-ecj.jar -#Obsoletes: gcc3-java -#Obsoletes: gcc34-java -#Obsoletes: gcc35-java -#Obsoletes: gcc4-java -Prereq: /sbin/install-info -Autoreq: true - -%description java -This package adds support for compiling Java(tm) programs and -bytecode into native code. - -%package -n libgcj -Summary: Java runtime library for gcc -Group: System Environment/Libraries -Prereq: /sbin/install-info -Requires: zip >= 2.1 -Requires: gtk2 >= 2.4.0 -Requires: glib2 >= 2.4.0 -Requires: libart_lgpl >= 2.1.0 -%if %{build_java} -BuildRequires: gtk2-devel >= 2.4.0 -BuildRequires: glib2-devel >= 2.4.0 -BuildRequires: xulrunner-devel -BuildRequires: libart_lgpl-devel >= 2.1.0 -BuildRequires: alsa-lib-devel -BuildRequires: libXtst-devel -BuildRequires: libXt-devel -%endif -#Obsoletes: gcc-libgcj -#Obsoletes: libgcj3 -#Obsoletes: libgcj34 -#Obsoletes: libgcj4 -Autoreq: true - -%description -n libgcj -The Java(tm) runtime library. You will need this package to run your Java -programs compiled using the Java compiler from GNU Compiler Collection (gcj). - -%package -n libgcj-devel -Summary: Libraries for Java development using GCC -Group: Development/Languages -Requires: libgcj = %{version}-%{release}, %{_prefix}/%{_lib}/libgcj.so.9 -Requires: zlib-devel, %{_prefix}/%{_lib}/libz.so -Requires: /bin/awk -#Obsoletes: libgcj3-devel -#Obsoletes: libgcj34-devel -#Obsoletes: libgcj4-devel -Autoreq: false -Autoprov: false - -%description -n libgcj-devel -The Java(tm) static libraries and C header files. You will need this -package to compile your Java programs using the GCC Java compiler (gcj). - -%package -n libgcj-src -Summary: Java library sources from GCC4 preview -Group: System Environment/Libraries -Requires: libgcj = %{version}-%{release} -#Obsoletes: libgcj4-src -Autoreq: true - -%description -n libgcj-src -The Java(tm) runtime library sources for use in Eclipse. - -%package -n cpp -Summary: The C Preprocessor -Group: Development/Languages -Prereq: /sbin/install-info -%ifarch ia64 -#Obsoletes: gnupro -%endif -Autoreq: true - -%description -n cpp -Cpp is the GNU C-Compatible Compiler Preprocessor. -Cpp is a macro processor which is used automatically -by the C compiler to transform your program before actual -compilation. It is called a macro processor because it allows -you to define macros, abbreviations for longer -constructs. - -The C preprocessor provides four separate functionalities: the -inclusion of header files (files of declarations that can be -substituted into your program); macro expansion (you can define macros, -and the C preprocessor will replace the macros with their definitions -throughout the program); conditional compilation (using special -preprocessing directives, you can include or exclude parts of the -program according to various conditions); and line control (if you use -a program to combine or rearrange source files into an intermediate -file which is then compiled, you can use line control to inform the -compiler about where each source line originated). - -You should install this package if you are a C programmer and you use -macros. - -%package gnat -Summary: Ada 95 support for GCC -Group: Development/Languages -Requires: gcc = %{version}-%{release}, libgnat = %{version}-%{release} -#Obsoletes: gnat-devel, gcc3-gnat -Prereq: /sbin/install-info -Autoreq: true - -%description gnat -GNAT is a GNU Ada 95 front-end to GCC. This package includes development tools, -the documents and Ada 95 compiler. - -%package -n libgnat -Summary: GNU Ada 95 runtime shared libraries -Group: System Environment/Libraries -#Obsoletes: gnat libgnat3 -Autoreq: true - -%description -n libgnat -GNAT is a GNU Ada 95 front-end to GCC. This package includes shared libraries, -which are required to run programs compiled with the GNAT. - -%prep -%setup -q -n gcc-%{version}-%{DATE} -%patch1 -p0 -b .build-id~ -%patch2 -p0 -b .c++-builtin-redecl~ -%patch3 -p0 -b .ia64-libunwind~ -%patch4 -p0 -b .java-nomulti~ -%patch5 -p0 -b .ppc32-retaddr~ -%patch6 -p0 -b .ppc64-ia64-GNU-stack~ -%patch7 -p0 -b .pr27898~ -%patch8 -p0 -b .pr32139~ -%patch9 -p0 -b .pr33763~ -%patch10 -p0 -b .rh330771~ -%patch11 -p0 -b .rh341221~ -%patch12 -p0 -b .java-debug-iface-type~ -%patch13 -p0 -b .i386-libgomp~ -%patch14 -p0 -b .rh251682~ -%patch15 -p0 -b .sparc-config-detection~ -%patch16 -p0 -b .libgomp-omp_h-multilib~ -%patch17 -p0 -b .x86_64-va_start~ -%patch18 -p0 -b .pr37189~ -%patch19 -p0 -b .altivec-tests~ -%patch20 -p0 -b .libtool-no-rpath~ -%patch21 -p0 -b .pr36741-revert~ -%patch22 -p0 -b .pr34037~ -%patch23 -p0 -b .pr37738~ -%patch24 -p0 -b .pr29609~ -%patch25 -p0 -b .aes~ -%patch26 -p0 -b .pr29609-2~ -%patch27 -p0 -b .pr29609-3~ -%patch28 -p0 -b .pr37870~ -%patch29 -p0 -b .pr37858~ -%patch30 -p0 -b .pr37879~ -%patch31 -p0 -b .pr37924~ - -tar xzf %{SOURCE4} - -%if %{bootstrap_java} -tar xjf %{SOURCE10} -%endif - -sed -i -e 's/4\.3\.3/4.3.2/' gcc/BASE-VER -echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE - -cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h - -# Hack to avoid building multilib libjava -perl -pi -e 's/^all: all-redirect/ifeq (\$(MULTISUBDIR),)\nall: all-redirect\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in -perl -pi -e 's/^install: install-redirect/ifeq (\$(MULTISUBDIR),)\ninstall: install-redirect\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in -perl -pi -e 's/^check: check-redirect/ifeq (\$(MULTISUBDIR),)\ncheck: check-redirect\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in -perl -pi -e 's/^all: all-recursive/ifeq (\$(MULTISUBDIR),)\nall: all-recursive\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in -perl -pi -e 's/^install: install-recursive/ifeq (\$(MULTISUBDIR),)\ninstall: install-recursive\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in -perl -pi -e 's/^check: check-recursive/ifeq (\$(MULTISUBDIR),)\ncheck: check-recursive\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in - -./contrib/gcc_update --touch - -# To make rpmlint happy (argh), fix up names in ChangeLog entries to valid UTF-8 -LC_ALL=C sed -i \ - -e 's/D\(o\|\xf6\)nmez/D\xc3\xb6nmez/' \ - -e 's/\(Av\|\x81\xc1v\|\xc1v\|\xef\xbf\xbdv\?\|\x81\xc3\x81v\|\xc3v\)ila/\xc3\x81vila/' \ - -e 's/Esp\(in\|\x81\xedn\|\xedn\|\xef\xbf\xbdn\?\|\xef\xbf\xbd\xadn\|\x81\xc3\xadn\|\xc3\xef\xbf\xbd\xadn\)dola/Esp\xc3\xadndola/' \ - -e 's/Schl\(u\|\xef\xbf\xbd\|\xfcu\?\|\x81\xfc\|\x81\xc3\xbc\|\xc3\xaf\xc2\xbf\xc2\xbd\|\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc2\xbc\)ter/Schl\xc3\xbcter/' \ - -e 's/Humi\(e\|\xe8\)res/Humi\xc3\xa8res/' \ - -e 's/L\(ow\|\xc3\xaf\xc2\xbf\xc2\xbd\|oew\|\xf6w\)is/L\xc3\xb6wis/' \ - -e 's/G\xfctlein/G\xc3\xbctlein/' \ - -e 's/G\xe1[b]or/G\xc3\xa1bor/' \ - -e 's/L\xf3ki/L\xc3\xb3ki/' \ - -e 's/Fautr\xc3 /Fautr\xc3\xa9 /' \ - -e 's/S\xe9[b]astian/S\xc3\xa9bastian/' \ - -e 's/Th\xef\xbf\xbd[d]ore/Th\xc3\xa9odore/' \ - -e 's/Cors\xc3\xc2\xa9pius/Cors\xc3\xa9pius/' \ - -e 's/K\xfchl/K\xc3\xbchl/' \ - -e 's/R\xf6nnerup/R\xc3\xb6nnerup/' \ - -e 's/L\xf8vset/L\xc3\xb8vset/' \ - -e 's/Ph\x81\xfb\x81\xf4ng-Th\x81\xe5o/Ph\xc3\xbb\xc3\xb4ng-Th\xc3\xa5o/' \ - -e 's/V\x81\xf5/V\xc3\xb5/' \ - -e 's/J\xf6nsson/J\xc3\xb6nsson/' \ - -e 's/V\xef\xbf\xbdis\xef\xbf\xbdnen/V\xc3\xa4is\xc3\xa4nen/' \ - -e 's/J\xef\xbf\xbdrg/J\xc3\xb6rg/' \ - -e 's/M\xef\xbf\xbdsli/M\xc3\xb6sli/' \ - -e 's/R\xe4ty/R\xc3\xa4ty/' \ - -e 's/2003\xc2\xad-/2003-/' \ - -e 's/\xc2\xa0/ /g' \ - -e 's/ \xa0/ /g' \ - -e 's/\xa0 //' \ - `find . -name \*ChangeLog\*` -LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi - -%ifarch ppc -if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then - mkdir -p libstdc++-v3/config/abi/post/powerpc64-linux-gnu/64 - mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{,64/}baseline_symbols.txt - mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{32/,}baseline_symbols.txt - rm -rf libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32 -fi -%endif -%ifarch sparc -if [ -d libstdc++-v3/config/abi/post/sparc64-linux-gnu ]; then - mkdir -p libstdc++-v3/config/abi/post/sparc64-linux-gnu/64 - mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{,64/}baseline_symbols.txt - mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{32/,}baseline_symbols.txt - rm -rf libstdc++-v3/config/abi/post/sparc64-linux-gnu/32 -fi -%endif - -%build - -%if %{build_java} -# gjar isn't usable, so even when GCC source tree no longer includes -# fastjar, build it anyway. -mkdir fastjar-%{fastjar_ver}/obj-%{gcc_target_platform} -cd fastjar-%{fastjar_ver}/obj-%{gcc_target_platform} -../configure CFLAGS="$RPM_OPT_FLAGS" --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} -make %{?_smp_mflags} -export PATH=`pwd`${PATH:+:$PATH} -cd ../../ -%endif - -rm -fr obj-%{gcc_target_platform} -mkdir obj-%{gcc_target_platform} -cd obj-%{gcc_target_platform} - -%if %{build_java} -%if !%{bootstrap_java} -# If we don't have gjavah in $PATH, try to build it with the old gij -mkdir java_hacks -cd java_hacks -if [ ! -x /usr/bin/gjavah ]; then - cp -a ../../libjava/classpath/tools/external external - mkdir -p gnu/classpath/tools - cp -a ../../libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} gnu/classpath/tools/ - cp -a ../../libjava/classpath/resource/gnu/classpath/tools/common/Messages.properties gnu/classpath/tools/common - cd external/asm; for i in `find . -name \*.java`; do gcj --encoding ISO-8859-1 -C $i -I.; done; cd ../.. - for i in `find gnu -name \*.java`; do gcj -C $i -I. -Iexternal/asm/; done - gcj -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main -I. -Iexternal/asm/ `find . -name \*.class` -o gjavah.real - cat > gjavah < ecj1 < gcc64 <<"EOF" -#!/bin/sh -exec /usr/bin/gcc -m64 "$@" -EOF -chmod +x gcc64 -CC=`pwd`/gcc64 -%endif -%ifarch ppc64 -if gcc -m64 -xc -S /dev/null -o - > /dev/null 2>&1; then - cat > gcc64 <<"EOF" -#!/bin/sh -exec /usr/bin/gcc -m64 "$@" -EOF - chmod +x gcc64 - CC=`pwd`/gcc64 -fi -%endif -OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` -case "$OPT_FLAGS" in - *-fasynchronous-unwind-tables*) - sed -i -e 's/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/' \ - ../gcc/Makefile.in - ;; -esac -CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`" XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ - GCJFLAGS="$OPT_FLAGS" \ - ../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ - --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \ - --enable-shared --enable-threads=posix --enable-checking=release \ - --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ -%if !%{build_ada} - --enable-languages=c,c++,objc,obj-c++,java,fortran \ -%else - --enable-languages=c,c++,objc,obj-c++,java,fortran,ada \ -%endif -%if !%{build_java} - --disable-libgcj \ -%else - --enable-java-awt=gtk --disable-dssi --enable-plugin \ - --with-java-home=%{_prefix}/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre \ - --enable-libgcj-multifile \ -%if !%{bootstrap_java} - --enable-java-maintainer-mode \ -%endif - --with-ecj-jar=/usr/share/java/eclipse-ecj.jar \ - --disable-libjava-multilib \ -%endif -%ifarch %{arm} - --disable-sjlj-exceptions \ -%endif -%ifarch ppc ppc64 - --enable-secureplt \ -%endif -%ifarch sparc sparcv9 sparc64 ppc ppc64 s390 s390x alpha - --with-long-double-128 \ -%endif -%ifarch sparc - --disable-linux-futex \ -%endif -%ifarch sparc64 - --with-cpu=ultrasparc \ -%endif -%ifarch sparc sparcv9 - --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7 -%endif -%ifarch ppc - --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 -%endif -%ifarch %{ix86} x86_64 - --with-cpu=generic \ -%endif -%ifarch s390 s390x - --with-tune=z9-109 \ -%endif -%ifnarch sparc sparcv9 ppc - --build=%{gcc_target_platform} -%endif - -GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap -#GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap - -# run the tests. -make %{?_smp_mflags} -k check RUNTESTFLAGS="ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++" || : -cd gcc -mv testsuite{,.normal} -make %{?_smp_mflags} -k \ - `sed -n 's/check-ada//;s/^CHECK_TARGETS[[:blank:]]*=[[:blank:]]*//p' Makefile` \ - RUNTESTFLAGS="--target_board=unix/-fstack-protector ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++" || : -mv testsuite{,.ssp} -mv testsuite{.normal,} -cd .. -echo ====================TESTING========================= -( ../contrib/test_summary || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}' -echo ====================TESTING END===================== -mkdir testlogs-%{_target_platform}-%{version}-%{release} -for i in `find . -name \*.log | grep -F testsuite/ | grep -v 'config.log\|acats\|ada'`; do - ln $i testlogs-%{_target_platform}-%{version}-%{release}/ || : -done -for i in `find . -name \*.log | grep -F testsuite.ssp/ | grep -v 'config.log\|acats\|ada'`; do - ln $i testlogs-%{_target_platform}-%{version}-%{release}/ssp-`basename $i` || : -done -tar cf - testlogs-%{_target_platform}-%{version}-%{release} | bzip2 -9c \ - | uuencode testlogs-%{_target_platform}.tar.bz2 || : -rm -rf testlogs-%{_target_platform}-%{version}-%{release} - -# Make protoize -make -C gcc CC="./xgcc -B ./ -O2" proto - -# Make generated man pages even if Pod::Man is not new enough -perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl -for i in ../gcc/doc/*.texi; do - cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i -done -make -C gcc generated-manpages -for i in ../gcc/doc/*.texi; do mv -f $i.orig $i; done - -# Copy various doc files here and there -cd .. -mkdir -p rpm.doc/gfortran rpm.doc/objc -mkdir -p rpm.doc/boehm-gc rpm.doc/fastjar rpm.doc/libffi rpm.doc/libjava -mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libmudflap,libgomp} -sed -e 's,@VERSION@,%{gcc_version},' %{SOURCE2} > rpm.doc/README.libgcjwebplugin.so - -for i in {gcc,gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libmudflap,libgomp}/ChangeLog*; do - cp -p $i rpm.doc/changelogs/$i -done - -(cd gcc/fortran; for i in ChangeLog*; do - cp -p $i ../../rpm.doc/gfortran/$i -done) -(cd libgfortran; for i in ChangeLog*; do - cp -p $i ../rpm.doc/gfortran/$i.libgfortran -done) -(cd gcc/objc; for i in README*; do - cp -p $i ../../rpm.doc/objc/$i.objc -done) -(cd libobjc; for i in README*; do - cp -p $i ../rpm.doc/objc/$i.libobjc -done) -(cd boehm-gc; for i in ChangeLog*; do - cp -p $i ../rpm.doc/boehm-gc/$i.gc -done) -(cd fastjar-%{fastjar_ver}; for i in ChangeLog* README*; do - cp -p $i ../rpm.doc/fastjar/$i.fastjar -done) -(cd libffi; for i in ChangeLog* README* LICENSE; do - cp -p $i ../rpm.doc/libffi/$i.libffi -done) -(cd libjava; for i in ChangeLog* README*; do - cp -p $i ../rpm.doc/libjava/$i.libjava -done) -cp -p libjava/LIBGCJ_LICENSE rpm.doc/libjava/ - -rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9] -find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9 - -%if %{build_java_tar} -find libjava -name \*.h -type f | xargs grep -l '// DO NOT EDIT THIS FILE - it is machine generated' > libjava-classes.list -find libjava -name \*.class -type f >> libjava-classes.list -find libjava/testsuite -name \*.jar -type f >> libjava-classes.list -tar cf - -T libjava-classes.list | bzip2 -9 > $RPM_SOURCE_DIR/libjava-classes-%{version}-%{release}.tar.bz2 -%endif - -%install -rm -fr $RPM_BUILD_ROOT - -perl -pi -e \ - 's~href="l(ibstdc|atest)~href="http://gcc.gnu.org/onlinedocs/libstdc++/l\1~' \ - libstdc++-v3/doc/html/api.html - -cd obj-%{gcc_target_platform} - -%if %{build_java} -export PATH=`pwd`/../fastjar-%{fastjar_ver}/obj-%{gcc_target_platform}${PATH:+:$PATH} -%if !%{bootstrap_java} -export PATH=`pwd`/java_hacks${PATH:+:$PATH} -%endif -%endif - -TARGET_PLATFORM=%{gcc_target_platform} - -# There are some MP bugs in libstdc++ Makefiles -make -C %{gcc_target_platform}/libstdc++-v3 - -make prefix=$RPM_BUILD_ROOT%{_prefix} mandir=$RPM_BUILD_ROOT%{_mandir} \ - infodir=$RPM_BUILD_ROOT%{_infodir} install -%if %{build_java} -make DESTDIR=$RPM_BUILD_ROOT -C %{gcc_target_platform}/libjava install-src.zip -%endif -%if %{build_ada} -chmod 644 $RPM_BUILD_ROOT%{_infodir}/gnat* -%endif - -FULLPATH=$RPM_BUILD_ROOT%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -FULLEPATH=$RPM_BUILD_ROOT%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} - -# fix some things -ln -sf gcc $RPM_BUILD_ROOT%{_prefix}/bin/cc -mkdir -p $RPM_BUILD_ROOT/lib -ln -sf ..%{_prefix}/bin/cpp $RPM_BUILD_ROOT/lib/cpp -ln -sf gfortran $RPM_BUILD_ROOT%{_prefix}/bin/f95 -rm -f $RPM_BUILD_ROOT%{_infodir}/dir -gzip -9 $RPM_BUILD_ROOT%{_infodir}/*.info* -ln -sf gcc $RPM_BUILD_ROOT%{_prefix}/bin/gnatgcc - -cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`" -for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do - if ! diff -up $cxxconfig $i; then - cat > $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform}/bits/c++config.h < -#if __WORDSIZE == 32 -%ifarch %{multilib_64_archs} -`cat $(find %{gcc_target_platform}/32/libstdc++-v3/include -name c++config.h)` -%else -`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` -%endif -#else -%ifarch %{multilib_64_archs} -`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` -%else -`cat $(find %{gcc_target_platform}/64/libstdc++-v3/include -name c++config.h)` -%endif -#endif -#endif -EOF - break - fi -done - -# Nuke bits/stdc++.h.gch dirs -# 1) there is no bits/stdc++.h header installed, so when gch file can't be -# used, compilation fails -# 2) sometimes it is hard to match the exact options used for building -# libstdc++-v3 or they aren't desirable -# 3) there are multilib issues, conflicts etc. with this -# 4) it is huge -# People can always precompile on their own whatever they want, but -# shipping this for everybody is unnecessary. -rm -rf $RPM_BUILD_ROOT%{_prefix}/include/c++/%{gcc_version}/%{gcc_target_platform}/bits/stdc++.h.gch - -%ifarch sparcv9 sparc64 -ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ - $RPM_BUILD_ROOT%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc -%endif -%ifarch ppc ppc64 -ln -f $RPM_BUILD_ROOT%{_prefix}/bin/%{gcc_target_platform}-gcc \ - $RPM_BUILD_ROOT%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc -%endif - -%ifarch sparcv9 ppc -FULLLPATH=$FULLPATH/lib32 -%endif -%ifarch sparc64 ppc64 -FULLLPATH=$FULLPATH/lib64 -%endif -if [ -n "$FULLLPATH" ]; then - mkdir -p $FULLLPATH -else - FULLLPATH=$FULLPATH -fi - -find $RPM_BUILD_ROOT -name \*.la | xargs rm -f -%if %{build_java} -# gcj -static doesn't work properly anyway, unless using --whole-archive -# and saving 35MB is not bad. -find $RPM_BUILD_ROOT -name libgcj.a -o -name libgtkpeer.a \ - -o -name libgjsmalsa.a -o -name libgcj-tools.a -o -name libjvm.a \ - -o -name libgij.a -o -name libgcj_bc.a | xargs rm -f - -mv $RPM_BUILD_ROOT%{_prefix}/lib/libgcj.spec $FULLPATH/ -sed -i -e 's/lib: /&%%{static:%%eJava programs cannot be linked statically}/' \ - $FULLPATH/libgcj.spec -%endif - -mkdir -p $RPM_BUILD_ROOT/%{_lib} -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcc_s.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 -chmod 755 $RPM_BUILD_ROOT/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 -ln -sf libgcc_s-%{gcc_version}-%{DATE}.so.1 $RPM_BUILD_ROOT/%{_lib}/libgcc_s.so.1 -ln -sf /%{_lib}/libgcc_s.so.1 $FULLPATH/libgcc_s.so -%ifarch sparcv9 ppc -ln -sf /lib64/libgcc_s.so.1 $FULLPATH/64/libgcc_s.so -%endif -%ifarch %{multilib_64_archs} -ln -sf /lib/libgcc_s.so.1 $FULLPATH/32/libgcc_s.so -%endif - -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.spec $FULLPATH/ - -%if %{build_ada} -mv -f $FULLPATH/adalib/libgnarl-*.so $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ -mv -f $FULLPATH/adalib/libgnat-*.so $RPM_BUILD_ROOT%{_prefix}/%{_lib}/ -rm -f $FULLPATH/adalib/libgnarl.so* $FULLPATH/adalib/libgnat.so* -%endif - -mkdir -p $RPM_BUILD_ROOT%{_prefix}/libexec/getconf -if gcc/xgcc -B gcc/ -E -dD -xc /dev/null | grep __LONG_MAX__.*2147483647; then - ln -sf POSIX_V6_ILP32_OFF32 $RPM_BUILD_ROOT%{_prefix}/libexec/getconf/default -else - ln -sf POSIX_V6_LP64_OFF64 $RPM_BUILD_ROOT%{_prefix}/libexec/getconf/default -fi - -%if %{build_java} -pushd ../fastjar-%{fastjar_ver}/obj-%{gcc_target_platform} -make install DESTDIR=$RPM_BUILD_ROOT -popd - -if [ "%{_lib}" != "lib" ]; then - mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{_lib}/pkgconfig - sed '/^libdir/s/lib$/%{_lib}/' $RPM_BUILD_ROOT%{_prefix}/lib/pkgconfig/libgcj-*.pc \ - > $RPM_BUILD_ROOT%{_prefix}/%{_lib}/pkgconfig/`basename $RPM_BUILD_ROOT%{_prefix}/lib/pkgconfig/libgcj-*.pc` -fi -%endif - -pushd $FULLPATH -if [ "%{_lib}" = "lib" ]; then -ln -sf ../../../libobjc.so.2 libobjc.so -ln -sf ../../../libstdc++.so.6.* libstdc++.so -ln -sf ../../../libgfortran.so.3.* libgfortran.so -ln -sf ../../../libgomp.so.1.* libgomp.so -ln -sf ../../../libmudflap.so.0.* libmudflap.so -ln -sf ../../../libmudflapth.so.0.* libmudflapth.so -%if %{build_java} -ln -sf ../../../libgcj.so.9.* libgcj.so -ln -sf ../../../libgcj-tools.so.9.* libgcj-tools.so -ln -sf ../../../libgij.so.9.* libgij.so -%endif -%if %{build_ada} -cd adalib -ln -sf ../../../../libgnarl-*.so libgnarl.so -ln -sf ../../../../libgnarl-*.so libgnarl-4.3.so -ln -sf ../../../../libgnat-*.so libgnat.so -ln -sf ../../../../libgnat-*.so libgnat-4.3.so -cd .. -%endif -else -ln -sf ../../../../%{_lib}/libobjc.so.2 libobjc.so -ln -sf ../../../../%{_lib}/libstdc++.so.6.* libstdc++.so -ln -sf ../../../../%{_lib}/libgfortran.so.3.* libgfortran.so -ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so -ln -sf ../../../../%{_lib}/libmudflap.so.0.* libmudflap.so -ln -sf ../../../../%{_lib}/libmudflapth.so.0.* libmudflapth.so -%if %{build_java} -ln -sf ../../../../%{_lib}/libgcj.so.9.* libgcj.so -ln -sf ../../../../%{_lib}/libgcj-tools.so.9.* libgcj-tools.so -ln -sf ../../../../%{_lib}/libgij.so.9.* libgij.so -%endif -%if %{build_ada} -cd adalib -ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so -ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.3.so -ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so -ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.3.so -cd .. -%endif -fi -%if %{build_java} -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgcj_bc.so $FULLLPATH/ -%endif -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libstdc++.*a $FULLLPATH/ -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libsupc++.*a . -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortran.*a . -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.*a . -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.*a . -mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.*a $FULLLPATH/ - -%ifarch sparcv9 ppc -ln -sf ../../../../../lib64/libobjc.so.2 64/libobjc.so -ln -sf ../`echo ../../../../lib/libstdc++.so.6.* | sed s~/lib/~/lib64/~` 64/libstdc++.so -ln -sf ../`echo ../../../../lib/libgfortran.so.3.* | sed s~/lib/~/lib64/~` 64/libgfortran.so -ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so -rm -f libmudflap.so libmudflapth.so -echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflap.so -echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflapth.so -echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > 64/libmudflap.so -echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > 64/libmudflapth.so -%if %{build_java} -ln -sf ../`echo ../../../../lib/libgcj.so.9.* | sed s~/lib/~/lib64/~` 64/libgcj.so -ln -sf ../`echo ../../../../lib/libgcj-tools.so.9.* | sed s~/lib/~/lib64/~` 64/libgcj-tools.so -ln -sf ../`echo ../../../../lib/libgij.so.9.* | sed s~/lib/~/lib64/~` 64/libgij.so -ln -sf lib32/libgcj_bc.so libgcj_bc.so -ln -sf ../lib64/libgcj_bc.so 64/libgcj_bc.so -%endif -mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libsupc++.*a 64/ -mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgfortran.*a 64/ -mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libobjc.*a 64/ -mv -f $RPM_BUILD_ROOT%{_prefix}/lib64/libgomp.*a 64/ -ln -sf lib32/libstdc++.a libstdc++.a -ln -sf ../lib64/libstdc++.a 64/libstdc++.a -ln -sf lib32/libmudflap.a libmudflap.a -ln -sf ../lib64/libmudflap.a 64/libmudflap.a -ln -sf lib32/libmudflapth.a libmudflapth.a -ln -sf ../lib64/libmudflapth.a 64/libmudflapth.a -%endif -%ifarch %{multilib_64_archs} -mkdir -p 32 -ln -sf ../../../../libobjc.so.2 32/libobjc.so -ln -sf ../`echo ../../../../lib64/libstdc++.so.6.* | sed s~/../lib64/~/~` 32/libstdc++.so -ln -sf ../`echo ../../../../lib64/libgfortran.so.3.* | sed s~/../lib64/~/~` 32/libgfortran.so -ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so -rm -f libmudflap.so libmudflapth.so -echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflap.so -echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > libmudflapth.so -echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > 32/libmudflap.so -echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > 32/libmudflapth.so -%if %{build_java} -ln -sf ../`echo ../../../../lib64/libgcj.so.9.* | sed s~/../lib64/~/~` 32/libgcj.so -ln -sf ../`echo ../../../../lib64/libgcj-tools.so.9.* | sed s~/../lib64/~/~` 32/libgcj-tools.so -ln -sf ../`echo ../../../../lib64/libgij.so.9.* | sed s~/../lib64/~/~` 32/libgij.so -%endif -mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libsupc++.*a 32/ -mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgfortran.*a 32/ -mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libobjc.*a 32/ -mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgomp.*a 32/ -%endif -%ifarch sparc64 ppc64 -ln -sf ../lib32/libstdc++.a 32/libstdc++.a -ln -sf lib64/libstdc++.a libstdc++.a -ln -sf ../lib32/libmudflap.a 32/libmudflap.a -ln -sf lib64/libmudflap.a libmudflap.a -ln -sf ../lib32/libmudflapth.a 32/libmudflapth.a -ln -sf lib64/libmudflapth.a libmudflapth.a -%if %{build_java} -ln -sf ../lib32/libgcj_bc.so 32/libgcj_bc.so -ln -sf lib64/libgcj_bc.so libgcj_bc.so -%endif -%else -%ifarch %{multilib_64_archs} -ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libstdc++.a 32/libstdc++.a -ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libmudflap.a 32/libmudflap.a -ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libmudflapth.a 32/libmudflapth.a -%if %{build_java} -ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgcj_bc.so 32/libgcj_bc.so -%endif -%endif -%endif - -# Strip debug info from Fortran/ObjC/Java static libraries -strip -g `find . \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \ - -o -name libmudflap.a -o -name libmudflapth.a \ - -o -name libgcc.a -o -name libgcov.a \) -a -type f` -popd -chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgfortran.so.3.* -chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.so.1.* -chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.so.0.* -chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.so.2.* - -%if %{build_ada} -chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgnarl*so* -chmod 755 $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgnat*so* -%endif - -mv $FULLPATH/include-fixed/syslimits.h $FULLPATH/include/syslimits.h -mv $FULLPATH/include-fixed/limits.h $FULLPATH/include/limits.h -for h in `find $FULLPATH/include -name \*.h`; do - if grep -q 'It has been auto-edited by fixincludes from' $h; then - rh=`grep -A2 'It has been auto-edited by fixincludes from' $h | tail -1 | sed 's|^.*"\(.*\)".*$|\1|'` - diff -up $rh $h || : - rm -f $h - fi -done - -cat > $RPM_BUILD_ROOT%{_prefix}/bin/c89 <<"EOF" -#!/bin/sh -fl="-std=c89" -for opt; do - case "$opt" in - -ansi|-std=c89|-std=iso9899:1990) fl="";; - -std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2 - exit 1;; - esac -done -exec gcc $fl ${1+"$@"} -EOF -cat > $RPM_BUILD_ROOT%{_prefix}/bin/c99 <<"EOF" -#!/bin/sh -fl="-std=c99" -for opt; do - case "$opt" in - -std=c99|-std=iso9899:1999) fl="";; - -std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2 - exit 1;; - esac -done -exec gcc $fl ${1+"$@"} -EOF -chmod 755 $RPM_BUILD_ROOT%{_prefix}/bin/c?9 - -mkdir -p $RPM_BUILD_ROOT%{_prefix}/sbin -gcc -static -Os %{SOURCE1} -o $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade -strip $RPM_BUILD_ROOT%{_prefix}/sbin/libgcc_post_upgrade - -cd .. -%find_lang %{name} -%find_lang cpplib - -# Remove binaries we will not be including, so that they don't end up in -# gcc-debuginfo -rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/{libffi*,libiberty.a} -rm -f $FULLEPATH/install-tools/{mkheaders,fixincl} -rm -f $RPM_BUILD_ROOT%{_prefix}/lib/{32,64}/libiberty.a -rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libssp* -rm -f $RPM_BUILD_ROOT%{_prefix}/bin/gnative2ascii - -%ifarch %{multilib_64_archs} -# Remove libraries for the other arch on multilib arches -rm -f $RPM_BUILD_ROOT%{_prefix}/lib/lib*.so* -rm -f $RPM_BUILD_ROOT%{_prefix}/lib/lib*.a -%else -%ifarch sparcv9 ppc -rm -f $RPM_BUILD_ROOT%{_prefix}/lib64/lib*.so* -rm -f $RPM_BUILD_ROOT%{_prefix}/lib64/lib*.a -%endif -%endif - -%if %{build_java} -mkdir -p $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ - $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d -chmod 755 $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ - $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version} \ - $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d -touch $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db -%endif - -install -m644 %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/protoize.1 -echo '.so man1/protoize.1' > $RPM_BUILD_ROOT%{_mandir}/man1/unprotoize.1 -chmod 644 $RPM_BUILD_ROOT%{_mandir}/man1/unprotoize.1 - -%clean -rm -rf $RPM_BUILD_ROOT - -%post -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : - -%preun -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/gcc.info.gz || : -fi - -%post -n cpp -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : - -%preun -n cpp -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/cpp.info.gz || : -fi - -%post gfortran -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : - -%preun gfortran -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/gfortran.info.gz || : -fi - -%post java -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gcj.info.gz || : - -%preun java -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/gcj.info.gz || : -fi - -%post gnat -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || : -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || : - -%preun gnat -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || : - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || : - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || : -fi - -# Because glibc Prereq's libgcc and /sbin/ldconfig -# comes from glibc, it might not exist yet when -# libgcc is installed -%post -n libgcc -p %{_prefix}/sbin/libgcc_post_upgrade - -%post -n libstdc++ -p /sbin/ldconfig - -%postun -n libstdc++ -p /sbin/ldconfig - -%post -n libobjc -p /sbin/ldconfig - -%postun -n libobjc -p /sbin/ldconfig - -%post -n libgcj -/sbin/ldconfig -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz || : - -%preun -n libgcj -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/cp-tools.info.gz || : - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/fastjar.info.gz || : -fi - -%postun -n libgcj -p /sbin/ldconfig - -%post -n libgfortran -p /sbin/ldconfig - -%postun -n libgfortran -p /sbin/ldconfig - -%post -n libgnat -p /sbin/ldconfig - -%postun -n libgnat -p /sbin/ldconfig - -%post -n libgomp -/sbin/ldconfig -/sbin/install-info \ - --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : - -%preun -n libgomp -if [ $1 = 0 ]; then - /sbin/install-info --delete \ - --info-dir=%{_infodir} %{_infodir}/libgomp.info.gz || : -fi - -%postun -n libgomp -p /sbin/ldconfig - -%post -n libmudflap -p /sbin/ldconfig - -%postun -n libmudflap -p /sbin/ldconfig - -%files -f %{name}.lang -%defattr(-,root,root) -%{_prefix}/bin/cc -%{_prefix}/bin/c89 -%{_prefix}/bin/c99 -%{_prefix}/bin/gcc -%{_prefix}/bin/gcov -%{_prefix}/bin/protoize -%{_prefix}/bin/unprotoize -%ifarch ppc -%{_prefix}/bin/%{_target_platform}-gcc -%endif -%ifarch sparc64 sparcv9 -%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc -%endif -%ifarch ppc64 -%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc -%endif -%{_prefix}/bin/%{gcc_target_platform}-gcc -%{_mandir}/man1/gcc.1* -%{_mandir}/man1/gcov.1* -%{_mandir}/man1/protoize.1* -%{_mandir}/man1/unprotoize.1* -%{_infodir}/gcc* -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/SYSCALLS.c.X -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stddef.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdarg.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/varargs.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/float.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/limits.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdbool.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/iso646.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/syslimits.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/unwind.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/omp.h -%ifarch %{ix86} x86_64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xmmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/emmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/pmmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/tmmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ammintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/smmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/nmmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/bmmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/wmmintrin.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin-common.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h -%endif -%ifarch ia64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ia64intrin.h -%endif -%ifarch ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ppc-asm.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/altivec.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/spe.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/paired.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ppu_intrinsics.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/si2vmx.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/spu2vmx.h -%endif -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/collect2 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/crt*.o -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcov.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc_eh.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcc_s.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.spec -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgomp.so -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/crt*.o -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcov.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc_eh.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcc_s.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgomp.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgomp.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflap.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflapth.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflap.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libmudflapth.so -%endif -%ifarch %{multilib_64_archs} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/crt*.o -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcov.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_eh.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcc_s.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgomp.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgomp.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflap.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libmudflapth.so -%endif -%ifarch sparcv9 sparc64 ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.so -%endif -%dir %{_prefix}/libexec/getconf -%{_prefix}/libexec/getconf/default -%doc gcc/README* rpm.doc/changelogs/gcc/ChangeLog* gcc/COPYING* - -%files -n cpp -f cpplib.lang -%defattr(-,root,root) -/lib/cpp -%{_prefix}/bin/cpp -%{_mandir}/man1/cpp.1* -%{_infodir}/cpp* -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1 - -%files -n libgcc -%defattr(-,root,root) -/%{_lib}/libgcc_s-%{gcc_version}-%{DATE}.so.1 -/%{_lib}/libgcc_s.so.1 -%{_prefix}/sbin/libgcc_post_upgrade -%doc gcc/COPYING.LIB - -%files c++ -%defattr(-,root,root) -%{_prefix}/bin/%{gcc_target_platform}-*++ -%{_prefix}/bin/g++ -%{_prefix}/bin/c++ -%{_mandir}/man1/g++.1* -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1plus -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libstdc++.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libsupc++.a -%endif -%ifarch %{multilib_64_archs} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libstdc++.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libsupc++.a -%endif -%ifarch sparcv9 ppc %{multilib_64_archs} -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a -%endif -%ifarch sparcv9 sparc64 ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a -%endif -%doc rpm.doc/changelogs/gcc/cp/ChangeLog* - -%files -n libstdc++ -%defattr(-,root,root) -%{_prefix}/%{_lib}/libstdc++.so.6* - -%files -n libstdc++-devel -%defattr(-,root,root) -%dir %{_prefix}/include/c++ -%dir %{_prefix}/include/c++/%{gcc_version} -%{_prefix}/include/c++/%{gcc_version}/[^gjos]* -%{_prefix}/include/c++/%{gcc_version}/os* -%{_prefix}/include/c++/%{gcc_version}/s[^u]* -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libstdc++.a -%endif -%ifarch sparc64 ppc64 -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libstdc++.a -%endif -%ifnarch sparcv9 sparc64 ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.a -%endif -%ifnarch sparcv9 ppc %{multilib_64_archs} -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libstdc++.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsupc++.a -%endif -%doc rpm.doc/changelogs/libstdc++-v3/ChangeLog* libstdc++-v3/README* libstdc++-v3/doc/html/ - -%files objc -%defattr(-,root,root) -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/objc -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1obj -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libobjc.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libobjc.so -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libobjc.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libobjc.so -%endif -%ifarch %{multilib_64_archs} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libobjc.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libobjc.so -%endif -%doc rpm.doc/objc/* -%doc libobjc/THREADS* rpm.doc/changelogs/libobjc/ChangeLog* - -%files objc++ -%defattr(-,root,root) -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cc1objplus - -%files -n libobjc -%defattr(-,root,root) -%{_prefix}/%{_lib}/libobjc.so.2* - -%files gfortran -%defattr(-,root,root) -%{_prefix}/bin/gfortran -%{_prefix}/bin/f95 -%{_mandir}/man1/gfortran.1* -%{_infodir}/gfortran* -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.f90 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.mod -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib_kinds.mod -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/f951 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortranbegin.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.so -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortranbegin.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.so -%endif -%ifarch %{multilib_64_archs} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortranbegin.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.so -%endif -%doc rpm.doc/gfortran/* - -%files -n libgfortran -%defattr(-,root,root) -%{_prefix}/%{_lib}/libgfortran.so.3* - -%if %{build_java} -%files java -%defattr(-,root,root) -%{_prefix}/bin/gcj -%{_prefix}/bin/gjavah -%{_prefix}/bin/gcjh -%{_prefix}/bin/jcf-dump -%{_mandir}/man1/gcj.1* -%{_mandir}/man1/jcf-dump.1* -%{_mandir}/man1/gjavah.1* -%{_mandir}/man1/gcjh.1* -%{_infodir}/gcj* -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jc1 -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/ecj1 -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/jvgenmain -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj-tools.so -%ifarch sparcv9 sparc64 ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj_bc.so -%endif -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgij.so -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj-tools.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgcj_bc.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgij.so -%endif -%ifarch %{multilib_64_archs} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj-tools.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgcj_bc.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgij.so -%endif -%doc rpm.doc/changelogs/gcc/java/ChangeLog* - -%files -n libgcj -%defattr(-,root,root) -%{_prefix}/bin/jv-convert -%{_prefix}/bin/gij -%{_prefix}/bin/gjar -%{_prefix}/bin/fastjar -%{_prefix}/bin/grepjar -%{_prefix}/bin/grmic -%{_prefix}/bin/grmid -%{_prefix}/bin/grmiregistry -%{_prefix}/bin/gtnameserv -%{_prefix}/bin/gkeytool -%{_prefix}/bin/gorbd -%{_prefix}/bin/gserialver -%{_prefix}/bin/gcj-dbtool -%if %{include_gappletviewer} -%{_prefix}/bin/gappletviewer -%{_mandir}/man1/gappletviewer.1* -%endif -%{_prefix}/bin/gjarsigner -%{_mandir}/man1/fastjar.1* -%{_mandir}/man1/grepjar.1* -%{_mandir}/man1/gjar.1* -%{_mandir}/man1/gjarsigner.1* -%{_mandir}/man1/jv-convert.1* -%{_mandir}/man1/gij.1* -%{_mandir}/man1/grmic.1* -%{_mandir}/man1/grmiregistry.1* -%{_mandir}/man1/gcj-dbtool.1* -%{_mandir}/man1/gkeytool.1* -%{_mandir}/man1/gorbd.1* -%{_mandir}/man1/grmid.1* -%{_mandir}/man1/gserialver.1* -%{_mandir}/man1/gtnameserv.1* -%{_infodir}/fastjar.info* -%{_infodir}/cp-tools.info* -%{_prefix}/%{_lib}/libgcj.so.* -%{_prefix}/%{_lib}/libgcj-tools.so.* -%{_prefix}/%{_lib}/libgcj_bc.so.* -%{_prefix}/%{_lib}/libgij.so.* -%dir %{_prefix}/%{_lib}/gcj-%{version} -%{_prefix}/%{_lib}/gcj-%{version}/libgtkpeer.so -%{_prefix}/%{_lib}/gcj-%{version}/libgjsmalsa.so -%{_prefix}/%{_lib}/gcj-%{version}/libjawt.so -%if %{include_gappletviewer} -%{_prefix}/%{_lib}/gcj-%{version}/libgcjwebplugin.so -%endif -%{_prefix}/%{_lib}/gcj-%{version}/libjvm.so -%dir %{_prefix}/share/java -%{_prefix}/share/java/[^sl]* -%{_prefix}/share/java/libgcj-%{version}.jar -%dir %{_prefix}/%{_lib}/security -%config(noreplace) %{_prefix}/%{_lib}/security/classpath.security -%{_prefix}/%{_lib}/logging.properties -%dir %{_prefix}/%{_lib}/gcj-%{version}/classmap.db.d -%attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_prefix}/%{_lib}/gcj-%{version}/classmap.db -%if %{include_gappletviewer} -%doc rpm.doc/README.libgcjwebplugin.so -%endif - -%files -n libgcj-devel -%defattr(-,root,root) -%{_prefix}/bin/addr2name.awk -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/gcj -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jawt.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jawt_md.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jni.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jni_md.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/jvmpi.h -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj.spec -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libgcj_bc.so -%endif -%ifarch sparc64 ppc64 -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libgcj_bc.so -%endif -%ifnarch sparcv9 sparc64 ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgcj_bc.so -%endif -%dir %{_prefix}/include/c++ -%dir %{_prefix}/include/c++/%{gcc_version} -%{_prefix}/include/c++/%{gcc_version}/[gj]* -%{_prefix}/include/c++/%{gcc_version}/org -%{_prefix}/include/c++/%{gcc_version}/sun -%{_prefix}/%{_lib}/pkgconfig/libgcj-*.pc -%doc rpm.doc/boehm-gc/* rpm.doc/fastjar/* rpm.doc/libffi/* -%doc rpm.doc/libjava/* - -%files -n libgcj-src -%defattr(-,root,root) -%dir %{_prefix}/share/java -%{_prefix}/share/java/src*.zip -%{_prefix}/share/java/libgcj-tools-%{version}.jar -%endif - -%if %{build_ada} -%files gnat -%defattr(-,root,root) -%{_prefix}/bin/gnat* -%{_infodir}/gnat* -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/libexec/gcc -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform} -%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version} -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib -%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/gnat1 -%doc rpm.doc/changelogs/gcc/ada/ChangeLog* - -%files -n libgnat -%defattr(-,root,root) -%{_prefix}/%{_lib}/libgnat-*.so -%{_prefix}/%{_lib}/libgnarl-*.so -%endif - -%files -n libgomp -%defattr(-,root,root) -%{_prefix}/%{_lib}/libgomp.so.1* -%{_infodir}/libgomp.info* -%doc rpm.doc/changelogs/libgomp/ChangeLog* - -%files -n libmudflap -%defattr(-,root,root) -%{_prefix}/%{_lib}/libmudflap.so.0* -%{_prefix}/%{_lib}/libmudflapth.so.0* - -%files -n libmudflap-devel -%defattr(-,root,root) -%dir %{_prefix}/lib/gcc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version} -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mf-runtime.h -%ifarch sparcv9 ppc -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libmudflap.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libmudflapth.a -%endif -%ifarch sparc64 ppc64 -%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libmudflap.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libmudflapth.a -%endif -%ifnarch sparcv9 sparc64 ppc ppc64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.a -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflap.so -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libmudflapth.so -%endif -%doc rpm.doc/changelogs/libmudflap/ChangeLog* - -%changelog -* Wed Nov 5 2008 Jakub Jelinek 4.3.2-7 -- update from gcc-4_3-branch - - PRs c/35437, fortran/35680, fortran/37723, fortran/37749, fortran/37787, - fortran/37794, fortran/37903, libfortran/37707, libfortran/37863, - middle-end/37882, other/37897, rtl-optimization/37769, target/37909, - target/37939, tree-optimization/37102 -- fix ICE in extract_bit_field_1 (PR middle-end/37870) -- combiner fix for shifts (PR c/37924) -- fix -fdump-ipa-all -dv (PR middle-end/37858) -- fix ICE with wrong use of noreturn attribute (PR tree-optimization/37879) -- fix up --with-java_bootstrap build - -* Thu Oct 9 2008 Jakub Jelinek 4.3.2-6 -- fix fallouts from the -g -O0 debugging patch (#466169, #466198) - -* Wed Oct 8 2008 Jakub Jelinek 4.3.2-5 -- update from gcc-4_3-branch - - PRs c++/37555, c/35712, c/37645, fortran/35770, fortran/35945, - fortran/36374, fortran/36454, fortran/36700, fortran/37274, - fortran/37504, fortran/37580, fortran/37583, fortran/37626, - fortran/37706, middle-end/36575, middle-end/37236, middle-end/37731, - rtl-optimization/37544, target/35620, target/35713, target/37603, - tree-opt/35737, tree-optimization/36343, tree-optimization/37539 -- ensure one can put breakpoints on break, continue and goto statements - with -g -O0 (#465824, PRs debug/29609, debug/36690, debug/37616) -- emit one DW_TAG_common_block for each common block in each scope, not - one for each common block in one CU (#465974, PR debug/37738) -- Intel -maes and -mpclmul support - -* Wed Sep 17 2008 Jakub Jelinek 4.3.2-4 -- update from gcc-4_3-branch - - PRs c++/37389, fortran/35837, fortran/36214, fortran/37099, fortran/37199, - rtl-optimization/37408, target/37466, tree-optimization/36630 -- revert PR c++/36741 fix -- fix VLA debuginfo at -O0 (PR debug/34037) - -* Sat Sep 6 2008 Jakub Jelinek 4.3.2-3 -- don't run tests that require Altivec hw on non-Altivec powerpcs -- make sure none of libgcj binaries/libraries contains /usr/%{lib} in - RPATH -- fix up BuildRoot - -* Fri Sep 5 2008 Jakub Jelinek 4.3.2-2 -- update from gcc-4_3-branch - - PRs c++/37348, c/37261, fortran/36371, fortran/37193, middle-end/36449, - target/36332, target/37168 -- make ChangeLog files and gcc.info valid UTF-8, remove gnative2ascii from - gcc-gnat, comment out most of the Obsoletes (#225778) -- on x86_64 decrease frame size in varargs functions that don't need saving - gpr or fpr registers -- fix ICE on implicitly determined firstprivate where copy ctor or dtor - needs synthetization (PR c++/37189) -- document how to recrease the tarball - -* Fri Aug 29 2008 Jakub Jelinek 4.3.2-1 -- update from gcc-4_3-branch - - 4.3.2 release - - PRs c++/36741, middle-end/36548, middle-end/36817, middle-end/37125, - target/37184, target/37191, target/37197 -- backport further Fortran debuginfo improvements (#460378, #459375) -- revert removal of adjacent bitfield comparison - optimization (PR middle-end/37248) -- on ppc/ppc64 add paired.h, ppu_instrinsics.h, si2vmx.h and spu2vmx.h - headers (#460497) - -* Mon Aug 25 2008 Jakub Jelinek 4.3.1-8 -- update from gcc-4_3-branch - - PRs debug/37156, libgcj/8995, libstdc++/37100, target/37101 -- backport Fortran debuginfo improvements (PRs debug/35896, fortran/35154, - fortran/35724, fortran/35892, fortran/29635, fortran/23057 - fortran/24790, #457792, #457793, #459374, #459376, #459378) - -* Thu Aug 14 2008 Jakub Jelinek 4.3.1-7 -- update from gcc-4_3-branch - - PRs bootstrap/35752, c++/36688, c++/36999, c++/37016, c/35746, - fortran/36582, libgcj/31890, middle-end/35432, middle-end/36691, - middle-end/37014, middle-end/37026, middle-end/37042, - rtl-optimization/35542, rtl-optimization/36998, target/35659, - target/36613, tree-optimization/36991 -- fix folding of widened comparisons (PR middle-end/37103) - -* Fri Aug 1 2008 Jakub Jelinek 4.3.1-6 -- update from gcc-4_3-branch - - PRs c++/36405, c++/36767, c++/36852, debug/36278, preprocessor/36649, - rtl-optimization/36929 - - fix the last -Os -fasynchronous-unwind-tables known issue (#447912, - PR rtl-optimization/36419) -- don't loop > 230000 times in make_temp_file if /tmp is full (#203231) - -* Mon Jul 28 2008 Jakub Jelinek 4.3.1-5 -- update from gcc-4_3-branch - - PRs c++/36407, fortran/36132, fortran/36366, fortran/36824, fortran/36852, - libfortran/36852, libstdc++/36552, libstdc++/36729, libstdc++/36832, - middle-end/36369, middle-end/36811, middle-end/36877, - rtl-optimization/35281, rtl-optimization/36419, - rtl-optimization/36753, target/35492, target/35802, target/36780, - target/36782, target/36784, target/36827, tree-optimization/36830 -- OpenMP 3.0 bugfixes from trunk - - fix occassional hangs of libgomp.c/ordered-3.c - - PR middle-end/36790 - -* Tue Jul 8 2008 Jakub Jelinek 4.3.1-4 -- update from gcc-4_3-branch - - PRs c++/34963, c++/36662, fortran/36546, fortran/36657, fortran/36676, - libstdc++/36612, libstdc++/36616, rtl-optimization/34744, - target/34780, target/34856, target/36510, target/36634, - target/36684, target/36698, target/36736, testsuite/36620, - tree-optimization/36648 - - fix -frepo (#448390, PR c++/36364) -- improve OpenMP debug info (PRs debug/36617, middle-end/36726) - -* Tue Jun 24 2008 Jakub Jelinek 4.3.1-3 -- update from gcc-4_3-branch - - PRs c++/35317, c++/35320, documentation/30739, fortran/34908, - fortran/36276, fortran/36538, java/36247, middle-end/36584, - rtl-optimization/35604, target/36336, target/36424, - tree-optimization/36493, tree-optimization/36498, - tree-optimization/36504, tree-optimization/36519 - - don't mark hard registers as reg pointers (#451068, target/36533) - - allow more compute_antic iterations (#450889, tree-optimization/36508) -- fix #pragma omp task copyfn registration with cgraph (c++/36523) - -* Thu Jun 12 2008 Jakub Jelinek 4.3.1-2 -- update from gcc-4_3-branch - - PRs c++/36408, middle-end/35336, middle-end/36506, testsuite/36443, - tree-optimization/36474 -- OpenMP 3.0 bugfixes from trunk - - fix a thinko in task dispatching on barriers - - PRs libgomp/36469, libgomp/36471 -- fix nested inline functions in -std=gnu99 mode (#450967, PR c/36507) - -* Mon Jun 9 2008 Jakub Jelinek 4.3.1-1 -- update from gcc-4_3-branch - - 4.3.1 release - - PRs ada/24880, ada/26635, bootstrap/35169, bootstrap/36452, c++/35578, - c++/35986, c++/36023, c++/36237, c++/36308, fortran/35184, - fortran/35743, fortran/35745, fortran/35756, fortran/35759, - fortran/35780, fortran/35864, fortran/35997, fortran/36176, - fortran/36233, libfortran/35990, libfortran/35993, libfortran/35995, - libgcj/36252, libstdc++/35922, middle-end/34973, middle-end/36013, - middle-end/36077, middle-end/36093, middle-end/36106, - middle-end/36137, middle-end/36154, middle-end/36172, - middle-end/36194, middle-end/36227, middle-end/36244, - middle-end/36300, middle-end/PR28690, rtl-optimization/36111, - rtl-optimization/36419, target/27386, target/30243, target/34932, - target/35661, target/35921, target/36079, target/36090, target/36095, - target/36182, target/36224, target/36321, target/36362, - tree-optimization/34244, tree-optimization/34330, - tree-optimization/34976, tree-optimization/35204, - tree-optimization/36098, tree-optimization/36119, - tree-optimization/36129, tree-optimization/36181, - tree-optimization/36187, tree-optimization/36245, - tree-optimization/36262, tree-optimization/36291, - tree-optimization/36293, tree-optimization/36339 -- OpenMP 3.0 support - -* Tue May 20 2008 Tom "spot" Callaway 4.3.0-11 -- fix missing file with sparcv9 - -* Sun May 18 2008 Tom "spot" Callaway 4.3.0-10 -- make sparcv9 the multilib_32_arch for sparc64 - -* Sun May 18 2008 Tom "spot" Callaway 4.3.0-9 -- sparcv9 support and detection - -* Mon Apr 28 2008 Jakub Jelinek 4.3.0-8 -- update from gcc-4_3-branch - - decrease compile time stack usage during GC (#443739, PR debug/36060) - - fix -mregparm=X with K&R function decls (#443583, PR target/36015) - - fix tail called sqrt and math builtins (#435297, - PR rtl-optimization/36017) - - PRs c++/33486, c++/35316, c++/35325, c++/35678, c++/35747, c++/35758, - c++/35773, c/35436, c/35744, fortran/35932, fortran/35944, - fortran/35946, fortran/35947, fortran/35959, fortran/35994, - libgcj/35950, libstdc++/35597, libstdc++/35887, libstdc++/35954, - middle-end/36021, target/35944, testsuite/36056, - tree-optimization/35982, tree-optimization/36008, - tree-optimization/36034 -- fix C++ const references to bitfields (PR c++/35909) -- fix C++ ++var = val error recovery (PR c++/35987) -- fix C++ reference binding to function through using-decl (PR c++/35650) - -* Wed Apr 16 2008 Jakub Jelinek 4.3.0-7 -- update from gcc-4_3-branch - - PRs c++/35708, c++/35734, libstdc++/35816, middle-end/35519, - rtl-optimization/34916, target/35364, target/35695, - tree-optimization/35821, tree-optimization/35833 - - fix libgfortran buffer overflows -- fix restoring of Altivec registers when alloca is used (PR target/35907) -- misc fixes (PRs tree-optimization/35899, target/35662, c/35739) - -* Fri Apr 4 2008 Jakub Jelinek 4.3.0-6 -- update from gcc-4_3-branch - - PRs ada/33857, c++/35245, c++/35741, c/35738, fortran/35698, - fortran/35699, fortran/35702, fortran/35724, fortran/35740, - fortran/35786, libfortran/35699, libstdc++/35725, middle-end/35429, - middle-end/35705, middle-end/35818, target/31110, target/31232, - target/35657, tree-opt/35431 -- fix OpenMP ICE on invalid extern/static VLA (PR c/35751) -- fix PCH failure if a precompiled header is included more than - once (#251682, PR pch/13675) - -* Thu Mar 27 2008 Jakub Jelinek 4.3.0-5 -- fix libgomp when sync builtins aren't available -- on i386 build libgomp and __cxa_guard_* as i486+, - NPTL doesn't support pre-i486 anyway and atomic builtins give - significant speedups - -* Wed Mar 26 2008 Jakub Jelinek 4.3.0-4 -- update from gcc-4_3-branch - - PRs c++/35332, c++/35548, debug/31510, fortran/33295, fortran/34813, - libfortran/35617, libfortran/35627, libgomp/35625, libstdc++/35256, - libstdc++/35637, middle-end/35593, middle-end/35609, - middle-end/35611, middle-end/35616, target/35504, testsuite/34168, - testsuite/35621 -- backport libgomp speedups from gomp-3_0-branch (#437268) -- fix diagnostics with compound literals (PR c/35440) -- fix C++ handling of late template attributes (PR c++/35546) -- Prereq install-info in libgomp (#437523) - -* Fri Mar 14 2008 Jakub Jelinek 4.3.0-3 -- update from gcc-4_3-branch - - PRs c++/33887, c++/35328, c++/35337, c++/35469, c/35438, c/35439, - fortran/35474, libstdc++/35541, libstdc++/35566, middle-end/35099, - middle-end/35185, middle-end/35456, middle-end/35526, - middle-end/35549, target/34000, target/35190, target/35225, - target/35350, target/35496, target/35540, target/35553, - tree-optimization/34989, tree-optimization/35472 - - fix eclipse build (#434356) -- libstdc++ doc fix (#436687) - -* Fri Mar 7 2008 Jakub Jelinek 4.3.0-2 -- fix ppc/ppc64 8/16 bit sync builtins (PR target/35498) - -* Fri Mar 7 2008 Jakub Jelinek 4.3.0-1 -- gcc 4.3.0 release - - PRs c++/35244, c++/35315, c++/35323, c++/35333, c++/35338, driver/35420, - libfortran/35355, libstdc++/35480, target/33963, target/35189, - target/35222, target/35401, target/35453 - -* Fri Feb 29 2008 Jakub Jelinek 4.3.0-0.13 -- update from gcc-4_3-branch - - PRs middle-end/19984, target/25477 - - remove , fix ppc/ppc64 - std::{,tr1::}hash::operator() ABI - -* Thu Feb 28 2008 Jakub Jelinek 4.3.0-0.12 -- update from gcc-4_3-branch - - PRs c++/34715, c++/35368, libfortran/24685, middle-end/34971, - middle-end/35390, target/25477 - -* Fri Feb 22 2008 Jakub Jelinek 4.3.0-0.11 -- update from gcc-4_3-branch - - 4.3.0 rc1 - - PRs bootstrap/35218, bootstrap/35273, c++/34950, c++/35282, - middle-end/35265, rtl-optimization/35232, target/34526, - target/35071, target/35239, target/35264 - -* Mon Feb 18 2008 Jakub Jelinek 4.3.0-0.10 -- update to trunk - - PRs c++/11159, c++/28743, c++/34050, c++/35023, c++/35024, c++/35026, - c++/5645, c/28368, documentation/15479, fortran/34952, - fortran/35150, libgcj/33085, libstdc++/34797, libstdc++/35209, - libstdc++/35221, middle-end/34621, middle-end/35149, middle-end/35196, - middle-end/35227, preprocessor/35061, target/34930, target/35088, - testsuite/35119, testsuite/35208, tree-optimization/35164, - tree-optimization/35231 -- some OpenMP fixes (PRs c++/34964, c++/35028, c++/35078) -- fix cp-tools.info* @direntry (#433222) - -* Thu Feb 14 2008 Jakub Jelinek 4.3.0-0.9 -- update to trunk - - PRs middle-end/29673, ada/35143, c++/34774, c++/34824, c++/34962, c++/34937, - c++/34939, debug/35065, other/35148, target/34393 -- fix ia64 build (#432068) - -* Tue Feb 12 2008 Jakub Jelinek 4.3.0-0.8 -- update to trunk - - PRs bootstrap/33781, bootstrap/34922, bootstrap/35051, bootstrap/35115, - c++/29048, c++/33553, c++/33916, c++/33964, c++/34052, c++/34094, - c++/34314, c++/34776, c++/34862, c++/34891, c++/34935, c++/34936, - c++/35049, c++/35056, c++/35074, c++/35077, c++/35096, c++/35097, - c++/35113, c++/35116, c/29326, c/34993, documentation/30330, - fortran/32315, fortran/32760, fortran/34910, fortran/34945, - fortran/35037, fortran/35093, java/35035, libffi/34612, - libfortran/35001, libfortran/35063, libgcj/30071, libstdc++/16251, - middle-end/33631, middle-end/34627, middle-end/35043, - middle-end/35136, middle-end/35163, middle_end/34150, objc++/34193, - other/29972, other/31405, other/32754, other/35042, other/35070, - other/35107, rtl-opt/33410, rtl-optimization/34773, - rtl-optimization/34995, rtl-optimization/34998, target/23322, - target/34900, target/34982, target/35045, target/35083, - target/35084, testsuite/33946, testsuite/35047, - tree-optimization/33992, tree-optimization/35085, tree-optimization/35171 - - inline asm optimization fix (#432146, PR inline-asm/35160) - - SRA fix (#432090, PR c++/35144) -- fix #pragma omp parallel body calling nested functions which store - into shared parent variables (PR middle-end/35130) -- ./-> after dependent expr parsing fix (PR c++/35138) - -* Wed Jan 30 2008 Jakub Jelinek 4.3.0-0.7 -- update from trunk - - fix ISO C99 6.7.4p3 diagnostics (#427634, PR c/35017) - -* Fri Jan 25 2008 Jakub Jelinek 4.3.0-0.6 -- update from the trunk - -* Thu Jan 10 2008 Jakub Jelinek 4.3.0-0.5 -- update from the trunk -- don't require on ppc/ppc64 libmudflap in gcc subpackage - -* Thu Dec 20 2007 Jakub Jelinek 4.3.0-0.4 -- update from the trunk -- adjustments to build against xulrunner-devel - -* Fri Dec 14 2007 Jakub Jelinek 4.3.0-0.3 -- build fastjar, gjar is uncomparably worse -- fix profiledbootstrap and use it - -* Wed Dec 12 2007 Jakub Jelinek 4.3.0-0.2 -- update from the trunk - -* Sun Dec 9 2007 Jakub Jelinek 4.3.0-0.1 -- initial 4.3 package, using newly created redhat/gcc-4_3-branch diff --git a/gcc44-build-id.patch b/gcc44-build-id.patch new file mode 100644 index 0000000..f76f939 --- /dev/null +++ b/gcc44-build-id.patch @@ -0,0 +1,52 @@ +2007-07-22 Roland McGrath + + * config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for + non-relocatable link. + * config/linux.h (LINK_EH_SPEC): Likewise. + * config/alpha/elf.h (LINK_EH_SPEC): Likewise. + * config/ia64/linux.h (LINK_EH_SPEC): Likewise. + +--- gcc/config/rs6000/sysv4.h.~1~ ++++ gcc/config/rs6000/sysv4.h +@@ -906,7 +906,7 @@ extern int fixuplabelno; + %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}" + + #if defined(HAVE_LD_EH_FRAME_HDR) +-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " + #endif + + #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ +--- gcc/config/linux.h.~1~ ++++ gcc/config/linux.h +@@ -85,7 +85,7 @@ Boston, MA 02110-1301, USA. */ + } while (0) + + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " + #endif + + /* Define this so we can compile MS code for use with WINE. */ +--- gcc/config/alpha/elf.h.~1~ ++++ gcc/config/alpha/elf.h +@@ -421,7 +421,7 @@ extern int alpha_this_gpdisp_sequence_nu + I imagine that other systems will catch up. In the meantime, it + doesn't harm to make sure that the data exists to be used later. */ + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} " + #endif + + /* A C statement (sans semicolon) to output to the stdio stream STREAM +--- gcc/config/ia64/linux.h.~1~ ++++ gcc/config/ia64/linux.h +@@ -56,7 +56,7 @@ do { \ + Signalize that because we have fde-glibc, we don't need all C shared libs + linked against -lgcc_s. */ + #undef LINK_EH_SPEC +-#define LINK_EH_SPEC "" ++#define LINK_EH_SPEC "%{!r:--build-id} " + + #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h" + diff --git a/gcc44-c++-builtin-redecl.patch b/gcc44-c++-builtin-redecl.patch new file mode 100644 index 0000000..77655ad --- /dev/null +++ b/gcc44-c++-builtin-redecl.patch @@ -0,0 +1,102 @@ +2007-10-02 Jakub Jelinek + + * decl.c (duplicate_decls): When redeclaring a builtin function, + keep the merged decl builtin whenever types match, even if new + decl defines a function. + + * gcc.dg/builtins-65.c: New test. + * g++.dg/ext/builtin10.C: New test. + +--- gcc/cp/decl.c.jj 2007-10-01 22:11:09.000000000 +0200 ++++ gcc/cp/decl.c 2007-10-02 11:39:46.000000000 +0200 +@@ -1988,23 +1988,21 @@ duplicate_decls (tree newdecl, tree oldd + DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl); + DECL_RESULT (olddecl) = DECL_RESULT (newdecl); + } ++ /* If redeclaring a builtin function, it stays built in. */ ++ if (types_match && DECL_BUILT_IN (olddecl)) ++ { ++ DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl); ++ DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); ++ /* If we're keeping the built-in definition, keep the rtl, ++ regardless of declaration matches. */ ++ COPY_DECL_RTL (olddecl, newdecl); ++ } + if (new_defines_function) + /* If defining a function declared with other language + linkage, use the previously declared language linkage. */ + SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl)); + else if (types_match) + { +- /* If redeclaring a builtin function, and not a definition, +- it stays built in. */ +- if (DECL_BUILT_IN (olddecl)) +- { +- DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl); +- DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); +- /* If we're keeping the built-in definition, keep the rtl, +- regardless of declaration matches. */ +- COPY_DECL_RTL (olddecl, newdecl); +- } +- + DECL_RESULT (newdecl) = DECL_RESULT (olddecl); + /* Don't clear out the arguments if we're redefining a function. */ + if (DECL_ARGUMENTS (olddecl)) +--- gcc/testsuite/gcc.dg/builtins-65.c.jj 2007-10-02 11:23:51.000000000 +0200 ++++ gcc/testsuite/gcc.dg/builtins-65.c 2007-10-02 11:24:12.000000000 +0200 +@@ -0,0 +1,25 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++typedef __SIZE_TYPE__ size_t; ++extern void __chk_fail (void); ++extern int snprintf (char *, size_t, const char *, ...); ++extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...) ++{ ++ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b) ++ __chk_fail (); ++ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ()); ++} ++extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf"); ++ ++char buf[10]; ++ ++int ++main (void) ++{ ++ snprintf (buf, 10, "%d%d\n", 10, 10); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "mysnprintf" } } */ ++/* { dg-final { scan-assembler-not "__chk_fail" } } */ +--- gcc/testsuite/g++.dg/ext/builtin10.C.jj 2007-10-02 11:19:45.000000000 +0200 ++++ gcc/testsuite/g++.dg/ext/builtin10.C 2007-10-02 11:23:26.000000000 +0200 +@@ -0,0 +1,27 @@ ++// { dg-do compile } ++// { dg-options "-O2" } ++ ++typedef __SIZE_TYPE__ size_t; ++extern "C" { ++extern void __chk_fail (void); ++extern int snprintf (char *, size_t, const char *, ...); ++extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...) ++{ ++ if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b) ++ __chk_fail (); ++ return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ()); ++} ++extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf"); ++} ++ ++char buf[10]; ++ ++int ++main (void) ++{ ++ snprintf (buf, 10, "%d%d\n", 10, 10); ++ return 0; ++} ++ ++// { dg-final { scan-assembler "mysnprintf" } } ++// { dg-final { scan-assembler-not "__chk_fail" } } diff --git a/gcc44-hack.patch b/gcc44-hack.patch new file mode 100644 index 0000000..4880b12 --- /dev/null +++ b/gcc44-hack.patch @@ -0,0 +1,113 @@ +--- libada/Makefile.in.jj 2009-01-14 12:07:35.000000000 +0100 ++++ libada/Makefile.in 2009-01-15 14:25:33.000000000 +0100 +@@ -66,17 +66,39 @@ target_noncanonical:=@target_noncanonica + version := $(shell cat $(srcdir)/../gcc/BASE-VER) + libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) + ++DEFAULTMULTIFLAGS := ++ifeq ($(MULTISUBDIR),) ++targ:=$(subst -, ,$(target)) ++arch:=$(word 1,$(targ)) ++ifeq ($(words $(targ)),2) ++osys:=$(word 2,$(targ)) ++else ++osys:=$(word 3,$(targ)) ++endif ++ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),) ++ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64) ++DEFAULTMULTIFLAGS := -m64 ++else ++ifeq ($(strip $(filter-out s390%, $(arch))),) ++DEFAULTMULTIFLAGS := -m31 ++else ++DEFAULTMULTIFLAGS := -m32 ++endif ++endif ++endif ++endif ++ + # exeext should not be used because it's the *host* exeext. We're building + # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus + # definitions just in case something slips through the safety net provided + # by recursive make invocations in gcc/ada/Makefile.in + LIBADA_FLAGS_TO_PASS = \ + "MAKEOVERRIDES=" \ +- "LDFLAGS=$(LDFLAGS)" \ ++ "LDFLAGS=$(strip $(LDFLAGS) $(DEFAULTMULTIFLAGS))" \ + "LN_S=$(LN_S)" \ + "SHELL=$(SHELL)" \ +- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ ++ "GNATLIBFLAGS=$(strip $(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \ ++ "GNATLIBCFLAGS=$(strip $(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \ + "TARGET_LIBGCC2_CFLAGS=$(TARGET_LIBGCC2_CFLAGS)" \ + "THREAD_KIND=$(THREAD_KIND)" \ + "TRACE=$(TRACE)" \ +@@ -87,7 +109,7 @@ LIBADA_FLAGS_TO_PASS = \ + "exeext=.exeext.should.not.be.used " \ + 'CC=the.host.compiler.should.not.be.needed' \ + "GCC_FOR_TARGET=$(CC)" \ +- "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" ++ "CFLAGS=$(strip $(CFLAGS) $(DEFAULTMULTIFLAGS) $(WARN_CFLAGS))" + + # Rules to build gnatlib. + .PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared oscons +--- libjava/classpath/native/plugin/gcjwebplugin.cc.jj 2009-01-14 12:08:34.000000000 +0100 ++++ libjava/classpath/native/plugin/gcjwebplugin.cc 2009-01-15 21:20:17.000000000 +0100 +@@ -45,7 +45,7 @@ exception statement from your version. * + + // Netscape plugin API includes. + #include +-#include ++#include + + // GLib includes. + #include +@@ -827,7 +827,7 @@ GCJ_URLNotify (NPP instance, const char* + PLUGIN_DEBUG ("GCJ_URLNotify return"); + } + +-jref ++void * + GCJ_GetJavaClass (void) + { + PLUGIN_DEBUG ("GCJ_GetJavaClass"); +@@ -1669,17 +1669,17 @@ NP_Initialize (NPNetscapeFuncs* browserT + // Return to the browser the plugin functions that we implement. + pluginTable->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR; + pluginTable->size = sizeof (NPPluginFuncs); +- pluginTable->newp = NewNPP_NewProc (GCJ_New); +- pluginTable->destroy = NewNPP_DestroyProc (GCJ_Destroy); +- pluginTable->setwindow = NewNPP_SetWindowProc (GCJ_SetWindow); +- pluginTable->newstream = NewNPP_NewStreamProc (GCJ_NewStream); +- pluginTable->destroystream = NewNPP_DestroyStreamProc (GCJ_DestroyStream); +- pluginTable->asfile = NewNPP_StreamAsFileProc (GCJ_StreamAsFile); +- pluginTable->writeready = NewNPP_WriteReadyProc (GCJ_WriteReady); +- pluginTable->write = NewNPP_WriteProc (GCJ_Write); +- pluginTable->print = NewNPP_PrintProc (GCJ_Print); +- pluginTable->urlnotify = NewNPP_URLNotifyProc (GCJ_URLNotify); +- pluginTable->getvalue = NewNPP_GetValueProc (GCJ_GetValue); ++ pluginTable->newp = (NPP_NewProcPtr) (GCJ_New); ++ pluginTable->destroy = (NPP_DestroyProcPtr) (GCJ_Destroy); ++ pluginTable->setwindow = (NPP_SetWindowProcPtr) (GCJ_SetWindow); ++ pluginTable->newstream = (NPP_NewStreamProcPtr) (GCJ_NewStream); ++ pluginTable->destroystream = (NPP_DestroyStreamProcPtr) (GCJ_DestroyStream); ++ pluginTable->asfile = (NPP_StreamAsFileProcPtr) (GCJ_StreamAsFile); ++ pluginTable->writeready = (NPP_WriteReadyProcPtr) (GCJ_WriteReady); ++ pluginTable->write = (NPP_WriteProcPtr) (GCJ_Write); ++ pluginTable->print = (NPP_PrintProcPtr) (GCJ_Print); ++ pluginTable->urlnotify = (NPP_URLNotifyProcPtr) (GCJ_URLNotify); ++ pluginTable->getvalue = (NPP_GetValueProcPtr) (GCJ_GetValue); + + initialized = true; + +--- gcc/ada/make.adb 2008-11-07 23:00:32.000000000 +0100 ++++ gcc/ada/make.adb 2009-01-16 17:55:02.000000000 +0100 +@@ -8039,6 +8039,7 @@ package body Make is + or else Argv (2 .. Argv'Last) = "pg" + or else (Argv (2) = 'm' and then Argv'Last > 2) + or else (Argv (2) = 'f' and then Argv'Last > 2) ++ or else (Argv'Last >= 8 and then Argv (2 .. 8) = "-param=") + then + Add_Switch (Argv, Compiler, And_Save => And_Save); + Add_Switch (Argv, Linker, And_Save => And_Save); diff --git a/gcc44-i386-libgomp.patch b/gcc44-i386-libgomp.patch new file mode 100644 index 0000000..5d1eea8 --- /dev/null +++ b/gcc44-i386-libgomp.patch @@ -0,0 +1,61 @@ +Build i386.rpm libgomp and libsupc++.a(guard.o) as i486+, pre-i486 +hardware isn't supported because NPTL doesn't support it anyway. + +--- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100 ++++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100 +@@ -44,14 +44,14 @@ if test $enable_linux_futex = yes; then + ;; + + # Note that bare i386 is not included here. We need cmpxchg. +- i[456]86-*-linux*) ++ i[3456]86-*-linux*) + config_path="linux/x86 linux posix" + case " ${CC} ${CFLAGS} " in + *" -m64 "*) + ;; + *) + if test -z "$with_arch"; then +- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" ++ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" + fi + esac + ;; +@@ -63,7 +63,7 @@ if test $enable_linux_futex = yes; then + config_path="linux/x86 linux posix" + case " ${CC} ${CFLAGS} " in + *" -m32 "*) +- XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686" ++ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" + ;; + esac + ;; +--- libstdc++-v3/libsupc++/guard.cc.jj 2008-03-01 00:58:24.000000000 +0100 ++++ libstdc++-v3/libsupc++/guard.cc 2008-03-27 14:08:44.000000000 +0100 +@@ -35,6 +35,27 @@ + #include + #include + #include ++#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS_4 ++# define _GLIBCXX_ATOMIC_BUILTINS_4 1 ++# define __sync_val_compare_and_swap(a, b, c) \ ++ ({ \ ++ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \ ++ int sltas; \ ++ __asm __volatile ("lock; cmpxchgl %3, (%1)" \ ++ : "=a" (sltas) \ ++ : "r" (a), "0" (b), "r" (c) : "memory"); \ ++ sltas; \ ++ }) ++# define __sync_lock_test_and_set(a, b) \ ++ ({ \ ++ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \ ++ int sltas; \ ++ __asm __volatile ("xchgl (%1), %0" \ ++ : "=r" (sltas) \ ++ : "r" (a), "0" (b) : "memory"); \ ++ sltas; \ ++ }) ++#endif + #if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \ + && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX) + # include diff --git a/gcc44-ia64-libunwind.patch b/gcc44-ia64-libunwind.patch new file mode 100644 index 0000000..8e10979 --- /dev/null +++ b/gcc44-ia64-libunwind.patch @@ -0,0 +1,538 @@ +2004-11-27 Jakub Jelinek + + * config.gcc (ia64*-*-linux*): If native and libelf is installed, + use ia64/t-glibc-no-libunwind instead of the other t-*unwind* + fragments. + * config/ia64/t-glibc-no-libunwind: New file. + * config/ia64/change-symver.c: New file. + * config/ia64/unwind-ia64.c: If USE_SYMVER_GLOBAL and SHARED, + define _Unwind_* to __symverglobal_Unwind_*. + (alias): Undefine. + (symverglobal): Define. Use it on _Unwind_*. + * config/ia64/mkmap-symver-multi.awk: New file. + * config/ia64/libgcc-ia64-no-libunwind.ver: New file. + +--- gcc/config.gcc.jj 2004-10-04 08:55:44.000000000 -0400 ++++ gcc/config.gcc 2004-11-13 05:23:50.000000000 -0500 +@@ -1185,9 +1185,16 @@ ia64*-*-freebsd*) + ;; + ia64*-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h ia64/sysv4.h ia64/linux.h" +- tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc" +- if test x$with_system_libunwind != xyes ; then +- tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" ++ tmake_file="${tmake_file} ia64/t-ia64" ++ if test x${target} = x${host} && test x${target} = x${build} \ ++ && grep gelf_getverdef /usr/include/gelf.h > /dev/null 2>&1 \ ++ && test -f /usr/lib/libelf.so; then ++ tmake_file="${tmake_file} ia64/t-glibc-no-libunwind" ++ else ++ tmake_file="${tmake_file} t-libunwind ia64/t-glibc" ++ if test x$with_system_libunwind != xyes ; then ++ tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind" ++ fi + fi + target_cpu_default="MASK_GNU_AS|MASK_GNU_LD" + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o" +--- gcc/config/ia64/t-glibc-no-libunwind.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/t-glibc-no-libunwind 2004-11-15 09:56:33.000000000 -0500 +@@ -0,0 +1,30 @@ ++# Don't use system libunwind library on IA-64 GLIBC based system, ++# but make _Unwind_* symbols unversioned, so that created programs ++# are usable even when libgcc_s uses libunwind. ++LIB2ADDEH += $(srcdir)/config/ia64/fde-glibc.c ++SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64-no-libunwind.ver ++SHLIB_MKMAP = $(srcdir)/config/ia64/mkmap-symver-multi.awk ++ ++SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ ++ -Wl,--soname=$(SHLIB_SONAME) \ ++ -Wl,--version-script=$(SHLIB_MAP) \ ++ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \ ++ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \ ++ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \ ++ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \ ++ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \ ++ else true; fi && \ ++ gcc -O2 -o $(SHLIB_DIR)/$(SHLIB_SONAME).tweak \ ++ $$(gcc_srcdir)/config/ia64/change-symver.c -lelf && \ ++ $(SHLIB_DIR)/$(SHLIB_SONAME).tweak $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ ++ GCC_3.4.2 _GLOBAL_ \ ++ _Unwind_GetGR _Unwind_RaiseException _Unwind_GetRegionStart _Unwind_SetIP \ ++ _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_Resume \ ++ _Unwind_DeleteException _Unwind_SetGR _Unwind_ForcedUnwind \ ++ _Unwind_Backtrace _Unwind_FindEnclosingFunction _Unwind_GetCFA \ ++ _Unwind_Resume_or_Rethrow _Unwind_GetBSP && \ ++ rm -f $(SHLIB_DIR)/$(SHLIB_SONAME).tweak && \ ++ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \ ++ $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) ++ ++TARGET_LIBGCC2_CFLAGS += -DUSE_SYMVER_GLOBAL +--- gcc/config/ia64/change-symver.c.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/change-symver.c 2004-11-13 05:23:50.000000000 -0500 +@@ -0,0 +1,211 @@ ++#define _GNU_SOURCE 1 ++#define _FILE_OFFSET_BITS 64 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int ++compute_veridx (const char *name, Elf *elf, Elf_Data *verd, GElf_Shdr *verd_shdr) ++{ ++ if (strcmp (name, "_GLOBAL_") == 0) ++ return 1; ++ ++ int cnt; ++ size_t offset = 0; ++ for (cnt = verd_shdr->sh_info; --cnt >= 0; ) ++ { ++ GElf_Verdef defmem; ++ GElf_Verdef *def; ++ GElf_Verdaux auxmem; ++ GElf_Verdaux *aux; ++ unsigned int auxoffset; ++ ++ /* Get the data at the next offset. */ ++ def = gelf_getverdef (verd, offset, &defmem); ++ if (def == NULL) ++ break; ++ ++ auxoffset = offset + def->vd_aux; ++ aux = gelf_getverdaux (verd, auxoffset, &auxmem); ++ if (aux == NULL) ++ break; ++ ++ if (strcmp (name, elf_strptr (elf, verd_shdr->sh_link, ++ aux->vda_name)) == 0) ++ return def->vd_ndx; ++ ++ /* Find the next offset. */ ++ offset += def->vd_next; ++ } ++ ++ return -1; ++} ++ ++int ++main (int argc, char **argv) ++{ ++ if (argc < 4) ++ error (1, 0, "Usage: change_symver library from_symver to_symver symbol...\nExample: change_symver libfoo.so FOO_1.0 *global* bar baz"); ++ ++ const char *fname = argv[1]; ++ ++ /* Open the file. */ ++ int fd; ++ fd = open (fname, O_RDWR); ++ if (fd == -1) ++ error (1, errno, fname); ++ ++ elf_version (EV_CURRENT); ++ ++ /* Now get the ELF descriptor. */ ++ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); ++ if (elf == NULL || elf_kind (elf) != ELF_K_ELF) ++ error (1, 0, "Couldn't open %s: %s", fname, elf_errmsg (-1)); ++ ++ size_t shstrndx; ++ /* Get the section header string table index. */ ++ if (elf_getshstrndx (elf, &shstrndx) < 0) ++ error (1, 0, "cannot get shstrndx from %s", fname); ++ ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr; ++ ++ /* We need the ELF header in a few places. */ ++ ehdr = gelf_getehdr (elf, &ehdr_mem); ++ if (ehdr == NULL) ++ error (1, 0, "couldn't get ELF headers %s: %s", fname, elf_errmsg (-1)); ++ ++ Elf_Scn *scn = NULL; ++ GElf_Shdr shdr_mem, verd_shdr, ver_shdr, dynsym_shdr; ++ Elf_Data *ver = NULL, *verd = NULL, *dynsym = NULL; ++ ++ while ((scn = elf_nextscn (elf, scn)) != NULL) ++ { ++ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); ++ ++ if (shdr == NULL) ++ error (1, 0, "couldn't get shdr from %s", fname); ++ ++ if ((shdr->sh_flags & SHF_ALLOC) != 0) ++ { ++ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); ++ Elf_Data **p; ++ ++ if (strcmp (name, ".gnu.version") == 0) ++ { ++ p = &ver; ++ ver_shdr = *shdr; ++ } ++ else if (strcmp (name, ".gnu.version_d") == 0) ++ { ++ p = &verd; ++ verd_shdr = *shdr; ++ } ++ else if (strcmp (name, ".dynsym") == 0) ++ { ++ p = &dynsym; ++ dynsym_shdr = *shdr; ++ } ++ else ++ continue; ++ ++ if (*p != NULL) ++ error (1, 0, "Two %s sections in %s", name, fname); ++ *p = elf_getdata (scn, NULL); ++ if (*p == NULL || elf_getdata (scn, *p) != NULL) ++ error (1, 0, "No data or non-contiguous data in %s section in %s", ++ name, fname); ++ } ++ } ++ ++ if (ver == NULL || verd == NULL || dynsym == NULL) ++ error (1, 0, "Couldn't find one of the needed sections in %s", fname); ++ ++ int from_idx = compute_veridx (argv[2], elf, verd, &verd_shdr); ++ if (from_idx == -1) ++ error (1, 0, "Could not find symbol version %s in %s", argv[2], fname); ++ ++ int to_idx = compute_veridx (argv[3], elf, verd, &verd_shdr); ++ if (to_idx == -1) ++ error (1, 0, "Could not find symbol version %s in %s", argv[3], fname); ++ ++ if (dynsym_shdr.sh_entsize != gelf_fsize (elf, ELF_T_SYM, 1, ehdr->e_version) ++ || dynsym_shdr.sh_size % dynsym_shdr.sh_entsize ++ || ver_shdr.sh_entsize != 2 ++ || (ver_shdr.sh_size & 1) ++ || dynsym_shdr.sh_size / dynsym_shdr.sh_entsize != ver_shdr.sh_size / 2) ++ error (1, 0, "Unexpected sh_size or sh_entsize in %s", fname); ++ ++ size_t nentries = ver_shdr.sh_size / 2; ++ size_t cnt; ++ GElf_Versym array[nentries]; ++ for (cnt = 0; cnt < nentries; ++cnt) ++ { ++ GElf_Versym vsymmem; ++ GElf_Versym *vsym; ++ ++ vsym = gelf_getversym (ver, cnt, &vsymmem); ++ if (vsym == NULL) ++ error (1, 0, "gelt_getversym failed in %s: %s", fname, elf_errmsg (-1)); ++ ++ array[cnt] = *vsym; ++ if (*vsym != from_idx) ++ continue; ++ ++ GElf_Sym sym_mem; ++ GElf_Sym *sym; ++ sym = gelf_getsym (dynsym, cnt, &sym_mem); ++ if (sym == NULL) ++ error (1, 0, "gelt_getsym failed in %s: %s", fname, elf_errmsg (-1)); ++ ++ const char *name = elf_strptr (elf, dynsym_shdr.sh_link, sym->st_name); ++ ++ int argn; ++ for (argn = 4; argn < argc; ++argn) ++ if (fnmatch (argv[argn], name, 0) == 0) ++ { ++ array[cnt] = to_idx; ++ break; ++ } ++ } ++ ++ if (sizeof (array[0]) != 2) ++ abort (); ++ ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++ if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB) ++ ; ++ else if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB) ++#elif __BYTE_ORDER == __BIG_ENDIAN ++ if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB) ++ ; ++ else if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB) ++#else ++# error Unsupported endianity ++#endif ++ { ++ for (cnt = 0; cnt < nentries; ++cnt) ++ array[cnt] = ((array[cnt] & 0xff) << 8) | ((array[cnt] & 0xff00) >> 8); ++ } ++ else ++ error (1, 0, "Unknown EI_DATA %d in %s", ehdr->e_ident[EI_DATA], fname); ++ ++ if (elf_end (elf) != 0) ++ error (1, 0, "couldn't close %s: %s", fname, elf_errmsg (-1)); ++ ++ if (lseek (fd, ver_shdr.sh_offset, SEEK_SET) != (off_t) ver_shdr.sh_offset) ++ error (1, 0, "failed to seek to %zd in %s", (size_t) ver_shdr.sh_offset, ++ fname); ++ ++ if (write (fd, array, 2 * nentries) != (ssize_t) (2 * nentries)) ++ error (1, 0, "failed to write .gnu.version section into %s", fname); ++ ++ close (fd); ++ return 0; ++} +--- gcc/config/ia64/unwind-ia64.c.jj 2004-10-04 08:55:57.000000000 -0400 ++++ gcc/config/ia64/unwind-ia64.c 2004-11-15 09:07:45.000000000 -0500 +@@ -51,6 +51,51 @@ + #define UNW_FLAG_UHANDLER(x) ((x) & 0x0000000200000000L) + #define UNW_LENGTH(x) ((x) & 0x00000000ffffffffL) + ++#if defined (USE_SYMVER_GLOBAL) && defined (SHARED) ++extern _Unwind_Reason_Code __symverglobal_Unwind_Backtrace ++ (_Unwind_Trace_Fn, void *); ++extern void __symverglobal_Unwind_DeleteException ++ (struct _Unwind_Exception *); ++extern void * __symverglobal_Unwind_FindEnclosingFunction (void *); ++extern _Unwind_Reason_Code __symverglobal_Unwind_ForcedUnwind ++ (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *); ++extern _Unwind_Word __symverglobal_Unwind_GetCFA ++ (struct _Unwind_Context *); ++extern _Unwind_Word __symverglobal_Unwind_GetBSP ++ (struct _Unwind_Context *); ++extern _Unwind_Word __symverglobal_Unwind_GetGR ++ (struct _Unwind_Context *, int ); ++extern _Unwind_Ptr __symverglobal_Unwind_GetIP (struct _Unwind_Context *); ++extern void *__symverglobal_Unwind_GetLanguageSpecificData ++ (struct _Unwind_Context *); ++extern _Unwind_Ptr __symverglobal_Unwind_GetRegionStart ++ (struct _Unwind_Context *); ++extern _Unwind_Reason_Code __symverglobal_Unwind_RaiseException ++ (struct _Unwind_Exception *); ++extern void __symverglobal_Unwind_Resume (struct _Unwind_Exception *); ++extern _Unwind_Reason_Code __symverglobal_Unwind_Resume_or_Rethrow ++ (struct _Unwind_Exception *); ++extern void __symverglobal_Unwind_SetGR ++ (struct _Unwind_Context *, int, _Unwind_Word); ++extern void __symverglobal_Unwind_SetIP ++ (struct _Unwind_Context *, _Unwind_Ptr); ++#define _Unwind_Backtrace __symverglobal_Unwind_Backtrace ++#define _Unwind_DeleteException __symverglobal_Unwind_DeleteException ++#define _Unwind_FindEnclosingFunction __symverglobal_Unwind_FindEnclosingFunction ++#define _Unwind_ForcedUnwind __symverglobal_Unwind_ForcedUnwind ++#define _Unwind_GetBSP __symverglobal_Unwind_GetBSP ++#define _Unwind_GetCFA __symverglobal_Unwind_GetCFA ++#define _Unwind_GetGR __symverglobal_Unwind_GetGR ++#define _Unwind_GetIP __symverglobal_Unwind_GetIP ++#define _Unwind_GetLanguageSpecificData __symverglobal_Unwind_GetLanguageSpecificData ++#define _Unwind_GetRegionStart __symverglobal_Unwind_GetRegionStart ++#define _Unwind_RaiseException __symverglobal_Unwind_RaiseException ++#define _Unwind_Resume __symverglobal_Unwind_Resume ++#define _Unwind_Resume_or_Rethrow __symverglobal_Unwind_Resume_or_Rethrow ++#define _Unwind_SetGR __symverglobal_Unwind_SetGR ++#define _Unwind_SetIP __symverglobal_Unwind_SetIP ++#endif ++ + enum unw_application_register + { + UNW_AR_BSP, +@@ -2402,4 +2447,44 @@ alias (_Unwind_SetGR); + alias (_Unwind_SetIP); + #endif + ++#if defined (USE_SYMVER_GLOBAL) && defined (SHARED) ++#undef alias ++#define symverglobal(name, version) \ ++__typeof (__symverglobal##name) __symverlocal##name \ ++ __attribute__ ((alias ("__symverglobal" #name))); \ ++__asm__ (".symver __symverglobal" #name"," #name "@@GCC_3.4.2");\ ++__asm__ (".symver __symverlocal" #name"," #name "@" #version) ++ ++#undef _Unwind_Backtrace ++#undef _Unwind_DeleteException ++#undef _Unwind_FindEnclosingFunction ++#undef _Unwind_ForcedUnwind ++#undef _Unwind_GetBSP ++#undef _Unwind_GetCFA ++#undef _Unwind_GetGR ++#undef _Unwind_GetIP ++#undef _Unwind_GetLanguageSpecificData ++#undef _Unwind_GetRegionStart ++#undef _Unwind_RaiseException ++#undef _Unwind_Resume ++#undef _Unwind_Resume_or_Rethrow ++#undef _Unwind_SetGR ++#undef _Unwind_SetIP ++symverglobal (_Unwind_Backtrace, GCC_3.3); ++symverglobal (_Unwind_DeleteException, GCC_3.0); ++symverglobal (_Unwind_FindEnclosingFunction, GCC_3.3); ++symverglobal (_Unwind_ForcedUnwind, GCC_3.0); ++symverglobal (_Unwind_GetBSP, GCC_3.3.2); ++symverglobal (_Unwind_GetCFA, GCC_3.3); ++symverglobal (_Unwind_GetGR, GCC_3.0); ++symverglobal (_Unwind_GetIP, GCC_3.0); ++symverglobal (_Unwind_GetLanguageSpecificData, GCC_3.0); ++symverglobal (_Unwind_GetRegionStart, GCC_3.0); ++symverglobal (_Unwind_RaiseException, GCC_3.0); ++symverglobal (_Unwind_Resume, GCC_3.0); ++symverglobal (_Unwind_Resume_or_Rethrow, GCC_3.3); ++symverglobal (_Unwind_SetGR, GCC_3.0); ++symverglobal (_Unwind_SetIP, GCC_3.0); ++#endif ++ + #endif +--- gcc/config/ia64/mkmap-symver-multi.awk.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/mkmap-symver-multi.awk 2004-11-15 09:46:50.000000000 -0500 +@@ -0,0 +1,133 @@ ++# Generate an ELF symbol version map a-la Solaris and GNU ld. ++# Contributed by Richard Henderson ++# ++# This file is part of GCC. ++# ++# GCC is free software; you can redistribute it and/or modify it under ++# the terms of the GNU General Public License as published by the Free ++# Software Foundation; either version 2, or (at your option) any later ++# version. ++# ++# GCC is distributed in the hope that it will be useful, but WITHOUT ++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ++# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public ++# License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GCC; see the file COPYING. If not, write to the Free ++# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ++# 02110-1301, USA. ++ ++BEGIN { ++ state = "nm"; ++ sawsymbol = 0; ++} ++ ++# Remove comment and blank lines. ++/^ *#/ || /^ *$/ { ++ next; ++} ++ ++# We begin with nm input. Collect the set of symbols that are present ++# so that we can not emit them into the final version script -- Solaris ++# complains at us if we do. ++ ++state == "nm" && /^%%/ { ++ state = "ver"; ++ next; ++} ++ ++state == "nm" && ($1 == "U" || $2 == "U") { ++ next; ++} ++ ++state == "nm" && NF == 3 { ++ if ($3 ~ /^[^@]*@GCC_[0-9.]*$/) { ++ def[$3] = 1 ++ tl=$3 ++ sub(/^.*@/,"",tl) ++ ver[$3] = tl ++ } else { ++ sub(/@@?GCC_[0-9.]*$/,"",$3) ++ def[$3] = 1; ++ } ++ sawsymbol = 1; ++ next; ++} ++ ++state == "nm" { ++ next; ++} ++ ++# Now we process a simplified variant of the Solaris symbol version ++# script. We have one symbol per line, no semicolons, simple markers ++# for beginning and ending each section, and %inherit markers for ++# describing version inheritence. A symbol may appear in more than ++# one symbol version, and the last seen takes effect. ++ ++NF == 3 && $1 == "%inherit" { ++ inherit[$2] = $3; ++ next; ++} ++ ++NF == 2 && $2 == "{" { ++ libs[$1] = 1; ++ thislib = $1; ++ next; ++} ++ ++$1 == "}" { ++ thislib = ""; ++ next; ++} ++ ++{ ++ ver[$1] = thislib; ++ next; ++} ++ ++END { ++ if (!sawsymbol) ++ { ++ print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2"; ++ exit 1; ++ } ++ for (l in libs) ++ output(l); ++} ++ ++function output(lib) { ++ if (done[lib]) ++ return; ++ done[lib] = 1; ++ if (inherit[lib]) ++ output(inherit[lib]); ++ ++ empty=1 ++ for (sym in ver) ++ if ((ver[sym] == lib) && (sym in def)) ++ { ++ if (empty) ++ { ++ printf("%s {\n", lib); ++ printf(" global:\n"); ++ empty = 0; ++ } ++ symp = sym; ++ sub(/@GCC_[0-9.]*$/,"",symp); ++ printf("\t%s;\n", symp); ++ if (dotsyms) ++ printf("\t.%s;\n", symp); ++ } ++ ++ if (empty) ++ { ++ for (l in libs) ++ if (inherit[l] == lib) ++ inherit[l] = inherit[lib]; ++ } ++ else if (inherit[lib]) ++ printf("} %s;\n", inherit[lib]); ++ else ++ printf ("\n local:\n\t*;\n};\n"); ++} +--- gcc/config/ia64/libgcc-ia64-no-libunwind.ver.jj 2004-02-18 10:27:36.000000000 -0500 ++++ gcc/config/ia64/libgcc-ia64-no-libunwind.ver 2004-11-15 09:19:56.000000000 -0500 +@@ -0,0 +1,17 @@ ++GCC_3.4.2 { ++ _Unwind_GetGR ++ _Unwind_RaiseException ++ _Unwind_GetRegionStart ++ _Unwind_SetIP ++ _Unwind_GetIP ++ _Unwind_GetLanguageSpecificData ++ _Unwind_Resume ++ _Unwind_DeleteException ++ _Unwind_SetGR ++ _Unwind_ForcedUnwind ++ _Unwind_Backtrace ++ _Unwind_FindEnclosingFunction ++ _Unwind_GetCFA ++ _Unwind_Resume_or_Rethrow ++ _Unwind_GetBSP ++} diff --git a/gcc44-java-debug-iface-type.patch b/gcc44-java-debug-iface-type.patch new file mode 100644 index 0000000..63a1b50 --- /dev/null +++ b/gcc44-java-debug-iface-type.patch @@ -0,0 +1,17 @@ +2008-01-25 Jakub Jelinek + + * lang.c (java_classify_record): Revert 2007-12-20 change. + +--- gcc/java/lang.c 2007-12-27 09:09:49.000000000 +0100 ++++ gcc/java/lang.c 2008-01-25 17:43:57.000000000 +0100 +@@ -965,9 +965,7 @@ java_classify_record (tree type) + if (! CLASS_P (type)) + return RECORD_IS_STRUCT; + +- /* ??? GDB does not support DW_TAG_interface_type as of December, +- 2007. Re-enable this at a later time. */ +- if (0 && CLASS_INTERFACE (TYPE_NAME (type))) ++ if (CLASS_INTERFACE (TYPE_NAME (type))) + return RECORD_IS_INTERFACE; + + return RECORD_IS_CLASS; diff --git a/gcc44-java-nomulti.patch b/gcc44-java-nomulti.patch new file mode 100644 index 0000000..17334aa --- /dev/null +++ b/gcc44-java-nomulti.patch @@ -0,0 +1,44 @@ +--- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100 ++++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100 +@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode, + [allow rebuilding of .class and .h files])) + AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes) + ++AC_ARG_ENABLE(libjava-multilib, ++ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib])) ++if test "$enable_libjava_multilib" = no; then ++ multilib=no ++ ac_configure_args="$ac_configure_args --disable-multilib" ++fi ++ + # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. + GCC_NO_EXECUTABLES + +--- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100 ++++ libjava/configure 2007-12-07 18:39:58.000000000 +0100 +@@ -1021,6 +1021,8 @@ Optional Features: + default=yes + --enable-java-maintainer-mode + allow rebuilding of .class and .h files ++ --enable-libjava-multilib ++ build libjava as multilib + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-maintainer-mode enable make rules and dependencies not useful +@@ -1973,6 +1975,16 @@ else + fi + + ++# Check whether --enable-libjava-multilib was given. ++if test "${enable_libjava_multilib+set}" = set; then ++ enableval=$enable_libjava_multilib; ++fi ++ ++if test "$enable_libjava_multilib" = no; then ++ multilib=no ++ ac_configure_args="$ac_configure_args --disable-multilib" ++fi ++ + # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX. + + diff --git a/gcc44-libgomp-omp_h-multilib.patch b/gcc44-libgomp-omp_h-multilib.patch new file mode 100644 index 0000000..d0e98d1 --- /dev/null +++ b/gcc44-libgomp-omp_h-multilib.patch @@ -0,0 +1,17 @@ +2008-06-09 Jakub Jelinek + + * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. + +--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200 ++++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200 +@@ -42,8 +42,8 @@ typedef struct + + typedef struct + { +- unsigned char _x[@OMP_NEST_LOCK_SIZE@] +- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); ++ unsigned char _x[8 + sizeof (void *)] ++ __attribute__((__aligned__(sizeof (void *)))); + } omp_nest_lock_t; + #endif + diff --git a/gcc44-libtool-no-rpath.patch b/gcc44-libtool-no-rpath.patch new file mode 100644 index 0000000..466c661 --- /dev/null +++ b/gcc44-libtool-no-rpath.patch @@ -0,0 +1,27 @@ +libtool sucks. +--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 ++++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 +@@ -5394,6 +5394,7 @@ EOF + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6071,6 +6072,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6120,6 +6122,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then diff --git a/gcc44-ppc32-retaddr.patch b/gcc44-ppc32-retaddr.patch new file mode 100644 index 0000000..e9ae1bc --- /dev/null +++ b/gcc44-ppc32-retaddr.patch @@ -0,0 +1,86 @@ +2005-11-28 Jakub Jelinek + + * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0, + read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx + instead of doing an extran indirection from frame_pointer_rtx. + + * gcc.dg/20051128-1.c: New test. + +--- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100 ++++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100 +@@ -13166,17 +13166,22 @@ rs6000_return_addr (int count, rtx frame + don't try to be too clever here. */ + if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic)) + { ++ rtx x; + cfun->machine->ra_needs_full_frame = 1; + +- return +- gen_rtx_MEM +- (Pmode, +- memory_address +- (Pmode, +- plus_constant (copy_to_reg +- (gen_rtx_MEM (Pmode, +- memory_address (Pmode, frame))), +- RETURN_ADDRESS_OFFSET))); ++ if (count == 0) ++ { ++ gcc_assert (frame == frame_pointer_rtx); ++ x = arg_pointer_rtx; ++ } ++ else ++ { ++ x = memory_address (Pmode, frame); ++ x = copy_to_reg (gen_rtx_MEM (Pmode, x)); ++ } ++ ++ x = plus_constant (x, RETURN_ADDRESS_OFFSET); ++ return gen_rtx_MEM (Pmode, memory_address (Pmode, x)); + } + + cfun->machine->ra_need_lr = 1; +--- gcc/testsuite/gcc.dg/20051128-1.c.jj 2005-10-10 11:21:41.096999000 +0200 ++++ gcc/testsuite/gcc.dg/20051128-1.c 2005-11-28 12:30:57.000000000 +0100 +@@ -0,0 +1,41 @@ ++/* { dg-do run } */ ++/* { dg-options "-O2 -fpic" } */ ++ ++extern void exit (int); ++extern void abort (void); ++ ++int b; ++ ++struct A ++{ ++ void *pad[147]; ++ void *ra, *h; ++ long o; ++}; ++ ++void ++__attribute__((noinline)) ++foo (struct A *a, void *x) ++{ ++ __builtin_memset (a, 0, sizeof (a)); ++ if (!b) ++ exit (0); ++} ++ ++void ++__attribute__((noinline)) ++bar (void) ++{ ++ struct A a; ++ ++ __builtin_unwind_init (); ++ foo (&a, __builtin_return_address (0)); ++} ++ ++int ++main (void) ++{ ++ bar (); ++ abort (); ++ return 0; ++} diff --git a/gcc44-pr27898.patch b/gcc44-pr27898.patch new file mode 100644 index 0000000..172bb81 --- /dev/null +++ b/gcc44-pr27898.patch @@ -0,0 +1,16 @@ +2006-08-18 Jakub Jelinek + + PR c/27898 + * gcc.dg/pr27898.c: New test. + +--- gcc/testsuite/gcc.dg/pr27898.c.jj 2006-08-18 09:19:33.000000000 +0200 ++++ gcc/testsuite/gcc.dg/pr27898.c 2006-08-18 09:19:27.000000000 +0200 +@@ -0,0 +1,8 @@ ++/* PR c/27898 */ ++/* { dg-do compile } */ ++/* { dg-options "--combine" } */ ++/* { dg-additional-sources "pr27898.c" } */ ++ ++union u { struct { int i; }; }; ++ ++extern int foo (union u *); diff --git a/gcc44-pr32139.patch b/gcc44-pr32139.patch new file mode 100644 index 0000000..f356967 --- /dev/null +++ b/gcc44-pr32139.patch @@ -0,0 +1,19 @@ +2007-06-01 Jakub Jelinek + + PR tree-optimization/32139 + * gcc.c-torture/compile/20070531-1.c: New test. + +--- gcc/testsuite/gcc.c-torture/compile/20070531-1.c.jj 2007-05-31 13:47:22.000000000 +0200 ++++ gcc/testsuite/gcc.c-torture/compile/20070531-1.c 2007-06-01 10:57:15.000000000 +0200 +@@ -0,0 +1,11 @@ ++/* PR tree-optimization/32139 */ ++int foo (void); ++int bar (void) __attribute__ ((const)); ++ ++int ++test (int x) ++{ ++ int a = (x == 10000 ? foo : bar) (); ++ int b = (x == 10000 ? foo : bar) (); ++ return a + b; ++} diff --git a/gcc44-pr33763.patch b/gcc44-pr33763.patch new file mode 100644 index 0000000..86c8ac7 --- /dev/null +++ b/gcc44-pr33763.patch @@ -0,0 +1,153 @@ +2007-11-06 Jakub Jelinek + + PR tree-optimization/33763 + * gcc.dg/pr33763.c: New test. + * g++.dg/opt/inline13.C: New test. + +2007-11-06 Jan Hubicka + + PR tree-optimization/33763 + * tree-inline.c (expand_call_inline): Silently ignore always_inline + attribute for redefined extern inline functions. + +--- gcc/tree-inline.c.jj 2007-11-06 09:29:04.000000000 +0100 ++++ gcc/tree-inline.c 2007-11-06 16:19:12.000000000 +0100 +@@ -3157,6 +3157,12 @@ expand_call_inline (basic_block bb, gimp + goto egress; + + if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn)) ++ /* For extern inline functions that get redefined we always ++ silently ignored alway_inline flag. Better behaviour would ++ be to be able to keep both bodies and use extern inline body ++ for inlining, but we can't do that because frontends overwrite ++ the body. */ ++ && !cg_edge->callee->local.redefined_extern_inline + /* Avoid warnings during early inline pass. */ + && cgraph_global_info_ready) + { +--- gcc/testsuite/gcc.dg/pr33763.c.jj 2007-11-06 16:19:12.000000000 +0100 ++++ gcc/testsuite/gcc.dg/pr33763.c 2007-11-06 16:19:12.000000000 +0100 +@@ -0,0 +1,60 @@ ++/* PR tree-optimization/33763 */ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++typedef struct ++{ ++ void *a; ++ void *b; ++} T; ++extern void *foo (const char *, const char *); ++extern void *bar (void *, const char *, T); ++extern int baz (const char *, int); ++ ++extern inline __attribute__ ((always_inline, gnu_inline)) int ++baz (const char *x, int y) ++{ ++ return 2; ++} ++ ++int ++baz (const char *x, int y) ++{ ++ return 1; ++} ++ ++int xa, xb; ++ ++static void * ++inl (const char *x, const char *y) ++{ ++ T t = { &xa, &xb }; ++ int *f = (int *) __builtin_malloc (sizeof (int)); ++ const char *z; ++ int o = 0; ++ void *r = 0; ++ ++ for (z = y; *z; z++) ++ { ++ if (*z == 'r') ++ o |= 1; ++ if (*z == 'w') ++ o |= 2; ++ } ++ if (o == 1) ++ *f = baz (x, 0); ++ if (o == 2) ++ *f = baz (x, 1); ++ if (o == 3) ++ *f = baz (x, 2); ++ ++ if (o && *f > 0) ++ r = bar (f, "w", t); ++ return r; ++} ++ ++void * ++foo (const char *x, const char *y) ++{ ++ return inl (x, y); ++} +--- gcc/testsuite/g++.dg/opt/inline13.C.jj 2007-11-06 16:20:20.000000000 +0100 ++++ gcc/testsuite/g++.dg/opt/inline13.C 2007-11-06 16:21:30.000000000 +0100 +@@ -0,0 +1,60 @@ ++// PR tree-optimization/33763 ++// { dg-do compile } ++// { dg-options "-O2" } ++ ++typedef struct ++{ ++ void *a; ++ void *b; ++} T; ++extern void *foo (const char *, const char *); ++extern void *bar (void *, const char *, T); ++extern int baz (const char *, int); ++ ++extern inline __attribute__ ((always_inline, gnu_inline)) int ++baz (const char *x, int y) ++{ ++ return 2; ++} ++ ++int ++baz (const char *x, int y) ++{ ++ return 1; ++} ++ ++int xa, xb; ++ ++static void * ++inl (const char *x, const char *y) ++{ ++ T t = { &xa, &xb }; ++ int *f = (int *) __builtin_malloc (sizeof (int)); ++ const char *z; ++ int o = 0; ++ void *r = 0; ++ ++ for (z = y; *z; z++) ++ { ++ if (*z == 'r') ++ o |= 1; ++ if (*z == 'w') ++ o |= 2; ++ } ++ if (o == 1) ++ *f = baz (x, 0); ++ if (o == 2) ++ *f = baz (x, 1); ++ if (o == 3) ++ *f = baz (x, 2); ++ ++ if (o && *f > 0) ++ r = bar (f, "w", t); ++ return r; ++} ++ ++void * ++foo (const char *x, const char *y) ++{ ++ return inl (x, y); ++} diff --git a/gcc44-rh330771.patch b/gcc44-rh330771.patch new file mode 100644 index 0000000..f52b919 --- /dev/null +++ b/gcc44-rh330771.patch @@ -0,0 +1,34 @@ +2007-10-16 Jakub Jelinek + + * Makefile.am (libgcj_tools_la_LIBADD): Add. + * Makefile.in: Regenerated. + +--- libjava/Makefile.am.jj 2007-03-17 09:20:30.000000000 +0100 ++++ libjava/Makefile.am 2007-10-16 15:45:14.000000000 +0200 +@@ -277,6 +277,8 @@ EXTRA_libgcj_la_SOURCES = java/lang/Obje + + libgcj_tools_la_SOURCES = classpath/tools/tools.zip + libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes -fsource-filename=$(here)/classpath/tools/all-classes.lst ++## See jv_convert_LDADD. ++libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la + libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \ + -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ + $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) +--- libjava/Makefile.in.jj 2007-07-04 21:11:11.000000000 +0200 ++++ libjava/Makefile.in 2007-10-16 15:56:07.000000000 +0200 +@@ -153,7 +153,6 @@ am__objects_1 = gnu/gcj/xlib/lib_gnu_awt + am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1) + lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS) + @XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir) +-libgcj_tools_la_LIBADD = + am_libgcj_tools_la_OBJECTS = classpath/tools/libgcj_tools_la-tools.lo + libgcj_tools_la_OBJECTS = $(am_libgcj_tools_la_OBJECTS) + @INTERPRETER_TRUE@am__DEPENDENCIES_1 = gnu/classpath/jdwp.lo \ +@@ -941,6 +940,7 @@ libgcj_la_LINK = $(LIBLINK) + EXTRA_libgcj_la_SOURCES = java/lang/Object.java + libgcj_tools_la_SOURCES = classpath/tools/tools.zip + libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes -fsource-filename=$(here)/classpath/tools/all-classes.lst ++libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la + libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \ + -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ + $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) diff --git a/gcc44-rh341221.patch b/gcc44-rh341221.patch new file mode 100644 index 0000000..1f5ff91 --- /dev/null +++ b/gcc44-rh341221.patch @@ -0,0 +1,28 @@ +2007-10-21 Jakub Jelinek + + * doc/Makefile.am (POD2MAN): Set date from cp-tools.texinfo + timestamp rather than from current date. + * doc/Makefile.in: Regenerated. + +--- libjava/classpath/doc/Makefile.am.jj 2007-12-07 17:55:00.000000000 +0100 ++++ libjava/classpath/doc/Makefile.am 2007-12-07 18:55:28.000000000 +0100 +@@ -31,7 +31,7 @@ TOOLS_MANFILES = \ + gtnameserv.1 \ + gjdoc.1 + +-POD2MAN = pod2man --center="GNU" --release="$(VERSION)" ++POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')" + TEXI2POD = perl $(srcdir)/texi2pod.pl + STAMP = echo timestamp > + +--- libjava/classpath/doc/Makefile.in.jj 2007-12-07 17:55:00.000000000 +0100 ++++ libjava/classpath/doc/Makefile.in 2007-12-07 18:55:43.000000000 +0100 +@@ -382,7 +382,7 @@ TOOLS_MANFILES = \ + gtnameserv.1 \ + gjdoc.1 + +-POD2MAN = pod2man --center="GNU" --release="$(VERSION)" ++POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')" + TEXI2POD = perl $(srcdir)/texi2pod.pl + STAMP = echo timestamp > + @GENINSRC_FALSE@STAMP_GENINSRC = diff --git a/gcc44-sparc-config-detection.patch b/gcc44-sparc-config-detection.patch new file mode 100644 index 0000000..cc3cb41 --- /dev/null +++ b/gcc44-sparc-config-detection.patch @@ -0,0 +1,40 @@ +--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 ++++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 +@@ -2175,7 +2175,7 @@ sparc-*-elf*) + tmake_file="sparc/t-elf sparc/t-crtfm" + extra_parts="crti.o crtn.o crtbegin.o crtend.o" + ;; +-sparc-*-linux*) # SPARC's running GNU/Linux, libc6 ++sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6 + tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h linux.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-linux" +@@ -2287,7 +2287,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* + *) echo "$with_cpu not supported for freebsd target"; exit 1 ;; + esac + ;; +-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux ++sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux + tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h linux.h sparc/linux64.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm" +--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 ++++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 +@@ -572,7 +572,7 @@ sparc64-*-openbsd*) + ;; + sparc-*-elf*) + ;; +-sparc-*-linux*) # SPARC's running GNU/Linux, libc6 ++sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6 + extra_parts="$extra_parts crtfastmath.o" + tmake_file="${tmake_file} sparc/t-crtfm" + ;; +@@ -590,7 +590,7 @@ sparc-wrs-vxworks) + ;; + sparc64-*-freebsd*|ultrasparc-*-freebsd*) + ;; +-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux ++sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux + extra_parts="$extra_parts crtfastmath.o" + tmake_file="${tmake_file} sparc/t-crtfm" + ;; diff --git a/import.log b/import.log new file mode 100644 index 0000000..c2040a3 --- /dev/null +++ b/import.log @@ -0,0 +1 @@ +gcc-4_4_0-0_3:HEAD:gcc-4.4.0-0.3.src.rpm:1232130841 diff --git a/sources b/sources index 042742f..27264af 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -eb9ce8c6f929283bc91c93a6087e8ced gcc-4.3.2-20081105.tar.bz2 -92a70f9e56223b653bce0f58f90cf950 fastjar-0.95.tar.gz +2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz +0fafcb0d23d420c978ab253702094ada gcc-4.4.0-20090115.tar.bz2