]> git.pld-linux.org Git - packages/cross-gcc.git/commitdiff
new package
authorElan Ruusamäe <glen@delfi.ee>
Sun, 11 Jan 2015 17:50:55 +0000 (19:50 +0200)
committerElan Ruusamäe <glen@delfi.ee>
Sun, 11 Jan 2015 22:03:05 +0000 (00:03 +0200)
build all cross target from single source
version 4.9.2

based on fedora package 16d1e7e

24 files changed:
cloog-0.18.1-ppc64le-config.patch [new file with mode: 0644]
cross-gcc-bfin.patch [new file with mode: 0644]
cross-gcc-c6x.patch [new file with mode: 0644]
cross-gcc-with-libgcc.patch [new file with mode: 0644]
cross-gcc.spec [new file with mode: 0644]
cross-intl-filename.patch [new file with mode: 0644]
gcc49-aarch64-async-unw-tables.patch [new file with mode: 0644]
gcc49-aarch64-unwind-opt.patch [new file with mode: 0644]
gcc49-cloog-dl.patch [new file with mode: 0644]
gcc49-cloog-dl2.patch [new file with mode: 0644]
gcc49-color-auto.patch [new file with mode: 0644]
gcc49-hack.patch [new file with mode: 0644]
gcc49-i386-libgomp.patch [new file with mode: 0644]
gcc49-java-nomulti.patch [new file with mode: 0644]
gcc49-libgo-p224.patch [new file with mode: 0644]
gcc49-libgomp-omp_h-multilib.patch [new file with mode: 0644]
gcc49-libstdc++-docs.patch [new file with mode: 0644]
gcc49-libtool-no-rpath.patch [new file with mode: 0644]
gcc49-no-add-needed.patch [new file with mode: 0644]
gcc49-ppc32-retaddr.patch [new file with mode: 0644]
gcc49-pr38757.patch [new file with mode: 0644]
gcc49-pr64269.patch [new file with mode: 0644]
gcc49-rh330771.patch [new file with mode: 0644]
gcc49-sparc-config-detection.patch [new file with mode: 0644]

