diff --git a/.gitignore b/.gitignore
index 3204cee..8da89f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,32 +1 @@
-/fastjar-0.97.tar.gz
-/cloog-0.18.1.tar.gz
-/gcc-4.9.0-20140409.tar.bz2
-/isl-0.12.2.tar.bz2
-/gcc-4.9.0-20140411.tar.bz2
-/gcc-4.9.0-20140422.tar.bz2
-/gcc-4.9.0-20140505.tar.bz2
-/gcc-4.9.0-20140506.tar.bz2
-/gcc-4.9.0-20140514.tar.bz2
-/gcc-4.9.0-20140518.tar.bz2
-/gcc-4.9.0-20140529.tar.bz2
-/gcc-4.9.0-20140604.tar.bz2
-/gcc-4.9.0-20140612.tar.bz2
-/gcc-4.9.0-20140617.tar.bz2
-/gcc-4.9.0-20140619.tar.bz2
-/gcc-4.9.0-20140625.tar.bz2
-/gcc-4.9.0-20140702.tar.bz2
-/gcc-4.9.1-20140716.tar.bz2
-/gcc-4.9.1-20140717.tar.bz2
-/gcc-4.9.1-20140801.tar.bz2
-/gcc-4.9.1-20140807.tar.bz2
-/gcc-4.9.1-20140813.tar.bz2
-/gcc-4.9.1-20140815.tar.bz2
-/gcc-4.9.1-20140912.tar.bz2
-/gcc-4.9.1-20140922.tar.bz2
-/gcc-4.9.1-20140930.tar.bz2
-/gcc-4.9.1-20141017.tar.bz2
-/gcc-4.9.1-20141024.tar.bz2
-/gcc-4.9.2-20141101.tar.bz2
-/gcc-4.9.2-20141212.tar.bz2
-/gcc-4.9.2-20141217.tar.bz2
-/gcc-4.9.2-20150107.tar.bz2
+/gcc-5.0.0-20150123.tar.bz2
diff --git a/cloog-0.18.1-ppc64le-config.patch b/cloog-0.18.1-ppc64le-config.patch
deleted file mode 100644
index a280e20..0000000
--- a/cloog-0.18.1-ppc64le-config.patch
+++ /dev/null
@@ -1,717 +0,0 @@
---- 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 .
-@@ -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 . 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 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
-+ #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 < 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/gcc.spec b/gcc.spec
index f9a7108..a43a6e9 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,9 +1,9 @@
-%global DATE 20150107
-%global SVNREV 219315
-%global gcc_version 4.9.2
+%global DATE 20150123
+%global SVNREV 220063
+%global gcc_version 5.0.0
# Note, gcc_release must be integer, if you want to add suffixes to
# %{release}, append them after %{gcc_release} on Release: line.
-%global gcc_release 5
+%global gcc_release 0.5
%global _unpackaged_files_terminate_build 0
%global _performance_build 1
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
@@ -22,7 +22,7 @@
%else
%global build_libquadmath 0
%endif
-%ifarch %{ix86} x86_64 ppc ppc64 ppc64p7 %{arm}
+%ifarch %{ix86} x86_64 ppc ppc64 ppc64p7 %{arm} aarch64
%global build_libasan 1
%else
%global build_libasan 0
@@ -37,7 +37,7 @@
%else
%global build_liblsan 0
%endif
-%ifarch %{ix86} x86_64 ppc ppc64 ppc64p7 %{arm}
+%ifarch %{ix86} x86_64 ppc ppc64 ppc64p7 %{arm} aarch64
%global build_libubsan 1
%else
%global build_libubsan 0
@@ -57,7 +57,7 @@
%else
%global build_libitm 0
%endif
-%global build_cloog 1
+%global build_isl 1
%global build_libstdcxx_docs 1
%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64
%global attr_ifunc 1
@@ -86,13 +86,10 @@ License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2
Group: Development/Languages
# The source for this package was pulled from upstream's vcs. Use the
# following commands to generate the tarball:
-# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_9-branch@%{SVNREV} gcc-%{version}-%{DATE}
+# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-5-branch@%{SVNREV} gcc-%{version}-%{DATE}
# tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2
Source0: gcc-%{version}-%{DATE}.tar.bz2
-%global isl_version 0.12.2
-Source1: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2
-%global cloog_version 0.18.1
-Source2: ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-%{cloog_version}.tar.gz
+%global isl_version 0.14
URL: http://gcc.gnu.org
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Need binutils with -pie support >= 2.14.90.0.4-4
@@ -139,6 +136,11 @@ BuildRequires: gcc-gnat >= 3.1, libgnat >= 3.1
%ifarch ia64
BuildRequires: libunwind >= 0.98
%endif
+%if %{build_isl}
+BuildRequires: isl = %{isl_version}
+BuildRequires: isl-devel = %{isl_version}
+Requires: isl = %{isl_version}
+%endif
%if %{build_libstdcxx_docs}
BuildRequires: doxygen >= 1.7.1
BuildRequires: graphviz, dblatex, texlive-collection-latex, docbook5-style-xsl
@@ -182,27 +184,22 @@ Requires(preun): /sbin/install-info
AutoReq: true
Provides: bundled(libiberty)
-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-pr64336.patch
-Patch18: gcc49-pr64536.patch
-
-Patch1100: cloog-%{cloog_version}-ppc64le-config.patch
+Patch0: gcc5-hack.patch
+Patch1: gcc5-java-nomulti.patch
+Patch2: gcc5-ppc32-retaddr.patch
+Patch3: gcc5-rh330771.patch
+Patch4: gcc5-i386-libgomp.patch
+Patch5: gcc5-sparc-config-detection.patch
+Patch6: gcc5-libgomp-omp_h-multilib.patch
+Patch7: gcc5-libtool-no-rpath.patch
+Patch8: gcc5-isl-dl.patch
+Patch10: gcc5-libstdc++-docs.patch
+Patch11: gcc5-no-add-needed.patch
+Patch12: gcc5-libgo-p224.patch
+Patch13: gcc5-aarch64-async-unw-tables.patch
+Patch14: gcc5-libsanitize-aarch64-va42.patch
+Patch15: gcc5-ppc-jit.patch
+Patch16: gcc5-pr64738.patch
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
@@ -220,11 +217,11 @@ Patch1100: cloog-%{cloog_version}-ppc64le-config.patch
%endif
%description
-The gcc package contains the GNU Compiler Collection version 4.9.
+The gcc package contains the GNU Compiler Collection version 5.
You'll need this package in order to compile C code.
%package -n libgcc
-Summary: GCC version 4.9 shared support library
+Summary: GCC version 5 shared support library
Group: System Environment/Libraries
Autoreq: false
%if !%{build_ada}
@@ -375,6 +372,33 @@ Requires(preun): /sbin/install-info
This package contains GCC shared support library which is needed
for OpenMP v3.0 support.
+%package gdb-plugin
+Summary: GCC plugin for GDB
+Group: Development/Debuggers
+Requires: gcc = %{version}-%{release}
+
+%description gdb-plugin
+This package contains GCC plugin for GDB C expression evaluation.
+
+%package -n libgccjit
+Summary: Library for embedding GCC inside programs and libraries
+Group: System Environment/Libraries
+Requires: gcc = %{version}-%{release}
+
+%description -n libgccjit
+This package contains shared library with GCC JIT front-end.
+
+%package -n libgccjit-devel
+Summary: Support for embedding GCC inside programs and libraries
+Group: Development/Libraries
+BuildRequires: python-sphinx
+Requires: libgccjit = %{version}-%{release}
+Requires(post): /sbin/install-info
+Requires(preun): /sbin/install-info
+
+%description -n libgccjit-devel
+This package contains header files and documentation for GCC JIT front-end.
+
%package -n libquadmath
Summary: GCC __float128 shared support library
Group: System Environment/Libraries
@@ -620,6 +644,8 @@ Requires: libgo = %{version}-%{release}
Requires: libgo-devel = %{version}-%{release}
Requires(post): /sbin/install-info
Requires(preun): /sbin/install-info
+Requires(post): %{_sbindir}/update-alternatives
+Requires(postun): %{_sbindir}/update-alternatives
Autoreq: true
%description go
@@ -669,7 +695,7 @@ not stable, so plugins must be rebuilt any time GCC is updated.
%define debug_package %{nil}
%global __debug_package 1
%global __debug_install_post \
- %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_opts} "%{_builddir}/gcc-%{version}-%{DATE}"\
+ PATH=%{_builddir}/gcc-%{version}-%{DATE}/dwz-wrapper/:$PATH %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/gcc-%{version}-%{DATE}"\
%{_builddir}/gcc-%{version}-%{DATE}/split-debuginfo.sh\
%{nil}
@@ -703,7 +729,7 @@ package or when debugging this package.
%endif
%prep
-%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 2
+%setup -q -n gcc-%{version}-%{DATE}
%patch0 -p0 -b .hack~
%patch1 -p0 -b .java-nomulti~
%patch2 -p0 -b .ppc32-retaddr~
@@ -712,26 +738,53 @@ package or when debugging this package.
%patch5 -p0 -b .sparc-config-detection~
%patch6 -p0 -b .libgomp-omp_h-multilib~
%patch7 -p0 -b .libtool-no-rpath~
-%if %{build_cloog}
-%patch8 -p0 -b .cloog-dl~
-%patch9 -p0 -b .cloog-dl2~
+%if %{build_isl}
+%patch8 -p0 -b .isl-dl~
%endif
-%patch10 -p0 -b .pr38757~
%if %{build_libstdcxx_docs}
-%patch11 -p0 -b .libstdc++-docs~
-%endif
-%patch12 -p0 -b .no-add-needed~
-%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7
-%patch13 -p0 -b .color-auto~
+%patch10 -p0 -b .libstdc++-docs~
%endif
-%patch14 -p0 -b .libgo-p224~
+%patch11 -p0 -b .no-add-needed~
+%patch12 -p0 -b .libgo-p224~
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
-%patch15 -p0 -b .aarch64-async-unw-tables~
-%patch16 -p0 -b .aarch64-unwind-opt~
-%patch17 -p0 -b .pr64336~
-%patch18 -p0 -b .pr64536~
+%patch13 -p0 -b .aarch64-async-unw-tables~
+%patch14 -p0 -b .libsanitize-aarch64-va42~
+%patch15 -p0 -b .ppc-jit~
+%patch16 -p0 -b .pr64738~
%if 0%{?_enable_debug_packages}
+mkdir dwz-wrapper
+if [ -f /usr/bin/dwz ]; then
+cat > dwz-wrapper/dwz <<\EOF
+#!/bin/bash
+dwz_opts=
+dwzm_opts=
+dwz_files=
+dwzm_files=
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -l|-L)
+ dwz_opts="$dwz_opts $1 $2"; shift;;
+ -m|-M)
+ dwzm_opts="$dwzm_opts $1 $2"; shift;;
+ -*)
+ dwz_opts="$dwz_opts $1";;
+ *)
+ if [[ "$1" =~ (lib[0-9]*/lib(gcc[_.]|gomp|stdc|quadmath|itm|go\.so)|bin/gofmt.gcc.debug|bin/go.gcc.debug|/cgo.debug) ]]; then
+ dwz_files="$dwz_files $1"
+ else
+ dwzm_files="$dwzm_files $1"
+ fi;;
+ esac
+ shift
+done
+if [ -f /usr/bin/dwz ]; then
+ /usr/bin/dwz $dwz_opts $dwz_files
+ /usr/bin/dwz $dwz_opts $dwzm_opts $dwzm_files
+fi
+EOF
+chmod 755 dwz-wrapper/dwz
+fi
cat > split-debuginfo.sh <<\EOF
#!/bin/sh
BUILDDIR="%{_builddir}/gcc-%{version}-%{DATE}"
@@ -741,7 +794,7 @@ if [ -f "${BUILDDIR}"/debugfiles.list \
> "${BUILDDIR}"/debugfiles-base.list
cd "${RPM_BUILD_ROOT}"
for f in `find usr/lib/debug -name \*.debug \
- | egrep 'lib[0-9]*/lib(gcc|gomp|stdc|quadmath|itm)'`; do
+ | egrep 'lib[0-9]*/lib(gcc[_.]|gomp|stdc|quadmath|itm)'`; do
echo "/$f" >> "${BUILDDIR}"/debugfiles-base.list
if [ -f "$f" -a ! -L "$f" ]; then
cp -a "$f" "${BUILDDIR}"/test.debug
@@ -752,10 +805,32 @@ if [ -f "${BUILDDIR}"/debugfiles.list \
fi
done
for f in `find usr/lib/debug/.build-id -type l`; do
- ls -l "$f" | egrep -q -- '->.*lib[0-9]*/lib(gcc|gomp|stdc|quadmath|itm)' \
+ ls -l "$f" | egrep -q -- '->.*lib[0-9]*/lib(gcc[_.]|gomp|stdc|quadmath|itm)' \
&& echo "/$f" >> "${BUILDDIR}"/debugfiles-base.list
done
- grep -v -f "${BUILDDIR}"/debugfiles-base.list \
+ cp -a "${BUILDDIR}"/debugfiles-base.list "${BUILDDIR}"/debugfiles-remove.list
+%if %{build_go}
+ libgoso=`basename .%{_prefix}/%{_lib}/libgo.so.7.*`
+ for f in %{_prefix}/bin/go.gcc \
+ %{_prefix}/bin/gofmt.gcc \
+ %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cgo \
+ %{_prefix}/%{_lib}/$libgoso ; do
+ eu-unstrip .$f usr/lib/debug$f.debug -o .$f.new
+ chmod --reference=.$f .$f.new
+ mv -f .$f.new .$f
+ rm -f usr/lib/debug$f.debug
+ echo "/usr/lib/debug$f.debug" >> "${BUILDDIR}"/debugfiles-remove.list
+ done
+ rm -f usr/lib/debug%{_prefix}/%{_lib}/libgo.so.7.debug
+ echo "/usr/lib/debug%{_prefix}/%{_lib}/libgo.so.7.debug" >> "${BUILDDIR}"/debugfiles-remove.list
+ for f in `find usr/lib/debug/.build-id -type l`; do
+ if ls -l "$f" | egrep -q -- '->.*(/bin/go.gcc|/bin/gofmt.gcc|/cgo|lib[0-9]*/libgo\.so)'; then
+ echo "/$f" >> "${BUILDDIR}"/debugfiles-remove.list
+ rm -f "$f"
+ fi
+ done
+%endif
+ grep -v -f "${BUILDDIR}"/debugfiles-remove.list \
"${BUILDDIR}"/debugfiles.list > "${BUILDDIR}"/debugfiles.list.new
mv -f "${BUILDDIR}"/debugfiles.list.new "${BUILDDIR}"/debugfiles.list
for f in `LC_ALL=C sort -z -u "${BUILDDIR}"/debugsources-base.list \
@@ -778,40 +853,16 @@ EOF
chmod 755 split-debuginfo.sh
%endif
-%patch1100 -p0 -b .cloog-ppc64le-config~
-
-sed -i -e 's/4\.9\.3/4.9.2/' gcc/BASE-VER
echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
-%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7
-# 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
-%else
-# Default to -gdwarf-3 rather than -gdwarf-2
-sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(3)/' gcc/common.opt
-sed -i 's/\(may be either 2, 3 or 4; the default version is \)2\./\13./' gcc/doc/invoke.texi
-sed -i 's/#define[[:blank:]]*EMIT_ENTRY_VALUE[[:blank:]].*$/#define EMIT_ENTRY_VALUE 0/' gcc/{var-tracking,dwarf2out}.c
-sed -i 's/#define[[:blank:]]*EMIT_TYPED_DWARF_STACK[[:blank:]].*$/#define EMIT_TYPED_DWARF_STACK 0/' gcc/dwarf2out.c
-sed -i 's/#define[[:blank:]]*EMIT_DEBUG_MACRO[[:blank:]].*$/#define EMIT_DEBUG_MACRO 0/' gcc/dwarf2out.c
-%endif
-
cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
-# Hack to avoid building multilib libjava
-perl -pi -e 's/^all: all-redirect/ifeq (\$(MULTISUBDIR),)\nall: all-redirect\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in
-perl -pi -e 's/^install: install-redirect/ifeq (\$(MULTISUBDIR),)\ninstall: install-redirect\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in
-perl -pi -e 's/^check: check-redirect/ifeq (\$(MULTISUBDIR),)\ncheck: check-redirect\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in
-perl -pi -e 's/^all: all-recursive/ifeq (\$(MULTISUBDIR),)\nall: all-recursive\nelse\nall:\n\techo Multilib libjava build disabled\nendif/' libjava/Makefile.in
-perl -pi -e 's/^install: install-recursive/ifeq (\$(MULTISUBDIR),)\ninstall: install-recursive\nelse\ninstall:\n\techo Multilib libjava install disabled\nendif/' libjava/Makefile.in
-perl -pi -e 's/^check: check-recursive/ifeq (\$(MULTISUBDIR),)\ncheck: check-recursive\nelse\ncheck:\n\techo Multilib libjava check disabled\nendif/' libjava/Makefile.in
-
./contrib/gcc_update --touch
LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi
+sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt
+
%ifarch ppc
if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then
mkdir -p libstdc++-v3/config/abi/post/powerpc64-linux-gnu/64
@@ -841,49 +892,8 @@ rm -fr obj-%{gcc_target_platform}
mkdir obj-%{gcc_target_platform}
cd obj-%{gcc_target_platform}
-%if %{build_cloog}
-mkdir isl-build isl-install
-%ifarch s390 s390x
-ISL_FLAG_PIC=-fPIC
-%else
-ISL_FLAG_PIC=-fpic
-%endif
-cd isl-build
-../../isl-%{isl_version}/configure --disable-shared \
- CC=/usr/bin/gcc CXX=/usr/bin/g++ \
- CFLAGS="${CFLAGS:-%optflags} $ISL_FLAG_PIC" --prefix=`cd ..; pwd`/isl-install
-make %{?_smp_mflags}
-make install
-cd ..
-
-mkdir cloog-build cloog-install
-cd cloog-build
-cat >> ../../cloog-%{cloog_version}/source/isl/constraints.c << \EOF
-#include
-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-%{cloog_version}/{,test/}Makefile.{am,in}
-isl_prefix=`cd ../isl-install; pwd` \
-../../cloog-%{cloog_version}/configure --with-isl=system \
- --with-isl-prefix=`cd ../isl-install; pwd` \
- CC=/usr/bin/gcc CXX=/usr/bin/g++ \
- CFLAGS="${CFLAGS:-%optflags}" CXXFLAGS="${CXXFLAGS:-%optflags}" \
- --prefix=`cd ..; pwd`/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 %{?_smp_mflags}
-make %{?_smp_mflags} 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
-cd ../..
-%endif
-
CC=gcc
+CXX=g++
OPT_FLAGS=`echo %{optflags}|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g'`
@@ -894,24 +904,6 @@ OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g;s/-mcp
%ifarch %{ix86}
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-march=i.86//g'`
%endif
-%ifarch sparc64
-cat > gcc64 <<"EOF"
-#!/bin/sh
-exec /usr/bin/gcc -m64 "$@"
-EOF
-chmod +x gcc64
-CC=`pwd`/gcc64
-%endif
-%ifarch ppc64 ppc64le ppc64p7
-if gcc -m64 -xc -S /dev/null -o - > /dev/null 2>&1; then
- cat > gcc64 <<"EOF"
-#!/bin/sh
-exec /usr/bin/gcc -m64 "$@"
-EOF
- chmod +x gcc64
- CC=`pwd`/gcc64
-fi
-%endif
OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'`
case "$OPT_FLAGS" in
*-fasynchronous-unwind-tables*)
@@ -927,12 +919,9 @@ enablelada=,ada
%if %{build_go}
enablelgo=,go
%endif
-CC="$CC" CFLAGS="$OPT_FLAGS" \
- CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
- | sed 's/ -Werror=format-security / -Wformat -Werror=format-security /'`" \
- XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" GCJFLAGS="$OPT_FLAGS" \
- ../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
- --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \
+CONFIGURE_OPTS="\
+ --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
+ --with-bugurl=http://bugzilla.redhat.com/bugzilla \
--enable-shared --enable-threads=posix --enable-checking=release \
%ifarch ppc64le
--disable-multilib \
@@ -941,13 +930,15 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
%endif
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \
--enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu \
- --enable-languages=c,c++,objc,obj-c++,fortran${enablelada}${enablelgo},lto \
--enable-plugin --enable-initfini-array \
--disable-libgcj \
-%if %{build_cloog}
- --with-isl=`pwd`/isl-install --with-cloog=`pwd`/cloog-install \
+%if 0%{fedora} >= 21 && 0%{fedora} <= 22
+ --with-default-libstdcxx-abi=c++98 \
+%endif
+%if %{build_isl}
+ --with-isl \
%else
- --without-isl --without-cloog \
+ --without-isl \
%endif
%if 0%{?fedora} >= 21 || 0%{?rhel} >= 7
%if %{attr_ifunc}
@@ -972,7 +963,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
%ifarch sparc sparcv9
--host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7
%endif
-%ifarch ppc ppc64 ppc64le ppc64p7
+%ifarch ppc ppc64 ppc64p7
%if 0%{?rhel} >= 7
--with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \
%endif
@@ -980,6 +971,14 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
--with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \
%endif
%endif
+%ifarch ppc64le
+%if 0%{?rhel} >= 7
+ --with-cpu-32=power8 --with-tune-32=power8 --with-cpu-64=power8 --with-tune-64=power8 \
+%endif
+%if 0%{?fedora} > 21 && 0%{?fedora} < 24
+ --with-cpu-32=power7 --with-tune-32=power8 --with-cpu-64=power7 --with-tune-64=power8 \
+%endif
+%endif
%ifarch ppc
--build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32
%endif
@@ -1009,22 +1008,52 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
%endif
%endif
%ifarch armv7hl
- --with-cpu=cortex-a8 --with-tune=cortex-a8 --with-arch=armv7-a \
+ --with-tune=cortex-a8 --with-arch=armv7-a \
--with-float=hard --with-fpu=vfpv3-d16 --with-abi=aapcs-linux \
%endif
%ifnarch sparc sparcv9 ppc
- --build=%{gcc_target_platform}
+ --build=%{gcc_target_platform} \
%endif
+ "
+
+CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
+ CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
+ | sed 's/ -Werror=format-security / -Wformat -Werror=format-security /'`" \
+ XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
+ ../configure --enable-bootstrap \
+ --enable-languages=c,c++,objc,obj-c++,fortran${enablelada}${enablelgo},lto \
+ $CONFIGURE_OPTS
-%ifarch %{arm} sparc sparcv9 sparc64
-GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap
+%ifarch sparc sparcv9 sparc64 aarch64
+make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap
%else
-GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap
+make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap
%endif
-%if %{build_cloog}
-cp -a cloog-install/lib/libcloog-isl.so.4 gcc/
-%endif
+CC="`%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-cc`"
+CXX="`%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-cxx` `%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-includes`"
+
+# Build libgccjit separately, so that normal compiler binaries aren't -fpic
+# unnecessarily.
+mkdir objlibgccjit
+cd objlibgccjit
+CC="$CC" CXX="$CXX" CFLAGS="`echo $OPT_FLAGS | sed 's/-Werror=format-security//'`" \
+ CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \
+ | sed 's/-Werror=format-security//'`" \
+ XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
+ ../../configure --disable-bootstrap --enable-host-shared \
+ --enable-languages=jit $CONFIGURE_OPTS
+make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc
+cp -a gcc/libgccjit.so* ../gcc/
+cd ../gcc/
+ln -sf xgcc %{gcc_target_platform}-gcc-%{version}
+cp -a Makefile{,.orig}
+sed -i -e '/^CHECK_TARGETS/s/$/ check-jit/' Makefile
+touch -r Makefile.orig Makefile
+rm Makefile.orig
+make jit.sphinx.html
+make jit.sphinx.install-html jit_htmldir=`pwd`/../../rpm.doc/libgccjit-devel/html
+cd ..
# Make generated man pages even if Pod::Man is not new enough
perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
@@ -1046,9 +1075,9 @@ cd ../..
cd ..
mkdir -p rpm.doc/gfortran rpm.doc/objc
mkdir -p rpm.doc/go rpm.doc/libgo rpm.doc/libquadmath rpm.doc/libitm
-mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libgomp,libatomic,libsanitizer,libcilkrts}
+mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/java,gcc/ada,gcc/jit,libstdc++-v3,libobjc,libgomp,libcc1,libatomic,libsanitizer,libcilkrts}
-for i in {gcc,gcc/cp,gcc/java,gcc/ada,libstdc++-v3,libobjc,libgomp,libatomic,libsanitizer,libcilkrts}/ChangeLog*; do
+for i in {gcc,gcc/cp,gcc/java,gcc/ada,gcc/jit,libstdc++-v3,libobjc,libgomp,libcc1,libatomic,libsanitizer,libcilkrts}/ChangeLog*; do
cp -p $i rpm.doc/changelogs/$i
done
@@ -1102,10 +1131,6 @@ chmod 644 %{buildroot}%{_infodir}/gnat*
FULLPATH=%{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
FULLEPATH=%{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
-%if %{build_cloog}
-cp -a cloog-install/lib/libcloog-isl.so.4 $FULLPATH/
-%endif
-
# fix some things
ln -sf gcc %{buildroot}%{_prefix}/bin/cc
rm -f %{buildroot}%{_prefix}/lib/cpp
@@ -1115,6 +1140,13 @@ rm -f %{buildroot}%{_infodir}/dir
gzip -9 %{buildroot}%{_infodir}/*.info*
ln -sf gcc %{buildroot}%{_prefix}/bin/gnatgcc
+%if %{build_go}
+mv %{buildroot}%{_prefix}/bin/go{,.gcc}
+mv %{buildroot}%{_prefix}/bin/gofmt{,.gcc}
+ln -sf /etc/alternatives/go %{buildroot}%{_prefix}/bin/go
+ln -sf /etc/alternatives/gofmt %{buildroot}%{_prefix}/bin/gofmt
+%endif
+
cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`"
for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do
if ! diff -up $cxxconfig $i; then
@@ -1265,6 +1297,12 @@ done
touch -r hook.in %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/libstdc++*gdb.py
popd
+rm -f $FULLEPATH/libgccjit.so
+cp -a objlibgccjit/gcc/libgccjit.so* %{buildroot}%{_prefix}/%{_lib}/
+cp -a ../gcc/jit/libgccjit*.h %{buildroot}%{_prefix}/include/
+/usr/bin/install -c -m 644 objlibgccjit/gcc/doc/libgccjit.info %{buildroot}/%{_infodir}/
+gzip -9 %{buildroot}/%{_infodir}/libgccjit.info
+
pushd $FULLPATH
if [ "%{_lib}" = "lib" ]; then
ln -sf ../../../libobjc.so.4 libobjc.so
@@ -1272,7 +1310,7 @@ ln -sf ../../../libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../libgfortran.so.3.* libgfortran.so
ln -sf ../../../libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../libgo.so.5.* libgo.so
+ln -sf ../../../libgo.so.7.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../libquadmath.so.0.* libquadmath.so
@@ -1284,7 +1322,7 @@ ln -sf ../../../libitm.so.1.* libitm.so
ln -sf ../../../libatomic.so.1.* libatomic.so
%endif
%if %{build_libasan}
-ln -sf ../../../libasan.so.1.* libasan.so
+ln -sf ../../../libasan.so.2.* libasan.so
mv ../../../libasan_preinit.o libasan_preinit.o
%endif
%if %{build_libubsan}
@@ -1299,7 +1337,7 @@ ln -sf ../../../../%{_lib}/libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../../%{_lib}/libgfortran.so.3.* libgfortran.so
ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../../%{_lib}/libgo.so.5.* libgo.so
+ln -sf ../../../../%{_lib}/libgo.so.7.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../../%{_lib}/libquadmath.so.0.* libquadmath.so
@@ -1311,7 +1349,7 @@ ln -sf ../../../../%{_lib}/libitm.so.1.* libitm.so
ln -sf ../../../../%{_lib}/libatomic.so.1.* libatomic.so
%endif
%if %{build_libasan}
-ln -sf ../../../../%{_lib}/libasan.so.1.* libasan.so
+ln -sf ../../../../%{_lib}/libasan.so.2.* libasan.so
mv ../../../../%{_lib}/libasan_preinit.o libasan_preinit.o
%endif
%if %{build_libubsan}
@@ -1375,28 +1413,28 @@ mv -f $FULLPATH/ada{include,lib} $FULLLPATH/
pushd $FULLLPATH/adalib
if [ "%{_lib}" = "lib" ]; then
ln -sf ../../../../../libgnarl-*.so libgnarl.so
-ln -sf ../../../../../libgnarl-*.so libgnarl-4.9.so
+ln -sf ../../../../../libgnarl-*.so libgnarl-5.so
ln -sf ../../../../../libgnat-*.so libgnat.so
-ln -sf ../../../../../libgnat-*.so libgnat-4.9.so
+ln -sf ../../../../../libgnat-*.so libgnat-5.so
else
ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl.so
-ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl-4.9.so
+ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl-5.so
ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat.so
-ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat-4.9.so
+ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat-5.so
fi
popd
else
pushd $FULLPATH/adalib
if [ "%{_lib}" = "lib" ]; then
ln -sf ../../../../libgnarl-*.so libgnarl.so
-ln -sf ../../../../libgnarl-*.so libgnarl-4.9.so
+ln -sf ../../../../libgnarl-*.so libgnarl-5.so
ln -sf ../../../../libgnat-*.so libgnat.so
-ln -sf ../../../../libgnat-*.so libgnat-4.9.so
+ln -sf ../../../../libgnat-*.so libgnat-5.so
else
ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so
-ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.9.so
+ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-5.so
ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so
-ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.9.so
+ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-5.so
fi
popd
fi
@@ -1409,8 +1447,8 @@ ln -sf ../`echo ../../../../lib/libgfortran.so.3.* | sed s~/lib/~/lib64/~` 64/li
ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.5.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.5.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.7.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.7.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -1429,8 +1467,8 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libatomic.so.1.* | sed 's,
%endif
%if %{build_libasan}
rm -f libasan.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libasan.so.1.* | sed 's,^.*liba,liba,'`' )' > libasan.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libasan.so.1.* | sed 's,^.*liba,liba,'`' )' > 64/libasan.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libasan.so.2.* | sed 's,^.*liba,liba,'`' )' > libasan.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libasan.so.2.* | sed 's,^.*liba,liba,'`' )' > 64/libasan.so
mv ../../../../lib64/libasan_preinit.o 64/libasan_preinit.o
%endif
%if %{build_libubsan}
@@ -1496,8 +1534,8 @@ ln -sf ../`echo ../../../../lib64/libgfortran.so.3.* | sed s~/../lib64/~/~` 32/l
ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.5.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.5.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.7.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.7.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -1516,8 +1554,8 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libatomic.so.1.* | sed 's,
%endif
%if %{build_libasan}
rm -f libasan.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libasan.so.1.* | sed 's,^.*liba,liba,'`' )' > libasan.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libasan.so.1.* | sed 's,^.*liba,liba,'`' )' > 32/libasan.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libasan.so.2.* | sed 's,^.*liba,liba,'`' )' > libasan.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libasan.so.2.* | sed 's,^.*liba,liba,'`' )' > 32/libasan.so
mv ../../../../lib/libasan_preinit.o 32/libasan_preinit.o
%endif
%if %{build_libubsan}
@@ -1615,11 +1653,13 @@ strip -g `find . \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \
-o -name libgcc.a -o -name libgcov.a -o -name libquadmath.a \
-o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \
-o -name libatomic.a -o -name libasan.a -o -name libtsan.a \
- -o -name libubsan.a -o -name liblsan.a -o -name libcilkrts.a \) \
+ -o -name libubsan.a -o -name liblsan.a -o -name libcilkrts.a \
+ -o -name libcc1.a \) \
-a -type f`
popd
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgfortran.so.3.*
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgomp.so.1.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libcc1.so.0.*
%if %{build_libquadmath}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libquadmath.so.0.*
%endif
@@ -1630,7 +1670,7 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libitm.so.1.*
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libatomic.so.1.*
%endif
%if %{build_libasan}
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libasan.so.1.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libasan.so.2.*
%endif
%if %{build_libubsan}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libubsan.so.0.*
@@ -1645,7 +1685,7 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libtsan.so.0.*
chmod 755 %{buildroot}%{_prefix}/%{_lib}/liblsan.so.0.*
%endif
%if %{build_go}
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.5.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.7.*
%endif
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libobjc.so.4.*
@@ -1702,7 +1742,6 @@ rm -f %{buildroot}%{_prefix}/lib/{32,64}/libiberty.a
rm -f %{buildroot}%{_prefix}/%{_lib}/libssp*
rm -f %{buildroot}%{_prefix}/%{_lib}/libvtv* || :
rm -f %{buildroot}%{_prefix}/bin/gappletviewer || :
-rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcc-%{version} || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gfortran || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gccgo || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcj || :
@@ -1817,6 +1856,16 @@ if [ $1 = 0 -a -f %{_infodir}/gnat_rm.info.gz ]; then
--info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || :
fi
+%post go
+%{_sbindir}/update-alternatives --install \
+ %{_prefix}/bin/go go %{_prefix}/bin/go.gcc 92 \
+ --slave %{_prefix}/bin/gofmt gofmt %{_prefix}/bin/gofmt.gcc
+
+%preun go
+if [ $1 = 0 ]; then
+ %{_sbindir}/update-alternatives --remove go %{_prefix}/bin/go.gcc
+fi
+
# Because glibc Prereq's libgcc and /sbin/ldconfig
# comes from glibc, it might not exist yet when
# libgcc is installed
@@ -1871,6 +1920,26 @@ fi
%postun -n libgomp -p /sbin/ldconfig
+%post gdb-plugin -p /sbin/ldconfig
+
+%postun gdb-plugin -p /sbin/ldconfig
+
+%post -n libgccjit -p /sbin/ldconfig
+
+%postun -n libgccjit -p /sbin/ldconfig
+
+%post -n libgccjit-devel
+if [ -f %{_infodir}/libgccjit.info.gz ]; then
+ /sbin/install-info \
+ --info-dir=%{_infodir} %{_infodir}/libgccjit.info.gz || :
+fi
+
+%preun -n libgccjit-devel
+if [ $1 = 0 -a -f %{_infodir}/libgccjit.info.gz ]; then
+ /sbin/install-info --delete \
+ --info-dir=%{_infodir} %{_infodir}/libgccjit.info.gz || :
+fi
+
%post -n libquadmath
/sbin/ldconfig
if [ -f %{_infodir}/libquadmath.info.gz ]; then
@@ -1936,6 +2005,7 @@ fi
%{_prefix}/bin/c99
%{_prefix}/bin/gcc
%{_prefix}/bin/gcov
+%{_prefix}/bin/gcov-tool
%{_prefix}/bin/gcc-ar
%{_prefix}/bin/gcc-nm
%{_prefix}/bin/gcc-ranlib
@@ -1949,6 +2019,7 @@ fi
%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc
%endif
%{_prefix}/bin/%{gcc_target_platform}-gcc
+%{_prefix}/bin/%{gcc_target_platform}-gcc-%{version}
%{_mandir}/man1/gcc.1*
%{_mandir}/man1/gcov.1*
%{_infodir}/gcc*
@@ -1974,6 +2045,7 @@ fi
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/syslimits.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/unwind.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/omp.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/openacc.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdint.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdint-gcc.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdalign.h
@@ -2022,6 +2094,20 @@ fi
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cross-stdarg.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512bwintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512dqintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512ifmaintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512ifmavlintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512vbmiintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512vbmivlintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512vlbwintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512vldqintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avx512vlintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/clflushoptintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/clwbintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/pcommitintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xsavecintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xsavesintrin.h
%endif
%ifarch ia64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ia64intrin.h
@@ -2042,9 +2128,11 @@ fi
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/unwind-arm-common.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/arm_neon.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/arm_acle.h
%endif
%ifarch aarch64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/arm_neon.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/arm_acle.h
%endif
%ifarch sparc sparcv9 sparc64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/visintrin.h
@@ -2076,9 +2164,6 @@ fi
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libsanitizer.spec
%endif
-%if %{build_cloog}
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libcloog-isl.so.*
-%endif
%ifarch sparcv9 ppc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/crt*.o
@@ -2370,6 +2455,13 @@ fi
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.f90
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib.mod
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/omp_lib_kinds.mod
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/openacc.f90
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/openacc.mod
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/openacc_kinds.mod
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/openacc_lib.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/ieee_arithmetic.mod
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/ieee_exceptions.mod
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/finclude/ieee_features.mod
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/f951
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortran.spec
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/libgfortranbegin.a
@@ -2384,6 +2476,7 @@ fi
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libcaf_single.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgfortran.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/finclude
%endif
%ifarch %{multilib_64_archs}
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32
@@ -2391,6 +2484,7 @@ fi
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libcaf_single.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/libgfortran.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/finclude
%endif
%doc rpm.doc/gfortran/*
@@ -2502,6 +2596,7 @@ fi
%files -n libgomp
%defattr(-,root,root,-)
%{_prefix}/%{_lib}/libgomp.so.1*
+%{_prefix}/%{_lib}/libgomp-plugin-host_nonshm.so.1*
%{_infodir}/libgomp.info*
%doc rpm.doc/changelogs/libgomp/ChangeLog*
@@ -2608,7 +2703,7 @@ fi
%if %{build_libasan}
%files -n libasan
%defattr(-,root,root,-)
-%{_prefix}/%{_lib}/libasan.so.1*
+%{_prefix}/%{_lib}/libasan.so.2*
%files -n libasan-static
%defattr(-,root,root,-)
@@ -2716,8 +2811,14 @@ fi
%if %{build_go}
%files go
%defattr(-,root,root,-)
+%ghost %{_prefix}/bin/go
+%{_prefix}/bin/go.gcc
%{_prefix}/bin/gccgo
+%ghost %{_prefix}/bin/gofmt
+%{_prefix}/bin/gofmt.gcc
%{_mandir}/man1/gccgo.1*
+%{_mandir}/man1/go.1*
+%{_mandir}/man1/gofmt.1*
%dir %{_prefix}/lib/gcc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
@@ -2725,6 +2826,7 @@ fi
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/go1
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/cgo
%ifarch sparcv9 ppc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/libgo.so
@@ -2748,7 +2850,7 @@ fi
%files -n libgo
%defattr(-,root,root,-)
-%{_prefix}/%{_lib}/libgo.so.5*
+%{_prefix}/%{_lib}/libgo.so.7*
%doc rpm.doc/libgo/*
%files -n libgo-devel
@@ -2797,420 +2899,42 @@ fi
%endif
%endif
+%files -n libgccjit
+%defattr(-,root,root,-)
+%{_prefix}/%{_lib}/libgccjit.so.*
+%doc rpm.doc/changelogs/gcc/jit/ChangeLog*
+
+%files -n libgccjit-devel
+%defattr(-,root,root,-)
+%{_prefix}/%{_lib}/libgccjit.so
+%{_prefix}/include/libgccjit*.h
+%{_infodir}/libgccjit.info*
+%doc rpm.doc/libgccjit-devel/*
+%doc gcc/jit/docs/examples
+
%files plugin-devel
%defattr(-,root,root,-)
%dir %{_prefix}/lib/gcc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
-%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin/gtype.state
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin/include
%dir %{_prefix}/libexec/gcc
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
+%files gdb-plugin
+%defattr(-,root,root,-)
+%{_prefix}/%{_lib}/libcc1.so*
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin/libcc1plugin.so*
+%doc rpm.doc/changelogs/libcc1/ChangeLog*
+
%changelog
-* Thu Jan 8 2015 Jakub Jelinek 4.9.2-5
-- don't remove tablejumps in rtl_tidy_fallthru_edge (#1136939,
- PR rtl-optimization/64536)
-
-* Wed Jan 7 2015 Jakub Jelinek 4.9.2-4
-- update from the 4.9 branch
- - PRs ada/64492, c++/38958, c++/60955, c++/63657, c++/63658, c++/64029,
- c++/64251, c++/64297, c++/64352, c++/64487, fortran/64244,
- libstdc++/64302, libstdc++/64303, rtl-optimization/64010,
- target/64409, target/64507
-- backport -mskip-rax-setup support from trunk
-- fix -fsanitize=float-cast-overflow (PR sanitizer/64344)
-- fix handling of fortran components vs. cray pointers (#1134560,
- PR fortran/62174)
-- package libcilkrts.spec (#1173905)
-
-* Wed Dec 17 2014 Jakub Jelinek 4.9.2-3
-- update from the 4.9 branch
- - PRs libstdc++/64239, sanitizer/64265, target/64200,
- tree-optimization/63551, tree-optimization/64269
-- fix up SANITIZE_* enum values, so that -fsanitize=bool is independent
- from -fsanitize=float-divide-by-zero and -fsanitize=enum is independent
- from -fsanitize=float-cast-overflow (#1173185)
-- fix -fsanitize=float-cast-overflow in C (#1173185, PR sanitizer/64289)
-- fix -fsanitize=thread (PR sanitizer/64336)
-- fix up Fortran DATA error recovery (#1115207, PR fortran/61669)
-
-* Fri Dec 12 2014 Jakub Jelinek 4.9.2-2
-- update from the 4.9 branch
- - PRs ada/42978, ada/47500, bootstrap/63703, bootstrap/64213, c++/56493,
- c++/63265, c++/63849, c/52769, c/59708, fortran/63938, ipa/63551,
- ipa/63838, ipa/64153, libstdc++/61947, libstdc++/63497,
- libstdc++/63840, libstdc++/64103, libstdc++/64140, libstdc++/64203,
- middle-end/63665, middle-end/63738, middle-end/63762,
- middle-end/64067, middle-end/64111, middle-end/64225,
- preprocessor/60436, rtl-optimization/63475, rtl-optimization/63483,
- rtl-optimization/64037, sanitizer/63913, target/50751, target/51244,
- target/53976, target/55351, target/56846, target/59593, target/60111,
- target/61535, target/63538, target/63661, target/63673, target/63783,
- target/63947, target/64108, target/64113, target/64115,
- testsuite/63305, tree-optimization/61686, tree-optimization/61750,
- tree-optimization/61927, tree-optimization/62021,
- tree-optimization/62167, tree-optimization/62238,
- tree-optimization/63605, tree-optimization/63738,
- tree-optimization/63841, tree-optimization/63915,
- tree-optimization/64191
-
-* Sat Nov 1 2014 Jakub Jelinek 4.9.2-1
-- update from the 4.9 branch
- - GCC 4.9.2 release
- - PRs sanitizer/63638, sanitizer/63697, tree-optimization/63530
-- handle REG_EQ* notes in REE (PR rtl-optimization/63659)
-- include asan/lsan sanitizer/ includes
-
-* Fri Oct 24 2014 Jakub Jelinek 4.9.1-13
-- update from the 4.9 branch
- - PRs bootstrap/63632, libfortran/63589, libstdc++/63500,
- lto/63603, tree-optimization/63563
-- backport -f{,no-}sanitize-recover= support from the trunk
-- backport var-tracking fix (#1151226, PR debug/63623)
-
-* Fri Oct 17 2014 Jakub Jelinek 4.9.1-12
-- update from the 4.9 branch
- - PRs ada/63225, c++/63306, c++/63405, c++/63415, c++/63437, c++/63455,
- c/63495, debug/63342, fortran/59488, ipa/61144, ipa/62121,
- libgfortran/63460, libgomp/61200, libstdc++/57440, libstdc++/59603,
- libstdc++/63199, libstdc++/63449, libstdc++/63456, lto/62026,
- regression/61510, rtl-optimization/57003, rtl-optimization/63448,
- sanitizer/61100, sanitizer/61530, sanitizer/61547, sanitizer/61897,
- sanitizer/62089, sanitizer/62140, target/52941, target/63428,
- tree-optimization/61969, tree-optimization/62031,
- tree-optimization/63302, tree-optimization/63375,
- tree-optimization/63379, tree-optimization/63380
- - initial -fsanitize=kernel-address support
-
-* Tue Sep 30 2014 Jakub Jelinek 4.9.1-11
-- update from the 4.9 branch
- - PRs c++/61465, c++/62219, c++/63249, inline-asm/63282, middle-end/63247,
- plugins/63410, sanitizer/61272, target/49423, target/61407,
- target/62218, target/63335, tree-optimization/63341
-- avoid fnsplit if there are forced labels accessed in between the partitions
- (#1106758, PR tree-optimization/63186)
-
-* Mon Sep 22 2014 Jakub Jelinek 4.9.1-10
-- update from the 4.9 branch
- - PRs c++/62017, c++/63241, c++/63248, debug/63284, debug/63328, ipa/61654,
- target/61853, testsuite/63292
-- fix scheduler -fcompare-debug issue (#1140872, PR debug/63285)
-
-* Fri Sep 12 2014 Jakub Jelinek 4.9.1-9
-- update from the 4.9 branch
- - PRs c++/58624, c++/61214, c++/61659, c++/62129, c++/62224, c++/62659,
- c++/63139, c/61271, c/62294, fortran/62106, fortran/62142,
- fortran/62214, fortran/62215, fortran/62270, ipa/60449, ipa/61986,
- ipa/62015, libgfortran/62188, libstdc++/62264, libstdc++/63219,
- middle-end/61776, other/62008, other/62248, rtl-optimization/61672,
- rtl-optimization/62004, rtl-optimization/62030,
- rtl-optimization/62079, rtl-optimization/62146, target/61641,
- target/61996, target/62011, target/62038, target/62040, target/62111,
- target/62195, target/62261, target/62262, target/62312, target/63209,
- target/63223, target/63228, testsuite/56194, tree-optimization/60196,
- tree-optimization/62075, tree-optimization/62091,
- tree-optimization/62175, tree-optimization/63189
-- fix s390{,x} return address handling in epilogues (#1131899,
- PR target/62662)
-
-* Fri Aug 15 2014 Jakub Jelinek 4.9.1-8
-- update from the 4.9 branch
- - PRs fortran/62076, fortran/62107, lto/62032, middle-end/62092,
- target/61713
-- allow elements/components of allocatables in !$omp atomic
- (PR fortran/62131)
-- require/build require >= 2.24 binutils
-
-* Thu Aug 14 2014 Jakub Jelinek 4.9.1-7
-- fix up scheduler deps handling fix (PR target/62025)
-- vectorization fix (PR tree-optimization/62073)
-
-* Wed Aug 13 2014 Jakub Jelinek 4.9.1-6
-- update from the 4.9 branch
- - PRs c++/58714, c++/60872, c++/61959, c++/61994, fortran/61999,
- libstdc++/61667, other/61962, tree-optimization/60707
- - fix scheduler deps handling of inc with clobbers vs. mem user (#1126463,
- PR target/62025)
-- optimize slightly aarch64 unwind info
-- backport arm vcvtf2i fix from trunk (PR target/62098)
-- backport fold_ctor_reference big-endian fix (PR middle-end/62103)
-
-* Thu Aug 7 2014 Jakub Jelinek 4.9.1-5
-- update from the 4.9 branch
- - PRs debug/61923, libstdc++/58962, libstdc++/61374, libstdc++/61390,
- libstdc++/61946, middle-end/61455, other/61963, target/60102,
- tree-optimization/61320, tree-optimization/61375
-
-* Fri Aug 1 2014 Jakub Jelinek 4.9.1-3
-- update from the 4.9 branch
- - PRs fortran/61780, libobjc/61920, libstdc++/60037, target/47230,
- target/61656, target/61662, target/61794, target/61844,
- target/61855, tree-optimization/61964
- - fix libgfortran overflows on allocation (CVE-2014-5044)
-- backport -fsanitize=alignment support from the trunk
-
-* Thu Jul 24 2014 Dan Horák 4.9.1-2.1
-- fix a LRA inheritance bug (#1117799)
-
-* Thu Jul 17 2014 Jakub Jelinek 4.9.1-2
-- update from the 4.9 branch
- - PRs c-family/61741, rtl-optimization/61801, target/61737,
- tree-optimization/61779
-
-* Wed Jul 16 2014 Jakub Jelinek 4.9.1-1
-- update from the 4.9 branch
- - GCC 4.9.1 release
- - PRs c++/58155, c++/58636, c++/61661, fortran/41936, fortran/58883,
- fortran/61459, libgfortran/61640, middle-end/53590,
- middle-end/61654, target/59843, target/61062, target/61544,
- tree-optimization/61680, tree-optimization/61681,
- tree-optimization/61684, tree-optimization/61725
-- enable libitm on aarch64
-- emit .note.GNU-stack on aarch64 (#1119885)
-- small -fsanitize=bounds fix from the trunk
-
-* Sat Jul 12 2014 Tom Callaway 4.9.0-15
-- fix license handling
-
-* Wed Jul 2 2014 Jakub Jelinek 4.9.0-14
-- update from the 4.9 branch
- - OpenMP 4.0 Fortran support
- - PRs c++/51253, c++/58704, c++/58753, c++/58781, c++/58930, c++/59867,
- c++/60249, c++/61242, c++/61382, c++/61433, c++/61488, c++/61500,
- c++/61537, c++/61539, c++/61566, c++/61614, c++/61647, fortran/60127,
- fortran/60928, libgfortran/61499, middle-end/57541, target/61503,
- target/61542, target/61586, target/61633, tree-optimization/57233,
- tree-optimization/61299, tree-optimization/61306
-- fix combiner on s390 (#1102324, PR rtl-optimization/61673)
-- some -fsanitize=undefined fixes from the trunk
-
-* Wed Jun 25 2014 Jakub Jelinek 4.9.0-13
-- update from the 4.9 branch
- - PRs bootstrap/61583, c++/61556, ipa/61211, ipa/61540, libstdc++/61532,
- target/61570
-- backport -fsanitize=bounds support from the trunk
-
-* Thu Jun 19 2014 Jakub Jelinek 4.9.0-12
-- update from the 4.9 branch
- - PRs c++/59296, c++/60605, c++/61507, debug/57519
-
-* Wed Jun 18 2014 Kyle McMartin 4.9.0-11
-- avoid applying patch 16 twice
-
-* Wed Jun 18 2014 Richard Henderson
-- import fix for PR target/61545 from the 4.9 branch
-
-* Tue Jun 17 2014 Jakub Jelinek 4.9.0-10
-- update from the 4.9 branch
- - PRs fortran/45187, ipa/61186, libstdc++/60326, libstdc++/61269,
- rtl-optimization/61094, rtl-optimization/61446, target/61415,
- target/61423, target/61483
-
-* Thu Jun 12 2014 Jakub Jelinek 4.9.0-9
-- update from the 4.9 branch
- - PRs c++/61343, fortran/61406, fortran/61418, ipa/61393,
- libfortran/61173, middle-end/61456, middle-end/61486,
- target/61300, target/61431, target/61443, tree-optimization/61452
- - fix up jump threading (#1094975, PR tree-optimization/61289)
-- include vxworks-dummy.h in arm gcc-plugin-devel (PR plugins/45078)
-
-* Thu Jun 5 2014 Jakub Jelinek 4.9.0-8
-- enable ada on arm
-
-* Wed Jun 4 2014 Jakub Jelinek 4.9.0-7
-- update from the 4.9 branch
- - PRs c++/61020, c++/61134, c/58942, c/61053, ipa/61160, libstdc++/60734,
- libstdc++/61227, rtl-optimization/60866, rtl-optimization/60901,
- target/61239, tree-optimization/61383
-
-* Thu May 29 2014 Jakub Jelinek 4.9.0-6
-- update from the 4.9 branch
- - PRs bootstrap/60984, c++/60189, c/60189, c/61191, fortran/60834,
- libfortran/61310, libgcc/61152, libstdc++/61143, libstdc++/61329,
- lto/60820, lto/61012, middle-end/58094, middle-end/61010,
- middle-end/61045, middle-end/61252, rtl-optimization/61215,
- rtl-optimization/61325, target/61044, target/61202, target/61208,
- target/61231, target/61249, target/61271, tree-optimization/60979
-- backport -fsanitize=float-cast-overflow support from trunk
-
-* Sun May 18 2014 Jakub Jelinek 4.9.0-5
-- update from the 4.9 branch
- - PRs debug/61013, ipa/60854, ipa/60897, ipa/61085, libfortran/61187,
- libgcc/61097, libstdc++/60966, lto/60981, rtl-optimization/60969,
- target/60969, target/61193, tree-optimization/61158
-
-* Wed May 14 2014 Jakub Jelinek 4.9.0-4
-- update from the 4.9 branch
- - PRs c++/60019, c++/60999, c++/61083, c++/61151, driver/61106, ipa/60973,
- libfortran/61049, libstdc++/60594, libstdc++/61023, libstdc++/61086,
- libstdc++/61117, target/59952, target/60991, target/61055,
- target/61060, target/61092, tree-optimization/57864,
- tree-optimization/60902, tree-optimization/61009
-- obsolete gcc-java and libjava*, remove all traces of build_java from the
- spec file (#1096474, #1095513)
-- backport -fsanitize=float-divide-by-zero support from trunk
-
-* Tue May 6 2014 Jakub Jelinek 4.9.0-3
-- update from the 4.9 branch
- - PRs driver/61065, ipa/60965
-- disable gcc-java and libjava, broken by recent eclipse-ecj changes
-
-* Mon May 5 2014 Jakub Jelinek 4.9.0-2
-- update from the 4.9 branch
- - PRs c++/60951, c++/60980, c++/60992, fortran/60495, ipa/60911, ipa/60912,
- libstdc++/59476, libstdc++/60497, libstdc++/60710, libstdc++/61036,
- lto/60720, middle-end/60891, middle-end/60895, target/60909,
- target/60941, target/61026, tree-optimization/60903,
- tree-optimization/60930, tree-optimization/60960,
- tree-optimization/60971
-- backport -fno-sanitize-recover and -fsanitize-undefined-trap-on-error
- support from the trunk (PR sanitizer/60275)
-
-* Tue Apr 29 2014 Richard Henderson
-- enable ada, go and libatomic on aarch64
-
-* Tue Apr 22 2014 Jakub Jelinek 4.9.0-1
-- update from the 4.9 branch
- - GCC 4.9.0 release
- - PRs c/59073, c/60819, fortran/58085, fortran/60717, libfortran/60810,
- middle-end/55022, middle-end/60281, middle-end/60467,
- middle-end/60469, middle-end/60849, other/43620, other/60644,
- target/60839, target/60847, target/60868, tree-optimization/59817,
- tree-optimization/60453, tree-optimization/60823,
- tree-optimization/60836, tree-optimization/60841,
- tree-optimization/60844
-
-* Fri Apr 11 2014 Jakub Jelinek 4.9.0-0.10
-- update from the trunk and 4.9 branch
- - GCC 4.9.0-rc1
- - PRs ada/54040, ada/59346, c++/52844, ipa/60761, lto/60567,
- middle-end/60556, middle-end/60797, other/59055, testsuite/60773
- - fix CSE with non-volatile inline asm with multiple results or
- single result and clobbers (#1086332, PR rtl-optimization/60663)
-- enable ppc64le in the spec file
-
-* Wed Apr 9 2014 Jakub Jelinek 4.9.0-0.9
-- update from the trunk
- - PRs ada/60703, bootstrap/60620, bootstrap/60719, bootstrap/60743,
- c++/21113, c++/44613, c++/44859, c++/58207, c++/59115, c++/60374,
- c++/60573, c++/60626, c++/60642, c++/60708, c++/60713, c++/60731,
- debug/55794, debug/60655, fortran/60191, ipa/59626, ipa/60640,
- ipa/60659, ipa/60746, libstdc++/60270, middle-end/60706,
- middle-end/60729, middle-end/60750, rtl-optimization/60155,
- rtl-optimization/60604, rtl-optimization/60700,
- rtl-optimization/60776, sanitizer/60745, target/43751, target/54083,
- target/54407, target/60034, target/60363, target/60504, target/60602,
- target/60609, target/60650, target/60657, target/60697, target/60704,
- target/60735, target/60763, testsuite/60671, testsuite/60672,
- tree-optimization/60505, tree-optimization/60656,
- tree-optimization/60733, tree-optimization/60740,
- tree-optimization/60766, tree-optimization/60785
-
-* Fri Mar 28 2014 Jakub Jelinek 4.9.0-0.8
-- update from the trunk
- - PRs c++/52369, c++/60331, c++/60375, c++/60566, c++/60574, c++/60627,
- c++/60628, c++/60689, c/35449, c/37428, c/39525, c/50347,
- fortran/34928, fortran/58880, fortran/60522, fortran/60677, ipa/60315,
- ipa/60600, libstdc++/60612, libstdc++/60658, middle-end/60635,
- middle-end/60682, other/59545, rtl-optimization/60452,
- rtl-optimization/60501, rtl-optimization/60650, sanitizer/56781,
- sanitizer/60636, target/60580, target/60672, target/60675,
- target/60693, testsuite/58013
-- inliner speed fixes (PR ipa/60243)
-- fortran wrong-code fix (PR fortran/60576)
-- fix IPA-SRA with mismatched types between caller and callee
- (PR middle-end/60647)
-- fix expansion of switch with constant index not optimized during gimple
- passes (PR target/60648)
-
-* Mon Mar 24 2014 Jakub Jelinek 4.9.0-0.7
-- update from the trunk
- - PRs c++/60384, debug/60603, fortran/60599, ipa/59176, ipa/60419,
- libstdc++/60587, libstdc++/60623, rtl-optimization/60601,
- sanitizer/60613, target/60598, target/60610, tree-optimization/60577
-
-* Thu Mar 20 2014 Jakub Jelinek 4.9.0-0.6
-- update from the trunk
- - PRs ada/39172, c++/51474, c++/54250, c++/59571, c++/60305, c++/60332,
- c++/60390, c++/60391, c++/60572, c/55383, fortran/55207,
- fortran/60283, fortran/60543, fortran/60549, libfortran/48600,
- libfortran/58324, libstdc++/60564, lto/59543, lto/60571,
- middle-end/60534, middle-end/60553, middle-end/60597, other/60589,
- rtl-optimization/56356, sanitizer/60535, sanitizer/60557,
- sanitizer/60569, target/60039, target/60516, target/60562,
- target/60563, target/60568, testsuite/58851, testsuite/60590,
- tree-optimization/60559
-
-* Sat Mar 15 2014 Jakub Jelinek 4.9.0-0.5
-- update from the trunk
- - PRs ada/51483, ada/60411, bootstrap/58572, c++/53492, c++/58609,
- c++/60033, c++/60254, c++/60367, c++/60383, c++/60389, c++/60393,
- c++/60532, c/60197, debug/60438, fortran/51976, fortran/60392,
- fortran/60447, ipa/58721, ipa/60457, libfortran/38199,
- libfortran/60128, libgcc/59339, libgcc/60472, libgfortran/60128,
- libstdc++/59392, libstdc++/60499, lto/60424, lto/60427, lto/60461,
- middle-end/36282, middle-end/60418, middle-end/60445,
- middle-end/60474, middle-end/60482, middle-end/60484,
- middle-end/60518, rtl-optimization/57189, rtl-optimization/57320,
- rtl-optimization/60508, target/58271, target/58595, target/59396,
- target/60264, target/60486, target/60525, tree-optimization/59025,
- tree-optimization/59779, tree-optimization/60429,
- tree-optimization/60454, tree-optimization/60485,
- tree-optimization/60502
-
-* Thu Mar 6 2014 Jakub Jelinek 4.9.0-0.4
-- update from the trunk
- - PRs c++/60361, c++/60409, debug/60381, testsuite/59308
-
-* Wed Mar 5 2014 Jakub Jelinek 4.9.0-0.3
-- update from the trunk
- - PRs bootstrap/48230, bootstrap/50927, bootstrap/52466, bootstrap/60343,
- c++/11586, c++/14710, c++/50025, c++/54359, c++/54440, c++/55877,
- c++/57132, c++/58170, c++/58606, c++/58610, c++/58678, c++/58835,
- c++/58845, c++/58873, c++/59231, c++/59347, c++/60046, c++/60051,
- c++/60052, c++/60053, c++/60064, c++/60065, c++/60108, c++/60146,
- c++/60167, c++/60182, c++/60185, c++/60186, c++/60187, c++/60190,
- c++/60215, c++/60216, c++/60219, c++/60222, c++/60224, c++/60225,
- c++/60227, c++/60241, c++/60248, c++/60250, c++/60251, c++/60252,
- c++/60253, c++/60267, c++/60272, c++/60311, c++/60312, c++/60314,
- c++/60328, c++/60345, c++/60347, c++/60353, c++/60376, c++/60377,
- c++/60379, c++/60415, c++/60417, c/37743, c/60195, debug/56563,
- debug/57232, debug/59992, debug/60152, driver/60233, fortran/49397,
- fortran/55907, fortran/59599, fortran/60231, fortran/60232,
- fortran/60234, fortran/60236, fortran/60286, fortran/60302,
- fortran/60341, fortran/60359, ipa/55260, ipa/58555, ipa/60150,
- ipa/60243, ipa/60266, ipa/60306, ipa/60327, libfortran/58015,
- libfortran/59313, libfortran/60148, libgcc/60166, libgcj/55637,
- libjava/60261, libstdc++/58338, libstdc++/60308, lto/53808, lto/60179,
- lto/60295, lto/60319, lto/60404, lto/60405, middle-end/58477,
- middle-end/59223, middle-end/60147, middle-end/60175,
- middle-end/60221, middle-end/60291, objc++/60398, objc/56870,
- pch/60010, plugins/59335, preprocessor/58844, preprocessor/60400,
- rtl-optimization/49847, rtl-optimization/52714,
- rtl-optimization/58960, rtl-optimization/59535,
- rtl-optimization/60131, rtl-optimization/60268,
- rtl-optimization/60292, rtl-optimization/60317, sanitizer/60142,
- target/46898, target/55426, target/57896, target/57935, target/57936,
- target/58675, target/59222, target/59794, target/59799, target/60071,
- target/60169, target/60193, target/60203, target/60204, target/60205,
- target/60207, target/60280, target/60298, testsuite/60173,
- tree-optimization/56490, tree-optimization/58028,
- tree-optimization/60174, tree-optimization/60183,
- tree-optimization/60276, tree-optimization/60382
-- configure with --enable-gnu-indirect-function on architectures
- and distros that support it and don't support it by default
- yet (#1067245)
-- remove libgo P.224 elliptic curve (#1066539)
-
-* Thu Feb 13 2014 Jakub Jelinek 4.9.0-0.2
-- update from the trunk
- - PRs bootstrap/59878, c++/60047, c/60101, debug/59776, fortran/52370,
- libffi/60073, lto/59468, lto/60060, middle-end/59737,
- middle-end/60092, rtl-optimization/60116, target/43546, target/49008,
- target/59927, target/60137, target/60151, testsuite/58630
-- upgrade to newer cloog and isl
-
-* Tue Feb 11 2014 Jakub Jelinek 4.9.0-0.1
+* Fri Jan 23 2015 Jakub Jelinek 5.0.0-0.5
- new package
diff --git a/gcc49-aarch64-async-unw-tables.patch b/gcc49-aarch64-async-unw-tables.patch
deleted file mode 100644
index feec149..0000000
--- a/gcc49-aarch64-async-unw-tables.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-2014-04-07 Richard Henderson
-
- * 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
deleted file mode 100644
index 3ad55ab..0000000
--- a/gcc49-aarch64-unwind-opt.patch
+++ /dev/null
@@ -1,338 +0,0 @@
-2014-08-08 Richard Henderson
-
- * 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
deleted file mode 100644
index 8a72509..0000000
--- a/gcc49-cloog-dl.patch
+++ /dev/null
@@ -1,476 +0,0 @@
---- 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))
- #
- # 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
-+#include
-+#include
-+#include
-+#include
-+#include
-+#include
-+#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
deleted file mode 100644
index 2f647a3..0000000
--- a/gcc49-cloog-dl2.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-2011-04-04 Jakub Jelinek
-
- * 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
deleted file mode 100644
index a8cf938..0000000
--- a/gcc49-color-auto.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-2013-09-20 Jakub Jelinek
-
- * 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
deleted file mode 100644
index 1903e95..0000000
--- a/gcc49-hack.patch
+++ /dev/null
@@ -1,102 +0,0 @@
---- 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
deleted file mode 100644
index 520561e..0000000
--- a/gcc49-i386-libgomp.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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
deleted file mode 100644
index 17334aa..0000000
--- a/gcc49-java-nomulti.patch
+++ /dev/null
@@ -1,44 +0,0 @@
---- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100
-+++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100
-@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode,
- [allow rebuilding of .class and .h files]))
- AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes)
-
-+AC_ARG_ENABLE(libjava-multilib,
-+ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib]))
-+if test "$enable_libjava_multilib" = no; then
-+ multilib=no
-+ ac_configure_args="$ac_configure_args --disable-multilib"
-+fi
-+
- # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
- GCC_NO_EXECUTABLES
-
---- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100
-+++ libjava/configure 2007-12-07 18:39:58.000000000 +0100
-@@ -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
deleted file mode 100644
index 89e06e1..0000000
--- a/gcc49-libgo-p224.patch
+++ /dev/null
@@ -1,1093 +0,0 @@
---- 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
deleted file mode 100644
index d0e98d1..0000000
--- a/gcc49-libgomp-omp_h-multilib.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2008-06-09 Jakub Jelinek
-
- * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
-
---- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200
-+++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200
-@@ -42,8 +42,8 @@ typedef struct
-
- typedef struct
- {
-- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
-- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
-+ unsigned char _x[8 + sizeof (void *)]
-+ __attribute__((__aligned__(sizeof (void *))));
- } omp_nest_lock_t;
- #endif
-
diff --git a/gcc49-libstdc++-docs.patch b/gcc49-libstdc++-docs.patch
deleted file mode 100644
index ee8598a..0000000
--- a/gcc49-libstdc++-docs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- 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 @@
- FSF
-
-
-+ Release 4.9.2
-+
- 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.
-
-- The API documentation, rendered into HTML, can be viewed online:
-+ The API documentation, rendered into HTML, can be viewed here:
-
-+ for the 4.9.2 release, local
-+
-+
- for the 3.4 release
-
-
diff --git a/gcc49-libtool-no-rpath.patch b/gcc49-libtool-no-rpath.patch
deleted file mode 100644
index 466c661..0000000
--- a/gcc49-libtool-no-rpath.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-libtool sucks.
---- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100
-+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200
-@@ -5394,6 +5394,7 @@ EOF
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
-+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
-@@ -6071,6 +6072,7 @@ EOF
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
-+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
-@@ -6120,6 +6122,7 @@ EOF
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
-+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
diff --git a/gcc49-no-add-needed.patch b/gcc49-no-add-needed.patch
deleted file mode 100644
index b6ca777..0000000
--- a/gcc49-no-add-needed.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-2010-02-08 Roland McGrath
-
- * 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
deleted file mode 100644
index 7e8eeb5..0000000
--- a/gcc49-ppc32-retaddr.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-2005-11-28 Jakub Jelinek
-
- * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0,
- read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx
- instead of doing an extran indirection from frame_pointer_rtx.
-
- * gcc.dg/20051128-1.c: New test.
-
---- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100
-+++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100
-@@ -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
deleted file mode 100644
index 4206584..0000000
--- a/gcc49-pr38757.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-2009-03-18 Jakub Jelinek
-
- 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-pr64336.patch b/gcc49-pr64336.patch
deleted file mode 100644
index 86fddd5..0000000
--- a/gcc49-pr64336.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2014-12-17 Jakub Jelinek
-
- PR sanitizer/64336
- * tsan.c (instrument_expr): Ignore TREE_READONLY bit
- on MEM_REFs.
-
---- gcc/tsan.c.jj 2014-12-17 10:53:30.000000000 +0100
-+++ gcc/tsan.c 2014-12-17 11:55:12.793058159 +0100
-@@ -138,7 +138,7 @@ instrument_expr (gimple_stmt_iterator gs
- return false;
- }
-
-- if (TREE_READONLY (base)
-+ if ((TREE_READONLY (base) && TREE_CODE (base) != MEM_REF)
- || (TREE_CODE (base) == VAR_DECL
- && DECL_HARD_REGISTER (base)))
- return false;
diff --git a/gcc49-pr64536.patch b/gcc49-pr64536.patch
deleted file mode 100644
index 64191ca..0000000
--- a/gcc49-pr64536.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-2015-01-08 Jakub Jelinek
-
- PR rtl-optimization/64536
- * cfgrtl.c (rtl_tidy_fallthru_edge): Don't remove tablejumps.
-
- * gcc.dg/pr64536.c: New test.
-
---- gcc/cfgrtl.c.jj 2015-01-05 13:07:12.000000000 +0100
-+++ gcc/cfgrtl.c 2015-01-08 17:03:18.511218340 +0100
-@@ -1782,10 +1782,14 @@ rtl_tidy_fallthru_edge (edge e)
- if (INSN_P (q))
- return;
-
-+ q = BB_END (b);
-+ /* Don't remove table jumps here. */
-+ if (tablejump_p (q, NULL, NULL))
-+ return;
-+
- /* Remove what will soon cease being the jump insn from the source block.
- If block B consisted only of this single jump, turn it into a deleted
- note. */
-- q = BB_END (b);
- if (JUMP_P (q)
- && onlyjump_p (q)
- && (any_uncondjump_p (q)
---- gcc/testsuite/gcc.dg/pr64536.c.jj 2015-01-08 17:13:32.218929003 +0100
-+++ gcc/testsuite/gcc.dg/pr64536.c 2015-01-08 17:28:56.758428958 +0100
-@@ -0,0 +1,67 @@
-+/* PR rtl-optimization/64536 */
-+/* { dg-do link } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-fPIC" { target fpic } } */
-+
-+struct S { long q; } *h;
-+long a, b, g, j, k, *c, *d, *e, *f, *i;
-+long *baz (void)
-+{
-+ asm volatile ("" : : : "memory");
-+ return e;
-+}
-+
-+void
-+bar (int x)
-+{
-+ int y;
-+ for (y = 0; y < x; y++)
-+ {
-+ switch (b)
-+ {
-+ case 0:
-+ case 2:
-+ a++;
-+ break;
-+ case 3:
-+ a++;
-+ break;
-+ case 1:
-+ a++;
-+ }
-+ if (d)
-+ {
-+ f = baz ();
-+ g = k++;
-+ if (&h->q)
-+ {
-+ j = *f;
-+ h->q = *f;
-+ }
-+ else
-+ i = (long *) (h->q = *f);
-+ *c++ = (long) f;
-+ e += 6;
-+ }
-+ else
-+ {
-+ f = baz ();
-+ g = k++;
-+ if (&h->q)
-+ {
-+ j = *f;
-+ h->q = *f;
-+ }
-+ else
-+ i = (long *) (h->q = *f);
-+ *c++ = (long) f;
-+ e += 6;
-+ }
-+ }
-+}
-+
-+int
-+main ()
-+{
-+ return 0;
-+}
diff --git a/gcc49-rh330771.patch b/gcc49-rh330771.patch
deleted file mode 100644
index 102730f..0000000
--- a/gcc49-rh330771.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-2007-10-16 Jakub Jelinek
-
- * 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
deleted file mode 100644
index a37018e..0000000
--- a/gcc49-sparc-config-detection.patch
+++ /dev/null
@@ -1,40 +0,0 @@
---- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
-+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
-@@ -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
diff --git a/gcc5-aarch64-async-unw-tables.patch b/gcc5-aarch64-async-unw-tables.patch
new file mode 100644
index 0000000..feec149
--- /dev/null
+++ b/gcc5-aarch64-async-unw-tables.patch
@@ -0,0 +1,35 @@
+2014-04-07 Richard Henderson
+
+ * 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/gcc5-hack.patch b/gcc5-hack.patch
new file mode 100644
index 0000000..950ff63
--- /dev/null
+++ b/gcc5-hack.patch
@@ -0,0 +1,159 @@
+--- 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; \
+--- libcpp/macro.c.jj 2015-01-14 11:01:34.000000000 +0100
++++ libcpp/macro.c 2015-01-14 14:22:19.286949884 +0100
+@@ -2947,8 +2947,6 @@ create_iso_definition (cpp_reader *pfile
+ cpp_token *token;
+ const cpp_token *ctoken;
+ bool following_paste_op = false;
+- const char *paste_op_error_msg =
+- N_("'##' cannot appear at either end of a macro expansion");
+ unsigned int num_extra_tokens = 0;
+
+ /* Get the first token of the expansion (or the '(' of a
+@@ -3059,7 +3057,8 @@ create_iso_definition (cpp_reader *pfile
+ function-like macros, but not at the end. */
+ if (following_paste_op)
+ {
+- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++ cpp_error (pfile, CPP_DL_ERROR,
++ "'##' cannot appear at either end of a macro expansion");
+ return false;
+ }
+ break;
+@@ -3072,7 +3071,8 @@ create_iso_definition (cpp_reader *pfile
+ function-like macros, but not at the beginning. */
+ if (macro->count == 1)
+ {
+- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++ cpp_error (pfile, CPP_DL_ERROR,
++ "'##' cannot appear at either end of a macro expansion");
+ return false;
+ }
+
+--- libcpp/expr.c.jj 2015-01-14 11:01:34.000000000 +0100
++++ libcpp/expr.c 2015-01-14 14:35:52.851002344 +0100
+@@ -672,16 +672,17 @@ cpp_classify_number (cpp_reader *pfile,
+ if ((result & CPP_N_WIDTH) == CPP_N_LARGE
+ && CPP_OPTION (pfile, cpp_warn_long_long))
+ {
+- const char *message = CPP_OPTION (pfile, cplusplus)
+- ? N_("use of C++11 long long integer constant")
+- : N_("use of C99 long long integer constant");
+-
+ if (CPP_OPTION (pfile, c99))
+ cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
+- 0, message);
++ 0, CPP_OPTION (pfile, cplusplus)
++ ? N_("use of C++11 long long integer constant")
++ : N_("use of C99 long long integer constant"));
+ else
+ cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
+- virtual_location, 0, message);
++ virtual_location, 0,
++ CPP_OPTION (pfile, cplusplus)
++ ? N_("use of C++11 long long integer constant")
++ : N_("use of C99 long long integer constant"));
+ }
+
+ result |= CPP_N_INTEGER;
diff --git a/gcc5-i386-libgomp.patch b/gcc5-i386-libgomp.patch
new file mode 100644
index 0000000..520561e
--- /dev/null
+++ b/gcc5-i386-libgomp.patch
@@ -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/gcc5-isl-dl.patch b/gcc5-isl-dl.patch
new file mode 100644
index 0000000..104296f
--- /dev/null
+++ b/gcc5-isl-dl.patch
@@ -0,0 +1,561 @@
+--- 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 = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
++BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
+ $(ZLIB)
+ # Any system libraries needed just for GNAT.
+ SYSLIBS = @GNAT_LIBEXC@
+@@ -2050,6 +2050,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))
+ #
+ # 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,478 @@ along with GCC; see the file COPYING3.
+ #ifndef GCC_GRAPHITE_POLY_H
+ #define GCC_GRAPHITE_POLY_H
+
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
++#define DYNSYM_ZERO_DISTANCE DYNSYM (isl_band_member_is_coincident)
++#else
++#define DYNSYM_ZERO_DISTANCE DYNSYM (isl_band_member_is_zero_distance)
++#endif
++#define DYNSYMS \
++ DYNSYM (isl_aff_add_coefficient_si); \
++ DYNSYM (isl_aff_free); \
++ DYNSYM (isl_aff_get_space); \
++ 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_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_si); \
++ 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_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_get_space); \
++ DYNSYM (isl_set_get_tuple_id); \
++ DYNSYM (isl_set_intersect); \
++ DYNSYM (isl_set_is_empty); \
++ 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 (isl_aff_add_constant_val); \
++ DYNSYM (isl_aff_get_coefficient_val); \
++ DYNSYM (isl_aff_get_ctx); \
++ DYNSYM (isl_aff_mod_val); \
++ DYNSYM (isl_ast_build_ast_from_schedule); \
++ DYNSYM (isl_ast_build_free); \
++ DYNSYM (isl_ast_build_from_context); \
++ DYNSYM (isl_ast_build_get_ctx); \
++ DYNSYM (isl_ast_build_get_schedule); \
++ DYNSYM (isl_ast_build_get_schedule_space); \
++ DYNSYM (isl_ast_build_set_before_each_for); \
++ DYNSYM (isl_ast_build_set_options); \
++ DYNSYM (isl_ast_expr_free); \
++ DYNSYM (isl_ast_expr_from_val); \
++ DYNSYM (isl_ast_expr_get_ctx); \
++ DYNSYM (isl_ast_expr_get_id); \
++ DYNSYM (isl_ast_expr_get_op_arg); \
++ DYNSYM (isl_ast_expr_get_op_n_arg); \
++ DYNSYM (isl_ast_expr_get_op_type); \
++ DYNSYM (isl_ast_expr_get_type); \
++ DYNSYM (isl_ast_expr_get_val); \
++ DYNSYM (isl_ast_expr_sub); \
++ DYNSYM (isl_ast_node_block_get_children); \
++ DYNSYM (isl_ast_node_for_get_body); \
++ DYNSYM (isl_ast_node_for_get_cond); \
++ DYNSYM (isl_ast_node_for_get_inc); \
++ DYNSYM (isl_ast_node_for_get_init); \
++ DYNSYM (isl_ast_node_for_get_iterator); \
++ DYNSYM (isl_ast_node_free); \
++ DYNSYM (isl_ast_node_get_annotation); \
++ DYNSYM (isl_ast_node_get_type); \
++ DYNSYM (isl_ast_node_if_get_cond); \
++ DYNSYM (isl_ast_node_if_get_else); \
++ DYNSYM (isl_ast_node_if_get_then); \
++ DYNSYM (isl_ast_node_list_free); \
++ DYNSYM (isl_ast_node_list_get_ast_node); \
++ DYNSYM (isl_ast_node_list_n_ast_node); \
++ DYNSYM (isl_ast_node_user_get_expr); \
++ DYNSYM (isl_constraint_set_coefficient_val); \
++ DYNSYM (isl_constraint_set_constant_val); \
++ DYNSYM (isl_id_get_user); \
++ DYNSYM (isl_local_space_get_ctx); \
++ DYNSYM (isl_map_fix_val); \
++ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \
++ DYNSYM (isl_printer_print_ast_node); \
++ DYNSYM (isl_printer_print_str); \
++ DYNSYM (isl_printer_set_output_format); \
++ DYNSYM (isl_pw_aff_mod_val); \
++ DYNSYM (isl_schedule_constraints_compute_schedule); \
++ DYNSYM (isl_schedule_constraints_on_domain); \
++ DYNSYM (isl_schedule_constraints_set_coincidence); \
++ DYNSYM (isl_schedule_constraints_set_proximity); \
++ DYNSYM (isl_schedule_constraints_set_validity); \
++ DYNSYM (isl_set_get_dim_id); \
++ DYNSYM (isl_set_max_val); \
++ DYNSYM (isl_set_min_val); \
++ DYNSYM (isl_set_params); \
++ DYNSYM (isl_space_align_params); \
++ DYNSYM (isl_space_map_from_domain_and_range); \
++ DYNSYM (isl_space_set_tuple_name); \
++ DYNSYM (isl_space_wrap); \
++ DYNSYM (isl_union_map_from_domain_and_range); \
++ DYNSYM (isl_union_map_range); \
++ DYNSYM (isl_union_set_union); \
++ DYNSYM (isl_union_set_universe); \
++ DYNSYM (isl_val_2exp); \
++ DYNSYM (isl_val_add_ui); \
++ DYNSYM (isl_val_copy); \
++ DYNSYM (isl_val_free); \
++ DYNSYM (isl_val_get_num_gmp); \
++ DYNSYM (isl_val_int_from_gmp); \
++ DYNSYM (isl_val_int_from_si); \
++ DYNSYM (isl_val_int_from_ui); \
++ DYNSYM (isl_val_mul); \
++ DYNSYM (isl_val_neg); \
++ DYNSYM (isl_val_sub);
++
++extern struct isl_pointers_s__
++{
++ bool inited;
++ void *h;
++#define DYNSYM(x) __typeof (x) *p_##x
++ DYNSYMS
++#undef DYNSYM
++} isl_pointers__;
++
++#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si)
++#define isl_aff_free (*isl_pointers__.p_isl_aff_free)
++#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space)
++#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si)
++#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si)
++#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain)
++#define isl_band_free (*isl_pointers__.p_isl_band_free)
++#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children)
++#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule)
++#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children)
++#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free)
++#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band)
++#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx)
++#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band)
++#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
++#define isl_band_member_is_coincident (*isl_pointers__.p_isl_band_member_is_coincident)
++#else
++#define isl_band_member_is_zero_distance (*isl_pointers__.p_isl_band_member_is_zero_distance)
++#endif
++#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member)
++#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint)
++#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out)
++#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe)
++#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si)
++#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si)
++#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc)
++#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free)
++#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc)
++#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc)
++#define isl_id_copy (*isl_pointers__.p_isl_id_copy)
++#define isl_id_free (*isl_pointers__.p_isl_id_free)
++#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc)
++#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy)
++#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free)
++#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space)
++#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range)
++#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint)
++#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims)
++#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params)
++#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range)
++#define isl_map_copy (*isl_pointers__.p_isl_map_copy)
++#define isl_map_dim (*isl_pointers__.p_isl_map_dim)
++#define isl_map_dump (*isl_pointers__.p_isl_map_dump)
++#define isl_map_equate (*isl_pointers__.p_isl_map_equate)
++#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si)
++#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product)
++#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product)
++#define isl_map_free (*isl_pointers__.p_isl_map_free)
++#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map)
++#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff)
++#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map)
++#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx)
++#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space)
++#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id)
++#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims)
++#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect)
++#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain)
++#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range)
++#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty)
++#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge)
++#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le)
++#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out)
++#define isl_map_range (*isl_pointers__.p_isl_map_range)
++#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
++#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
++#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
++#define isl_options_set_schedule_fuse (*isl_pointers__.p_isl_options_set_schedule_fuse)
++#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
++#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
++#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
++#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff)
++#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint)
++#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map)
++#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set)
++#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file)
++#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add)
++#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc)
++#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy)
++#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set)
++#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free)
++#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff)
++#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set)
++#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set)
++#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst)
++#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set)
++#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set)
++#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul)
++#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set)
++#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set)
++#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id)
++#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub)
++#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set)
++#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free)
++#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest)
++#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint)
++#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims)
++#define isl_set_apply (*isl_pointers__.p_isl_set_apply)
++#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce)
++#define isl_set_copy (*isl_pointers__.p_isl_set_copy)
++#define isl_set_dim (*isl_pointers__.p_isl_set_dim)
++#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si)
++#define isl_set_free (*isl_pointers__.p_isl_set_free)
++#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space)
++#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id)
++#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect)
++#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty)
++#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim)
++#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe)
++#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out)
++#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id)
++#define isl_set_universe (*isl_pointers__.p_isl_set_universe)
++#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims)
++#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc)
++#define isl_space_copy (*isl_pointers__.p_isl_space_copy)
++#define isl_space_dim (*isl_pointers__.p_isl_space_dim)
++#define isl_space_domain (*isl_pointers__.p_isl_space_domain)
++#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id)
++#define isl_space_free (*isl_pointers__.p_isl_space_free)
++#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain)
++#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id)
++#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc)
++#define isl_space_range (*isl_pointers__.p_isl_space_range)
++#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc)
++#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id)
++#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id)
++#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map)
++#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params)
++#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain)
++#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range)
++#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow)
++#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy)
++#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty)
++#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product)
++#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map)
++#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free)
++#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map)
++#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx)
++#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space)
++#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain)
++#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range)
++#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain)
++#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty)
++#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract)
++#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union)
++#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set)
++#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule)
++#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy)
++#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty)
++#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set)
++#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val)
++#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val)
++#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx)
++#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val)
++#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule)
++#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free)
++#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context)
++#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx)
++#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule)
++#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space)
++#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for)
++#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options)
++#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free)
++#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val)
++#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx)
++#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id)
++#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg)
++#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg)
++#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type)
++#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type)
++#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val)
++#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub)
++#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children)
++#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body)
++#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond)
++#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc)
++#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init)
++#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator)
++#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free)
++#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation)
++#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type)
++#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond)
++#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else)
++#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then)
++#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free)
++#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node)
++#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node)
++#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr)
++#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val)
++#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val)
++#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user)
++#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx)
++#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val)
++#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound)
++#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node)
++#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str)
++#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format)
++#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val)
++#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule)
++#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain)
++#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence)
++#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity)
++#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity)
++#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id)
++#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val)
++#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val)
++#define isl_set_params (*isl_pointers__.p_isl_set_params)
++#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params)
++#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range)
++#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name)
++#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap)
++#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range)
++#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range)
++#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union)
++#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe)
++#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp)
++#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui)
++#define isl_val_copy (*isl_pointers__.p_isl_val_copy)
++#define isl_val_free (*isl_pointers__.p_isl_val_free)
++#define isl_val_get_num_gmp (*isl_pointers__.p_isl_val_get_num_gmp)
++#define isl_val_int_from_gmp (*isl_pointers__.p_isl_val_int_from_gmp)
++#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si)
++#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui)
++#define isl_val_mul (*isl_pointers__.p_isl_val_mul)
++#define isl_val_neg (*isl_pointers__.p_isl_val_neg)
++#define isl_val_sub (*isl_pointers__.p_isl_val_sub)
++
+ 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
+@@ -90,6 +90,34 @@ along with GCC; see the file COPYING3.
+ #include "graphite-isl-ast-to-gimple.h"
+ #include "graphite-sese-to-poly.h"
+
++__typeof (isl_pointers__) isl_pointers__;
++
++static bool
++init_isl_pointers (void)
++{
++ void *h;
++
++ if (isl_pointers__.inited)
++ return isl_pointers__.h != NULL;
++ h = dlopen ("libisl.so.13", RTLD_LAZY);
++ isl_pointers__.h = h;
++ if (h == NULL)
++ return false;
++#define DYNSYM(x) \
++ do \
++ { \
++ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \
++ u.q = dlsym (h, #x); \
++ if (u.q == NULL) \
++ return false; \
++ isl_pointers__.p_##x = u.p; \
++ } \
++ while (0)
++ DYNSYMS
++#undef DYNSYM
++ return true;
++}
++
+ /* Print global statistics to FILE. */
+
+ static void
+@@ -285,6 +313,15 @@ graphite_transform_loops (void)
+ if (parallelized_function_p (cfun->decl))
+ return;
+
++ if (number_of_loops (cfun) <= 1)
++ return;
++
++ if (!init_isl_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))
diff --git a/gcc5-java-nomulti.patch b/gcc5-java-nomulti.patch
new file mode 100644
index 0000000..17334aa
--- /dev/null
+++ b/gcc5-java-nomulti.patch
@@ -0,0 +1,44 @@
+--- libjava/configure.ac.jj 2007-12-07 17:55:50.000000000 +0100
++++ libjava/configure.ac 2007-12-07 18:36:56.000000000 +0100
+@@ -82,6 +82,13 @@ AC_ARG_ENABLE(java-maintainer-mode,
+ [allow rebuilding of .class and .h files]))
+ AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes)
+
++AC_ARG_ENABLE(libjava-multilib,
++ AS_HELP_STRING([--enable-libjava-multilib], [build libjava as multilib]))
++if test "$enable_libjava_multilib" = no; then
++ multilib=no
++ ac_configure_args="$ac_configure_args --disable-multilib"
++fi
++
+ # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
+ GCC_NO_EXECUTABLES
+
+--- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100
++++ libjava/configure 2007-12-07 18:39:58.000000000 +0100
+@@ -1021,6 +1021,8 @@ Optional Features:
+ default=yes
+ --enable-java-maintainer-mode
+ allow rebuilding of .class and .h files
++ --enable-libjava-multilib
++ build libjava as multilib
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-maintainer-mode enable make rules and dependencies not useful
+@@ -1973,6 +1975,16 @@ else
+ fi
+
+
++# Check whether --enable-libjava-multilib was given.
++if test "${enable_libjava_multilib+set}" = set; then
++ enableval=$enable_libjava_multilib;
++fi
++
++if test "$enable_libjava_multilib" = no; then
++ multilib=no
++ ac_configure_args="$ac_configure_args --disable-multilib"
++fi
++
+ # It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
+
+
diff --git a/gcc5-libgo-p224.patch b/gcc5-libgo-p224.patch
new file mode 100644
index 0000000..43509b1
--- /dev/null
+++ b/gcc5-libgo-p224.patch
@@ -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
+@@ -306,9 +306,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 }
+@@ -321,7 +318,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}
+@@ -329,8 +325,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):
+@@ -343,8 +337,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():
+@@ -1371,7 +1363,7 @@ func signingParamsForPrivateKey(priv int
+ pubType = ECDSA
+
+ switch priv.Curve {
+- case elliptic.P224(), elliptic.P256():
++ case elliptic.P256():
+ hashFunc = crypto.SHA256
+ sigAlgo.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/gcc5-libgomp-omp_h-multilib.patch b/gcc5-libgomp-omp_h-multilib.patch
new file mode 100644
index 0000000..d0e98d1
--- /dev/null
+++ b/gcc5-libgomp-omp_h-multilib.patch
@@ -0,0 +1,17 @@
+2008-06-09 Jakub Jelinek
+
+ * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
+
+--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200
++++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200
+@@ -42,8 +42,8 @@ typedef struct
+
+ typedef struct
+ {
+- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
+- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
++ unsigned char _x[8 + sizeof (void *)]
++ __attribute__((__aligned__(sizeof (void *))));
+ } omp_nest_lock_t;
+ #endif
+
diff --git a/gcc5-libsanitize-aarch64-va42.patch b/gcc5-libsanitize-aarch64-va42.patch
new file mode 100644
index 0000000..bd4218b
--- /dev/null
+++ b/gcc5-libsanitize-aarch64-va42.patch
@@ -0,0 +1,47 @@
+2015-01-22 Jakub Jelinek
+
+ * asan/asan_allocator.h (kAllocatorSpace, kAllocatorSize):
+ Set to 1T for __aarch64__.
+ * sanitizer_common/sanitizer_platform.h
+ (SANITIZER_CAN_USE_ALLOCATOR64): Set to 1 on __aarch64__
+ if SANITIZER_WORDSIZE is 64.
+ (SANITIZER_MMAP_RANGE_SIZE): Define to 1ULL << 42 for
+ __aarch64__.
+
+--- libsanitizer/asan/asan_allocator.h (revision 219833)
++++ libsanitizer/asan/asan_allocator.h (working copy)
+@@ -100,6 +100,10 @@
+ # if defined(__powerpc64__)
+ const uptr kAllocatorSpace = 0xa0000000000ULL;
+ const uptr kAllocatorSize = 0x20000000000ULL; // 2T.
++# elif defined(__aarch64__)
++// Valid only for 42-bit VA
++const uptr kAllocatorSpace = 0x10000000000ULL;
++const uptr kAllocatorSize = 0x10000000000ULL; // 1T.
+ # else
+ const uptr kAllocatorSpace = 0x600000000000ULL;
+ const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
+--- libsanitizer/sanitizer_common/sanitizer_platform.h (revision 219833)
++++ libsanitizer/sanitizer_common/sanitizer_platform.h (working copy)
+@@ -79,7 +79,7 @@
+ // For such platforms build this code with -DSANITIZER_CAN_USE_ALLOCATOR64=0 or
+ // change the definition of SANITIZER_CAN_USE_ALLOCATOR64 here.
+ #ifndef SANITIZER_CAN_USE_ALLOCATOR64
+-# if defined(__aarch64__) || defined(__mips64)
++# if defined(__mips64)
+ # define SANITIZER_CAN_USE_ALLOCATOR64 0
+ # else
+ # define SANITIZER_CAN_USE_ALLOCATOR64 (SANITIZER_WORDSIZE == 64)
+@@ -88,10 +88,10 @@
+
+ // The range of addresses which can be returned my mmap.
+ // FIXME: this value should be different on different platforms,
+-// e.g. on AArch64 it is most likely (1ULL << 39). Larger values will still work
++// e.g. on AArch64 it is most likely (1ULL << 42). Larger values will still work
+ // but will consume more memory for TwoLevelByteMap.
+ #if defined(__aarch64__)
+-# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 39)
++# define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 42)
+ #else
+ # define SANITIZER_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47)
+ #endif
diff --git a/gcc5-libstdc++-docs.patch b/gcc5-libstdc++-docs.patch
new file mode 100644
index 0000000..58f4b33
--- /dev/null
+++ b/gcc5-libstdc++-docs.patch
@@ -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 @@
+ FSF
+
+
++ Release 5.0.0
++
+ 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.
+
+- The API documentation, rendered into HTML, can be viewed online:
++ The API documentation, rendered into HTML, can be viewed here:
+
++ for the 5.0.0 release, local
++
++
+ for the 3.4 release
+
+
diff --git a/gcc5-libtool-no-rpath.patch b/gcc5-libtool-no-rpath.patch
new file mode 100644
index 0000000..466c661
--- /dev/null
+++ b/gcc5-libtool-no-rpath.patch
@@ -0,0 +1,27 @@
+libtool sucks.
+--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100
++++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200
+@@ -5394,6 +5394,7 @@ EOF
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+@@ -6071,6 +6072,7 @@ EOF
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+@@ -6120,6 +6122,7 @@ EOF
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
diff --git a/gcc5-no-add-needed.patch b/gcc5-no-add-needed.patch
new file mode 100644
index 0000000..4102e1c
--- /dev/null
+++ b/gcc5-no-add-needed.patch
@@ -0,0 +1,50 @@
+2010-02-08 Roland McGrath
+
+ * 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
+@@ -76,7 +76,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 "
+
+ #undef TARGET_INIT_LIBFUNCS
+ #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
+--- 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/gcc5-ppc-jit.patch b/gcc5-ppc-jit.patch
new file mode 100644
index 0000000..76fd609
--- /dev/null
+++ b/gcc5-ppc-jit.patch
@@ -0,0 +1,22 @@
+2015-01-19 David Malcolm
+
+ * config/rs6000/rs6000.c (rs6000_output_function_epilogue):
+ Support the JIT by using 0 as the language type.
+
+--- gcc/config/rs6000/rs6000.c
++++ gcc/config/rs6000/rs6000.c
+@@ -25491,11 +25491,12 @@ rs6000_output_function_epilogue (FILE *file,
+ use language_string.
+ C is 0. Fortran is 1. Pascal is 2. Ada is 3. C++ is 9.
+ Java is 13. Objective-C is 14. Objective-C++ isn't assigned
+- a number, so for now use 9. LTO and Go aren't assigned numbers
++ a number, so for now use 9. LTO, Go and JIT aren't assigned numbers
+ either, so for now use 0. */
+ if (lang_GNU_C ()
+ || ! strcmp (language_string, "GNU GIMPLE")
+- || ! strcmp (language_string, "GNU Go"))
++ || ! strcmp (language_string, "GNU Go")
++ || ! strcmp (language_string, "libgccjit"))
+ i = 0;
+ else if (! strcmp (language_string, "GNU F77")
+ || ! strcmp (language_string, "GNU Fortran"))
diff --git a/gcc5-ppc32-retaddr.patch b/gcc5-ppc32-retaddr.patch
new file mode 100644
index 0000000..7e8eeb5
--- /dev/null
+++ b/gcc5-ppc32-retaddr.patch
@@ -0,0 +1,87 @@
+2005-11-28 Jakub Jelinek
+
+ * config/rs6000/rs6000.c (rs6000_return_addr): If COUNT == 0,
+ read word RETURN_ADDRESS_OFFSET bytes above arg_pointer_rtx
+ instead of doing an extran indirection from frame_pointer_rtx.
+
+ * gcc.dg/20051128-1.c: New test.
+
+--- gcc/config/rs6000/rs6000.c.jj 2005-11-26 14:38:01.000000000 +0100
++++ gcc/config/rs6000/rs6000.c 2005-11-28 20:32:18.000000000 +0100
+@@ -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/gcc5-pr64738.patch b/gcc5-pr64738.patch
new file mode 100644
index 0000000..cfb44cc
--- /dev/null
+++ b/gcc5-pr64738.patch
@@ -0,0 +1,28 @@
+2015-01-23 Jakub Jelinek
+
+ PR go/64738
+ * Makefile.am (AM_LDFLAGS): Remove -static-libgo flag.
+ * Makefile.in: Regenerated.
+
+--- gotools/Makefile.am 2015-01-23 09:42:05.747471685 +0100
++++ gotools/Makefile.am 2015-01-23 21:04:36.970202637 +0100
+@@ -38,7 +38,7 @@ endif
+ GOCFLAGS = $(CFLAGS_FOR_TARGET)
+ GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS)
+
+-AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs -static-libgo
++AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
+ GOLINK = $(GOCOMPILER) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@
+
+ cmdsrcdir = $(srcdir)/../libgo/go/cmd
+--- gotools/Makefile.in 2015-01-23 09:42:05.724472081 +0100
++++ gotools/Makefile.in 2015-01-23 21:04:44.940065201 +0100
+@@ -230,7 +230,7 @@ LIBGODEP = $(libgodir)/libgo.la
+ # Use the compiler we just built.
+ @NATIVE_TRUE@GOCOMPILER = $(GOC_FOR_TARGET)
+ GOCOMPILE = $(GOCOMPILER) $(GOCFLAGS)
+-AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs -static-libgo
++AM_LDFLAGS = -L $(libgodir) -L $(libgodir)/.libs
+ GOLINK = $(GOCOMPILER) $(AM_GOCFLAGS) $(LDFLAGS) $(AM_LDFLAGS) -o $@
+ cmdsrcdir = $(srcdir)/../libgo/go/cmd
+ go_cmd_go_files = \
diff --git a/gcc5-rh330771.patch b/gcc5-rh330771.patch
new file mode 100644
index 0000000..102730f
--- /dev/null
+++ b/gcc5-rh330771.patch
@@ -0,0 +1,27 @@
+2007-10-16 Jakub Jelinek
+
+ * 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/gcc5-sparc-config-detection.patch b/gcc5-sparc-config-detection.patch
new file mode 100644
index 0000000..a37018e
--- /dev/null
+++ b/gcc5-sparc-config-detection.patch
@@ -0,0 +1,40 @@
+--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
++++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
+@@ -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
diff --git a/sources b/sources
index b9c548b..db77005 100644
--- a/sources
+++ b/sources
@@ -1,3 +1 @@
-e34fca0540d840e5d0f6427e98c92252 cloog-0.18.1.tar.gz
-689887cca4a28c1385169bc5d3a14c77 gcc-4.9.2-20150107.tar.bz2
-e039bfcfb6c2ab039b8ee69bf883e824 isl-0.12.2.tar.bz2
+94860e75c4808cec7b783415064abee8 gcc-5.0.0-20150123.tar.bz2