diff --git a/cloog-0.18.1-ppc64le-config.patch b/cloog-0.18.1-ppc64le-config.patch
new file mode 100644 (file)
index 0000000..a280e20
--- /dev/null
@@ -0,0 +1,717 @@
+--- cloog-0.18.1/m4/libtool.m4.jj      2013-10-11 09:27:45.000000000 +0200
++++ cloog-0.18.1/m4/libtool.m4 2014-04-11 18:24:56.607493726 +0200
+@@ -1312,7 +1312,7 @@ ia64-*-hpux*)
+   rm -rf conftest*
+   ;;
+-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
++x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+   # Find out which ABI we are using.
+   echo 'int i;' > conftest.$ac_ext
+@@ -1333,7 +1333,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*
+               ;;
+           esac
+           ;;
+-        ppc64-*linux*|powerpc64-*linux*)
++        powerpc64le-*linux*)
++          LD="${LD-ld} -m elf32lppclinux"
++          ;;
++        powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+@@ -1352,7 +1355,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+-        ppc*-*linux*|powerpc*-*linux*)
++        powerpcle-*linux*)
++          LD="${LD-ld} -m elf64lppc"
++          ;;
++        powerpc-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+--- cloog-0.18.1/autoconf/config.sub.jj        2013-10-11 09:27:45.000000000 +0200
++++ cloog-0.18.1/autoconf/config.sub   2014-04-11 18:24:56.608493721 +0200
+@@ -1,24 +1,18 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+-#   2011, 2012 Free Software Foundation, Inc.
+-
+-timestamp='2012-04-18'
+-
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine.  It does not imply ALL GNU software can.
+-#
+-# This file 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 of the License, or
++#   Copyright 1992-2013 Free Software Foundation, Inc.
++
++timestamp='2013-10-01'
++
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+-# This program 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.
++# This program 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 this program; if not, see <http://www.gnu.org/licenses/>.
+@@ -26,11 +20,12 @@ timestamp='2012-04-18'
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# the same distribution terms that you use for the rest of that
++# program.  This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+-# Please send patches to <config-patches@gnu.org>.  Submit a context
+-# diff and a properly formatted GNU ChangeLog entry.
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+@@ -73,9 +68,7 @@ Report bugs and patches to <config-patch
+ version="\
+ GNU config.sub ($timestamp)
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+-Free Software Foundation, Inc.
++Copyright 1992-2013 Free Software Foundation, Inc.
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -123,7 +116,7 @@ esac
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+   knetbsd*-gnu* | netbsd*-gnu* | \
+   kopensolaris*-gnu* | \
+   storm-chaos* | os2-emx* | rtmk-nova*)
+@@ -156,7 +149,7 @@ case $os in
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+-      -apple | -axis | -knuth | -cray | -microblaze)
++      -apple | -axis | -knuth | -cray | -microblaze*)
+               os=
+               basic_machine=$1
+               ;;
+@@ -259,10 +252,12 @@ case $basic_machine in
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+-      | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+-        | be32 | be64 \
++      | arc | arceb \
++      | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
++      | avr | avr32 \
++      | be32 | be64 \
+       | bfin \
+-      | c4x | clipper \
++      | c4x | c8051 | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | epiphany \
+       | fido | fr30 | frv \
+@@ -270,10 +265,11 @@ case $basic_machine in
+       | hexagon \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
++      | k1om \
+       | le32 | le64 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+-      | maxq | mb | microblaze | mcore | mep | metag \
++      | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+@@ -291,16 +287,17 @@ case $basic_machine in
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
++      | mipsr5900 | mipsr5900el \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nds32 | nds32le | nds32be \
+-      | nios | nios2 \
++      | nios | nios2 | nios2eb | nios2el \
+       | ns16k | ns32k \
+       | open8 \
+-      | or32 \
++      | or1k | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
+       | pyramid \
+@@ -328,7 +325,7 @@ case $basic_machine in
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
+-      m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
++      m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+@@ -370,13 +367,13 @@ case $basic_machine in
+       | aarch64-* | aarch64_be-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+-      | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++      | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | be32-* | be64-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
+-      | clipper-* | craynv-* | cydra-* \
++      | c8051-* | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+@@ -385,11 +382,13 @@ case $basic_machine in
+       | hexagon-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
++      | k1om-* \
+       | le32-* | le64-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+-      | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
++      | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++      | microblaze-* | microblazeel-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+@@ -407,12 +406,13 @@ case $basic_machine in
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++      | mipsr5900-* | mipsr5900el-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nds32-* | nds32le-* | nds32be-* \
+-      | nios-* | nios2-* \
++      | nios-* | nios2-* | nios2eb-* | nios2el-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
+       | orion-* \
+@@ -788,11 +788,15 @@ case $basic_machine in
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+-      microblaze)
++      microblaze*)
+               basic_machine=microblaze-xilinx
+               ;;
++      mingw64)
++              basic_machine=x86_64-pc
++              os=-mingw64
++              ;;
+       mingw32)
+-              basic_machine=i386-pc
++              basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+@@ -828,7 +832,7 @@ case $basic_machine in
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       msys)
+-              basic_machine=i386-pc
++              basic_machine=i686-pc
+               os=-msys
+               ;;
+       mvs)
+@@ -1019,7 +1023,11 @@ case $basic_machine in
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+-      rdos)
++      rdos | rdos64)
++              basic_machine=x86_64-pc
++              os=-rdos
++              ;;
++      rdos32)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+@@ -1346,21 +1354,21 @@ case $os in
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+-            | -sym* | -kopensolaris* \
++            | -sym* | -kopensolaris* | -plan9* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+-            | -openbsd* | -solidbsd* \
++            | -bitrig* | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+-            | -mingw32* | -linux-gnu* | -linux-android* \
+-            | -linux-newlib* | -linux-uclibc* \
++            | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
++            | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+@@ -1492,9 +1500,6 @@ case $os in
+       -aros*)
+               os=-aros
+               ;;
+-      -kaos*)
+-              os=-kaos
+-              ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+@@ -1543,6 +1548,9 @@ case $basic_machine in
+       c4x-* | tic4x-*)
+               os=-coff
+               ;;
++      c8051-*)
++              os=-elf
++              ;;
+       hexagon-*)
+               os=-elf
+               ;;
+@@ -1586,6 +1594,9 @@ case $basic_machine in
+       mips*-*)
+               os=-elf
+               ;;
++      or1k-*)
++              os=-elf
++              ;;
+       or32-*)
+               os=-coff
+               ;;
+--- cloog-0.18.1/autoconf/config.guess.jj      2013-10-11 09:27:45.000000000 +0200
++++ cloog-0.18.1/autoconf/config.guess 2014-04-11 18:24:56.608493721 +0200
+@@ -1,14 +1,12 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+-#   2011, 2012 Free Software Foundation, Inc.
++#   Copyright 1992-2013 Free Software Foundation, Inc.
+-timestamp='2012-02-10'
++timestamp='2013-06-10'
+ # This file 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 of the License, or
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful, but
+@@ -22,19 +20,17 @@ timestamp='2012-02-10'
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-
+-# Originally written by Per Bothner.  Please send patches (context
+-# diff format) to <config-patches@gnu.org> and include a ChangeLog
+-# entry.
++# the same distribution terms that you use for the rest of that
++# program.  This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+ #
+-# This script attempts to guess a canonical system name similar to
+-# config.sub.  If it succeeds, it prints the system name on stdout, and
+-# exits with 0.  Otherwise, it exits with 1.
++# Originally written by Per Bothner.
+ #
+ # You can get the latest version of this script from:
+ # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++#
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
++
+ me=`echo "$0" | sed -e 's,.*/,,'`
+@@ -54,9 +50,7 @@ version="\
+ GNU config.guess ($timestamp)
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+-Free Software Foundation, Inc.
++Copyright 1992-2013 Free Software Foundation, Inc.
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` |
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
++case "${UNAME_SYSTEM}" in
++Linux|GNU|GNU/*)
++      # If the system lacks a compiler, then just pick glibc.
++      # We could probably try harder.
++      LIBC=gnu
++
++      eval $set_cc_for_build
++      cat <<-EOF > $dummy.c
++      #include <features.h>
++      #if defined(__UCLIBC__)
++      LIBC=uclibc
++      #elif defined(__dietlibc__)
++      LIBC=dietlibc
++      #else
++      LIBC=gnu
++      #endif
++      EOF
++      eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
++      ;;
++esac
++
+ # Note: order is significant - the case branches are not exclusive.
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+@@ -200,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
++    *:Bitrig:*:*)
++      UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
++      echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
++      exit ;;
+     *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+@@ -302,7 +321,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
+     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+-    arm:riscos:*:*|arm:RISCOS:*:*)
++    arm*:riscos:*:*|arm*:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+@@ -801,6 +820,9 @@ EOF
+     i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
++    *:MINGW64*:*)
++      echo ${UNAME_MACHINE}-pc-mingw64
++      exit ;;
+     *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+@@ -852,21 +874,21 @@ EOF
+       exit ;;
+     *:GNU:*:*)
+       # the GNU system
+-      echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
++      echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+     *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+-      echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
++      echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+       exit ;;
+     i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+     aarch64:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+@@ -879,59 +901,54 @@ EOF
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+       esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+-      if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
++      if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++      exit ;;
++    arc:Linux:*:* | arceb:Linux:*:*)
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+-          echo ${UNAME_MACHINE}-unknown-linux-gnu
++          echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       else
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+-              echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++              echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+           else
+-              echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
++              echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+           fi
+       fi
+       exit ;;
+     avr32*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     cris:Linux:*:*)
+-      echo ${UNAME_MACHINE}-axis-linux-gnu
++      echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       exit ;;
+     crisv32:Linux:*:*)
+-      echo ${UNAME_MACHINE}-axis-linux-gnu
++      echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       exit ;;
+     frv:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     hexagon:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     i*86:Linux:*:*)
+-      LIBC=gnu
+-      eval $set_cc_for_build
+-      sed 's/^        //' << EOF >$dummy.c
+-      #ifdef __dietlibc__
+-      LIBC=dietlibc
+-      #endif
+-EOF
+-      eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+-      echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
++      echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       exit ;;
+     ia64:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     m32r*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     m68*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     mips:Linux:*:* | mips64:Linux:*:*)
+       eval $set_cc_for_build
+@@ -950,54 +967,63 @@ EOF
+       #endif
+ EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+-      test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
++      test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+       ;;
++    or1k:Linux:*:*)
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++      exit ;;
+     or32:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     padre:Linux:*:*)
+-      echo sparc-unknown-linux-gnu
++      echo sparc-unknown-linux-${LIBC}
+       exit ;;
+     parisc64:Linux:*:* | hppa64:Linux:*:*)
+-      echo hppa64-unknown-linux-gnu
++      echo hppa64-unknown-linux-${LIBC}
+       exit ;;
+     parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+-        PA7*) echo hppa1.1-unknown-linux-gnu ;;
+-        PA8*) echo hppa2.0-unknown-linux-gnu ;;
+-        *)    echo hppa-unknown-linux-gnu ;;
++        PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
++        PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
++        *)    echo hppa-unknown-linux-${LIBC} ;;
+       esac
+       exit ;;
+     ppc64:Linux:*:*)
+-      echo powerpc64-unknown-linux-gnu
++      echo powerpc64-unknown-linux-${LIBC}
+       exit ;;
+     ppc:Linux:*:*)
+-      echo powerpc-unknown-linux-gnu
++      echo powerpc-unknown-linux-${LIBC}
++      exit ;;
++    ppc64le:Linux:*:*)
++      echo powerpc64le-unknown-linux-${LIBC}
++      exit ;;
++    ppcle:Linux:*:*)
++      echo powerpcle-unknown-linux-${LIBC}
+       exit ;;
+     s390:Linux:*:* | s390x:Linux:*:*)
+-      echo ${UNAME_MACHINE}-ibm-linux
++      echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+       exit ;;
+     sh64*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     sh*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     sparc:Linux:*:* | sparc64:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     tile*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     vax:Linux:*:*)
+-      echo ${UNAME_MACHINE}-dec-linux-gnu
++      echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+       exit ;;
+     x86_64:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     xtensa*:Linux:*:*)
+-      echo ${UNAME_MACHINE}-unknown-linux-gnu
++      echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+     i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+@@ -1201,6 +1227,9 @@ EOF
+     BePC:Haiku:*:*)   # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
++    x86_64:Haiku:*:*)
++      echo x86_64-unknown-haiku
++      exit ;;
+     SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+@@ -1227,19 +1256,21 @@ EOF
+       exit ;;
+     *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+-      case $UNAME_PROCESSOR in
+-          i386)
+-              eval $set_cc_for_build
+-              if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+-                if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+-                    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+-                    grep IS_64BIT_ARCH >/dev/null
+-                then
+-                    UNAME_PROCESSOR="x86_64"
+-                fi
+-              fi ;;
+-          unknown) UNAME_PROCESSOR=powerpc ;;
+-      esac
++      eval $set_cc_for_build
++      if test "$UNAME_PROCESSOR" = unknown ; then
++          UNAME_PROCESSOR=powerpc
++      fi
++      if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++          if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
++              (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++              grep IS_64BIT_ARCH >/dev/null
++          then
++              case $UNAME_PROCESSOR in
++                  i386) UNAME_PROCESSOR=x86_64 ;;
++                  powerpc) UNAME_PROCESSOR=powerpc64 ;;
++              esac
++          fi
++      fi
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+     *:procnto*:*:* | *:QNX:[0123456789]*:*)
+@@ -1256,7 +1287,7 @@ EOF
+     NEO-?:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+-    NSE-?:NONSTOP_KERNEL:*:*)
++    NSE-*:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+     NSR-?:NONSTOP_KERNEL:*:*)
+@@ -1330,9 +1361,6 @@ EOF
+       exit ;;
+ esac
+-#echo '(No uname command or uname output not recognized.)' 1>&2
+-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+-
+ eval $set_cc_for_build
+ cat >$dummy.c <<EOF
+ #ifdef _SEQUENT_
+--- cloog-0.18.1/configure.jj  2013-10-11 09:27:47.000000000 +0200
++++ cloog-0.18.1/configure     2014-04-11 18:24:56.611493706 +0200
+@@ -6383,7 +6383,7 @@ ia64-*-hpux*)
+   rm -rf conftest*
+   ;;
+-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
++x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+   # Find out which ABI we are using.
+   echo 'int i;' > conftest.$ac_ext
+@@ -6408,7 +6408,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*
+               ;;
+           esac
+           ;;
+-        ppc64-*linux*|powerpc64-*linux*)
++        powerpc64le-*linux*)
++          LD="${LD-ld} -m elf32lppclinux"
++          ;;
++        powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+@@ -6427,7 +6430,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+-        ppc*-*linux*|powerpc*-*linux*)
++        powerpcle-*linux*)
++          LD="${LD-ld} -m elf64lppc"
++          ;;
++        powerpc-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
diff --git a/cross-gcc-bfin.patch b/cross-gcc-bfin.patch
new file mode 100644 (file)
index 0000000..5272080
--- /dev/null
@@ -0,0 +1,15 @@
+Index: gcc/config/bfin/bfin.c
+===================================================================
+--- gcc/config/bfin/bfin.c      (revision 211729)
++++ gcc/config/bfin/bfin.c      (working copy)
+@@ -4629,10 +4629,6 @@
+   df_analyze ();
+-  /* Doloop optimization */
+-  if (cfun->machine->has_hardware_loops)
+-    bfin_reorg_loops ();
+-
+   workaround_speculation ();
+   if (flag_var_tracking)
diff --git a/cross-gcc-c6x.patch b/cross-gcc-c6x.patch
new file mode 100644 (file)
index 0000000..5533d01
--- /dev/null
@@ -0,0 +1,51 @@
+Index: gcc/config/c6x/c6x.c
+===================================================================
+RCS file: /cvs/cvsfiles/devo/gcc/config/c6x/c6x.c,v
+retrieving revision 1.16
+diff -u -3 -p -r1.16 c6x.c
+--- gcc/config/c6x/c6x.c        26 Jan 2014 17:41:28 -0000      1.16
++++ gcc/config/c6x/c6x.c        20 Jun 2014 13:07:59 -0000
+@@ -5894,6 +5894,9 @@ static struct hw_doloop_hooks c6x_doloop
+ static void
+ c6x_hwloops (void)
+ {
++  /* start-sanitize-redhat */
++  if (0) /* CFG called too late.  */
++    /* end-sanitize-redhat */
+   if (optimize)
+     reorg_loops (true, &c6x_doloop_hooks);
+ }
+Index: gcc/config/c6x/c6x.md
+===================================================================
+RCS file: /cvs/cvsfiles/devo/gcc/config/c6x/c6x.md,v
+retrieving revision 1.10
+diff -u -3 -p -r1.10 c6x.md
+--- gcc/config/c6x/c6x.md      26 Jan 2014 17:41:28 -0000      1.10
++++ gcc/config/c6x/c6x.md      4 Jul 2014 10:37:34 -0000
+@@ -1432,7 +1432,7 @@
+                  (plus:SI (match_dup 0)
+                           (const_int -1)))
+             (clobber (match_dup 2))])] ; match_scratch
+-  "TARGET_INSNS_64PLUS && optimize"
++  "TARGET_INSNS_64PLUS && optimize && 0"
+ {
+   /* The loop optimizer doesn't check the predicates... */
+   if (GET_MODE (operands[0]) != SImode)
+@@ -1485,7 +1485,7 @@
+       (plus:SI (match_dup 3)
+                (const_int -1)))
+    (clobber (match_scratch:SI 2 "=X,&AB,&AB,&AB"))]
+-  "TARGET_INSNS_64PLUS && optimize"
++  "TARGET_INSNS_64PLUS && optimize && 0"
+   "#"
+   [(set_attr "type" "spkernel")])
+@@ -1499,7 +1499,7 @@
+       (plus:SI (match_dup 3)
+                (const_int -1)))
+    (clobber (match_scratch 2))]
+-  ""
++  "0"
+   [(set (match_dup 2) (plus:SI (match_dup 3) (const_int -1)))
+    (set (match_dup 0) (match_dup 2))
+    (set (pc)
diff --git a/cross-gcc-with-libgcc.patch b/cross-gcc-with-libgcc.patch
new file mode 100644 (file)
index 0000000..6143131
--- /dev/null
@@ -0,0 +1,26 @@
+diff -up gcc-4.7.0/libgcc/unwind-generic.h.cross-libgcc-ia64 gcc-4.7.0/libgcc/unwind-generic.h
+--- gcc-4.7.0/libgcc/unwind-generic.h.cross-libgcc-ia64        2012-06-01 18:14:22.552450391 +0200
++++ gcc-4.7.0/libgcc/unwind-generic.h  2012-06-01 18:14:42.523121821 +0200
+@@ -211,7 +211,9 @@ _Unwind_SjLj_Resume_or_Rethrow (struct _
+    compatible with the standard ABI for IA-64, we inline these.  */
+ #ifdef __ia64__
++#ifndef inhibit_libc
+ #include <stdlib.h>
++#endif
+ static inline _Unwind_Ptr
+ _Unwind_GetDataRelBase (struct _Unwind_Context *_C)
+diff -up gcc-4.7.0/libgcc/config/m68k/linux-atomic.c.cross-libgcc-m68k gcc-4.7.0/libgcc/config/m68k/linux-atomic.c
+--- gcc-4.7.0/libgcc/config/m68k/linux-atomic.c.cross-libgcc-m68k      2012-06-01 18:08:54.998851298 +0200
++++ gcc-4.7.0/libgcc/config/m68k/linux-atomic.c        2012-06-01 18:09:16.871488040 +0200
+@@ -33,7 +33,9 @@ see the files COPYING3 and COPYING.RUNTI
+    using the kernel helper defined below.  There is no support for
+    64-bit operations yet.  */
++#ifndef inhibit_libc
+ #include <asm/unistd.h>
++#endif
+ #include <stdbool.h>
+ #ifndef __NR_atomic_cmpxchg_32
diff --git a/cross-gcc.spec b/cross-gcc.spec
new file mode 100644 (file)
index 0000000..e274bf6
--- /dev/null
@@ -0,0 +1,806 @@
+#
+# Conditional build:
+%bcond_without cloog           # cloog
+# Targets:
+%bcond_without aarch64                 # enable aarch64
+%bcond_without alpha                   # enable alpha
+%bcond_without arm                     # enable arm
+%bcond_without avr32                   # enable avr32
+%bcond_without blackfin                # enable blackfin
+%bcond_without c6x                     # enable c6x
+%bcond_without cris                    # enable cris
+%bcond_without frv                     # enable frv
+%bcond_without h8300                   # enable h8300
+%bcond_without hppa                    # enable hppa
+%bcond_without hppa64                  # enable hppa64
+%bcond_without ia64                    # enable ia64
+%bcond_without m32r                    # enable m32r
+%bcond_without m68k                    # enable m68k
+%bcond_without microblaze              # enable microblaze
+%bcond_without mips64                  # enable mips64
+%bcond_without mn10300                 # enable mn10300
+%bcond_without nios2                   # enable nios2
+%bcond_without powerpc64               # enable powerpc64
+%bcond_without s390x                   # enable s390x
+%bcond_without sh                      # enable sh
+%bcond_without sh64                    # enable sh64
+%bcond_without sparc64                 # enable sparc64
+%bcond_without tile                    # enable tile
+%bcond_without x86_64                  # enable x86_64
+%bcond_without xtensa                  # enable xtensa
+
+# built compiler generates lots of ICEs
+# - none at this time
+
+# gcc considers obsolete
+%undefine with_score
+
+# gcc doesn't build
+# - sh64 doesn't build on pld:
+# ../../gcc-4.9.2-20141212/gcc/genmultilib[264]: shift: nothing to shift
+# Makefile:1851: recipe for target 's-mlib' failed
+%undefine with_sh64
+# packaging error, files packaged to gcc-hppa-linux-gnu and gcc-hppa64-linux-gnu
+%undefine with_hppa64
+
+# 32-bit packages we don't build as we can use the 64-bit package instead
+%undefine with_i386
+%undefine with_mips
+%undefine with_powerpc
+%undefine with_s390
+%undefine with_sh4
+%undefine with_sparc
+
+# gcc doesn't support
+%undefine with_metag
+%undefine with_openrisc
+
+# not available in binutils-2.22
+%undefine with_unicore32
+
+%define        multilib_64_archs sparc64 ppc64 s390x x86_64
+
+# we won't build libgcc for these as it depends on C library or kernel headers
+%define no_libgcc_targets      nios2*|tile-*
+
+###############################################################################
+#
+# The gcc versioning information.  In a sed command below, the specfile winds
+# pre-release version numbers in BASE-VER back to the last actually-released
+# number.
+%define        DATE 20141212
+%define        SVNREV 218667
+
+%define srcdir gcc-%{version}-%{DATE}
+%define        cross_binutils_version 2.24
+%define        isl_version 0.12.2
+%define cloog_version 0.18.1
+
+Summary:       Cross C compiler
+Name:          cross-gcc
+Version:       4.9.2
+Release:       0.1
+# libgcc, libgfortran, libmudflap, libgomp, libstdc++ and crtstuff have GCC Runtime Exception.
+License:       GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
+Group:         Development/Languages
+URL:           http://gcc.gnu.org/
+# 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_7-branch@%{SVNREV} gcc-%{version}-%{DATE}
+# tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2
+Source0:       http://pkgs.fedoraproject.org/repo/pkgs/cross-gcc/%{srcdir}.tar.bz2/ccd8cac944582f8d2ddf5274a15df176/%{srcdir}.tar.bz2
+# Source0-md5: ccd8cac944582f8d2ddf5274a15df176
+Source1:       ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2
+# Source1-md5: e039bfcfb6c2ab039b8ee69bf883e824
+Source2:       ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-%{cloog_version}.tar.gz
+# Source2-md5: e34fca0540d840e5d0f6427e98c92252
+Patch0:                gcc49-hack.patch
+Patch1:                gcc49-java-nomulti.patch
+Patch2:                gcc49-ppc32-retaddr.patch
+Patch3:                gcc49-rh330771.patch
+Patch4:                gcc49-i386-libgomp.patch
+Patch5:                gcc49-sparc-config-detection.patch
+Patch6:                gcc49-libgomp-omp_h-multilib.patch
+Patch7:                gcc49-libtool-no-rpath.patch
+Patch8:                gcc49-cloog-dl.patch
+Patch9:                gcc49-cloog-dl2.patch
+Patch10:       gcc49-pr38757.patch
+Patch11:       gcc49-libstdc++-docs.patch
+Patch12:       gcc49-no-add-needed.patch
+Patch13:       gcc49-color-auto.patch
+Patch14:       gcc49-libgo-p224.patch
+Patch15:       gcc49-aarch64-async-unw-tables.patch
+Patch16:       gcc49-aarch64-unwind-opt.patch
+Patch17:       gcc49-pr64269.patch
+Patch900:      cross-intl-filename.patch
+# ia64 - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44553
+# m68k - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53557
+# alpha - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55344
+Patch901:      cross-gcc-with-libgcc.patch
+Patch903:      cross-gcc-bfin.patch
+Patch904:      cross-gcc-c6x.patch
+Patch1100:     cloog-0.18.1-ppc64le-config.patch
+BuildRequires: cross-binutils-common >= %{cross_binutils_version}
+BuildRequires: binutils >= 2.20.51.0.2-12
+BuildRequires: bison
+BuildRequires: dejagnu
+BuildRequires: flex
+BuildRequires: gettext
+BuildRequires: sharutils
+BuildRequires: texinfo
+BuildRequires: zlib-devel
+# make sure pthread.h doesn't contain __thread tokens
+# make sure glibc supports stack protector
+# make sure glibc supports DT_GNU_HASH
+BuildRequires: elfutils-devel >= 0.147
+BuildRequires: glibc-devel >= 2.4.90-13
+BuildRequires: gmp-devel >= 4.2
+BuildRequires: libmpc-devel >= 0.8.1
+BuildRequires: mpfr-devel >= 2.3.1
+Provides:      bundled(libiberty)
+BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define builddir %{_builddir}/%{name}-%{version}
+
+%description
+Cross-build GNU C compiler collection.
+
+%package common
+Summary:       Cross-build GNU C compiler documentation and translation files
+Group:         Development/Languages
+%if "%{_rpmversion}" >= "5"
+BuildArch:     noarch
+%endif
+
+%description common
+Documentation, manual pages and translation files for cross-build GNU
+C compiler.
+
+This is the common part of a set of cross-build GNU C compiler
+packages for building kernels for other architectures. No support for
+cross-building user space programs is currently supplied as that would
+massively multiply the number of packages.
+
+%define do_package() \
+%if %{expand:%%{?with_%{2}:1}%%{!?with_%{2}:0}} \
+%package -n gcc-%1 \
+Summary:       Cross-build binary utilities for %1 \
+Group:         Development/Languages \
+BuildRequires: binutils-%1 >= %{cross_binutils_version}\
+Requires:      %{name}-common = %{version}-%{release}\
+Requires:      binutils-%1 >= %{cross_binutils_version}\
+\
+%description -n gcc-%1 \
+Cross-build GNU C compiler. \
+\
+Only building kernels is currently supported. Support for cross-building \
+user space programs is not currently provided as that would massively multiply \
+the number of packages. \
+\
+%package -n gcc-c++-%1 \
+Summary:       Cross-build binary utilities for %1 \
+Group:         Development/Languages \
+Requires:      gcc-%1 = %{version}-%{release}\
+\
+%description -n gcc-c++-%1 \
+Cross-build GNU C++ compiler. \
+\
+Only the compiler is provided; not libstdc++. Support for cross-building \
+user space programs is not currently provided as that would massively multiply \
+the number of packages. \
+%endif
+
+%define do_symlink() \
+%if %{expand:%%{?with_%{2}:1}%%{!?with_%{2}:0}} \
+%package -n gcc-%1 \
+Summary:       Cross-build binary utilities for %1 \
+Group:         Development/Languages \
+Requires:      gcc-%3 = %{version}-%{release}\
+\
+%description -n gcc-%1 \
+Cross-build GNU C++ compiler. \
+\
+Only building kernels is currently supported. Support for cross-building \
+user space programs is not currently provided as that would massively multiply \
+the number of packages. \
+\
+%package -n gcc-c++-%1 \
+Summary:       Cross-build binary utilities for %1 \
+Group:         Development/Languages \
+Requires:      gcc-%1 = %{version}-%{release}\
+Requires:      gcc-c++-%3 = %{version}-%{release}\
+\
+%description -n gcc-c++-%1 \
+Cross-build GNU C++ compiler. \
+\
+Only the compiler is provided; not libstdc++. Support for cross-building \
+user space programs is not currently provided as that would massively multiply \
+the number of packages. \
+%endif
+
+%do_package alpha-linux-gnu    alpha
+%do_package arm-linux-gnu      arm
+%do_package aarch64-linux-gnu  aarch64
+%do_package avr32-linux-gnu    avr32
+%do_package bfin-linux-gnu     blackfin
+%do_package c6x-linux-gnu      c6x
+%do_package cris-linux-gnu     cris
+%do_package frv-linux-gnu      frv
+%do_package h8300-linux-gnu    h8300
+%do_package hppa-linux-gnu     hppa
+%do_package hppa64-linux-gnu   hppa64
+%do_package i386-linux-gnu     i386
+%do_package ia64-linux-gnu     ia64
+%do_package m32r-linux-gnu     m32r
+%do_package m68k-linux-gnu     m68k
+%do_package metag-linux-gnu    metag
+%do_package microblaze-linux-gnu microblaze
+%do_package mips-linux-gnu     mips
+%do_package mips64-linux-gnu   mips64
+%do_package mn10300-linux-gnu  mn10300
+%do_package nios2-linux-gnu    nios2
+%do_package openrisc-linux-gnu openrisc
+%do_package powerpc-linux-gnu  powerpc
+%do_package powerpc64-linux-gnu        powerpc64
+%do_symlink ppc-linux-gnu      powerpc powerpc-linux-gnu
+%do_symlink ppc64-linux-gnu    powerpc64       powerpc64-linux-gnu
+%do_package s390-linux-gnu     s390
+%do_package s390x-linux-gnu    s390x
+%do_package score-linux-gnu    score
+%do_package sh-linux-gnu       sh
+%do_package sh4-linux-gnu      sh4
+%do_package sh64-linux-gnu     sh64
+%do_package sparc-linux-gnu    sparc
+%do_package sparc64-linux-gnu  sparc64
+%do_package tile-linux-gnu     tile
+%do_package unicore32-linux-gnu        unicore32
+%do_package x86_64-linux-gnu   x86_64
+%do_package xtensa-linux-gnu   xtensa
+
+%prep
+%setup -qc -a 1 -a 2
+cd %{srcdir}
+%patch0 -p0
+%patch1 -p0
+%patch2 -p0
+%patch3 -p0
+%patch4 -p0
+%patch5 -p0
+%patch6 -p0
+%patch7 -p0
+%if %{with cloog}
+%patch8 -p0
+%patch9 -p0
+%endif
+%patch10 -p0
+# % if %{with libstdcxx_docs}
+# % patch11 -p0
+# % endif
+%patch12 -p0
+%patch13 -p0
+%patch14 -p0
+rm -f libgo/go/crypto/elliptic/p224{,_test}.go
+%patch15 -p0
+%patch16 -p0
+%patch17 -p0
+
+%patch900 -p0
+%patch901 -p1
+%patch903 -p0
+%patch904 -p0
+
+cd ..
+%patch1100 -p0
+cd %{srcdir}
+
+# Move the version number back
+sed -i -e 's/4\.9\.3/4.9.2/' gcc/BASE-VER
+echo 'PLD-Linux Cross %{version}-%{release}' > gcc/DEV-PHASE
+
+# Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
+sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' gcc/common.opt
+sed -i '/flag_debug_types_section/s/Init(1)/Init(0)/' gcc/common.opt
+sed -i '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' gcc/common.opt
+sed -i 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./' gcc/doc/invoke.texi
+
+./contrib/gcc_update --touch
+
+LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi
+
+cat > target.list <<EOF
+%{?with_alpha:alpha-linux-gnu}
+%{?with_arm:arm-linux-gnu}
+%{?with_aarch64:aarch64-linux-gnu}
+%{?with_avr32:avr32-linux-gnu}
+%{?with_blackfin:bfin-linux-gnu}
+%{?with_c6x:c6x-linux-gnu}
+%{?with_cris:cris-linux-gnu}
+%{?with_frv:frv-linux-gnu}
+%{?with_h8300:h8300-linux-gnu}
+%{?with_hppa:hppa-linux-gnu}
+%{?with_hppa64:hppa64-linux-gnu}
+%{?with_i386:i386-linux-gnu}
+%{?with_ia64:ia64-linux-gnu}
+%{?with_m32r:m32r-linux-gnu}
+%{?with_m68k:m68k-linux-gnu}
+%{?with_metag:metag-linux-gnu}
+%{?with_microblaze:microblaze-linux-gnu}
+%{?with_mips:mips-linux-gnu}
+%{?with_mips64:mips64-linux-gnu}
+%{?with_mn10300:mn10300-linux-gnu}
+%{?with_nios2:nios2-linux-gnu}
+%{?with_openrisc:openrisc-linux-gnu}
+%{?with_powerpc:powerpc-linux-gnu}
+%{?with_powerpc64:powerpc64-linux-gnu}
+%{?with_s390:s390-linux-gnu}
+%{?with_s390x:s390x-linux-gnu}
+%{?with_score:score-linux-gnu}
+%{?with_sh:sh-linux-gnu}
+%{?with_sh4:sh4-linux-gnu}
+%{?with_sh64:sh64-linux-gnu}
+%{?with_sparc:sparc-linux-gnu}
+%{?with_sparc64:sparc64-linux-gnu}
+%{?with_tile:tile-linux-gnu}
+%{?with_unicore32:unicore32-linux-gnu}
+%{?with_x86_64:x86_64-linux-gnu}
+%{?with_xtensa:xtensa-linux-gnu}
+EOF
+
+if [ $(wc -w < target.list) = 0 ]; then
+       echo >&2 "No targets selected"
+       exit 8
+fi
+
+%build
+
+# Undo the broken autoconf change in recent Fedora versions
+export CONFIG_SITE=NONE
+
+#
+# Configure and build the ISL and CLooG libraries
+#
+%if %{with cloog}
+
+%define isl_source %{builddir}/isl-%{isl_version}
+%define isl_build %{builddir}/isl-build
+%define isl_install %{builddir}/isl-install
+
+mkdir %{isl_build} %{isl_install}
+%ifarch s390 s390x
+ISL_FLAG_PIC=-fPIC
+%else
+ISL_FLAG_PIC=-fpic
+%endif
+cd %{isl_build}
+       %{isl_source}/configure \
+               --disable-silent-rules \
+               --disable-shared \
+               CC="%{__cc}" \
+               CXX="%{__cxx}" \
+               CFLAGS="${CFLAGS:-%rpmcflags} $ISL_FLAG_PIC" \
+               --prefix=%{isl_install}
+       %{__make}
+       %{__make} install
+cd ..
+
+%define cloog_source %{builddir}/cloog-%{cloog_version}
+%define cloog_build %{builddir}/cloog-build
+%define cloog_install %{builddir}/cloog-install
+
+install -d %{cloog_build} %{builddir}/cloog-install
+cd %{cloog_build}
+cat >> %{cloog_source}/source/isl/constraints.c << \EOF
+#include <isl/flow.h>
+static void __attribute__((used)) *s1 = (void *) isl_union_map_compute_flow;
+static void __attribute__((used)) *s2 = (void *) isl_map_dump;
+EOF
+sed -i 's|libcloog|libgcc49privatecloog|g' %{cloog_source}/{,test/}Makefile.{am,in}
+
+%{cloog_source}/configure \
+       --disable-silent-rules \
+       --with-isl=system \
+       --with-isl-prefix=%{isl_install} \
+       CC="%{__cc}" \
+       CXX="%{__cxx}" \
+       CFLAGS="${CFLAGS:-%rpmcflags}" \
+       CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \
+       --prefix=%{cloog_install}
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+%{__make}
+%{__make} install
+cd %{cloog_install}/lib
+rm libgcc49privatecloog-isl.so{,.4}
+mv libgcc49privatecloog-isl.so.4.0.0 libcloog-isl.so.4
+ln -sf libcloog-isl.so.4 libcloog-isl.so
+ln -sf libcloog-isl.so.4 libcloog.so
+
+%endif
+
+#
+# Configure the compiler
+#
+cd %{builddir}
+config_target() {
+       echo "=== CONFIGURING $1"
+
+       arch=$1
+       prefix=$arch-
+       build_dir=$1
+
+       case $arch in
+       arm-*)          target=arm-linux-gnueabi;;
+       aarch64-*)      target=aarch64-linux-gnu;;
+       avr32-*)        target=avr-linux;;
+       bfin-*)         target=bfin-uclinux;;
+       c6x-*)          target=c6x-uclinux;;
+       h8300-*)        target=h8300-elf;;
+       mn10300-*)      target=am33_2.0-linux;;
+       m68knommu-*)    target=m68k-linux;;
+       openrisc-*)     target=or32-linux;;
+       parisc-*)       target=hppa-linux;;
+       score-*)        target=score-elf;;
+       sh64-*)         target=sh64-linux;;
+       tile-*)         target=tilegx-linux;;
+       v850-*)         target=v850e-linux;;
+       x86-*)          target=x86_64-linux;;
+       *)              target=$arch;;
+       esac
+
+       echo $arch: target is $target
+       #export CFLAGS="$RPM_OPT_FLAGS"
+
+       CONFIG_FLAGS=
+       case $arch in
+       arm)
+               CONFIG_FLAGS="--with-cpu=cortex-a8 --with-tune=cortex-a8 --with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16 --with-abi=aapcs-linux"
+               ;;
+       powerpc-*|powerpc64-*)
+               CONFIG_FLAGS="--with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 --enable-secureplt"
+               ;;
+       s390*-*)
+               CONFIG_FLAGS="--with-arch=z9-109 --with-tune=z10 --enable-decimal-float"
+               ;;
+       sh-*)
+               CONFIG_FLAGS="--with-multilib-list=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single,!m2a,!m2a-single"
+               ;;
+       sh64-*)
+               CONFIG_FLAGS="--with-multilib-list=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu"
+               ;;
+       sparc-*)
+               CONFIG_FLAGS="--disable-linux-futex"
+               ;;
+       tile-*)
+               #CONFIG_FLAGS="--with-arch_32=tilepro"
+               ;;
+       x86-*)
+               CONFIG_FLAGS="--with-arch_32=i686"
+               ;;
+       esac
+
+       case $arch in
+       alpha|powerpc*|s390*|sparc*)
+               CONFIG_FLAGS="$CONFIG_FLAGS --with-long-double-128" ;;
+       esac
+
+       install -d $build_dir
+       cd $build_dir
+
+       # We could optimize the cross builds size by --enable-shared but the produced
+       # binaries may be less convenient in the embedded environment.
+       AR_FOR_TARGET=%{_bindir}/$arch-ar \
+       AS_FOR_TARGET=%{_bindir}/$arch-as \
+       DLLTOOL_FOR_TARGET=%{_bindir}/$arch-dlltool \
+       LD_FOR_TARGET=%{_bindir}/$arch-ld \
+       NM_FOR_TARGET=%{_bindir}/$arch-nm \
+       OBJDUMP_FOR_TARGET=%{_bindir}/$arch-objdump \
+       RANLIB_FOR_TARGET=%{_bindir}/$arch-ranlib \
+       STRIP_FOR_TARGET=%{_bindir}/$arch-strip \
+       WINDRES_FOR_TARGET=%{_bindir}/$arch-windres \
+       WINDMC_FOR_TARGET=%{_bindir}/$arch-windmc \
+       CC="%{__cc}" \
+       CFLAGS="%{rpmcflags}" \
+       CXXFLAGS="%{rpmcxxflags}" \
+       LDFLAGS="-Wl,-z,relro " \
+       ../%{srcdir}/configure \
+       --bindir=%{_bindir} \
+       --build=%{_target_platform} \
+       --datadir=%{_datadir} \
+       --disable-decimal-float \
+       --disable-dependency-tracking \
+       --disable-gold \
+       --disable-libgomp \
+       --disable-libmudflap \
+       --disable-libquadmath \
+       --disable-libssp \
+       --disable-nls \
+       --disable-plugin \
+       --disable-shared \
+       --disable-silent-rules \
+       --disable-sjlj-exceptions \
+       --disable-threads \
+       --with-ld=/usr/bin/$arch-ld \
+       --enable-checking=$checking \
+       --enable-gnu-unique-object \
+       --enable-initfini-array \
+       --enable-languages=c,c++ \
+       --enable-linker-build-id \
+       --enable-nls \
+       --enable-obsolete \
+       --enable-targets=all \
+       --exec-prefix=%{_exec_prefix} \
+       --host=%{_target_platform} \
+       --includedir=%{_includedir} \
+       --infodir=%{_infodir} \
+       --libexecdir=%{_libexecdir} \
+       --localstatedir=%{_localstatedir} \
+       --mandir=%{_mandir} \
+       --prefix=%{_prefix} \
+       --program-prefix=$prefix \
+       --sbindir=%{_sbindir} \
+       --sharedstatedir=%{_sharedstatedir} \
+       --sysconfdir=%{_sysconfdir} \
+       --target=$target \
+       --with-bugurl="http://bugs.pld-linux.org" \
+       --with-linker-hash-style=gnu \
+       --with-newlib \
+       --with-sysroot=%{_prefix}/$arch/sys-root \
+       --with-system-libunwind \
+       --with-system-zlib \
+       --without-headers \
+%if %{with cloog}
+       --with-isl=%{isl_install} --with-cloog=%{cloog_install} \
+%else
+       --without-isl --without-cloog \
+%endif
+       $CONFIG_FLAGS
+%if 0
+       --libdir=%{_libdir} # we want stuff in /usr/lib/gcc/ not /usr/lib64/gcc
+%endif
+       cd ..
+}
+
+for target in $(cat target.list); do
+       config_target $target
+done
+
+build_target() {
+       echo "=== BUILDING $1"
+
+       arch=$1
+       build_dir=$1
+
+       AR_FOR_TARGET=%{_bindir}/$arch-ar \
+       AS_FOR_TARGET=%{_bindir}/$arch-as \
+       DLLTOOL_FOR_TARGET=%{_bindir}/$arch-dlltool \
+       LD_FOR_TARGET=%{_bindir}/$arch-ld \
+       NM_FOR_TARGET=%{_bindir}/$arch-nm \
+       OBJDUMP_FOR_TARGET=%{_bindir}/$arch-objdump \
+       RANLIB_FOR_TARGET=%{_bindir}/$arch-ranlib \
+       STRIP_FOR_TARGET=%{_bindir}/$arch-strip \
+       WINDRES_FOR_TARGET=%{_bindir}/$arch-windres \
+       WINDMC_FOR_TARGET=%{_bindir}/$arch-windmc \
+       %{__make} -C $build_dir tooldir=%{_prefix} all-gcc
+
+       case $arch in
+       %{no_libgcc_targets})
+               ;;
+       *)
+               %{__make} -C $build_dir tooldir=%{_prefix} all-target-libgcc
+               ;;
+       esac
+}
+
+for target in $(cat target.list); do
+       build_target $target
+done
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+install_bin() {
+       echo "=== INSTALLING $1"
+
+       arch=$1
+       cpu=${1%%%%-*}
+
+       case $arch in
+       %{no_libgcc_targets})   with_libgcc="";;
+       *)                      with_libgcc="install-target-libgcc";;
+       esac
+
+       %{__make} -C $arch DESTDIR=$RPM_BUILD_ROOT install-gcc ${with_libgcc}
+
+       # We want links for ppc and ppc64 also if we make powerpc or powerpc64
+       case $cpu in
+       powerpc*)
+               cd $RPM_BUILD_ROOT%{_bindir}
+                       for i in $cpu-*; do
+                               ln -s $i ppc${i#powerpc}
+                       done
+               cd -
+               ;;
+       esac
+}
+
+for target in $(cat target.list); do
+       install -d $RPM_BUILD_ROOT%{_prefix}/$target/sys-root
+       install_bin $target
+done
+
+grep ^powerpc target.list | sed -e s/powerpc/ppc/ > symlink-target.list
+
+# We have to copy cloog somewhere graphite can dlopen it from
+%if %{with cloog}
+for i in $RPM_BUILD_ROOT%{_prefix}/lib/gcc/*/%{version}; do
+       cp -a %{cloog_install}/lib/libcloog-isl.so.4 $i
+done
+%endif
+
+# For cross-gcc we drop the documentation.
+rm -rf $RPM_BUILD_ROOT%{_infodir}
+
+# Remove binaries we will not be including, so that they don't end up in
+# gcc-debuginfo
+rm -f $RPM_BUILD_ROOT%{_libdir}/{libffi*,libiberty.a}
+rm -f $RPM_BUILD_ROOT%{_libexecdir}/gcc/*/%{version}/install-tools/{mkheaders,fixincl}
+rm -f $RPM_BUILD_ROOT%{_bindir}/*-gcc-%{version} || :
+rm -f $RPM_BUILD_ROOT%{_bindir}/*-ar || :
+rm -f $RPM_BUILD_ROOT%{_bindir}/*-nm || :
+rm -f $RPM_BUILD_ROOT%{_bindir}/*-ranlib || :
+rmdir  $RPM_BUILD_ROOT%{_includedir}
+
+find $RPM_BUILD_ROOT%{_datadir} -name gcc.mo |
+while read x; do
+       y=$(dirname $x)
+       mv $x $y/cross-gcc.mo
+done
+
+%find_lang cross-gcc
+
+rm $RPM_BUILD_ROOT%{_mandir}/man7/*.7
+rmdir $RPM_BUILD_ROOT%{_mandir}/man7
+
+# All the installed manual pages and translation files for each program are the
+# same, so symlink them to the common package
+cd $RPM_BUILD_ROOT%{_mandir}/man1
+       for i in cross-cpp.1 cross-gcc.1 cross-g++.1 cross-gcov.1; do
+               j=${i#cross-}
+
+               for k in *-$j; do
+                       if [ $k != $i -a ! -L $k ]; then
+                               mv $k $i
+                               ln -s $i $k
+                       fi
+               done
+       done
+
+       # Add manpages the additional symlink-only targets
+       %if %{with powerpc}%{with powerpc64}
+       for i in powerpc*; do
+               ln -s $i ppc${i#powerpc}
+       done
+       %endif
+cd -
+
+install_lang() {
+       arch=$1
+       cpu=${arch%%%%-*}
+
+       case $cpu in
+       avr32)          target_cpu=avr;;
+       bfin)           target_cpu=bfin;;
+       h8300)          target_cpu=h8300;;
+       mn10300)        target_cpu=am33_2.0;;
+       openrisc)       target_cpu=openrisc;;
+       parisc)         target_cpu=hppa;;
+       score)          target_cpu=score;;
+       tile)           target_cpu=tilegx;;
+       v850)           target_cpu=v850e;;
+       x86)            target_cpu=x86_64;;
+       *)              target_cpu=$cpu;;
+       esac
+
+       (
+       echo "%%defattr(-,root,root,-)"
+       echo "%{_bindir}/$arch*-cpp"
+       echo "%{_bindir}/$arch*-gcc"
+       echo "%{_bindir}/$arch*-gcov"
+       echo "%{_mandir}/man1/$arch*-cpp*"
+       echo "%{_mandir}/man1/$arch*-gcc*"
+       echo "%{_mandir}/man1/$arch*-gcov*"
+       case $cpu in
+               ppc*|ppc64*)
+               ;;
+               *)
+               echo "/usr/lib/gcc/$target_cpu-*/"
+               echo "%{_libexecdir}/gcc/$target_cpu*/*/cc1"
+               echo "%{_libexecdir}/gcc/$target_cpu*/*/collect2"
+               echo "%{_libexecdir}/gcc/$target_cpu*/*/[abd-z]*"
+               echo "%{_prefix}/$arch/sys-root"
+       esac
+
+       ) >files.$arch
+
+       (
+       echo "%%defattr(-,root,root,-)"
+       echo "%{_bindir}/$arch*-c++"
+       echo "%{_bindir}/$arch*-g++"
+       echo "%{_mandir}/man1/$arch*-g++*"
+       case $cpu in
+               ppc*|ppc64*)
+               ;;
+               *)
+               echo "%{_libexecdir}/gcc/$target_cpu*/*/cc1plus"
+       esac
+       ) > files-c++.$arch
+}
+
+for target in $(cat target.list symlink-target.list); do
+       install_lang $target
+done
+
+%define __ar_no_strip $RPM_BUILD_DIR/%{name}-%{version}/ar-no-strip
+cat >%{__ar_no_strip} <<'EOF'
+#!/bin/sh
+f=$2
+if [ ${f##*/} = libgcc.a -o ${f##*/} = libgcov.a ]; then
+       :
+else
+       %{__strip} $*
+fi
+EOF
+chmod +x %{__ar_no_strip}
+%undefine __strip
+%define __strip %{__ar_no_strip}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files common -f cross-gcc.lang
+%doc %{srcdir}/COPYING*
+%doc %{srcdir}/README
+%{_mandir}/man1/cross-*
+
+%define do_files() \
+%files -n gcc-%1 -f files.%1 \
+%files -n gcc-c++-%1 -f files-c++.%1 \
+
+%{?with_alpha:%do_files alpha-linux-gnu}
+%{?with_arm:%do_files arm-linux-gnu}
+%{?with_aarch64:%do_files aarch64-linux-gnu}
+%{?with_avr32:%do_files avr32-linux-gnu}
+%{?with_blackfin:%do_files bfin-linux-gnu}
+%{?with_c6x:%do_files c6x-linux-gnu}
+%{?with_cris:%do_files cris-linux-gnu}
+%{?with_frv:%do_files frv-linux-gnu}
+%{?with_h8300:%do_files h8300-linux-gnu}
+%{?with_hppa:%do_files hppa-linux-gnu}
+%{?with_hppa64:%do_files hppa64-linux-gnu}
+%{?with_i386:%do_files i386-linux-gnu}
+%{?with_ia64:%do_files ia64-linux-gnu}
+%{?with_m32r:%do_files m32r-linux-gnu}
+%{?with_m68k:%do_files m68k-linux-gnu}
+%{?with_metag:%do_files metag-linux-gnu}
+%{?with_microblaze:%do_files microblaze-linux-gnu}
+%{?with_mips:%do_files mips-linux-gnu}
+%{?with_mips64:%do_files mips64-linux-gnu}
+%{?with_mn10300:%do_files mn10300-linux-gnu}
+%{?with_nios2:%do_files nios2-linux-gnu}
+%{?with_openrisc:%do_files openrisc-linux-gnu}
+%{?with_powerpc:%do_files powerpc-linux-gnu}
+%{?with_powerpc64:%do_files powerpc64-linux-gnu}
+%{?with_powerpc:%do_files ppc-linux-gnu}
+%{?with_powerpc64:%do_files ppc64-linux-gnu}
+%{?with_s390:%do_files s390-linux-gnu}
+%{?with_s390x:%do_files s390x-linux-gnu}
+%{?with_score:%do_files score-linux-gnu}
+%{?with_sh:%do_files sh-linux-gnu}
+%{?with_sh4:%do_files sh4-linux-gnu}
+%{?with_sh64:%do_files sh64-linux-gnu}
+%{?with_sparc:%do_files sparc-linux-gnu}
+%{?with_sparc64:%do_files sparc64-linux-gnu}
+%{?with_tile:%do_files tile-linux-gnu}
+%{?with_unicore32:%do_files unicore32-linux-gnu}
+%{?with_x86_64:%do_files x86_64-linux-gnu}
+%{?with_xtensa:%do_files xtensa-linux-gnu}
diff --git a/cross-intl-filename.patch b/cross-intl-filename.patch
new file mode 100644 (file)
index 0000000..b24f547
--- /dev/null
@@ -0,0 +1,14 @@
+diff -uNr --exclude '*~' gcc-4.7.0-RC-20120302/gcc/intl.c gcc-4.7.0-RC-20120302-old/gcc/intl.c
+--- gcc/intl.c 2010-12-01 17:29:12.000000000 +0000
++++ gcc/intl.c 2012-03-15 14:49:19.709968148 +0000
+@@ -56,8 +56,8 @@
+   setlocale (LC_ALL, "");
+ #endif
+-  (void) bindtextdomain ("gcc", LOCALEDIR);
+-  (void) textdomain ("gcc");
++  (void) bindtextdomain ("cross-gcc", LOCALEDIR);
++  (void) textdomain ("cross-gcc");
+   /* Opening quotation mark.  */
+   open_quote = _("`");
diff --git a/gcc49-aarch64-async-unw-tables.patch b/gcc49-aarch64-async-unw-tables.patch
new file mode 100644 (file)
index 0000000..feec149
--- /dev/null
@@ -0,0 +1,35 @@
+2014-04-07  Richard Henderson  <rth@redhat.com>
+
+       * common/config/aarch64/aarch64-common.c (TARGET_OPTION_INIT_STRUCT):
+       Define.
+       (aarch64_option_init_struct): New function.
+
+--- gcc/common/config/aarch64/aarch64-common.c
++++ gcc/common/config/aarch64/aarch64-common.c
+@@ -39,6 +39,9 @@
+ #undef        TARGET_OPTION_OPTIMIZATION_TABLE
+ #define TARGET_OPTION_OPTIMIZATION_TABLE aarch_option_optimization_table
++#undef TARGET_OPTION_INIT_STRUCT
++#define TARGET_OPTION_INIT_STRUCT aarch64_option_init_struct
++
+ /* Set default optimization options.  */
+ static const struct default_options aarch_option_optimization_table[] =
+   {
+@@ -47,6 +50,16 @@ static const struct default_options aarch_option_optimization_table[] =
+     { OPT_LEVELS_NONE, 0, NULL, 0 }
+   };
++/* Implement TARGET_OPTION_INIT_STRUCT.  */
++
++static void
++aarch64_option_init_struct (struct gcc_options *opts)
++{
++  /* By default, always emit DWARF-2 unwind info.  This allows debugging
++     without maintaining a stack frame back-chain.  */
++  opts->x_flag_asynchronous_unwind_tables = 1;
++}
++
+ /* Implement TARGET_HANDLE_OPTION.
+    This function handles the target specific options for CPU/target selection.
diff --git a/gcc49-aarch64-unwind-opt.patch b/gcc49-aarch64-unwind-opt.patch
new file mode 100644 (file)
index 0000000..3ad55ab
--- /dev/null
@@ -0,0 +1,338 @@
+2014-08-08  Richard Henderson  <rth@redhat.com>
+
+       * config/aarch64/aarch64.c (aarch64_save_or_restore_fprs): Add
+       cfi_ops argument, for restore put REG_CFA_RESTORE notes into
+       *cfi_ops rather than on individual insns.  Cleanup.
+       (aarch64_save_or_restore_callee_save_registers): Likewise.
+       (aarch64_expand_prologue): Adjust caller.
+       (aarch64_expand_epilogue): Likewise.  Cleanup.  Emit queued cfi_ops
+       on the stack restore insn.
+
+--- gcc/config/aarch64/aarch64.c.jj    2014-07-08 17:38:17.398231989 +0200
++++ gcc/config/aarch64/aarch64.c       2014-08-13 10:02:45.599757706 +0200
+@@ -1810,8 +1810,7 @@ aarch64_register_saved_on_entry (int reg
+ static void
+ aarch64_save_or_restore_fprs (int start_offset, int increment,
+-                            bool restore, rtx base_rtx)
+-
++                            bool restore, rtx base_rtx, rtx *cfi_ops)
+ {
+   unsigned regno;
+   unsigned regno2;
+@@ -1819,16 +1818,16 @@ aarch64_save_or_restore_fprs (int start_
+   rtx (*gen_mem_ref)(enum machine_mode, rtx)
+     = (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM;
+-
+   for (regno = V0_REGNUM; regno <= V31_REGNUM; regno++)
+     {
+       if (aarch64_register_saved_on_entry (regno))
+       {
+-        rtx mem;
++        rtx mem, reg1;
+         mem = gen_mem_ref (DFmode,
+                            plus_constant (Pmode,
+                                           base_rtx,
+                                           start_offset));
++        reg1 = gen_rtx_REG (DFmode, regno);
+         for (regno2 = regno + 1;
+              regno2 <= V31_REGNUM
+@@ -1840,56 +1839,51 @@ aarch64_save_or_restore_fprs (int start_
+         if (regno2 <= V31_REGNUM &&
+             aarch64_register_saved_on_entry (regno2))
+           {
+-            rtx mem2;
++            rtx mem2, reg2;
+             /* Next highest register to be saved.  */
+             mem2 = gen_mem_ref (DFmode,
+                                 plus_constant
+                                 (Pmode,
+                                  base_rtx,
+                                  start_offset + increment));
++            reg2 = gen_rtx_REG (DFmode, regno2);
++
+             if (restore == false)
+               {
+-                insn = emit_insn
+-                  ( gen_store_pairdf (mem, gen_rtx_REG (DFmode, regno),
+-                                      mem2, gen_rtx_REG (DFmode, regno2)));
+-
++                insn = emit_insn (gen_store_pairdf (mem, reg1, mem2, reg2));
++                /* The first part of a frame-related parallel insn
++                   is always assumed to be relevant to the frame
++                   calculations; subsequent parts, are only
++                   frame-related if explicitly marked.  */
++                RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
++                RTX_FRAME_RELATED_P (insn) = 1;
+               }
+             else
+               {
+-                insn = emit_insn
+-                  ( gen_load_pairdf (gen_rtx_REG (DFmode, regno), mem,
+-                                     gen_rtx_REG (DFmode, regno2), mem2));
+-
+-                add_reg_note (insn, REG_CFA_RESTORE,
+-                              gen_rtx_REG (DFmode, regno));
+-                add_reg_note (insn, REG_CFA_RESTORE,
+-                              gen_rtx_REG (DFmode, regno2));
++                emit_insn (gen_load_pairdf (reg1, mem, reg2, mem2));
++                *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops);
++                *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg2, *cfi_ops);
+               }
+-                /* The first part of a frame-related parallel insn
+-                   is always assumed to be relevant to the frame
+-                   calculations; subsequent parts, are only
+-                   frame-related if explicitly marked.  */
+-            RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
+             regno = regno2;
+             start_offset += increment * 2;
+           }
+         else
+           {
+             if (restore == false)
+-              insn = emit_move_insn (mem, gen_rtx_REG (DFmode, regno));
++              {
++                insn = emit_move_insn (mem, reg1);
++                RTX_FRAME_RELATED_P (insn) = 1;
++              }
+             else
+               {
+-                insn = emit_move_insn (gen_rtx_REG (DFmode, regno), mem);
+-                add_reg_note (insn, REG_CFA_RESTORE,
+-                              gen_rtx_REG (DImode, regno));
++                emit_move_insn (reg1, mem);
++                *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops);
+               }
+             start_offset += increment;
+           }
+-        RTX_FRAME_RELATED_P (insn) = 1;
+       }
+     }
+-
+ }
+@@ -1897,13 +1891,14 @@ aarch64_save_or_restore_fprs (int start_
+    restore's have to happen.  */
+ static void
+ aarch64_save_or_restore_callee_save_registers (HOST_WIDE_INT offset,
+-                                          bool restore)
++                                             bool restore, rtx *cfi_ops)
+ {
+   rtx insn;
+   rtx base_rtx = stack_pointer_rtx;
+   HOST_WIDE_INT start_offset = offset;
+   HOST_WIDE_INT increment = UNITS_PER_WORD;
+-  rtx (*gen_mem_ref)(enum machine_mode, rtx) = (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM;
++  rtx (*gen_mem_ref)(enum machine_mode, rtx)
++    = (frame_pointer_needed)? gen_frame_mem : gen_rtx_MEM;
+   unsigned limit = (frame_pointer_needed)? R28_REGNUM: R30_REGNUM;
+   unsigned regno;
+   unsigned regno2;
+@@ -1912,11 +1907,13 @@ aarch64_save_or_restore_callee_save_regi
+     {
+       if (aarch64_register_saved_on_entry (regno))
+       {
+-        rtx mem;
++        rtx mem, reg1;
++
+         mem = gen_mem_ref (Pmode,
+                            plus_constant (Pmode,
+                                           base_rtx,
+                                           start_offset));
++        reg1 = gen_rtx_REG (DImode, regno);
+         for (regno2 = regno + 1;
+              regno2 <= limit
+@@ -1928,56 +1925,54 @@ aarch64_save_or_restore_callee_save_regi
+         if (regno2 <= limit &&
+             aarch64_register_saved_on_entry (regno2))
+           {
+-            rtx mem2;
++            rtx mem2, reg2;
+             /* Next highest register to be saved.  */
+             mem2 = gen_mem_ref (Pmode,
+                                 plus_constant
+                                 (Pmode,
+                                  base_rtx,
+                                  start_offset + increment));
++            reg2 = gen_rtx_REG (DImode, regno2);
++
+             if (restore == false)
+               {
+-                insn = emit_insn
+-                  ( gen_store_pairdi (mem, gen_rtx_REG (DImode, regno),
+-                                      mem2, gen_rtx_REG (DImode, regno2)));
+-
++                insn = emit_insn (gen_store_pairdi (mem, reg1, mem2, reg2));
++                /* The first part of a frame-related parallel insn
++                   is always assumed to be relevant to the frame
++                   calculations; subsequent parts, are only
++                   frame-related if explicitly marked.  */
++                RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
++                RTX_FRAME_RELATED_P (insn) = 1;
+               }
+             else
+               {
+-                insn = emit_insn
+-                  ( gen_load_pairdi (gen_rtx_REG (DImode, regno), mem,
+-                                   gen_rtx_REG (DImode, regno2), mem2));
+-
+-                add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno));
+-                add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno2));
++                emit_insn (gen_load_pairdi (reg1, mem, reg2, mem2));
++                *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops);
++                *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg2, *cfi_ops);
+               }
+-                /* The first part of a frame-related parallel insn
+-                   is always assumed to be relevant to the frame
+-                   calculations; subsequent parts, are only
+-                   frame-related if explicitly marked.  */
+-            RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0,
+-                                          1)) = 1;
+             regno = regno2;
+             start_offset += increment * 2;
+           }
+         else
+           {
+             if (restore == false)
+-              insn = emit_move_insn (mem, gen_rtx_REG (DImode, regno));
++              {
++                insn = emit_move_insn (mem, reg1);
++                RTX_FRAME_RELATED_P (insn) = 1;
++              }
+             else
+               {
+-                insn = emit_move_insn (gen_rtx_REG (DImode, regno), mem);
+-                add_reg_note (insn, REG_CFA_RESTORE, gen_rtx_REG (DImode, regno));
++                emit_move_insn (reg1, mem);
++                *cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg1, *cfi_ops);
+               }
+             start_offset += increment;
+           }
+-        RTX_FRAME_RELATED_P (insn) = 1;
+       }
+     }
+-  aarch64_save_or_restore_fprs (start_offset, increment, restore, base_rtx);
+-
++  aarch64_save_or_restore_fprs (start_offset, increment, restore,
++                              base_rtx, cfi_ops);
+ }
+ /* AArch64 stack frames generated by this compiler look like:
+@@ -2179,7 +2174,7 @@ aarch64_expand_prologue (void)
+       }
+       aarch64_save_or_restore_callee_save_registers
+-      (fp_offset + cfun->machine->frame.hardfp_offset, 0);
++      (fp_offset + cfun->machine->frame.hardfp_offset, 0, NULL);
+     }
+   /* when offset >= 512,
+@@ -2248,15 +2243,18 @@ aarch64_expand_epilogue (bool for_sibcal
+       insn = emit_insn (gen_add3_insn (stack_pointer_rtx,
+                                      hard_frame_pointer_rtx,
+                                      GEN_INT (- fp_offset)));
++      /* CFA should be calculated from the value of SP from now on.  */
++      add_reg_note (insn, REG_CFA_ADJUST_CFA,
++                  gen_rtx_SET (VOIDmode, stack_pointer_rtx,
++                               plus_constant (Pmode, hard_frame_pointer_rtx,
++                                              -fp_offset)));
+       RTX_FRAME_RELATED_P (insn) = 1;
+-      /* As SP is set to (FP - fp_offset), according to the rules in
+-       dwarf2cfi.c:dwarf2out_frame_debug_expr, CFA should be calculated
+-       from the value of SP from now on.  */
+       cfa_reg = stack_pointer_rtx;
+     }
++  rtx cfi_ops = NULL;
+   aarch64_save_or_restore_callee_save_registers
+-    (fp_offset + cfun->machine->frame.hardfp_offset, 1);
++    (fp_offset + cfun->machine->frame.hardfp_offset, 1, &cfi_ops);
+   /* Restore the frame pointer and lr if the frame pointer is needed.  */
+   if (offset > 0)
+@@ -2264,6 +2262,8 @@ aarch64_expand_epilogue (bool for_sibcal
+       if (frame_pointer_needed)
+       {
+         rtx mem_fp, mem_lr;
++        rtx reg_fp = hard_frame_pointer_rtx;
++        rtx reg_lr = gen_rtx_REG (DImode, LR_REGNUM);
+         if (fp_offset)
+           {
+@@ -2276,52 +2276,36 @@ aarch64_expand_epilogue (bool for_sibcal
+                                                    stack_pointer_rtx,
+                                                    fp_offset
+                                                    + UNITS_PER_WORD));
+-            insn = emit_insn (gen_load_pairdi (hard_frame_pointer_rtx,
+-                                               mem_fp,
+-                                               gen_rtx_REG (DImode,
+-                                                            LR_REGNUM),
+-                                               mem_lr));
++            emit_insn (gen_load_pairdi (reg_fp, mem_fp, reg_lr, mem_lr));
++
++            insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
++                                             GEN_INT (offset)));
+           }
+         else
+           {
+             insn = emit_insn (gen_loadwb_pairdi_di
+-                              (stack_pointer_rtx,
+-                               stack_pointer_rtx,
+-                               hard_frame_pointer_rtx,
+-                               gen_rtx_REG (DImode, LR_REGNUM),
+-                               GEN_INT (offset),
++                              (stack_pointer_rtx, stack_pointer_rtx,
++                               reg_fp, reg_lr, GEN_INT (offset),
+                                GEN_INT (GET_MODE_SIZE (DImode) + offset)));
+-            RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 2)) = 1;
+-            add_reg_note (insn, REG_CFA_ADJUST_CFA,
+-                          (gen_rtx_SET (Pmode, stack_pointer_rtx,
+-                                        plus_constant (Pmode, cfa_reg,
+-                                                       offset))));
+-          }
+-
+-        /* The first part of a frame-related parallel insn
+-           is always assumed to be relevant to the frame
+-           calculations; subsequent parts, are only
+-           frame-related if explicitly marked.  */
+-        RTX_FRAME_RELATED_P (XVECEXP (PATTERN (insn), 0, 1)) = 1;
+-        RTX_FRAME_RELATED_P (insn) = 1;
+-        add_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx);
+-        add_reg_note (insn, REG_CFA_RESTORE,
+-                      gen_rtx_REG (DImode, LR_REGNUM));
+-
+-        if (fp_offset)
+-          {
+-            insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
+-                                             GEN_INT (offset)));
+-            RTX_FRAME_RELATED_P (insn) = 1;
+           }
++        cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg_fp, cfi_ops);
++        cfi_ops = alloc_reg_note (REG_CFA_RESTORE, reg_lr, cfi_ops);
+       }
+       else
+       {
+         insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
+                                          GEN_INT (offset)));
+-        RTX_FRAME_RELATED_P (insn) = 1;
+       }
++      cfi_ops = alloc_reg_note (REG_CFA_ADJUST_CFA,
++                              gen_rtx_SET (VOIDmode, stack_pointer_rtx,
++                                           plus_constant (Pmode, cfa_reg,
++                                                          offset)),
++                              cfi_ops);
++      REG_NOTES (insn) = cfi_ops;
++      RTX_FRAME_RELATED_P (insn) = 1;
+     }
++  else
++    gcc_assert (cfi_ops == NULL);
+   /* Stack adjustment for exception handler.  */
+   if (crtl->calls_eh_return)
diff --git a/gcc49-cloog-dl.patch b/gcc49-cloog-dl.patch
new file mode 100644 (file)
index 0000000..8a72509
--- /dev/null
@@ -0,0 +1,476 @@
+--- gcc/Makefile.in.jj 2012-12-13 17:09:20.000000000 +0100
++++ gcc/Makefile.in    2012-12-14 11:45:22.585670055 +0100
+@@ -1006,7 +1006,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
+ # and the system's installed libraries.
+ LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
+       $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
+-BACKENDLIBS = $(CLOOGLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
++BACKENDLIBS = $(if $(CLOOGLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
+       $(ZLIB)
+ # Any system libraries needed just for GNAT.
+ SYSLIBS = @GNAT_LIBEXC@
+@@ -2011,6 +2011,15 @@ $(out_object_file): $(out_file)
+ $(common_out_object_file): $(common_out_file)
+       $(COMPILE) $<
+       $(POSTCOMPILE)
++
++graphite%.o : \
++  ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++graphite.o : \
++  ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++graphite%.o : \
++  ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
++graphite.o : \
++  ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
+ #\f
+ # Generate header and source files from the machine description,
+ # and compile them.
+--- gcc/graphite-poly.h.jj     2012-12-13 11:31:27.000000000 +0100
++++ gcc/graphite-poly.h        2012-12-14 13:41:41.970800726 +0100
+@@ -22,6 +22,371 @@ along with GCC; see the file COPYING3.
+ #ifndef GCC_GRAPHITE_POLY_H
+ #define GCC_GRAPHITE_POLY_H
++#include <isl/aff.h>
++#include <isl/schedule.h>
++#include <isl/ilp.h>
++#include <isl/flow.h>
++#include <isl/options.h>
++#include <cloog/isl/cloog.h>
++#include <dlfcn.h>
++#define DYNSYMS \
++  DYNSYM (clast_pprint); \
++  DYNSYM (cloog_clast_create_from_input); \
++  DYNSYM (cloog_clast_free); \
++  DYNSYM (cloog_domain_from_isl_set); \
++  DYNSYM (cloog_input_alloc); \
++  DYNSYM (cloog_isl_state_malloc); \
++  DYNSYM (cloog_options_free); \
++  DYNSYM (cloog_options_malloc); \
++  DYNSYM (cloog_scattering_from_isl_map); \
++  DYNSYM (cloog_state_free); \
++  DYNSYM (cloog_union_domain_add_domain); \
++  DYNSYM (cloog_union_domain_alloc); \
++  DYNSYM (cloog_union_domain_set_name); \
++  DYNSYM (isl_aff_add_coefficient_si); \
++  DYNSYM (isl_aff_add_constant); \
++  DYNSYM (isl_aff_free); \
++  DYNSYM (isl_aff_get_coefficient); \
++  DYNSYM (isl_aff_get_space); \
++  DYNSYM (isl_aff_mod); \
++  DYNSYM (isl_aff_set_coefficient_si); \
++  DYNSYM (isl_aff_set_constant_si); \
++  DYNSYM (isl_aff_zero_on_domain); \
++  DYNSYM (isl_band_free); \
++  DYNSYM (isl_band_get_children); \
++  DYNSYM (isl_band_get_partial_schedule); \
++  DYNSYM (isl_band_has_children); \
++  DYNSYM (isl_band_list_free); \
++  DYNSYM (isl_band_list_get_band); \
++  DYNSYM (isl_band_list_get_ctx); \
++  DYNSYM (isl_band_list_n_band); \
++  DYNSYM (isl_band_member_is_zero_distance); \
++  DYNSYM (isl_band_n_member); \
++  DYNSYM (isl_basic_map_add_constraint); \
++  DYNSYM (isl_basic_map_project_out); \
++  DYNSYM (isl_basic_map_universe); \
++  DYNSYM (isl_constraint_set_coefficient); \
++  DYNSYM (isl_constraint_set_coefficient_si); \
++  DYNSYM (isl_constraint_set_constant); \
++  DYNSYM (isl_constraint_set_constant_si); \
++  DYNSYM (isl_ctx_alloc); \
++  DYNSYM (isl_ctx_free); \
++  DYNSYM (isl_equality_alloc); \
++  DYNSYM (isl_id_alloc); \
++  DYNSYM (isl_id_copy); \
++  DYNSYM (isl_id_free); \
++  DYNSYM (isl_inequality_alloc); \
++  DYNSYM (isl_local_space_copy); \
++  DYNSYM (isl_local_space_free); \
++  DYNSYM (isl_local_space_from_space); \
++  DYNSYM (isl_local_space_range); \
++  DYNSYM (isl_map_add_constraint); \
++  DYNSYM (isl_map_add_dims); \
++  DYNSYM (isl_map_align_params); \
++  DYNSYM (isl_map_apply_range); \
++  DYNSYM (isl_map_copy); \
++  DYNSYM (isl_map_dim); \
++  DYNSYM (isl_map_dump); \
++  DYNSYM (isl_map_equate); \
++  DYNSYM (isl_map_fix_si); \
++  DYNSYM (isl_map_flat_product); \
++  DYNSYM (isl_map_flat_range_product); \
++  DYNSYM (isl_map_free); \
++  DYNSYM (isl_map_from_basic_map); \
++  DYNSYM (isl_map_from_pw_aff); \
++  DYNSYM (isl_map_from_union_map); \
++  DYNSYM (isl_map_get_ctx); \
++  DYNSYM (isl_map_get_space); \
++  DYNSYM (isl_map_get_tuple_id); \
++  DYNSYM (isl_map_insert_dims); \
++  DYNSYM (isl_map_intersect); \
++  DYNSYM (isl_map_intersect_domain); \
++  DYNSYM (isl_map_intersect_range); \
++  DYNSYM (isl_map_is_empty); \
++  DYNSYM (isl_map_lex_ge); \
++  DYNSYM (isl_map_lex_le); \
++  DYNSYM (isl_map_n_out); \
++  DYNSYM (isl_map_range); \
++  DYNSYM (isl_map_set_tuple_id); \
++  DYNSYM (isl_map_universe); \
++  DYNSYM (isl_options_set_on_error); \
++  DYNSYM (isl_options_set_schedule_fuse); \
++  DYNSYM (isl_options_set_schedule_max_constant_term); \
++  DYNSYM (isl_options_set_schedule_maximize_band_depth); \
++  DYNSYM (isl_printer_free); \
++  DYNSYM (isl_printer_print_aff); \
++  DYNSYM (isl_printer_print_constraint); \
++  DYNSYM (isl_printer_print_map); \
++  DYNSYM (isl_printer_print_set); \
++  DYNSYM (isl_printer_to_file); \
++  DYNSYM (isl_pw_aff_add); \
++  DYNSYM (isl_pw_aff_alloc); \
++  DYNSYM (isl_pw_aff_copy); \
++  DYNSYM (isl_pw_aff_eq_set); \
++  DYNSYM (isl_pw_aff_free); \
++  DYNSYM (isl_pw_aff_from_aff); \
++  DYNSYM (isl_pw_aff_ge_set); \
++  DYNSYM (isl_pw_aff_gt_set); \
++  DYNSYM (isl_pw_aff_is_cst); \
++  DYNSYM (isl_pw_aff_le_set); \
++  DYNSYM (isl_pw_aff_lt_set); \
++  DYNSYM (isl_pw_aff_mod); \
++  DYNSYM (isl_pw_aff_mul); \
++  DYNSYM (isl_pw_aff_ne_set); \
++  DYNSYM (isl_pw_aff_nonneg_set); \
++  DYNSYM (isl_pw_aff_set_tuple_id); \
++  DYNSYM (isl_pw_aff_sub); \
++  DYNSYM (isl_pw_aff_zero_set); \
++  DYNSYM (isl_schedule_free); \
++  DYNSYM (isl_schedule_get_band_forest); \
++  DYNSYM (isl_set_add_constraint); \
++  DYNSYM (isl_set_add_dims); \
++  DYNSYM (isl_set_apply); \
++  DYNSYM (isl_set_coalesce); \
++  DYNSYM (isl_set_copy); \
++  DYNSYM (isl_set_dim); \
++  DYNSYM (isl_set_fix_si); \
++  DYNSYM (isl_set_free); \
++  DYNSYM (isl_set_from_cloog_domain); \
++  DYNSYM (isl_set_get_space); \
++  DYNSYM (isl_set_get_tuple_id); \
++  DYNSYM (isl_set_intersect); \
++  DYNSYM (isl_set_is_empty); \
++  DYNSYM (isl_set_max); \
++  DYNSYM (isl_set_min); \
++  DYNSYM (isl_set_n_dim); \
++  DYNSYM (isl_set_nat_universe); \
++  DYNSYM (isl_set_project_out); \
++  DYNSYM (isl_set_set_tuple_id); \
++  DYNSYM (isl_set_universe); \
++  DYNSYM (isl_space_add_dims); \
++  DYNSYM (isl_space_alloc); \
++  DYNSYM (isl_space_copy); \
++  DYNSYM (isl_space_dim); \
++  DYNSYM (isl_space_domain); \
++  DYNSYM (isl_space_find_dim_by_id); \
++  DYNSYM (isl_space_free); \
++  DYNSYM (isl_space_from_domain); \
++  DYNSYM (isl_space_get_tuple_id); \
++  DYNSYM (isl_space_params_alloc); \
++  DYNSYM (isl_space_range); \
++  DYNSYM (isl_space_set_alloc); \
++  DYNSYM (isl_space_set_dim_id); \
++  DYNSYM (isl_space_set_tuple_id); \
++  DYNSYM (isl_union_map_add_map); \
++  DYNSYM (isl_union_map_align_params); \
++  DYNSYM (isl_union_map_apply_domain); \
++  DYNSYM (isl_union_map_apply_range); \
++  DYNSYM (isl_union_map_compute_flow); \
++  DYNSYM (isl_union_map_copy); \
++  DYNSYM (isl_union_map_empty); \
++  DYNSYM (isl_union_map_flat_range_product); \
++  DYNSYM (isl_union_map_foreach_map); \
++  DYNSYM (isl_union_map_free); \
++  DYNSYM (isl_union_map_from_map); \
++  DYNSYM (isl_union_map_get_ctx); \
++  DYNSYM (isl_union_map_get_space); \
++  DYNSYM (isl_union_map_gist_domain); \
++  DYNSYM (isl_union_map_gist_range); \
++  DYNSYM (isl_union_map_intersect_domain); \
++  DYNSYM (isl_union_map_is_empty); \
++  DYNSYM (isl_union_map_subtract); \
++  DYNSYM (isl_union_map_union); \
++  DYNSYM (isl_union_set_add_set); \
++  DYNSYM (isl_union_set_compute_schedule); \
++  DYNSYM (isl_union_set_copy); \
++  DYNSYM (isl_union_set_empty); \
++  DYNSYM (isl_union_set_from_set); \
++  DYNSYM (stmt_ass); \
++  DYNSYM (stmt_block); \
++  DYNSYM (stmt_for); \
++  DYNSYM (stmt_guard); \
++  DYNSYM (stmt_root); \
++  DYNSYM (stmt_user);
++extern struct cloog_pointers_s__
++{
++  bool inited;
++  void *h;
++#define DYNSYM(x) __typeof (x) *p_##x
++  DYNSYMS
++#undef DYNSYM
++} cloog_pointers__;
++
++#define cloog_block_alloc (*cloog_pointers__.p_cloog_block_alloc)
++#define clast_pprint (*cloog_pointers__.p_clast_pprint)
++#define cloog_clast_create_from_input (*cloog_pointers__.p_cloog_clast_create_from_input)
++#define cloog_clast_free (*cloog_pointers__.p_cloog_clast_free)
++#define cloog_domain_from_isl_set (*cloog_pointers__.p_cloog_domain_from_isl_set)
++#define cloog_input_alloc (*cloog_pointers__.p_cloog_input_alloc)
++#define cloog_isl_state_malloc (*cloog_pointers__.p_cloog_isl_state_malloc)
++#define cloog_options_free (*cloog_pointers__.p_cloog_options_free)
++#define cloog_options_malloc (*cloog_pointers__.p_cloog_options_malloc)
++#define cloog_scattering_from_isl_map (*cloog_pointers__.p_cloog_scattering_from_isl_map)
++#define cloog_state_free (*cloog_pointers__.p_cloog_state_free)
++#define cloog_union_domain_add_domain (*cloog_pointers__.p_cloog_union_domain_add_domain)
++#define cloog_union_domain_alloc (*cloog_pointers__.p_cloog_union_domain_alloc)
++#define cloog_union_domain_set_name (*cloog_pointers__.p_cloog_union_domain_set_name)
++#define isl_aff_add_coefficient_si (*cloog_pointers__.p_isl_aff_add_coefficient_si)
++#define isl_aff_add_constant (*cloog_pointers__.p_isl_aff_add_constant)
++#define isl_aff_free (*cloog_pointers__.p_isl_aff_free)
++#define isl_aff_get_coefficient (*cloog_pointers__.p_isl_aff_get_coefficient)
++#define isl_aff_get_space (*cloog_pointers__.p_isl_aff_get_space)
++#define isl_aff_mod (*cloog_pointers__.p_isl_aff_mod)
++#define isl_aff_set_coefficient_si (*cloog_pointers__.p_isl_aff_set_coefficient_si)
++#define isl_aff_set_constant_si (*cloog_pointers__.p_isl_aff_set_constant_si)
++#define isl_aff_zero_on_domain (*cloog_pointers__.p_isl_aff_zero_on_domain)
++#define isl_band_free (*cloog_pointers__.p_isl_band_free)
++#define isl_band_get_children (*cloog_pointers__.p_isl_band_get_children)
++#define isl_band_get_partial_schedule (*cloog_pointers__.p_isl_band_get_partial_schedule)
++#define isl_band_has_children (*cloog_pointers__.p_isl_band_has_children)
++#define isl_band_list_free (*cloog_pointers__.p_isl_band_list_free)
++#define isl_band_list_get_band (*cloog_pointers__.p_isl_band_list_get_band)
++#define isl_band_list_get_ctx (*cloog_pointers__.p_isl_band_list_get_ctx)
++#define isl_band_list_n_band (*cloog_pointers__.p_isl_band_list_n_band)
++#define isl_band_member_is_zero_distance (*cloog_pointers__.p_isl_band_member_is_zero_distance)
++#define isl_band_n_member (*cloog_pointers__.p_isl_band_n_member)
++#define isl_basic_map_add_constraint (*cloog_pointers__.p_isl_basic_map_add_constraint)
++#define isl_basic_map_project_out (*cloog_pointers__.p_isl_basic_map_project_out)
++#define isl_basic_map_universe (*cloog_pointers__.p_isl_basic_map_universe)
++#define isl_constraint_set_coefficient (*cloog_pointers__.p_isl_constraint_set_coefficient)
++#define isl_constraint_set_coefficient_si (*cloog_pointers__.p_isl_constraint_set_coefficient_si)
++#define isl_constraint_set_constant (*cloog_pointers__.p_isl_constraint_set_constant)
++#define isl_constraint_set_constant_si (*cloog_pointers__.p_isl_constraint_set_constant_si)
++#define isl_ctx_alloc (*cloog_pointers__.p_isl_ctx_alloc)
++#define isl_ctx_free (*cloog_pointers__.p_isl_ctx_free)
++#define isl_equality_alloc (*cloog_pointers__.p_isl_equality_alloc)
++#define isl_id_alloc (*cloog_pointers__.p_isl_id_alloc)
++#define isl_id_copy (*cloog_pointers__.p_isl_id_copy)
++#define isl_id_free (*cloog_pointers__.p_isl_id_free)
++#define isl_inequality_alloc (*cloog_pointers__.p_isl_inequality_alloc)
++#define isl_local_space_copy (*cloog_pointers__.p_isl_local_space_copy)
++#define isl_local_space_free (*cloog_pointers__.p_isl_local_space_free)
++#define isl_local_space_from_space (*cloog_pointers__.p_isl_local_space_from_space)
++#define isl_local_space_range (*cloog_pointers__.p_isl_local_space_range)
++#define isl_map_add_constraint (*cloog_pointers__.p_isl_map_add_constraint)
++#define isl_map_add_dims (*cloog_pointers__.p_isl_map_add_dims)
++#define isl_map_align_params (*cloog_pointers__.p_isl_map_align_params)
++#define isl_map_apply_range (*cloog_pointers__.p_isl_map_apply_range)
++#define isl_map_copy (*cloog_pointers__.p_isl_map_copy)
++#define isl_map_dim (*cloog_pointers__.p_isl_map_dim)
++#define isl_map_dump (*cloog_pointers__.p_isl_map_dump)
++#define isl_map_equate (*cloog_pointers__.p_isl_map_equate)
++#define isl_map_fix_si (*cloog_pointers__.p_isl_map_fix_si)
++#define isl_map_flat_product (*cloog_pointers__.p_isl_map_flat_product)
++#define isl_map_flat_range_product (*cloog_pointers__.p_isl_map_flat_range_product)
++#define isl_map_free (*cloog_pointers__.p_isl_map_free)
++#define isl_map_from_basic_map (*cloog_pointers__.p_isl_map_from_basic_map)
++#define isl_map_from_pw_aff (*cloog_pointers__.p_isl_map_from_pw_aff)
++#define isl_map_from_union_map (*cloog_pointers__.p_isl_map_from_union_map)
++#define isl_map_get_ctx (*cloog_pointers__.p_isl_map_get_ctx)
++#define isl_map_get_space (*cloog_pointers__.p_isl_map_get_space)
++#define isl_map_get_tuple_id (*cloog_pointers__.p_isl_map_get_tuple_id)
++#define isl_map_insert_dims (*cloog_pointers__.p_isl_map_insert_dims)
++#define isl_map_intersect (*cloog_pointers__.p_isl_map_intersect)
++#define isl_map_intersect_domain (*cloog_pointers__.p_isl_map_intersect_domain)
++#define isl_map_intersect_range (*cloog_pointers__.p_isl_map_intersect_range)
++#define isl_map_is_empty (*cloog_pointers__.p_isl_map_is_empty)
++#define isl_map_lex_ge (*cloog_pointers__.p_isl_map_lex_ge)
++#define isl_map_lex_le (*cloog_pointers__.p_isl_map_lex_le)
++#define isl_map_n_out (*cloog_pointers__.p_isl_map_n_out)
++#define isl_map_range (*cloog_pointers__.p_isl_map_range)
++#define isl_map_set_tuple_id (*cloog_pointers__.p_isl_map_set_tuple_id)
++#define isl_map_universe (*cloog_pointers__.p_isl_map_universe)
++#define isl_options_set_on_error (*cloog_pointers__.p_isl_options_set_on_error)
++#define isl_options_set_schedule_fuse (*cloog_pointers__.p_isl_options_set_schedule_fuse)
++#define isl_options_set_schedule_max_constant_term (*cloog_pointers__.p_isl_options_set_schedule_max_constant_term)
++#define isl_options_set_schedule_maximize_band_depth (*cloog_pointers__.p_isl_options_set_schedule_maximize_band_depth)
++#define isl_printer_free (*cloog_pointers__.p_isl_printer_free)
++#define isl_printer_print_aff (*cloog_pointers__.p_isl_printer_print_aff)
++#define isl_printer_print_constraint (*cloog_pointers__.p_isl_printer_print_constraint)
++#define isl_printer_print_map (*cloog_pointers__.p_isl_printer_print_map)
++#define isl_printer_print_set (*cloog_pointers__.p_isl_printer_print_set)
++#define isl_printer_to_file (*cloog_pointers__.p_isl_printer_to_file)
++#define isl_pw_aff_add (*cloog_pointers__.p_isl_pw_aff_add)
++#define isl_pw_aff_alloc (*cloog_pointers__.p_isl_pw_aff_alloc)
++#define isl_pw_aff_copy (*cloog_pointers__.p_isl_pw_aff_copy)
++#define isl_pw_aff_eq_set (*cloog_pointers__.p_isl_pw_aff_eq_set)
++#define isl_pw_aff_free (*cloog_pointers__.p_isl_pw_aff_free)
++#define isl_pw_aff_from_aff (*cloog_pointers__.p_isl_pw_aff_from_aff)
++#define isl_pw_aff_ge_set (*cloog_pointers__.p_isl_pw_aff_ge_set)
++#define isl_pw_aff_gt_set (*cloog_pointers__.p_isl_pw_aff_gt_set)
++#define isl_pw_aff_is_cst (*cloog_pointers__.p_isl_pw_aff_is_cst)
++#define isl_pw_aff_le_set (*cloog_pointers__.p_isl_pw_aff_le_set)
++#define isl_pw_aff_lt_set (*cloog_pointers__.p_isl_pw_aff_lt_set)
++#define isl_pw_aff_mod (*cloog_pointers__.p_isl_pw_aff_mod)
++#define isl_pw_aff_mul (*cloog_pointers__.p_isl_pw_aff_mul)
++#define isl_pw_aff_ne_set (*cloog_pointers__.p_isl_pw_aff_ne_set)
++#define isl_pw_aff_nonneg_set (*cloog_pointers__.p_isl_pw_aff_nonneg_set)
++#define isl_pw_aff_set_tuple_id (*cloog_pointers__.p_isl_pw_aff_set_tuple_id)
++#define isl_pw_aff_sub (*cloog_pointers__.p_isl_pw_aff_sub)
++#define isl_pw_aff_zero_set (*cloog_pointers__.p_isl_pw_aff_zero_set)
++#define isl_schedule_free (*cloog_pointers__.p_isl_schedule_free)
++#define isl_schedule_get_band_forest (*cloog_pointers__.p_isl_schedule_get_band_forest)
++#define isl_set_add_constraint (*cloog_pointers__.p_isl_set_add_constraint)
++#define isl_set_add_dims (*cloog_pointers__.p_isl_set_add_dims)
++#define isl_set_apply (*cloog_pointers__.p_isl_set_apply)
++#define isl_set_coalesce (*cloog_pointers__.p_isl_set_coalesce)
++#define isl_set_copy (*cloog_pointers__.p_isl_set_copy)
++#define isl_set_dim (*cloog_pointers__.p_isl_set_dim)
++#define isl_set_fix_si (*cloog_pointers__.p_isl_set_fix_si)
++#define isl_set_free (*cloog_pointers__.p_isl_set_free)
++#define isl_set_from_cloog_domain (*cloog_pointers__.p_isl_set_from_cloog_domain)
++#define isl_set_get_space (*cloog_pointers__.p_isl_set_get_space)
++#define isl_set_get_tuple_id (*cloog_pointers__.p_isl_set_get_tuple_id)
++#define isl_set_intersect (*cloog_pointers__.p_isl_set_intersect)
++#define isl_set_is_empty (*cloog_pointers__.p_isl_set_is_empty)
++#define isl_set_max (*cloog_pointers__.p_isl_set_max)
++#define isl_set_min (*cloog_pointers__.p_isl_set_min)
++#define isl_set_n_dim (*cloog_pointers__.p_isl_set_n_dim)
++#define isl_set_nat_universe (*cloog_pointers__.p_isl_set_nat_universe)
++#define isl_set_project_out (*cloog_pointers__.p_isl_set_project_out)
++#define isl_set_set_tuple_id (*cloog_pointers__.p_isl_set_set_tuple_id)
++#define isl_set_universe (*cloog_pointers__.p_isl_set_universe)
++#define isl_space_add_dims (*cloog_pointers__.p_isl_space_add_dims)
++#define isl_space_alloc (*cloog_pointers__.p_isl_space_alloc)
++#define isl_space_copy (*cloog_pointers__.p_isl_space_copy)
++#define isl_space_dim (*cloog_pointers__.p_isl_space_dim)
++#define isl_space_domain (*cloog_pointers__.p_isl_space_domain)
++#define isl_space_find_dim_by_id (*cloog_pointers__.p_isl_space_find_dim_by_id)
++#define isl_space_free (*cloog_pointers__.p_isl_space_free)
++#define isl_space_from_domain (*cloog_pointers__.p_isl_space_from_domain)
++#define isl_space_get_tuple_id (*cloog_pointers__.p_isl_space_get_tuple_id)
++#define isl_space_params_alloc (*cloog_pointers__.p_isl_space_params_alloc)
++#define isl_space_range (*cloog_pointers__.p_isl_space_range)
++#define isl_space_set_alloc (*cloog_pointers__.p_isl_space_set_alloc)
++#define isl_space_set_dim_id (*cloog_pointers__.p_isl_space_set_dim_id)
++#define isl_space_set_tuple_id (*cloog_pointers__.p_isl_space_set_tuple_id)
++#define isl_union_map_add_map (*cloog_pointers__.p_isl_union_map_add_map)
++#define isl_union_map_align_params (*cloog_pointers__.p_isl_union_map_align_params)
++#define isl_union_map_apply_domain (*cloog_pointers__.p_isl_union_map_apply_domain)
++#define isl_union_map_apply_range (*cloog_pointers__.p_isl_union_map_apply_range)
++#define isl_union_map_compute_flow (*cloog_pointers__.p_isl_union_map_compute_flow)
++#define isl_union_map_copy (*cloog_pointers__.p_isl_union_map_copy)
++#define isl_union_map_empty (*cloog_pointers__.p_isl_union_map_empty)
++#define isl_union_map_flat_range_product (*cloog_pointers__.p_isl_union_map_flat_range_product)
++#define isl_union_map_foreach_map (*cloog_pointers__.p_isl_union_map_foreach_map)
++#define isl_union_map_free (*cloog_pointers__.p_isl_union_map_free)
++#define isl_union_map_from_map (*cloog_pointers__.p_isl_union_map_from_map)
++#define isl_union_map_get_ctx (*cloog_pointers__.p_isl_union_map_get_ctx)
++#define isl_union_map_get_space (*cloog_pointers__.p_isl_union_map_get_space)
++#define isl_union_map_gist_domain (*cloog_pointers__.p_isl_union_map_gist_domain)
++#define isl_union_map_gist_range (*cloog_pointers__.p_isl_union_map_gist_range)
++#define isl_union_map_intersect_domain (*cloog_pointers__.p_isl_union_map_intersect_domain)
++#define isl_union_map_is_empty (*cloog_pointers__.p_isl_union_map_is_empty)
++#define isl_union_map_subtract (*cloog_pointers__.p_isl_union_map_subtract)
++#define isl_union_map_union (*cloog_pointers__.p_isl_union_map_union)
++#define isl_union_set_add_set (*cloog_pointers__.p_isl_union_set_add_set)
++#define isl_union_set_compute_schedule (*cloog_pointers__.p_isl_union_set_compute_schedule)
++#define isl_union_set_copy (*cloog_pointers__.p_isl_union_set_copy)
++#define isl_union_set_empty (*cloog_pointers__.p_isl_union_set_empty)
++#define isl_union_set_from_set (*cloog_pointers__.p_isl_union_set_from_set)
++#define stmt_ass (*cloog_pointers__.p_stmt_ass)
++#define stmt_block (*cloog_pointers__.p_stmt_block)
++#define stmt_for (*cloog_pointers__.p_stmt_for)
++#define stmt_guard (*cloog_pointers__.p_stmt_guard)
++#define stmt_root (*cloog_pointers__.p_stmt_root)
++#define stmt_user (*cloog_pointers__.p_stmt_user)
++
+ typedef struct poly_dr *poly_dr_p;
+ typedef struct poly_bb *poly_bb_p;
+--- gcc/graphite.c.jj  2012-12-13 11:31:00.000000000 +0100
++++ gcc/graphite.c     2012-12-14 13:40:44.155136961 +0100
+@@ -78,6 +78,34 @@ along with GCC; see the file COPYING3.
+ CloogState *cloog_state;
++__typeof (cloog_pointers__) cloog_pointers__;
++
++static bool
++init_cloog_pointers (void)
++{
++  void *h;
++
++  if (cloog_pointers__.inited)
++    return cloog_pointers__.h != NULL;
++  h = dlopen ("libcloog-isl.so.4", RTLD_LAZY);
++  cloog_pointers__.h = h;
++  if (h == NULL)
++    return false;
++#define DYNSYM(x) \
++  do \
++    { \
++      union { __typeof (cloog_pointers__.p_##x) p; void *q; } u; \
++      u.q = dlsym (h, #x); \
++      if (u.q == NULL) \
++      return false; \
++      cloog_pointers__.p_##x = u.p; \
++    } \
++  while (0)
++  DYNSYMS
++#undef DYNSYM
++  return true;
++}
++
+ /* Print global statistics to FILE.  */
+ static void
+@@ -277,6 +305,15 @@ graphite_transform_loops (void)
+   if (parallelized_function_p (cfun->decl))
+     return;
++  if (number_of_loops (cfun) <= 1)
++    return;
++
++  if (!init_cloog_pointers ())
++    {
++      sorry ("Graphite loop optimizations cannot be used");
++      return;
++    }
++
+   ctx = isl_ctx_alloc ();
+   isl_options_set_on_error (ctx, ISL_ON_ERROR_ABORT);
+   if (!graphite_initialize (ctx))
+--- gcc/graphite-clast-to-gimple.c.jj  2012-12-13 11:31:27.000000000 +0100
++++ gcc/graphite-clast-to-gimple.c     2012-12-14 13:27:47.196519858 +0100
+@@ -910,7 +910,7 @@ compute_bounds_for_loop (struct clast_fo
+    from STMT_FOR.  */
+ static tree
+-type_for_clast_for (struct clast_for *stmt_for, ivs_params_p ip)
++type_for_clast_for (struct clast_for *stmt_fora, ivs_params_p ip)
+ {
+   mpz_t bound_one, bound_two;
+   tree lb_type, ub_type;
+@@ -918,8 +918,8 @@ type_for_clast_for (struct clast_for *st
+   mpz_init (bound_one);
+   mpz_init (bound_two);
+-  lb_type = type_for_clast_expr (stmt_for->LB, ip, bound_one, bound_two);
+-  ub_type = type_for_clast_expr (stmt_for->UB, ip, bound_one, bound_two);
++  lb_type = type_for_clast_expr (stmt_fora->LB, ip, bound_one, bound_two);
++  ub_type = type_for_clast_expr (stmt_fora->UB, ip, bound_one, bound_two);
+   mpz_clear (bound_one);
+   mpz_clear (bound_two);
diff --git a/gcc49-cloog-dl2.patch b/gcc49-cloog-dl2.patch
new file mode 100644 (file)
index 0000000..2f647a3
--- /dev/null
@@ -0,0 +1,74 @@
+2011-04-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * toplev.c (toplev_main_argv): New variable.
+       (toplev_main): Initialize it.
+       * graphite.c (init_cloog_pointers): Load libcloog-isl.so.4 from gcc's private
+       directory.
+
+--- gcc/toplev.c.jj    2008-12-09 23:59:10.000000000 +0100
++++ gcc/toplev.c       2009-01-27 14:33:52.000000000 +0100
+@@ -107,6 +107,8 @@ static bool no_backend;
+ /* Length of line when printing switch values.  */
+ #define MAX_LINE 75
++const char **toplev_main_argv;
++
+ /* Decoded options, and number of such options.  */
+ struct cl_decoded_option *save_decoded_options;
+ unsigned int save_decoded_options_count;
+@@ -1909,6 +1911,8 @@ toplev_main (int argc, char **argv)
+   expandargv (&argc, &argv);
++  toplev_main_argv = CONST_CAST2 (const char **, char **, argv);
++
+   /* Initialization of GCC's environment, and diagnostics.  */
+   general_init (argv[0]);
+--- gcc/graphite.c.jj  2010-12-01 10:24:32.000000000 -0500
++++ gcc/graphite.c     2010-12-01 11:46:07.832118193 -0500
+@@ -72,11 +72,39 @@ __typeof (cloog_pointers__) cloog_pointe
+ static bool
+ init_cloog_pointers (void)
+ {
+-  void *h;
+-
+-  if (cloog_pointers__.inited)
+-    return cloog_pointers__.h != NULL;
+-  h = dlopen ("libcloog-isl.so.4", RTLD_LAZY);
++  void *h = NULL;
++  extern const char **toplev_main_argv;
++  char *buf, *p;
++  size_t len;
++
++  if (cloog_pointers__.inited)
++    return cloog_pointers__.h != NULL;
++  len = progname - toplev_main_argv[0];
++  buf = XALLOCAVAR (char, len + sizeof "libcloog-isl.so.4");
++  memcpy (buf, toplev_main_argv[0], len);
++  strcpy (buf + len, "libcloog-isl.so.4");
++  len += sizeof "libcloog-isl.so.4";
++  p = strstr (buf, "/libexec/");
++  if (p != NULL)
++    {
++      while (1)
++      {
++        char *q = strstr (p + 8, "/libexec/");
++        if (q == NULL)
++          break;
++        p = q;
++      }
++      memmove (p + 4, p + 8, len - (p + 8 - buf));
++      h = dlopen (buf, RTLD_LAZY);
++      if (h == NULL)
++      {
++        len = progname - toplev_main_argv[0];
++        memcpy (buf, toplev_main_argv[0], len);
++        strcpy (buf + len, "libcloog-isl.so.4");
++      }
++    }
++  if (h == NULL)
++    h = dlopen (buf, RTLD_LAZY);
+   cloog_pointers__.h = h;
+   if (h == NULL)
+     return false;
diff --git a/gcc49-color-auto.patch b/gcc49-color-auto.patch
new file mode 100644 (file)
index 0000000..a8cf938
--- /dev/null
@@ -0,0 +1,46 @@
+2013-09-20  Jakub Jelinek  <jakub@redhat.com>
+
+       * common.opt (-fdiagnostics-color=): Default to auto.
+       * toplev.c (process_options): Always default to
+       -fdiagnostics-color=auto if no -f{,no-}diagnostics-color*.
+       * doc/invoke.texi (-fdiagnostics-color*): Adjust documentation
+       of the default.
+
+--- gcc/common.opt.jj  2013-09-18 12:06:53.000000000 +0200
++++ gcc/common.opt     2013-09-20 10:00:00.935823900 +0200
+@@ -1037,7 +1037,7 @@ Common Alias(fdiagnostics-color=,always,
+ ;
+ fdiagnostics-color=
+-Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_NO)
++Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_AUTO)
+ -fdiagnostics-color=[never|always|auto]       Colorize diagnostics
+ ; Required for these enum values.
+--- gcc/toplev.c.jj    2013-09-09 11:32:39.000000000 +0200
++++ gcc/toplev.c       2013-09-20 10:10:08.198721005 +0200
+@@ -1229,10 +1229,8 @@ process_options (void)
+   maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
+-  /* Default to -fdiagnostics-color=auto if GCC_COLORS is in the environment,
+-     otherwise default to -fdiagnostics-color=never.  */
+-  if (!global_options_set.x_flag_diagnostics_show_color
+-      && getenv ("GCC_COLORS"))
++  /* Default to -fdiagnostics-color=auto.  */
++  if (!global_options_set.x_flag_diagnostics_show_color)
+     pp_show_color (global_dc->printer)
+       = colorize_init (DIAGNOSTICS_COLOR_AUTO);
+--- gcc/doc/invoke.texi.jj     2013-09-18 12:06:50.000000000 +0200
++++ gcc/doc/invoke.texi        2013-09-20 10:09:29.079904455 +0200
+@@ -3046,8 +3046,7 @@ a message which is too long to fit on a
+ @cindex highlight, color, colour
+ @vindex GCC_COLORS @r{environment variable}
+ Use color in diagnostics.  @var{WHEN} is @samp{never}, @samp{always},
+-or @samp{auto}.  The default is @samp{never} if @env{GCC_COLORS} environment
+-variable isn't present in the environment, and @samp{auto} otherwise.
++or @samp{auto}.  The default is @samp{auto}.
+ @samp{auto} means to use color only when the standard error is a terminal.
+ The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are
+ aliases for @option{-fdiagnostics-color=always} and
diff --git a/gcc49-hack.patch b/gcc49-hack.patch
new file mode 100644 (file)
index 0000000..1903e95
--- /dev/null
@@ -0,0 +1,102 @@
+--- libada/Makefile.in.jj      2009-01-14 12:07:35.000000000 +0100
++++ libada/Makefile.in 2009-01-15 14:25:33.000000000 +0100
+@@ -66,18 +66,40 @@ libsubdir := $(libdir)/gcc/$(target_nonc
+ ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
+ ADA_RTS_SUBDIR=./rts$(subst /,_,$(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=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \
+         "LN_S=$(LN_S)" \
+         "SHELL=$(SHELL)" \
+-        "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
+-        "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
+-        "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
++        "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
++        "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
++        "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
+         "PICFLAG_FOR_TARGET=$(PICFLAG)" \
+         "THREAD_KIND=$(THREAD_KIND)" \
+         "TRACE=$(TRACE)" \
+@@ -88,7 +110,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)"
++        "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
+ # Rules to build gnatlib.
+ .PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
+--- gcc/ada/sem_util.adb       (revision 161677)
++++ gcc/ada/sem_util.adb       (working copy)
+@@ -5487,7 +5487,7 @@ package body Sem_Util is
+             Exp           : Node_Id;
+             Assn          : Node_Id;
+             Choice        : Node_Id;
+-            Comp_Type     : Entity_Id;
++            Comp_Type     : Entity_Id := Empty;
+             Is_Array_Aggr : Boolean;
+          begin
+--- config-ml.in.jj    2010-06-30 09:50:44.000000000 +0200
++++ config-ml.in       2010-07-02 21:24:17.994211151 +0200
+@@ -516,6 +516,8 @@ multi-do:
+                               ADAFLAGS="$(ADAFLAGS) $${flags}" \
+                               prefix="$(prefix)" \
+                               exec_prefix="$(exec_prefix)" \
++                              mandir="$(mandir)" \
++                              infodir="$(infodir)" \
+                               GCJFLAGS="$(GCJFLAGS) $${flags}" \
+                               GOCFLAGS="$(GOCFLAGS) $${flags}" \
+                               CXXFLAGS="$(CXXFLAGS) $${flags}" \
+--- libjava/Makefile.am.jj     2010-07-09 11:17:33.729604090 +0200
++++ libjava/Makefile.am        2010-07-09 13:16:41.894375641 +0200
+@@ -710,7 +710,8 @@ if USE_LIBGCJ_BC
+ ## later.
+       @echo Installing dummy lib libgcj_bc.so.1.0.0; \
+       rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
+-      mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
++      $(INSTALL) $(INSTALL_STRIP_FLAG) $(here)/.libs/libgcj_bc.so $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
++      rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0; \
+       $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
+       -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \
+       rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
+--- libjava/Makefile.in.jj     2010-07-09 11:17:34.000000000 +0200
++++ libjava/Makefile.in        2010-07-09 13:18:07.542572270 +0200
+@@ -12665,7 +12665,8 @@ install-exec-hook: install-binPROGRAMS i
+       install-libexecsubPROGRAMS
+ @USE_LIBGCJ_BC_TRUE@  @echo Installing dummy lib libgcj_bc.so.1.0.0; \
+ @USE_LIBGCJ_BC_TRUE@  rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
+-@USE_LIBGCJ_BC_TRUE@  mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
++@USE_LIBGCJ_BC_TRUE@  $(INSTALL) $(INSTALL_STRIP_FLAG) $(here)/.libs/libgcj_bc.so $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
++@USE_LIBGCJ_BC_TRUE@  rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0; \
+ @USE_LIBGCJ_BC_TRUE@  $(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
+ @USE_LIBGCJ_BC_TRUE@  -o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \
+ @USE_LIBGCJ_BC_TRUE@  rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
diff --git a/gcc49-i386-libgomp.patch b/gcc49-i386-libgomp.patch
new file mode 100644 (file)
index 0000000..520561e
--- /dev/null
@@ -0,0 +1,11 @@
+--- libgomp/configure.tgt.jj   2008-01-10 20:53:48.000000000 +0100
++++ libgomp/configure.tgt      2008-03-27 12:44:51.000000000 +0100
+@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then
+           ;;
+         *)
+           if test -z "$with_arch"; then
+-            XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
++            XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
+           fi
+       esac
+       ;;
diff --git a/gcc49-java-nomulti.patch b/gcc49-java-nomulti.patch
new file mode 100644 (file)
index 0000000..17334aa
--- /dev/null
@@ -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/gcc49-libgo-p224.patch b/gcc49-libgo-p224.patch
new file mode 100644 (file)
index 0000000..89e06e1
--- /dev/null
@@ -0,0 +1,1093 @@
+--- libgo/Makefile.am.jj       2014-01-08 13:53:06.000000000 +0100
++++ libgo/Makefile.am  2014-03-05 15:20:09.938466093 +0100
+@@ -1133,7 +1133,6 @@ go_crypto_ecdsa_files = \
+       go/crypto/ecdsa/ecdsa.go
+ go_crypto_elliptic_files = \
+       go/crypto/elliptic/elliptic.go \
+-      go/crypto/elliptic/p224.go \
+       go/crypto/elliptic/p256.go
+ go_crypto_hmac_files = \
+       go/crypto/hmac/hmac.go
+--- libgo/Makefile.in.jj       2014-01-08 13:53:06.000000000 +0100
++++ libgo/Makefile.in  2014-03-05 15:20:20.372465471 +0100
+@@ -1291,7 +1291,6 @@ go_crypto_ecdsa_files = \
+ go_crypto_elliptic_files = \
+       go/crypto/elliptic/elliptic.go \
+-      go/crypto/elliptic/p224.go \
+       go/crypto/elliptic/p256.go
+ go_crypto_hmac_files = \
+--- libgo/go/crypto/elliptic/elliptic.go.jj    2013-11-07 11:59:09.000000000 +0100
++++ libgo/go/crypto/elliptic/elliptic.go       2014-03-05 15:21:04.186462859 +0100
+@@ -326,7 +326,6 @@ var p384 *CurveParams
+ var p521 *CurveParams
+ func initAll() {
+-      initP224()
+       initP256()
+       initP384()
+       initP521()
+--- libgo/go/crypto/elliptic/elliptic_test.go.jj       2013-11-07 11:59:09.000000000 +0100
++++ libgo/go/crypto/elliptic/elliptic_test.go  2014-03-05 15:46:03.739373453 +0100
+@@ -5,26 +5,16 @@
+ package elliptic
+ import (
+-      "crypto/rand"
+-      "encoding/hex"
+-      "fmt"
+       "math/big"
+       "testing"
+ )
+-func TestOnCurve(t *testing.T) {
+-      p224 := P224()
+-      if !p224.IsOnCurve(p224.Params().Gx, p224.Params().Gy) {
+-              t.Errorf("FAIL")
+-      }
+-}
+-
+ type baseMultTest struct {
+       k    string
+       x, y string
+ }
+-var p224BaseMultTests = []baseMultTest{
++var p256BaseMultTests = []baseMultTest{
+       {
+               "1",
+               "b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21",
+@@ -287,47 +277,12 @@ var p224BaseMultTests = []baseMultTest{
+       },
+ }
+-func TestBaseMult(t *testing.T) {
+-      p224 := P224()
+-      for i, e := range p224BaseMultTests {
+-              k, ok := new(big.Int).SetString(e.k, 10)
+-              if !ok {
+-                      t.Errorf("%d: bad value for k: %s", i, e.k)
+-              }
+-              x, y := p224.ScalarBaseMult(k.Bytes())
+-              if fmt.Sprintf("%x", x) != e.x || fmt.Sprintf("%x", y) != e.y {
+-                      t.Errorf("%d: bad output for k=%s: got (%x, %x), want (%s, %s)", i, e.k, x, y, e.x, e.y)
+-              }
+-              if testing.Short() && i > 5 {
+-                      break
+-              }
+-      }
+-}
+-
+-func TestGenericBaseMult(t *testing.T) {
+-      // We use the P224 CurveParams directly in order to test the generic implementation.
+-      p224 := P224().Params()
+-      for i, e := range p224BaseMultTests {
+-              k, ok := new(big.Int).SetString(e.k, 10)
+-              if !ok {
+-                      t.Errorf("%d: bad value for k: %s", i, e.k)
+-              }
+-              x, y := p224.ScalarBaseMult(k.Bytes())
+-              if fmt.Sprintf("%x", x) != e.x || fmt.Sprintf("%x", y) != e.y {
+-                      t.Errorf("%d: bad output for k=%s: got (%x, %x), want (%s, %s)", i, e.k, x, y, e.x, e.y)
+-              }
+-              if testing.Short() && i > 5 {
+-                      break
+-              }
+-      }
+-}
+-
+ func TestP256BaseMult(t *testing.T) {
+       p256 := P256()
+       p256Generic := p256.Params()
+-      scalars := make([]*big.Int, 0, len(p224BaseMultTests)+1)
+-      for _, e := range p224BaseMultTests {
++      scalars := make([]*big.Int, 0, len(p256BaseMultTests)+1)
++      for _, e := range p256BaseMultTests {
+               k, _ := new(big.Int).SetString(e.k, 10)
+               scalars = append(scalars, k)
+       }
+@@ -352,7 +307,7 @@ func TestP256Mult(t *testing.T) {
+       p256 := P256()
+       p256Generic := p256.Params()
+-      for i, e := range p224BaseMultTests {
++      for i, e := range p256BaseMultTests {
+               x, _ := new(big.Int).SetString(e.x, 16)
+               y, _ := new(big.Int).SetString(e.y, 16)
+               k, _ := new(big.Int).SetString(e.k, 10)
+@@ -373,7 +328,6 @@ func TestInfinity(t *testing.T) {
+               name  string
+               curve Curve
+       }{
+-              {"p224", P224()},
+               {"p256", P256()},
+       }
+@@ -406,53 +360,13 @@ func TestInfinity(t *testing.T) {
+       }
+ }
+-func BenchmarkBaseMult(b *testing.B) {
+-      b.ResetTimer()
+-      p224 := P224()
+-      e := p224BaseMultTests[25]
+-      k, _ := new(big.Int).SetString(e.k, 10)
+-      b.StartTimer()
+-      for i := 0; i < b.N; i++ {
+-              p224.ScalarBaseMult(k.Bytes())
+-      }
+-}
+-
+ func BenchmarkBaseMultP256(b *testing.B) {
+       b.ResetTimer()
+       p256 := P256()
+-      e := p224BaseMultTests[25]
++      e := p256BaseMultTests[25]
+       k, _ := new(big.Int).SetString(e.k, 10)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               p256.ScalarBaseMult(k.Bytes())
+       }
+ }
+-
+-func TestMarshal(t *testing.T) {
+-      p224 := P224()
+-      _, x, y, err := GenerateKey(p224, rand.Reader)
+-      if err != nil {
+-              t.Error(err)
+-              return
+-      }
+-      serialized := Marshal(p224, x, y)
+-      xx, yy := Unmarshal(p224, serialized)
+-      if xx == nil {
+-              t.Error("failed to unmarshal")
+-              return
+-      }
+-      if xx.Cmp(x) != 0 || yy.Cmp(y) != 0 {
+-              t.Error("unmarshal returned different values")
+-              return
+-      }
+-}
+-
+-func TestP224Overflow(t *testing.T) {
+-      // This tests for a specific bug in the P224 implementation.
+-      p224 := P224()
+-      pointData, _ := hex.DecodeString("049B535B45FB0A2072398A6831834624C7E32CCFD5A4B933BCEAF77F1DD945E08BBE5178F5EDF5E733388F196D2A631D2E075BB16CBFEEA15B")
+-      x, y := Unmarshal(p224, pointData)
+-      if !p224.IsOnCurve(x, y) {
+-              t.Error("P224 failed to validate a correct point")
+-      }
+-}
+--- libgo/go/crypto/ecdsa/ecdsa_test.go.jj     2012-11-15 18:26:56.000000000 +0100
++++ libgo/go/crypto/ecdsa/ecdsa_test.go        2014-03-05 15:26:38.461442929 +0100
+@@ -33,7 +33,6 @@ func testKeyGeneration(t *testing.T, c e
+ }
+ func TestKeyGeneration(t *testing.T) {
+-      testKeyGeneration(t, elliptic.P224(), "p224")
+       if testing.Short() {
+               return
+       }
+@@ -63,7 +62,6 @@ func testSignAndVerify(t *testing.T, c e
+ }
+ func TestSignAndVerify(t *testing.T) {
+-      testSignAndVerify(t, elliptic.P224(), "p224")
+       if testing.Short() {
+               return
+       }
+@@ -129,8 +127,6 @@ func TestVectors(t *testing.T) {
+                       parts := strings.SplitN(line, ",", 2)
+                       switch parts[0] {
+-                      case "P-224":
+-                              pub.Curve = elliptic.P224()
+                       case "P-256":
+                               pub.Curve = elliptic.P256()
+                       case "P-384":
+--- libgo/go/crypto/x509/x509.go.jj    2013-11-07 11:59:09.000000000 +0100
++++ libgo/go/crypto/x509/x509.go       2014-03-05 15:27:37.022439437 +0100
+@@ -305,9 +305,6 @@ func getPublicKeyAlgorithmFromOID(oid as
+ // RFC 5480, 2.1.1.1. Named Curve
+ //
+-// secp224r1 OBJECT IDENTIFIER ::= {
+-//   iso(1) identified-organization(3) certicom(132) curve(0) 33 }
+-//
+ // secp256r1 OBJECT IDENTIFIER ::= {
+ //   iso(1) member-body(2) us(840) ansi-X9-62(10045) curves(3)
+ //   prime(1) 7 }
+@@ -320,7 +317,6 @@ func getPublicKeyAlgorithmFromOID(oid as
+ //
+ // NB: secp256r1 is equivalent to prime256v1
+ var (
+-      oidNamedCurveP224 = asn1.ObjectIdentifier{1, 3, 132, 0, 33}
+       oidNamedCurveP256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 3, 1, 7}
+       oidNamedCurveP384 = asn1.ObjectIdentifier{1, 3, 132, 0, 34}
+       oidNamedCurveP521 = asn1.ObjectIdentifier{1, 3, 132, 0, 35}
+@@ -328,8 +324,6 @@ var (
+ func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve {
+       switch {
+-      case oid.Equal(oidNamedCurveP224):
+-              return elliptic.P224()
+       case oid.Equal(oidNamedCurveP256):
+               return elliptic.P256()
+       case oid.Equal(oidNamedCurveP384):
+@@ -342,8 +336,6 @@ func namedCurveFromOID(oid asn1.ObjectId
+ func oidFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier, bool) {
+       switch curve {
+-      case elliptic.P224():
+-              return oidNamedCurveP224, true
+       case elliptic.P256():
+               return oidNamedCurveP256, true
+       case elliptic.P384():
+@@ -1373,7 +1365,7 @@ func CreateCertificate(rand io.Reader, t
+               hashFunc = crypto.SHA1
+       case *ecdsa.PrivateKey:
+               switch priv.Curve {
+-              case elliptic.P224(), elliptic.P256():
++              case elliptic.P256():
+                       hashFunc = crypto.SHA256
+                       signatureAlgorithm.Algorithm = oidSignatureECDSAWithSHA256
+               case elliptic.P384():
+--- libgo/go/crypto/elliptic/p224.go.jj        2012-11-15 18:26:57.000000000 +0100
++++ libgo/go/crypto/elliptic/p224.go   2014-03-05 15:30:01.189430842 +0100
+@@ -1,765 +0,0 @@
+-// Copyright 2012 The Go Authors.  All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package elliptic
+-
+-// This is a constant-time, 32-bit implementation of P224. See FIPS 186-3,
+-// section D.2.2.
+-//
+-// See http://www.imperialviolet.org/2010/12/04/ecc.html ([1]) for background.
+-
+-import (
+-      "math/big"
+-)
+-
+-var p224 p224Curve
+-
+-type p224Curve struct {
+-      *CurveParams
+-      gx, gy, b p224FieldElement
+-}
+-
+-func initP224() {
+-      // See FIPS 186-3, section D.2.2
+-      p224.CurveParams = new(CurveParams)
+-      p224.P, _ = new(big.Int).SetString("26959946667150639794667015087019630673557916260026308143510066298881", 10)
+-      p224.N, _ = new(big.Int).SetString("26959946667150639794667015087019625940457807714424391721682722368061", 10)
+-      p224.B, _ = new(big.Int).SetString("b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4", 16)
+-      p224.Gx, _ = new(big.Int).SetString("b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", 16)
+-      p224.Gy, _ = new(big.Int).SetString("bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", 16)
+-      p224.BitSize = 224
+-
+-      p224FromBig(&p224.gx, p224.Gx)
+-      p224FromBig(&p224.gy, p224.Gy)
+-      p224FromBig(&p224.b, p224.B)
+-}
+-
+-// P224 returns a Curve which implements P-224 (see FIPS 186-3, section D.2.2)
+-func P224() Curve {
+-      initonce.Do(initAll)
+-      return p224
+-}
+-
+-func (curve p224Curve) Params() *CurveParams {
+-      return curve.CurveParams
+-}
+-
+-func (curve p224Curve) IsOnCurve(bigX, bigY *big.Int) bool {
+-      var x, y p224FieldElement
+-      p224FromBig(&x, bigX)
+-      p224FromBig(&y, bigY)
+-
+-      // y² = x³ - 3x + b
+-      var tmp p224LargeFieldElement
+-      var x3 p224FieldElement
+-      p224Square(&x3, &x, &tmp)
+-      p224Mul(&x3, &x3, &x, &tmp)
+-
+-      for i := 0; i < 8; i++ {
+-              x[i] *= 3
+-      }
+-      p224Sub(&x3, &x3, &x)
+-      p224Reduce(&x3)
+-      p224Add(&x3, &x3, &curve.b)
+-      p224Contract(&x3, &x3)
+-
+-      p224Square(&y, &y, &tmp)
+-      p224Contract(&y, &y)
+-
+-      for i := 0; i < 8; i++ {
+-              if y[i] != x3[i] {
+-                      return false
+-              }
+-      }
+-      return true
+-}
+-
+-func (p224Curve) Add(bigX1, bigY1, bigX2, bigY2 *big.Int) (x, y *big.Int) {
+-      var x1, y1, z1, x2, y2, z2, x3, y3, z3 p224FieldElement
+-
+-      p224FromBig(&x1, bigX1)
+-      p224FromBig(&y1, bigY1)
+-      if bigX1.Sign() != 0 || bigY1.Sign() != 0 {
+-              z1[0] = 1
+-      }
+-      p224FromBig(&x2, bigX2)
+-      p224FromBig(&y2, bigY2)
+-      if bigX2.Sign() != 0 || bigY2.Sign() != 0 {
+-              z2[0] = 1
+-      }
+-
+-      p224AddJacobian(&x3, &y3, &z3, &x1, &y1, &z1, &x2, &y2, &z2)
+-      return p224ToAffine(&x3, &y3, &z3)
+-}
+-
+-func (p224Curve) Double(bigX1, bigY1 *big.Int) (x, y *big.Int) {
+-      var x1, y1, z1, x2, y2, z2 p224FieldElement
+-
+-      p224FromBig(&x1, bigX1)
+-      p224FromBig(&y1, bigY1)
+-      z1[0] = 1
+-
+-      p224DoubleJacobian(&x2, &y2, &z2, &x1, &y1, &z1)
+-      return p224ToAffine(&x2, &y2, &z2)
+-}
+-
+-func (p224Curve) ScalarMult(bigX1, bigY1 *big.Int, scalar []byte) (x, y *big.Int) {
+-      var x1, y1, z1, x2, y2, z2 p224FieldElement
+-
+-      p224FromBig(&x1, bigX1)
+-      p224FromBig(&y1, bigY1)
+-      z1[0] = 1
+-
+-      p224ScalarMult(&x2, &y2, &z2, &x1, &y1, &z1, scalar)
+-      return p224ToAffine(&x2, &y2, &z2)
+-}
+-
+-func (curve p224Curve) ScalarBaseMult(scalar []byte) (x, y *big.Int) {
+-      var z1, x2, y2, z2 p224FieldElement
+-
+-      z1[0] = 1
+-      p224ScalarMult(&x2, &y2, &z2, &curve.gx, &curve.gy, &z1, scalar)
+-      return p224ToAffine(&x2, &y2, &z2)
+-}
+-
+-// Field element functions.
+-//
+-// The field that we're dealing with is ℤ/pℤ where p = 2**224 - 2**96 + 1.
+-//
+-// Field elements are represented by a FieldElement, which is a typedef to an
+-// array of 8 uint32's. The value of a FieldElement, a, is:
+-//   a[0] + 2**28·a[1] + 2**56·a[1] + ... + 2**196·a[7]
+-//
+-// Using 28-bit limbs means that there's only 4 bits of headroom, which is less
+-// than we would really like. But it has the useful feature that we hit 2**224
+-// exactly, making the reflections during a reduce much nicer.
+-type p224FieldElement [8]uint32
+-
+-// p224P is the order of the field, represented as a p224FieldElement.
+-var p224P = [8]uint32{1, 0, 0, 0xffff000, 0xfffffff, 0xfffffff, 0xfffffff, 0xfffffff}
+-
+-// p224IsZero returns 1 if a == 0 mod p and 0 otherwise.
+-//
+-// a[i] < 2**29
+-func p224IsZero(a *p224FieldElement) uint32 {
+-      // Since a p224FieldElement contains 224 bits there are two possible
+-      // representations of 0: 0 and p.
+-      var minimal p224FieldElement
+-      p224Contract(&minimal, a)
+-
+-      var isZero, isP uint32
+-      for i, v := range minimal {
+-              isZero |= v
+-              isP |= v - p224P[i]
+-      }
+-
+-      // If either isZero or isP is 0, then we should return 1.
+-      isZero |= isZero >> 16
+-      isZero |= isZero >> 8
+-      isZero |= isZero >> 4
+-      isZero |= isZero >> 2
+-      isZero |= isZero >> 1
+-
+-      isP |= isP >> 16
+-      isP |= isP >> 8
+-      isP |= isP >> 4
+-      isP |= isP >> 2
+-      isP |= isP >> 1
+-
+-      // For isZero and isP, the LSB is 0 iff all the bits are zero.
+-      result := isZero & isP
+-      result = (^result) & 1
+-
+-      return result
+-}
+-
+-// p224Add computes *out = a+b
+-//
+-// a[i] + b[i] < 2**32
+-func p224Add(out, a, b *p224FieldElement) {
+-      for i := 0; i < 8; i++ {
+-              out[i] = a[i] + b[i]
+-      }
+-}
+-
+-const two31p3 = 1<<31 + 1<<3
+-const two31m3 = 1<<31 - 1<<3
+-const two31m15m3 = 1<<31 - 1<<15 - 1<<3
+-
+-// p224ZeroModP31 is 0 mod p where bit 31 is set in all limbs so that we can
+-// subtract smaller amounts without underflow. See the section "Subtraction" in
+-// [1] for reasoning.
+-var p224ZeroModP31 = []uint32{two31p3, two31m3, two31m3, two31m15m3, two31m3, two31m3, two31m3, two31m3}
+-
+-// p224Sub computes *out = a-b
+-//
+-// a[i], b[i] < 2**30
+-// out[i] < 2**32
+-func p224Sub(out, a, b *p224FieldElement) {
+-      for i := 0; i < 8; i++ {
+-              out[i] = a[i] + p224ZeroModP31[i] - b[i]
+-      }
+-}
+-
+-// LargeFieldElement also represents an element of the field. The limbs are
+-// still spaced 28-bits apart and in little-endian order. So the limbs are at
+-// 0, 28, 56, ..., 392 bits, each 64-bits wide.
+-type p224LargeFieldElement [15]uint64
+-
+-const two63p35 = 1<<63 + 1<<35
+-const two63m35 = 1<<63 - 1<<35
+-const two63m35m19 = 1<<63 - 1<<35 - 1<<19
+-
+-// p224ZeroModP63 is 0 mod p where bit 63 is set in all limbs. See the section
+-// "Subtraction" in [1] for why.
+-var p224ZeroModP63 = [8]uint64{two63p35, two63m35, two63m35, two63m35, two63m35m19, two63m35, two63m35, two63m35}
+-
+-const bottom12Bits = 0xfff
+-const bottom28Bits = 0xfffffff
+-
+-// p224Mul computes *out = a*b
+-//
+-// a[i] < 2**29, b[i] < 2**30 (or vice versa)
+-// out[i] < 2**29
+-func p224Mul(out, a, b *p224FieldElement, tmp *p224LargeFieldElement) {
+-      for i := 0; i < 15; i++ {
+-              tmp[i] = 0
+-      }
+-
+-      for i := 0; i < 8; i++ {
+-              for j := 0; j < 8; j++ {
+-                      tmp[i+j] += uint64(a[i]) * uint64(b[j])
+-              }
+-      }
+-
+-      p224ReduceLarge(out, tmp)
+-}
+-
+-// Square computes *out = a*a
+-//
+-// a[i] < 2**29
+-// out[i] < 2**29
+-func p224Square(out, a *p224FieldElement, tmp *p224LargeFieldElement) {
+-      for i := 0; i < 15; i++ {
+-              tmp[i] = 0
+-      }
+-
+-      for i := 0; i < 8; i++ {
+-              for j := 0; j <= i; j++ {
+-                      r := uint64(a[i]) * uint64(a[j])
+-                      if i == j {
+-                              tmp[i+j] += r
+-                      } else {
+-                              tmp[i+j] += r << 1
+-                      }
+-              }
+-      }
+-
+-      p224ReduceLarge(out, tmp)
+-}
+-
+-// ReduceLarge converts a p224LargeFieldElement to a p224FieldElement.
+-//
+-// in[i] < 2**62
+-func p224ReduceLarge(out *p224FieldElement, in *p224LargeFieldElement) {
+-      for i := 0; i < 8; i++ {
+-              in[i] += p224ZeroModP63[i]
+-      }
+-
+-      // Eliminate the coefficients at 2**224 and greater.
+-      for i := 14; i >= 8; i-- {
+-              in[i-8] -= in[i]
+-              in[i-5] += (in[i] & 0xffff) << 12
+-              in[i-4] += in[i] >> 16
+-      }
+-      in[8] = 0
+-      // in[0..8] < 2**64
+-
+-      // As the values become small enough, we start to store them in |out|
+-      // and use 32-bit operations.
+-      for i := 1; i < 8; i++ {
+-              in[i+1] += in[i] >> 28
+-              out[i] = uint32(in[i] & bottom28Bits)
+-      }
+-      in[0] -= in[8]
+-      out[3] += uint32(in[8]&0xffff) << 12
+-      out[4] += uint32(in[8] >> 16)
+-      // in[0] < 2**64
+-      // out[3] < 2**29
+-      // out[4] < 2**29
+-      // out[1,2,5..7] < 2**28
+-
+-      out[0] = uint32(in[0] & bottom28Bits)
+-      out[1] += uint32((in[0] >> 28) & bottom28Bits)
+-      out[2] += uint32(in[0] >> 56)
+-      // out[0] < 2**28
+-      // out[1..4] < 2**29
+-      // out[5..7] < 2**28
+-}
+-
+-// Reduce reduces the coefficients of a to smaller bounds.
+-//
+-// On entry: a[i] < 2**31 + 2**30
+-// On exit: a[i] < 2**29
+-func p224Reduce(a *p224FieldElement) {
+-      for i := 0; i < 7; i++ {
+-              a[i+1] += a[i] >> 28
+-              a[i] &= bottom28Bits
+-      }
+-      top := a[7] >> 28
+-      a[7] &= bottom28Bits
+-
+-      // top < 2**4
+-      mask := top
+-      mask |= mask >> 2
+-      mask |= mask >> 1
+-      mask <<= 31
+-      mask = uint32(int32(mask) >> 31)
+-      // Mask is all ones if top != 0, all zero otherwise
+-
+-      a[0] -= top
+-      a[3] += top << 12
+-
+-      // We may have just made a[0] negative but, if we did, then we must
+-      // have added something to a[3], this it's > 2**12. Therefore we can
+-      // carry down to a[0].
+-      a[3] -= 1 & mask
+-      a[2] += mask & (1<<28 - 1)
+-      a[1] += mask & (1<<28 - 1)
+-      a[0] += mask & (1 << 28)
+-}
+-
+-// p224Invert calculates *out = in**-1 by computing in**(2**224 - 2**96 - 1),
+-// i.e. Fermat's little theorem.
+-func p224Invert(out, in *p224FieldElement) {
+-      var f1, f2, f3, f4 p224FieldElement
+-      var c p224LargeFieldElement
+-
+-      p224Square(&f1, in, &c)    // 2
+-      p224Mul(&f1, &f1, in, &c)  // 2**2 - 1
+-      p224Square(&f1, &f1, &c)   // 2**3 - 2
+-      p224Mul(&f1, &f1, in, &c)  // 2**3 - 1
+-      p224Square(&f2, &f1, &c)   // 2**4 - 2
+-      p224Square(&f2, &f2, &c)   // 2**5 - 4
+-      p224Square(&f2, &f2, &c)   // 2**6 - 8
+-      p224Mul(&f1, &f1, &f2, &c) // 2**6 - 1
+-      p224Square(&f2, &f1, &c)   // 2**7 - 2
+-      for i := 0; i < 5; i++ {   // 2**12 - 2**6
+-              p224Square(&f2, &f2, &c)
+-      }
+-      p224Mul(&f2, &f2, &f1, &c) // 2**12 - 1
+-      p224Square(&f3, &f2, &c)   // 2**13 - 2
+-      for i := 0; i < 11; i++ {  // 2**24 - 2**12
+-              p224Square(&f3, &f3, &c)
+-      }
+-      p224Mul(&f2, &f3, &f2, &c) // 2**24 - 1
+-      p224Square(&f3, &f2, &c)   // 2**25 - 2
+-      for i := 0; i < 23; i++ {  // 2**48 - 2**24
+-              p224Square(&f3, &f3, &c)
+-      }
+-      p224Mul(&f3, &f3, &f2, &c) // 2**48 - 1
+-      p224Square(&f4, &f3, &c)   // 2**49 - 2
+-      for i := 0; i < 47; i++ {  // 2**96 - 2**48
+-              p224Square(&f4, &f4, &c)
+-      }
+-      p224Mul(&f3, &f3, &f4, &c) // 2**96 - 1
+-      p224Square(&f4, &f3, &c)   // 2**97 - 2
+-      for i := 0; i < 23; i++ {  // 2**120 - 2**24
+-              p224Square(&f4, &f4, &c)
+-      }
+-      p224Mul(&f2, &f4, &f2, &c) // 2**120 - 1
+-      for i := 0; i < 6; i++ {   // 2**126 - 2**6
+-              p224Square(&f2, &f2, &c)
+-      }
+-      p224Mul(&f1, &f1, &f2, &c) // 2**126 - 1
+-      p224Square(&f1, &f1, &c)   // 2**127 - 2
+-      p224Mul(&f1, &f1, in, &c)  // 2**127 - 1
+-      for i := 0; i < 97; i++ {  // 2**224 - 2**97
+-              p224Square(&f1, &f1, &c)
+-      }
+-      p224Mul(out, &f1, &f3, &c) // 2**224 - 2**96 - 1
+-}
+-
+-// p224Contract converts a FieldElement to its unique, minimal form.
+-//
+-// On entry, in[i] < 2**29
+-// On exit, in[i] < 2**28
+-func p224Contract(out, in *p224FieldElement) {
+-      copy(out[:], in[:])
+-
+-      for i := 0; i < 7; i++ {
+-              out[i+1] += out[i] >> 28
+-              out[i] &= bottom28Bits
+-      }
+-      top := out[7] >> 28
+-      out[7] &= bottom28Bits
+-
+-      out[0] -= top
+-      out[3] += top << 12
+-
+-      // We may just have made out[i] negative. So we carry down. If we made
+-      // out[0] negative then we know that out[3] is sufficiently positive
+-      // because we just added to it.
+-      for i := 0; i < 3; i++ {
+-              mask := uint32(int32(out[i]) >> 31)
+-              out[i] += (1 << 28) & mask
+-              out[i+1] -= 1 & mask
+-      }
+-
+-      // We might have pushed out[3] over 2**28 so we perform another, partial,
+-      // carry chain.
+-      for i := 3; i < 7; i++ {
+-              out[i+1] += out[i] >> 28
+-              out[i] &= bottom28Bits
+-      }
+-      top = out[7] >> 28
+-      out[7] &= bottom28Bits
+-
+-      // Eliminate top while maintaining the same value mod p.
+-      out[0] -= top
+-      out[3] += top << 12
+-
+-      // There are two cases to consider for out[3]:
+-      //   1) The first time that we eliminated top, we didn't push out[3] over
+-      //      2**28. In this case, the partial carry chain didn't change any values
+-      //      and top is zero.
+-      //   2) We did push out[3] over 2**28 the first time that we eliminated top.
+-      //      The first value of top was in [0..16), therefore, prior to eliminating
+-      //      the first top, 0xfff1000 <= out[3] <= 0xfffffff. Therefore, after
+-      //      overflowing and being reduced by the second carry chain, out[3] <=
+-      //      0xf000. Thus it cannot have overflowed when we eliminated top for the
+-      //      second time.
+-
+-      // Again, we may just have made out[0] negative, so do the same carry down.
+-      // As before, if we made out[0] negative then we know that out[3] is
+-      // sufficiently positive.
+-      for i := 0; i < 3; i++ {
+-              mask := uint32(int32(out[i]) >> 31)
+-              out[i] += (1 << 28) & mask
+-              out[i+1] -= 1 & mask
+-      }
+-
+-      // Now we see if the value is >= p and, if so, subtract p.
+-
+-      // First we build a mask from the top four limbs, which must all be
+-      // equal to bottom28Bits if the whole value is >= p. If top4AllOnes
+-      // ends up with any zero bits in the bottom 28 bits, then this wasn't
+-      // true.
+-      top4AllOnes := uint32(0xffffffff)
+-      for i := 4; i < 8; i++ {
+-              top4AllOnes &= out[i]
+-      }
+-      top4AllOnes |= 0xf0000000
+-      // Now we replicate any zero bits to all the bits in top4AllOnes.
+-      top4AllOnes &= top4AllOnes >> 16
+-      top4AllOnes &= top4AllOnes >> 8
+-      top4AllOnes &= top4AllOnes >> 4
+-      top4AllOnes &= top4AllOnes >> 2
+-      top4AllOnes &= top4AllOnes >> 1
+-      top4AllOnes = uint32(int32(top4AllOnes<<31) >> 31)
+-
+-      // Now we test whether the bottom three limbs are non-zero.
+-      bottom3NonZero := out[0] | out[1] | out[2]
+-      bottom3NonZero |= bottom3NonZero >> 16
+-      bottom3NonZero |= bottom3NonZero >> 8
+-      bottom3NonZero |= bottom3NonZero >> 4
+-      bottom3NonZero |= bottom3NonZero >> 2
+-      bottom3NonZero |= bottom3NonZero >> 1
+-      bottom3NonZero = uint32(int32(bottom3NonZero<<31) >> 31)
+-
+-      // Everything depends on the value of out[3].
+-      //    If it's > 0xffff000 and top4AllOnes != 0 then the whole value is >= p
+-      //    If it's = 0xffff000 and top4AllOnes != 0 and bottom3NonZero != 0,
+-      //      then the whole value is >= p
+-      //    If it's < 0xffff000, then the whole value is < p
+-      n := out[3] - 0xffff000
+-      out3Equal := n
+-      out3Equal |= out3Equal >> 16
+-      out3Equal |= out3Equal >> 8
+-      out3Equal |= out3Equal >> 4
+-      out3Equal |= out3Equal >> 2
+-      out3Equal |= out3Equal >> 1
+-      out3Equal = ^uint32(int32(out3Equal<<31) >> 31)
+-
+-      // If out[3] > 0xffff000 then n's MSB will be zero.
+-      out3GT := ^uint32(int32(n) >> 31)
+-
+-      mask := top4AllOnes & ((out3Equal & bottom3NonZero) | out3GT)
+-      out[0] -= 1 & mask
+-      out[3] -= 0xffff000 & mask
+-      out[4] -= 0xfffffff & mask
+-      out[5] -= 0xfffffff & mask
+-      out[6] -= 0xfffffff & mask
+-      out[7] -= 0xfffffff & mask
+-}
+-
+-// Group element functions.
+-//
+-// These functions deal with group elements. The group is an elliptic curve
+-// group with a = -3 defined in FIPS 186-3, section D.2.2.
+-
+-// p224AddJacobian computes *out = a+b where a != b.
+-func p224AddJacobian(x3, y3, z3, x1, y1, z1, x2, y2, z2 *p224FieldElement) {
+-      // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-p224Add-2007-bl
+-      var z1z1, z2z2, u1, u2, s1, s2, h, i, j, r, v p224FieldElement
+-      var c p224LargeFieldElement
+-
+-      z1IsZero := p224IsZero(z1)
+-      z2IsZero := p224IsZero(z2)
+-
+-      // Z1Z1 = Z1²
+-      p224Square(&z1z1, z1, &c)
+-      // Z2Z2 = Z2²
+-      p224Square(&z2z2, z2, &c)
+-      // U1 = X1*Z2Z2
+-      p224Mul(&u1, x1, &z2z2, &c)
+-      // U2 = X2*Z1Z1
+-      p224Mul(&u2, x2, &z1z1, &c)
+-      // S1 = Y1*Z2*Z2Z2
+-      p224Mul(&s1, z2, &z2z2, &c)
+-      p224Mul(&s1, y1, &s1, &c)
+-      // S2 = Y2*Z1*Z1Z1
+-      p224Mul(&s2, z1, &z1z1, &c)
+-      p224Mul(&s2, y2, &s2, &c)
+-      // H = U2-U1
+-      p224Sub(&h, &u2, &u1)
+-      p224Reduce(&h)
+-      xEqual := p224IsZero(&h)
+-      // I = (2*H)²
+-      for j := 0; j < 8; j++ {
+-              i[j] = h[j] << 1
+-      }
+-      p224Reduce(&i)
+-      p224Square(&i, &i, &c)
+-      // J = H*I
+-      p224Mul(&j, &h, &i, &c)
+-      // r = 2*(S2-S1)
+-      p224Sub(&r, &s2, &s1)
+-      p224Reduce(&r)
+-      yEqual := p224IsZero(&r)
+-      if xEqual == 1 && yEqual == 1 && z1IsZero == 0 && z2IsZero == 0 {
+-              p224DoubleJacobian(x3, y3, z3, x1, y1, z1)
+-              return
+-      }
+-      for i := 0; i < 8; i++ {
+-              r[i] <<= 1
+-      }
+-      p224Reduce(&r)
+-      // V = U1*I
+-      p224Mul(&v, &u1, &i, &c)
+-      // Z3 = ((Z1+Z2)²-Z1Z1-Z2Z2)*H
+-      p224Add(&z1z1, &z1z1, &z2z2)
+-      p224Add(&z2z2, z1, z2)
+-      p224Reduce(&z2z2)
+-      p224Square(&z2z2, &z2z2, &c)
+-      p224Sub(z3, &z2z2, &z1z1)
+-      p224Reduce(z3)
+-      p224Mul(z3, z3, &h, &c)
+-      // X3 = r²-J-2*V
+-      for i := 0; i < 8; i++ {
+-              z1z1[i] = v[i] << 1
+-      }
+-      p224Add(&z1z1, &j, &z1z1)
+-      p224Reduce(&z1z1)
+-      p224Square(x3, &r, &c)
+-      p224Sub(x3, x3, &z1z1)
+-      p224Reduce(x3)
+-      // Y3 = r*(V-X3)-2*S1*J
+-      for i := 0; i < 8; i++ {
+-              s1[i] <<= 1
+-      }
+-      p224Mul(&s1, &s1, &j, &c)
+-      p224Sub(&z1z1, &v, x3)
+-      p224Reduce(&z1z1)
+-      p224Mul(&z1z1, &z1z1, &r, &c)
+-      p224Sub(y3, &z1z1, &s1)
+-      p224Reduce(y3)
+-
+-      p224CopyConditional(x3, x2, z1IsZero)
+-      p224CopyConditional(x3, x1, z2IsZero)
+-      p224CopyConditional(y3, y2, z1IsZero)
+-      p224CopyConditional(y3, y1, z2IsZero)
+-      p224CopyConditional(z3, z2, z1IsZero)
+-      p224CopyConditional(z3, z1, z2IsZero)
+-}
+-
+-// p224DoubleJacobian computes *out = a+a.
+-func p224DoubleJacobian(x3, y3, z3, x1, y1, z1 *p224FieldElement) {
+-      var delta, gamma, beta, alpha, t p224FieldElement
+-      var c p224LargeFieldElement
+-
+-      p224Square(&delta, z1, &c)
+-      p224Square(&gamma, y1, &c)
+-      p224Mul(&beta, x1, &gamma, &c)
+-
+-      // alpha = 3*(X1-delta)*(X1+delta)
+-      p224Add(&t, x1, &delta)
+-      for i := 0; i < 8; i++ {
+-              t[i] += t[i] << 1
+-      }
+-      p224Reduce(&t)
+-      p224Sub(&alpha, x1, &delta)
+-      p224Reduce(&alpha)
+-      p224Mul(&alpha, &alpha, &t, &c)
+-
+-      // Z3 = (Y1+Z1)²-gamma-delta
+-      p224Add(z3, y1, z1)
+-      p224Reduce(z3)
+-      p224Square(z3, z3, &c)
+-      p224Sub(z3, z3, &gamma)
+-      p224Reduce(z3)
+-      p224Sub(z3, z3, &delta)
+-      p224Reduce(z3)
+-
+-      // X3 = alpha²-8*beta
+-      for i := 0; i < 8; i++ {
+-              delta[i] = beta[i] << 3
+-      }
+-      p224Reduce(&delta)
+-      p224Square(x3, &alpha, &c)
+-      p224Sub(x3, x3, &delta)
+-      p224Reduce(x3)
+-
+-      // Y3 = alpha*(4*beta-X3)-8*gamma²
+-      for i := 0; i < 8; i++ {
+-              beta[i] <<= 2
+-      }
+-      p224Sub(&beta, &beta, x3)
+-      p224Reduce(&beta)
+-      p224Square(&gamma, &gamma, &c)
+-      for i := 0; i < 8; i++ {
+-              gamma[i] <<= 3
+-      }
+-      p224Reduce(&gamma)
+-      p224Mul(y3, &alpha, &beta, &c)
+-      p224Sub(y3, y3, &gamma)
+-      p224Reduce(y3)
+-}
+-
+-// p224CopyConditional sets *out = *in iff the least-significant-bit of control
+-// is true, and it runs in constant time.
+-func p224CopyConditional(out, in *p224FieldElement, control uint32) {
+-      control <<= 31
+-      control = uint32(int32(control) >> 31)
+-
+-      for i := 0; i < 8; i++ {
+-              out[i] ^= (out[i] ^ in[i]) & control
+-      }
+-}
+-
+-func p224ScalarMult(outX, outY, outZ, inX, inY, inZ *p224FieldElement, scalar []byte) {
+-      var xx, yy, zz p224FieldElement
+-      for i := 0; i < 8; i++ {
+-              outX[i] = 0
+-              outY[i] = 0
+-              outZ[i] = 0
+-      }
+-
+-      for _, byte := range scalar {
+-              for bitNum := uint(0); bitNum < 8; bitNum++ {
+-                      p224DoubleJacobian(outX, outY, outZ, outX, outY, outZ)
+-                      bit := uint32((byte >> (7 - bitNum)) & 1)
+-                      p224AddJacobian(&xx, &yy, &zz, inX, inY, inZ, outX, outY, outZ)
+-                      p224CopyConditional(outX, &xx, bit)
+-                      p224CopyConditional(outY, &yy, bit)
+-                      p224CopyConditional(outZ, &zz, bit)
+-              }
+-      }
+-}
+-
+-// p224ToAffine converts from Jacobian to affine form.
+-func p224ToAffine(x, y, z *p224FieldElement) (*big.Int, *big.Int) {
+-      var zinv, zinvsq, outx, outy p224FieldElement
+-      var tmp p224LargeFieldElement
+-
+-      if isPointAtInfinity := p224IsZero(z); isPointAtInfinity == 1 {
+-              return new(big.Int), new(big.Int)
+-      }
+-
+-      p224Invert(&zinv, z)
+-      p224Square(&zinvsq, &zinv, &tmp)
+-      p224Mul(x, x, &zinvsq, &tmp)
+-      p224Mul(&zinvsq, &zinvsq, &zinv, &tmp)
+-      p224Mul(y, y, &zinvsq, &tmp)
+-
+-      p224Contract(&outx, x)
+-      p224Contract(&outy, y)
+-      return p224ToBig(&outx), p224ToBig(&outy)
+-}
+-
+-// get28BitsFromEnd returns the least-significant 28 bits from buf>>shift,
+-// where buf is interpreted as a big-endian number.
+-func get28BitsFromEnd(buf []byte, shift uint) (uint32, []byte) {
+-      var ret uint32
+-
+-      for i := uint(0); i < 4; i++ {
+-              var b byte
+-              if l := len(buf); l > 0 {
+-                      b = buf[l-1]
+-                      // We don't remove the byte if we're about to return and we're not
+-                      // reading all of it.
+-                      if i != 3 || shift == 4 {
+-                              buf = buf[:l-1]
+-                      }
+-              }
+-              ret |= uint32(b) << (8 * i) >> shift
+-      }
+-      ret &= bottom28Bits
+-      return ret, buf
+-}
+-
+-// p224FromBig sets *out = *in.
+-func p224FromBig(out *p224FieldElement, in *big.Int) {
+-      bytes := in.Bytes()
+-      out[0], bytes = get28BitsFromEnd(bytes, 0)
+-      out[1], bytes = get28BitsFromEnd(bytes, 4)
+-      out[2], bytes = get28BitsFromEnd(bytes, 0)
+-      out[3], bytes = get28BitsFromEnd(bytes, 4)
+-      out[4], bytes = get28BitsFromEnd(bytes, 0)
+-      out[5], bytes = get28BitsFromEnd(bytes, 4)
+-      out[6], bytes = get28BitsFromEnd(bytes, 0)
+-      out[7], bytes = get28BitsFromEnd(bytes, 4)
+-}
+-
+-// p224ToBig returns in as a big.Int.
+-func p224ToBig(in *p224FieldElement) *big.Int {
+-      var buf [28]byte
+-      buf[27] = byte(in[0])
+-      buf[26] = byte(in[0] >> 8)
+-      buf[25] = byte(in[0] >> 16)
+-      buf[24] = byte(((in[0] >> 24) & 0x0f) | (in[1]<<4)&0xf0)
+-
+-      buf[23] = byte(in[1] >> 4)
+-      buf[22] = byte(in[1] >> 12)
+-      buf[21] = byte(in[1] >> 20)
+-
+-      buf[20] = byte(in[2])
+-      buf[19] = byte(in[2] >> 8)
+-      buf[18] = byte(in[2] >> 16)
+-      buf[17] = byte(((in[2] >> 24) & 0x0f) | (in[3]<<4)&0xf0)
+-
+-      buf[16] = byte(in[3] >> 4)
+-      buf[15] = byte(in[3] >> 12)
+-      buf[14] = byte(in[3] >> 20)
+-
+-      buf[13] = byte(in[4])
+-      buf[12] = byte(in[4] >> 8)
+-      buf[11] = byte(in[4] >> 16)
+-      buf[10] = byte(((in[4] >> 24) & 0x0f) | (in[5]<<4)&0xf0)
+-
+-      buf[9] = byte(in[5] >> 4)
+-      buf[8] = byte(in[5] >> 12)
+-      buf[7] = byte(in[5] >> 20)
+-
+-      buf[6] = byte(in[6])
+-      buf[5] = byte(in[6] >> 8)
+-      buf[4] = byte(in[6] >> 16)
+-      buf[3] = byte(((in[6] >> 24) & 0x0f) | (in[7]<<4)&0xf0)
+-
+-      buf[2] = byte(in[7] >> 4)
+-      buf[1] = byte(in[7] >> 12)
+-      buf[0] = byte(in[7] >> 20)
+-
+-      return new(big.Int).SetBytes(buf[:])
+-}
+--- libgo/go/crypto/elliptic/p224_test.go.jj   2012-11-15 18:26:57.000000000 +0100
++++ libgo/go/crypto/elliptic/p224_test.go      2014-03-05 15:29:58.743430988 +0100
+@@ -1,47 +0,0 @@
+-// Copyright 2012 The Go Authors.  All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package elliptic
+-
+-import (
+-      "math/big"
+-      "testing"
+-)
+-
+-var toFromBigTests = []string{
+-      "0",
+-      "1",
+-      "23",
+-      "b70e0cb46bb4bf7f321390b94a03c1d356c01122343280d6105c1d21",
+-      "706a46d476dcb76798e6046d89474788d164c18032d268fd10704fa6",
+-}
+-
+-func p224AlternativeToBig(in *p224FieldElement) *big.Int {
+-      ret := new(big.Int)
+-      tmp := new(big.Int)
+-
+-      for i := uint(0); i < 8; i++ {
+-              tmp.SetInt64(int64(in[i]))
+-              tmp.Lsh(tmp, 28*i)
+-              ret.Add(ret, tmp)
+-      }
+-      ret.Mod(ret, p224.P)
+-      return ret
+-}
+-
+-func TestToFromBig(t *testing.T) {
+-      for i, test := range toFromBigTests {
+-              n, _ := new(big.Int).SetString(test, 16)
+-              var x p224FieldElement
+-              p224FromBig(&x, n)
+-              m := p224ToBig(&x)
+-              if n.Cmp(m) != 0 {
+-                      t.Errorf("#%d: %x != %x", i, n, m)
+-              }
+-              q := p224AlternativeToBig(&x)
+-              if n.Cmp(q) != 0 {
+-                      t.Errorf("#%d: %x != %x (alternative)", i, n, m)
+-              }
+-      }
+-}
+--- libgo/go/crypto/elliptic/p256.go.jj        2013-11-07 11:59:09.000000000 +0100
++++ libgo/go/crypto/elliptic/p256.go   2014-03-05 15:34:31.910414701 +0100
+@@ -233,6 +233,8 @@ func p256ReduceCarry(inout *[p256Limbs]u
+       inout[7] += carry << 25
+ }
++const bottom28Bits = 0xfffffff
++
+ // p256Sum sets out = in+in2.
+ //
+ // On entry, in[i]+in2[i] must not overflow a 32-bit word.
+@@ -265,6 +267,7 @@ const (
+       two31m2    = 1<<31 - 1<<2
+       two31p24m2 = 1<<31 + 1<<24 - 1<<2
+       two30m27m2 = 1<<30 - 1<<27 - 1<<2
++      two31m3    = 1<<31 - 1<<3
+ )
+ // p256Zero31 is 0 mod p.
diff --git a/gcc49-libgomp-omp_h-multilib.patch b/gcc49-libgomp-omp_h-multilib.patch
new file mode 100644 (file)
index 0000000..d0e98d1
--- /dev/null
@@ -0,0 +1,17 @@
+2008-06-09  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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/gcc49-libstdc++-docs.patch b/gcc49-libstdc++-docs.patch
new file mode 100644 (file)
index 0000000..ee8598a
--- /dev/null
@@ -0,0 +1,26 @@
+--- libstdc++-v3/doc/html/index.html.jj        2011-01-03 12:53:21.282829010 +0100
++++ libstdc++-v3/doc/html/index.html   2011-01-04 18:06:28.999851145 +0100
+@@ -5,6 +5,8 @@
+       <a class="link" href="http://www.fsf.org/" target="_top">FSF
+       </a>
+     </p><p>
++      Release 4.9.2
++    </p><p>
+       Permission is granted to copy, distribute and/or modify this
+       document under the terms of the GNU Free Documentation
+       License, Version 1.2 or any later version published by the
+--- libstdc++-v3/doc/html/api.html.jj  2011-01-03 12:53:21.000000000 +0100
++++ libstdc++-v3/doc/html/api.html     2011-01-04 18:12:01.672757784 +0100
+@@ -18,8 +18,11 @@
+   member functions for the library classes, finding out what is in a
+   particular include file, looking at inheritance diagrams, etc.
+ </p><p>
+-  The API documentation, rendered into HTML, can be viewed online:
++  The API documentation, rendered into HTML, can be viewed here:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
++      <a class="link" href="api/index.html" target="_top">for the 4.9.2 release, local
++      </a>
++    </p></li><li class="listitem"><p>
+       <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
+       </a>
+     </p></li><li class="listitem"><p>
diff --git a/gcc49-libtool-no-rpath.patch b/gcc49-libtool-no-rpath.patch
new file mode 100644 (file)
index 0000000..466c661
--- /dev/null
@@ -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/gcc49-no-add-needed.patch b/gcc49-no-add-needed.patch
new file mode 100644 (file)
index 0000000..b6ca777
--- /dev/null
@@ -0,0 +1,50 @@
+2010-02-08  Roland McGrath  <roland@redhat.com>
+
+       * config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
+       linker.
+       * config/gnu-user.h (LINK_EH_SPEC): Likewise.
+       * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
+       * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
+
+--- gcc/config/alpha/elf.h.jj  2011-01-03 12:52:31.118056764 +0100
++++ gcc/config/alpha/elf.h     2011-01-04 18:14:10.931874160 +0100
+@@ -165,5 +165,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 "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100
++++ gcc/config/ia64/linux.h    2011-01-04 18:14:10.931874160 +0100
+@@ -77,7 +77,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 "--no-add-needed "
+ /* Put all *tf routines in libgcc.  */
+ #undef LIBGCC2_HAS_TF_MODE
+--- gcc/config/gnu-user.h.jj   2011-01-03 12:53:03.739057299 +0100
++++ gcc/config/gnu-user.h      2011-01-04 18:14:10.932814884 +0100
+@@ -82,7 +82,7 @@ see the files COPYING3 and COPYING.RUNTI
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ #undef LINK_GCC_C_SEQUENCE_SPEC
+--- gcc/config/rs6000/sysv4.h.jj       2011-01-03 13:02:18.255994215 +0100
++++ gcc/config/rs6000/sysv4.h  2011-01-04 18:14:10.933888871 +0100
+@@ -820,7 +820,7 @@ extern int fixuplabelno;
+   -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
diff --git a/gcc49-ppc32-retaddr.patch b/gcc49-ppc32-retaddr.patch
new file mode 100644 (file)
index 0000000..7e8eeb5
--- /dev/null
@@ -0,0 +1,87 @@
+2005-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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
+@@ -20970,18 +20970,22 @@ rs6000_return_addr (int count, rtx frame
+   if (count != 0
+       || ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN) && flag_pic))
+     {
++      rtx x;
+       cfun->machine->ra_needs_full_frame = 1;
+-      return
+-      gen_rtx_MEM
+-        (Pmode,
+-         memory_address
+-         (Pmode,
+-          plus_constant (Pmode,
+-                         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 (Pmode, 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/gcc49-pr38757.patch b/gcc49-pr38757.patch
new file mode 100644 (file)
index 0000000..4206584
--- /dev/null
@@ -0,0 +1,106 @@
+2009-03-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/38757
+       * langhooks.h (struct lang_hooks): Add source_language langhook.
+       * langhooks-def.h (LANG_HOOKS_SOURCE_LANGUAGE): Define to NULL.
+       (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_SOURCE_LANGUAGE.
+       * dwarf2out.c (add_prototyped_attribute): Add DW_AT_prototype
+       also for DW_LANG_{C,C99,ObjC}.
+       (gen_compile_unit_die): Use lang_hooks.source_language () to
+       determine if DW_LANG_C99 or DW_LANG_C89 should be returned.
+c/
+       * c-lang.c (c_source_language): New function.
+       (LANG_HOOKS_SOURCE_LANGUAGE): Define.
+
+--- gcc/langhooks.h.jj 2011-01-03 12:53:05.125745450 +0100
++++ gcc/langhooks.h    2011-01-04 17:59:43.166744926 +0100
+@@ -467,6 +467,10 @@ struct lang_hooks
+      gimplification.  */
+   bool deep_unsharing;
++  /* Return year of the source language standard version if the FE supports
++     multiple versions of the standard.  */
++  int (*source_language) (void);
++
+   /* Whenever you add entries here, make sure you adjust langhooks-def.h
+      and langhooks.c accordingly.  */
+ };
+--- gcc/langhooks-def.h.jj     2011-01-03 12:53:05.000000000 +0100
++++ gcc/langhooks-def.h        2011-01-04 18:00:44.858851030 +0100
+@@ -118,6 +118,7 @@ extern void lhd_omp_firstprivatize_type_
+ #define LANG_HOOKS_BLOCK_MAY_FALLTHRU hook_bool_const_tree_true
+ #define LANG_HOOKS_EH_USE_CXA_END_CLEANUP     false
+ #define LANG_HOOKS_DEEP_UNSHARING     false
++#define LANG_HOOKS_SOURCE_LANGUAGE    NULL
+ /* Attribute hooks.  */
+ #define LANG_HOOKS_ATTRIBUTE_TABLE            NULL
+@@ -303,7 +304,8 @@ extern void lhd_end_section (void);
+   LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \
+   LANG_HOOKS_BLOCK_MAY_FALLTHRU, \
+   LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \
+-  LANG_HOOKS_DEEP_UNSHARING \
++  LANG_HOOKS_DEEP_UNSHARING, \
++  LANG_HOOKS_SOURCE_LANGUAGE \
+ }
+ #endif /* GCC_LANG_HOOKS_DEF_H */
+--- gcc/c/c-lang.c.jj  2011-01-03 12:53:05.376056936 +0100
++++ gcc/c/c-lang.c     2011-01-04 17:59:43.167743798 +0100
+@@ -36,6 +36,12 @@ along with GCC; see the file COPYING3.
+ enum c_language_kind c_language = clk_c;
++static int
++c_source_language (void)
++{
++  return flag_isoc99 ? 1999 : 1989;
++}
++
+ /* Lang hooks common to C and ObjC are declared in c-objc-common.h;
+    consequently, there should be very few hooks below.  */
+@@ -45,6 +51,8 @@ enum c_language_kind c_language = clk_c;
+ #define LANG_HOOKS_INIT c_objc_common_init
+ #undef LANG_HOOKS_INIT_TS
+ #define LANG_HOOKS_INIT_TS c_common_init_ts
++#undef LANG_HOOKS_SOURCE_LANGUAGE
++#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language
+ /* Each front end provides its own lang hook initializer.  */
+ struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
+--- gcc/dwarf2out.c.jj 2011-01-03 12:53:05.102056475 +0100
++++ gcc/dwarf2out.c    2011-01-04 18:03:14.534151763 +0100
+@@ -16109,9 +16109,18 @@ add_bit_size_attribute (dw_die_ref die,
+ static inline void
+ add_prototyped_attribute (dw_die_ref die, tree func_type)
+ {
+-  if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
+-      && prototype_p (func_type))
+-    add_AT_flag (die, DW_AT_prototyped, 1);
++  switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
++    {
++    case DW_LANG_C:
++    case DW_LANG_C89:
++    case DW_LANG_C99:
++    case DW_LANG_ObjC:
++      if (prototype_p (func_type))
++      add_AT_flag (die, DW_AT_prototyped, 1);
++      break;
++    default:
++      break;
++    }
+ }
+ /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
+@@ -18915,6 +18924,10 @@ gen_compile_unit_die (const char *filena
+         if (strcmp (language_string, "GNU Go") == 0)
+           language = DW_LANG_Go;
+       }
++      else if (strcmp (language_string, "GNU C") == 0
++             && lang_hooks.source_language
++             && lang_hooks.source_language () >= 1999)
++      language = DW_LANG_C99;
+     }
+   /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works.  */
+   else if (strcmp (language_string, "GNU Fortran") == 0)
diff --git a/gcc49-pr64269.patch b/gcc49-pr64269.patch
new file mode 100644 (file)
index 0000000..baf7c59
--- /dev/null
@@ -0,0 +1,42 @@
+2014-12-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/64269
+       * tree-ssa-forwprop.c (simplify_builtin_call): Bail out if
+       len2 or diff are too large.
+
+       * gcc.c-torture/compile/pr64269.c: New test.
+
+--- gcc/tree-ssa-forwprop.c.jj 2014-12-01 14:57:30.000000000 +0100
++++ gcc/tree-ssa-forwprop.c    2014-12-12 09:46:05.790053928 +0100
+@@ -1288,7 +1288,8 @@ simplify_builtin_call (gimple_stmt_itera
+         use_operand_p use_p;
+         if (!tree_fits_shwi_p (val2)
+-            || !tree_fits_uhwi_p (len2))
++            || !tree_fits_uhwi_p (len2)
++            || compare_tree_int (len2, 1024) == 1)
+           break;
+         if (is_gimple_call (stmt1))
+           {
+@@ -1354,7 +1355,8 @@ simplify_builtin_call (gimple_stmt_itera
+            is not constant, or is bigger than memcpy length, bail out.  */
+         if (diff == NULL
+             || !tree_fits_uhwi_p (diff)
+-            || tree_int_cst_lt (len1, diff))
++            || tree_int_cst_lt (len1, diff)
++            || compare_tree_int (diff, 1024) == 1)
+           break;
+         /* Use maximum of difference plus memset length and memcpy length
+--- gcc/testsuite/gcc.c-torture/compile/pr64269.c.jj   2014-12-12 09:47:04.795015479 +0100
++++ gcc/testsuite/gcc.c-torture/compile/pr64269.c      2014-12-12 09:46:51.000000000 +0100
+@@ -0,0 +1,9 @@
++/* PR tree-optimization/64269 */
++
++void
++foo (char *p)
++{
++  __SIZE_TYPE__ s = ~(__SIZE_TYPE__)0;
++  *p = 0;
++  __builtin_memset (p + 1, 0, s);
++}
diff --git a/gcc49-rh330771.patch b/gcc49-rh330771.patch
new file mode 100644 (file)
index 0000000..102730f
--- /dev/null
@@ -0,0 +1,27 @@
+2007-10-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * Makefile.am (libgcj_tools_la_LIBADD): Add.
+       * Makefile.in: Regenerated.
+
+--- libjava/Makefile.am.jj     2009-05-06 08:14:50.000000000 +0200
++++ libjava/Makefile.am        2009-05-06 10:26:43.000000000 +0200
+@@ -550,7 +550,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole
+  $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \
+  $(LIBJAVA_LDFLAGS_LIBMATH)
+-libgcj_tools_la_LIBADD = libgcj.la
++libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
+ libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \
+  $(libgcj_tools_la_version_dep)
+ if BUILD_SUBLIBS
+--- libjava/Makefile.in.jj     2009-05-06 08:14:49.000000000 +0200
++++ libjava/Makefile.in        2009-05-06 10:27:18.000000000 +0200
+@@ -1110,7 +1110,7 @@ libgcj_tools_la_LDFLAGS = -rpath $(toole
+  $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \
+  $(LIBJAVA_LDFLAGS_LIBMATH)
+-libgcj_tools_la_LIBADD = libgcj.la
++libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
+ libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \
+       $(libgcj_tools_la_version_dep) $(am__append_19)
+ libgcj_tools_la_LINK = $(LIBLINK) $(libgcj_tools_la_LDFLAGS) \
diff --git a/gcc49-sparc-config-detection.patch b/gcc49-sparc-config-detection.patch
new file mode 100644 (file)
index 0000000..a37018e
--- /dev/null
@@ -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
+@@ -2656,7 +2656,7 @@ sparc-*-rtems*)
+       tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
+       tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
+       ;;
+-sparc-*-linux*)
++sparc-*-linux* | sparcv9-*-linux*)
+       tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
+       extra_options="${extra_options} sparc/long-double-switch.opt"
+       case ${target} in
+@@ -2710,7 +2710,7 @@ sparc64-*-rtems*)
+       extra_options="${extra_options}"
+       tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64"
+       ;;
+-sparc64-*-linux*)
++sparc64*-*-linux*)
+       tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default-64.h sparc/linux64.h sparc/tso.h"
+       extra_options="${extra_options} sparc/long-double-switch.opt"
+       tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
+--- libgcc/config.host.jj      2008-04-24 15:46:19.000000000 -0500
++++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500
+@@ -1002,7 +1002,7 @@ sparc-*-elf*)
+       tmake_file="${tmake_file} t-fdpbit t-crtfm"
+       extra_parts="$extra_parts crti.o crtn.o crtfastmath.o"
+       ;;
+-sparc-*-linux*)               # SPARC's running GNU/Linux, libc6
++sparc-*-linux* | sparcv9-*-linux*)            # SPARC's running GNU/Linux, libc6
+       tmake_file="${tmake_file} t-crtfm"
+       if test "${host_address}" = 64; then
+               tmake_file="$tmake_file sparc/t-linux64"
+@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
+       tmake_file="$tmake_file t-crtfm"
+       extra_parts="$extra_parts crtfastmath.o"
+       ;;
+-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} t-crtfm sparc/t-linux"
+       if test "${host_address}" = 64; then
This page took 0.368041 seconds and 4 git commands to generate.