diff --git a/.gcc-libraries.metadata b/.gcc-libraries.metadata
index 25df8dd..08f9791 100644
--- a/.gcc-libraries.metadata
+++ b/.gcc-libraries.metadata
@@ -1,2 +1,2 @@
-2b75e91f3a19e466580b04b057ec7ad251333221 SOURCES/gcc-5.3.1-20160406.tar.bz2
+99ab9243aee36144e72561c6cbf28c8e04678c9a SOURCES/gcc-7.1.1-20170526.tar.bz2
5ef03ca7aee134fe7dfecb6c9d048799f0810278 SOURCES/mpc-0.8.1.tar.gz
diff --git a/.gitignore b/.gitignore
index 08c325d..805437c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
-SOURCES/gcc-5.3.1-20160406.tar.bz2
+SOURCES/gcc-7.1.1-20170526.tar.bz2
SOURCES/mpc-0.8.1.tar.gz
diff --git a/SOURCES/gcc5-alt-compat-test.patch b/SOURCES/gcc5-alt-compat-test.patch
deleted file mode 100644
index 3907d55..0000000
--- a/SOURCES/gcc5-alt-compat-test.patch
+++ /dev/null
@@ -1,49 +0,0 @@
---- gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c.jj 2011-01-03 06:50:42.000000000 -0500
-+++ gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c 2011-02-18 06:28:53.858200077 -0500
-@@ -1501,6 +1501,8 @@ generate_random_tests (enum FEATURE feat
- int i, r;
- if (len > 'z' - 'a' + 1)
- abort ();
-+ if (getenv ("ALT_CXX_UNDER_TEST") != NULL)
-+ features &= ~FEATURE_VECTOR;
- memset (e, 0, sizeof (e));
- r = generate_random ();
- if ((r & 7) == 0)
---- gcc/testsuite/g++.dg/compat/compat.exp.jj 2011-01-03 06:50:42.000000000 -0500
-+++ gcc/testsuite/g++.dg/compat/compat.exp 2011-02-18 06:30:54.248200398 -0500
-@@ -116,7 +116,12 @@ if [info exists ALT_CXX_UNDER_TEST] then
- }
-
- # Main loop.
--foreach src [lsort [find $srcdir/$subdir *_main.C]] {
-+set tests [lsort [find $srcdir/$subdir *_main.C]]
-+if { $use_alt != 0 } then {
-+ set tests [prune $tests $srcdir/$subdir/decimal/*]
-+}
-+
-+foreach src $tests {
- # If we're only testing specific files and this isn't one of them, skip it.
- if ![runtest_file_p $runtests $src] then {
- continue
---- gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c.jj 2011-01-03 06:49:58.000000000 -0500
-+++ gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c 2011-02-18 06:27:54.922262671 -0500
-@@ -1912,6 +1912,8 @@ generate_random_tests (enum FEATURE feat
- int i, r;
- if (len > 'z' - 'a' + 1)
- abort ();
-+ if (getenv ("ALT_CC_UNDER_TEST") != NULL)
-+ features &= ~FEATURE_VECTOR;
- memset (e, 0, sizeof (e));
- r = generate_random ();
- if ((r & 7) == 0)
---- gcc/testsuite/lib/c-compat.exp.jj 2011-01-03 06:48:38.000000000 -0500
-+++ gcc/testsuite/lib/c-compat.exp 2011-02-18 06:38:19.124265008 -0500
-@@ -75,7 +75,7 @@ proc compat_setup_dfp { } {
- # If there is an alternate compiler, does it support decimal float types?
- if { $compat_have_dfp == 1 && $compat_use_alt == 1 && $compat_same_alt == 0 } {
- compat-use-alt-compiler
-- set compat_have_dfp [check_effective_target_dfprt_nocache]
-+ set compat_have_dfp 0
- compat-use-tst-compiler
- verbose "compat_have_dfp for alt compiler: $compat_have_dfp" 2
- }
diff --git a/SOURCES/gcc5-hack.patch b/SOURCES/gcc5-hack.patch
deleted file mode 100644
index 950ff63..0000000
--- a/SOURCES/gcc5-hack.patch
+++ /dev/null
@@ -1,159 +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; \
---- 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/SOURCES/gcc5-htm-in-asm.patch b/SOURCES/gcc5-htm-in-asm.patch
deleted file mode 100644
index a7f1b7b..0000000
--- a/SOURCES/gcc5-htm-in-asm.patch
+++ /dev/null
@@ -1,55 +0,0 @@
---- libitm/config/x86/target.h.jj 2013-06-23 20:43:50.000000000 +0200
-+++ libitm/config/x86/target.h 2013-08-13 17:14:57.540012109 +0200
-@@ -64,7 +64,7 @@ cpu_relax (void)
-
- // Use Intel RTM if supported by the assembler.
- // See gtm_thread::begin_transaction for how these functions are used.
--#ifdef HAVE_AS_RTM
-+#if 1 /* def HAVE_AS_RTM */
- #define USE_HTM_FASTPATH
- #ifdef __x86_64__
- // Use the custom fastpath in ITM_beginTransaction.
-@@ -97,7 +97,10 @@ htm_init ()
- static inline uint32_t
- htm_begin ()
- {
-- return _xbegin();
-+// return _xbegin();
-+ uint32_t ret;
-+ __asm volatile ("movl $-1, %%eax; .byte 0xc7, 0xf8, 0, 0, 0, 0" : "=a" (ret) : : "memory");
-+ return ret;
- }
-
- static inline bool
-@@ -109,7 +112,8 @@ htm_begin_success (uint32_t begin_ret)
- static inline void
- htm_commit ()
- {
-- _xend();
-+// _xend();
-+ __asm volatile (".byte 0x0f, 0x01, 0xd5" : : : "memory");
- }
-
- static inline void
-@@ -117,7 +121,8 @@ htm_abort ()
- {
- // ??? According to a yet unpublished ABI rule, 0xff is reserved and
- // supposed to signal a busy lock. Source: andi.kleen@intel.com
-- _xabort(0xff);
-+// _xabort(0xff);
-+ __asm volatile (".byte 0xc6, 0xf8, 0xff" : : : "memory");
- }
-
- static inline bool
-@@ -130,7 +135,10 @@ htm_abort_should_retry (uint32_t begin_r
- static inline bool
- htm_transaction_active ()
- {
-- return _xtest() != 0;
-+// return _xtest() != 0;
-+ bool ret;
-+ __asm volatile (".byte 0x0f, 0x01, 0xd6; setne %%al" : "=a" (ret) : : "memory");
-+ return ret;
- }
- #endif
-
diff --git a/SOURCES/gcc5-i386-libgomp.patch b/SOURCES/gcc5-i386-libgomp.patch
deleted file mode 100644
index 520561e..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc5-java-nomulti.patch b/SOURCES/gcc5-java-nomulti.patch
deleted file mode 100644
index 17334aa..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc5-libgo-p224.patch b/SOURCES/gcc5-libgo-p224.patch
deleted file mode 100644
index 43509b1..0000000
--- a/SOURCES/gcc5-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
-@@ -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/SOURCES/gcc5-libgomp-omp_h-multilib.patch b/SOURCES/gcc5-libgomp-omp_h-multilib.patch
deleted file mode 100644
index d0e98d1..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc5-libstdc++44-xfail.patch b/SOURCES/gcc5-libstdc++44-xfail.patch
deleted file mode 100644
index 0a84451..0000000
--- a/SOURCES/gcc5-libstdc++44-xfail.patch
+++ /dev/null
@@ -1,190 +0,0 @@
---- libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc.jj 2014-04-11 14:52:06.733884798 +0200
-+++ libstdc++-v3/testsuite/22_locale/locale/cons/40184.cc 2014-05-10 12:29:51.779887325 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-namedlocale "ja_JP.eucjp" }
-+// pr40184 fix not backported to base (locales with broken facets)
-+// { dg-do run { xfail *-*-* } }
-
- // Copyright (C) 2009-2014 Free Software Foundation, Inc.
- //
---- libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc.jj 2014-04-11 14:52:06.680885075 +0200
-+++ libstdc++-v3/testsuite/22_locale/time_get/get_date/char/26701.cc 2014-05-10 12:29:51.792886917 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-namedlocale "en_GB" }
-+// pr26701 fix not backported to base (parsing of en_GB date)
-+// { dg-do run { xfail *-*-* } }
-
- // 2010-01-06 Paolo Carlini
-
---- libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc.jj 2014-04-11 14:52:06.674885106 +0200
-+++ libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/26701.cc 2014-05-10 12:29:51.792886917 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-namedlocale "en_GB" }
-+// pr26701 fix not backported to base (parsing of en_GB date)
-+// { dg-do run { xfail *-*-* } }
-
- // 2010-01-06 Paolo Carlini
-
---- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc.jj 2014-04-11 14:52:06.645885257 +0200
-+++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-1.cc 2014-05-10 12:29:51.802886712 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-namedlocale "ru_RU.ISO-8859-5" }
-+// pr38081 fix not backported to base (parsing weekday names)
-+// { dg-do run { xfail *-*-* } }
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
- //
---- libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc.jj 2014-04-11 14:52:06.646885252 +0200
-+++ libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/38081-2.cc 2014-05-10 12:29:51.802886712 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-namedlocale "ru_RU.UTF8" }
-+// pr38081 fix not backported to base (parsing weekday names)
-+// { dg-do run { xfail *-*-* } }
-
- // 2010-01-05 Paolo Carlini
-
---- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc.jj 2014-04-11 14:52:04.949894106 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/4.cc 2014-05-10 12:29:51.807886709 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-fileio "" }
-+// pr45628 fix not backported to base (seek 0 shouldn't flush)
-+// { dg-do run { xfail *-*-* } }
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
- //
---- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/45628-1.cc.jj 2014-05-10 12:29:51.808886705 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/char/45628-1.cc 2014-05-10 12:31:51.652261219 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr45628 fix not backported to base (seek 0 shouldn't flush)
-+
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
---- libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc.jj 2014-04-11 14:52:04.941894148 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc 2014-05-10 12:29:51.808886705 +0200
-@@ -1,4 +1,6 @@
- // { dg-require-fileio "" }
-+// pr45628 fix not backported to base (seek 0 should not flush)
-+// { dg-do run { xfail *-*-* } }
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
- //
---- libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc.jj 2014-04-11 14:52:04.771895035 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc 2014-05-10 12:29:51.819886643 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// dr696 fix not backported to base (handling of overflow when reading number)
-+
- // 1999-04-12 bkoz
-
- // Copyright (C) 1999-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/dr696.cc.jj 2014-04-11 14:52:04.770895040 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/dr696.cc 2014-05-10 12:29:51.819886643 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// dr696 fix not backported to base (handling of overflow when reading number)
-+
- // 2009-07-15 Paolo Carlini
- //
- // Copyright (C) 2009-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc.jj 2014-05-10 12:29:51.829886586 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc 2014-05-10 12:32:23.160099254 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// dr696 fix not backported to base (handling of overflow when reading number)
-+
- // Copyright (C) 2004-2014 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
---- libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/dr696.cc.jj 2014-04-11 14:52:04.762895082 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/dr696.cc 2014-05-10 12:29:51.829886586 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// dr696 fix not backported to base (handling of overflow when reading number)
-+
- // 2009-07-15 Paolo Carlini
- //
- // Copyright (C) 2009-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc.jj 2014-04-11 14:52:04.735895223 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/seekg/char/26211.cc 2014-05-10 12:29:51.836886549 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr26211 fix not backported to base (tellg/seekg should construct a sentry)
-+
- // 2010-11-18 Paolo Carlini
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc.jj 2014-04-11 14:52:04.731895243 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/seekg/wchar_t/26211.cc 2014-05-10 12:29:51.836886549 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr26211 fix not backported to base (tellg/seekg should construct a sentry)
-+
- // 2010-11-18 Paolo Carlini
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/26211.cc.jj 2014-04-11 14:52:04.779894993 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/tellg/char/26211.cc 2014-05-10 12:29:51.836886549 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr26211 fix not backported to base (tellg/seekg should construct a sentry)
-+
- // 2010-11-18 Paolo Carlini
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/26211.cc.jj 2014-04-11 14:52:04.775895014 +0200
-+++ libstdc++-v3/testsuite/27_io/basic_istream/tellg/wchar_t/26211.cc 2014-05-10 12:29:51.837886543 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr26211 fix not backported to base (tellg/seekg should construct a sentry)
-+
- // 2010-11-18 Paolo Carlini
-
- // Copyright (C) 2010-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/27_io/objects/char/41037.cc.jj 2014-05-10 12:29:51.848886483 +0200
-+++ libstdc++-v3/testsuite/27_io/objects/char/41037.cc 2014-05-10 12:30:52.480567953 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr41037 fix not backported to base (flags on cerr)
-+
- // Copyright (C) 2009-2014 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
---- libstdc++-v3/testsuite/27_io/objects/wchar_t/41037.cc.jj 2014-05-10 12:29:51.856886441 +0200
-+++ libstdc++-v3/testsuite/27_io/objects/wchar_t/41037.cc 2014-05-10 12:31:20.274421862 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr26211 fix not backported to base (tellg/seekg should construct a sentry)
-+
- // Copyright (C) 2009-2014 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
---- libstdc++-v3/testsuite/abi/demangle/regression/cw-13.cc.jj 2014-04-11 14:52:05.388891816 +0200
-+++ libstdc++-v3/testsuite/abi/demangle/regression/cw-13.cc 2014-05-10 12:29:51.868886376 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr42670 fix not backported to base (partial demangling of global ctor fn)
-+
- // 2003-02-26 Carlo Wood
-
- // Copyright (C) 2003-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc.jj 2014-04-11 14:52:05.387891821 +0200
-+++ libstdc++-v3/testsuite/abi/demangle/regression/cw-16.cc 2014-05-10 12:29:51.868886376 +0200
-@@ -1,3 +1,6 @@
-+// { dg-do run { xfail *-*-* } }
-+// pr37376 fix not backported to base ((42) + 2 changed to (42)+(2))
-+
- // 2003-11-07 Carlo Wood
-
- // Copyright (C) 2003-2014 Free Software Foundation, Inc.
---- libstdc++-v3/testsuite/libstdc++-abi/abi.exp.jj 2014-04-11 14:52:06.793884485 +0200
-+++ libstdc++-v3/testsuite/libstdc++-abi/abi.exp 2014-05-10 12:29:51.868886376 +0200
-@@ -61,4 +61,7 @@ remote_download "target" "current_symbol
- set result [${tool}_load "./abi_check" \
- [list "--check-verbose" "current_symbols.txt" \
- "baseline_symbols.txt"]]
-+# This is an artifact of running the current testsuite against the old
-+# system libstdc++
-+setup_xfail *-*-*
- [lindex $result 0] "libstdc++-abi/abi_check"
diff --git a/SOURCES/gcc5-libtool-no-rpath.patch b/SOURCES/gcc5-libtool-no-rpath.patch
deleted file mode 100644
index 466c661..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc5-no-add-needed.patch b/SOURCES/gcc5-no-add-needed.patch
deleted file mode 100644
index 4102e1c..0000000
--- a/SOURCES/gcc5-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
-@@ -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/SOURCES/gcc5-ppc32-retaddr.patch b/SOURCES/gcc5-ppc32-retaddr.patch
deleted file mode 100644
index 7e8eeb5..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc5-rh1118870.patch b/SOURCES/gcc5-rh1118870.patch
deleted file mode 100644
index 9865e72..0000000
--- a/SOURCES/gcc5-rh1118870.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-2014-07-23 Jonathan Wakely
-
- * testsuite/30_threads/condition_variable_any/rh1118870.cc: New test.
-
---- libstdc++-v3/testsuite/30_threads/condition_variable_any/rh1118870.cc
-+++ libstdc++-v3/testsuite/30_threads/condition_variable_any/rh1118870.cc
-@@ -0,0 +1,13 @@
-+// { dg-options " -std=gnu++11 -pthread" }
-+#include
-+#include
-+
-+int main()
-+{
-+ const size_t sz = sizeof(std::condition_variable_any);
-+ char garbage[sz];
-+ memset(garbage, 0xff, sz);
-+ auto cond = new ((void*)garbage) std::condition_variable_any();
-+ cond->notify_all();
-+ cond->~condition_variable_any();
-+}
diff --git a/SOURCES/gcc5-rh1279639.patch b/SOURCES/gcc5-rh1279639.patch
deleted file mode 100644
index 907452e..0000000
--- a/SOURCES/gcc5-rh1279639.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-# Workaround doxygen 1.8.10 bugs.
---- libstdc++-v3/doc/doxygen/user.cfg.in
-+++ libstdc++-v3/doc/doxygen/user.cfg.in
-@@ -895,7 +895,6 @@ INPUT = @srcdir@/doc/doxygen/doxygroups.cc \
- include/ext/pb_ds/detail/binary_heap_ \
- include/ext/pb_ds/detail/binomial_heap_ \
- include/ext/pb_ds/detail/binomial_heap_base_ \
-- include/ext/pb_ds/detail/bin_search_tree_ \
- include/ext/pb_ds/detail/branch_policy \
- include/ext/pb_ds/detail/cc_hash_table_map_ \
- include/ext/pb_ds/detail/eq_fn \
-@@ -2135,6 +2122,7 @@ PREDEFINED = __cplusplus=201103L \
- _GLIBCXX_USE_CONSTEXPR=constexpr \
- "_GLIBCXX_THROW(E)= " \
- _GLIBCXX_NOEXCEPT=noexcept \
-+ "_GLIBCXX_NOEXCEPT_IF(E)=noexcept(E)" \
- _GLIBCXX_NOTHROW=noexcept \
- _GLIBCXX_USE_NOEXCEPT=noexcept \
- _GLIBCXX_USE_WCHAR_T \
diff --git a/SOURCES/gcc5-rh330771.patch b/SOURCES/gcc5-rh330771.patch
deleted file mode 100644
index 102730f..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc5-sparc-config-detection.patch b/SOURCES/gcc5-sparc-config-detection.patch
deleted file mode 100644
index a37018e..0000000
--- a/SOURCES/gcc5-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/SOURCES/gcc7-Wno-format-security.patch b/SOURCES/gcc7-Wno-format-security.patch
new file mode 100644
index 0000000..cb21e5d
--- /dev/null
+++ b/SOURCES/gcc7-Wno-format-security.patch
@@ -0,0 +1,27 @@
+2017-02-25 Jakub Jelinek
+
+ * configure.ac: When adding -Wno-format, also add -Wno-format-security.
+ * configure: Regenerated.
+
+--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
++++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
+@@ -481,7 +481,7 @@ AC_ARG_ENABLE(build-format-warnings,
+ AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
+ [],[enable_build_format_warnings=yes])
+ AS_IF([test $enable_build_format_warnings = no],
+- [wf_opt=-Wno-format],[wf_opt=])
++ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
+ ACX_PROG_CXX_WARNING_OPTS(
+ m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
+ [-Wcast-qual $wf_opt])), [loose_warn])
+--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
++++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
+@@ -6647,7 +6647,7 @@ else
+ fi
+
+ if test $enable_build_format_warnings = no; then :
+- wf_opt=-Wno-format
++ wf_opt="-Wno-format -Wno-format-security"
+ else
+ wf_opt=
+ fi
diff --git a/SOURCES/gcc7-aarch64-async-unw-tables.patch b/SOURCES/gcc7-aarch64-async-unw-tables.patch
new file mode 100644
index 0000000..feec149
--- /dev/null
+++ b/SOURCES/gcc7-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/SOURCES/gcc7-alt-compat-test.patch b/SOURCES/gcc7-alt-compat-test.patch
new file mode 100644
index 0000000..3907d55
--- /dev/null
+++ b/SOURCES/gcc7-alt-compat-test.patch
@@ -0,0 +1,49 @@
+--- gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c.jj 2011-01-03 06:50:42.000000000 -0500
++++ gcc/testsuite/g++.dg/compat/struct-layout-1_generate.c 2011-02-18 06:28:53.858200077 -0500
+@@ -1501,6 +1501,8 @@ generate_random_tests (enum FEATURE feat
+ int i, r;
+ if (len > 'z' - 'a' + 1)
+ abort ();
++ if (getenv ("ALT_CXX_UNDER_TEST") != NULL)
++ features &= ~FEATURE_VECTOR;
+ memset (e, 0, sizeof (e));
+ r = generate_random ();
+ if ((r & 7) == 0)
+--- gcc/testsuite/g++.dg/compat/compat.exp.jj 2011-01-03 06:50:42.000000000 -0500
++++ gcc/testsuite/g++.dg/compat/compat.exp 2011-02-18 06:30:54.248200398 -0500
+@@ -116,7 +116,12 @@ if [info exists ALT_CXX_UNDER_TEST] then
+ }
+
+ # Main loop.
+-foreach src [lsort [find $srcdir/$subdir *_main.C]] {
++set tests [lsort [find $srcdir/$subdir *_main.C]]
++if { $use_alt != 0 } then {
++ set tests [prune $tests $srcdir/$subdir/decimal/*]
++}
++
++foreach src $tests {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+--- gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c.jj 2011-01-03 06:49:58.000000000 -0500
++++ gcc/testsuite/gcc.dg/compat/struct-layout-1_generate.c 2011-02-18 06:27:54.922262671 -0500
+@@ -1912,6 +1912,8 @@ generate_random_tests (enum FEATURE feat
+ int i, r;
+ if (len > 'z' - 'a' + 1)
+ abort ();
++ if (getenv ("ALT_CC_UNDER_TEST") != NULL)
++ features &= ~FEATURE_VECTOR;
+ memset (e, 0, sizeof (e));
+ r = generate_random ();
+ if ((r & 7) == 0)
+--- gcc/testsuite/lib/c-compat.exp.jj 2011-01-03 06:48:38.000000000 -0500
++++ gcc/testsuite/lib/c-compat.exp 2011-02-18 06:38:19.124265008 -0500
+@@ -75,7 +75,7 @@ proc compat_setup_dfp { } {
+ # If there is an alternate compiler, does it support decimal float types?
+ if { $compat_have_dfp == 1 && $compat_use_alt == 1 && $compat_same_alt == 0 } {
+ compat-use-alt-compiler
+- set compat_have_dfp [check_effective_target_dfprt_nocache]
++ set compat_have_dfp 0
+ compat-use-tst-compiler
+ verbose "compat_have_dfp for alt compiler: $compat_have_dfp" 2
+ }
diff --git a/SOURCES/gcc7-foffload-default.patch b/SOURCES/gcc7-foffload-default.patch
new file mode 100644
index 0000000..771e1e0
--- /dev/null
+++ b/SOURCES/gcc7-foffload-default.patch
@@ -0,0 +1,117 @@
+2017-01-20 Jakub Jelinek
+
+ * gcc.c (offload_targets_default): New variable.
+ (process_command): Set it if -foffload is defaulted.
+ (driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1
+ into environment if -foffload has been defaulted.
+ * lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define.
+ (compile_images_for_offload_targets): If OFFLOAD_TARGET_DEFAULT
+ is in the environment, don't fail if corresponding mkoffload
+ can't be found. Free and clear offload_names if no valid offload
+ is found.
+libgomp/
+ * target.c (gomp_load_plugin_for_device): If a plugin can't be
+ dlopened, assume it has no devices silently.
+
+--- gcc/gcc.c.jj 2017-01-17 10:28:40.000000000 +0100
++++ gcc/gcc.c 2017-01-20 16:26:29.649962902 +0100
+@@ -290,6 +290,10 @@ static const char *spec_host_machine = D
+
+ static char *offload_targets = NULL;
+
++/* Set to true if -foffload has not been used and offload_targets
++ is set to the configured in default. */
++static bool offload_targets_default;
++
+ /* Nonzero if cross-compiling.
+ When -b is used, the value comes from the `specs' file. */
+
+@@ -4457,7 +4461,10 @@ process_command (unsigned int decoded_op
+ /* If the user didn't specify any, default to all configured offload
+ targets. */
+ if (ENABLE_OFFLOADING && offload_targets == NULL)
+- handle_foffload_option (OFFLOAD_TARGETS);
++ {
++ handle_foffload_option (OFFLOAD_TARGETS);
++ offload_targets_default = true;
++ }
+
+ if (output_file
+ && strcmp (output_file, "-") != 0
+@@ -7693,6 +7700,8 @@ driver::maybe_putenv_OFFLOAD_TARGETS ()
+ obstack_grow (&collect_obstack, offload_targets,
+ strlen (offload_targets) + 1);
+ xputenv (XOBFINISH (&collect_obstack, char *));
++ if (offload_targets_default)
++ xputenv ("OFFLOAD_TARGET_DEFAULT=1");
+ }
+
+ free (offload_targets);
+--- gcc/lto-wrapper.c.jj 2017-01-01 12:45:34.000000000 +0100
++++ gcc/lto-wrapper.c 2017-01-20 16:34:18.294016997 +0100
+@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3.
+ /* Environment variable, used for passing the names of offload targets from GCC
+ driver to lto-wrapper. */
+ #define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES"
++#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT"
+
+ enum lto_mode_d {
+ LTO_MODE_NONE, /* Not doing LTO. */
+@@ -790,8 +791,10 @@ compile_images_for_offload_targets (unsi
+ if (!target_names)
+ return;
+ unsigned num_targets = parse_env_var (target_names, &names, NULL);
++ const char *target_names_default = getenv (OFFLOAD_TARGET_DEFAULT_ENV);
+
+ int next_name_entry = 0;
++ bool hsa_seen = false;
+ const char *compiler_path = getenv ("COMPILER_PATH");
+ if (!compiler_path)
+ goto out;
+@@ -804,18 +807,32 @@ compile_images_for_offload_targets (unsi
+ /* HSA does not use LTO-like streaming and a different compiler, skip
+ it. */
+ if (strcmp (names[i], "hsa") == 0)
+- continue;
++ {
++ hsa_seen = true;
++ continue;
++ }
+
+ offload_names[next_name_entry]
+ = compile_offload_image (names[i], compiler_path, in_argc, in_argv,
+ compiler_opts, compiler_opt_count,
+ linker_opts, linker_opt_count);
+ if (!offload_names[next_name_entry])
+- fatal_error (input_location,
+- "problem with building target image for %s\n", names[i]);
++ {
++ if (target_names_default != NULL)
++ continue;
++ fatal_error (input_location,
++ "problem with building target image for %s\n",
++ names[i]);
++ }
+ next_name_entry++;
+ }
+
++ if (next_name_entry == 0 && !hsa_seen)
++ {
++ free (offload_names);
++ offload_names = NULL;
++ }
++
+ out:
+ free_array_of_ptrs ((void **) names, num_targets);
+ }
+--- libgomp/target.c.jj 2017-01-01 12:45:52.000000000 +0100
++++ libgomp/target.c 2017-01-20 20:12:13.756710875 +0100
+@@ -2356,7 +2356,7 @@ gomp_load_plugin_for_device (struct gomp
+
+ void *plugin_handle = dlopen (plugin_name, RTLD_LAZY);
+ if (!plugin_handle)
+- goto dl_fail;
++ return 0;
+
+ /* Check if all required functions are available in the plugin and store
+ their handlers. None of the symbols can legitimately be NULL,
diff --git a/SOURCES/gcc7-hack.patch b/SOURCES/gcc7-hack.patch
new file mode 100644
index 0000000..4f3070f
--- /dev/null
+++ b/SOURCES/gcc7-hack.patch
@@ -0,0 +1,135 @@
+--- 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
+@@ -511,6 +511,8 @@ multi-do:
+ ADAFLAGS="$(ADAFLAGS) $${flags}" \
+ prefix="$(prefix)" \
+ exec_prefix="$(exec_prefix)" \
++ mandir="$(mandir)" \
++ infodir="$(infodir)" \
+ GOCFLAGS="$(GOCFLAGS) $${flags}" \
+ CXXFLAGS="$(CXXFLAGS) $${flags}" \
+ LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
+--- 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/SOURCES/gcc7-htm-in-asm.patch b/SOURCES/gcc7-htm-in-asm.patch
new file mode 100644
index 0000000..a7f1b7b
--- /dev/null
+++ b/SOURCES/gcc7-htm-in-asm.patch
@@ -0,0 +1,55 @@
+--- libitm/config/x86/target.h.jj 2013-06-23 20:43:50.000000000 +0200
++++ libitm/config/x86/target.h 2013-08-13 17:14:57.540012109 +0200
+@@ -64,7 +64,7 @@ cpu_relax (void)
+
+ // Use Intel RTM if supported by the assembler.
+ // See gtm_thread::begin_transaction for how these functions are used.
+-#ifdef HAVE_AS_RTM
++#if 1 /* def HAVE_AS_RTM */
+ #define USE_HTM_FASTPATH
+ #ifdef __x86_64__
+ // Use the custom fastpath in ITM_beginTransaction.
+@@ -97,7 +97,10 @@ htm_init ()
+ static inline uint32_t
+ htm_begin ()
+ {
+- return _xbegin();
++// return _xbegin();
++ uint32_t ret;
++ __asm volatile ("movl $-1, %%eax; .byte 0xc7, 0xf8, 0, 0, 0, 0" : "=a" (ret) : : "memory");
++ return ret;
+ }
+
+ static inline bool
+@@ -109,7 +112,8 @@ htm_begin_success (uint32_t begin_ret)
+ static inline void
+ htm_commit ()
+ {
+- _xend();
++// _xend();
++ __asm volatile (".byte 0x0f, 0x01, 0xd5" : : : "memory");
+ }
+
+ static inline void
+@@ -117,7 +121,8 @@ htm_abort ()
+ {
+ // ??? According to a yet unpublished ABI rule, 0xff is reserved and
+ // supposed to signal a busy lock. Source: andi.kleen@intel.com
+- _xabort(0xff);
++// _xabort(0xff);
++ __asm volatile (".byte 0xc6, 0xf8, 0xff" : : : "memory");
+ }
+
+ static inline bool
+@@ -130,7 +135,10 @@ htm_abort_should_retry (uint32_t begin_r
+ static inline bool
+ htm_transaction_active ()
+ {
+- return _xtest() != 0;
++// return _xtest() != 0;
++ bool ret;
++ __asm volatile (".byte 0x0f, 0x01, 0xd6; setne %%al" : "=a" (ret) : : "memory");
++ return ret;
+ }
+ #endif
+
diff --git a/SOURCES/gcc7-i386-libgomp.patch b/SOURCES/gcc7-i386-libgomp.patch
new file mode 100644
index 0000000..520561e
--- /dev/null
+++ b/SOURCES/gcc7-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/SOURCES/gcc7-isl-dl.patch b/SOURCES/gcc7-isl-dl.patch
new file mode 100644
index 0000000..a9b73b3
--- /dev/null
+++ b/SOURCES/gcc7-isl-dl.patch
@@ -0,0 +1,711 @@
+--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
++++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
+@@ -1046,7 +1046,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@
+@@ -2196,6 +2196,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.h.jj 2016-01-27 12:44:06.000000000 +0100
++++ gcc/graphite.h 2016-01-27 13:26:38.309876856 +0100
+@@ -37,6 +37,586 @@ along with GCC; see the file COPYING3.
+ #include
+ #include
+ #include
++#include
++#include
++
++#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 (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_serialize_sccs); \
++ DYNSYM (isl_printer_set_yaml_style); \
++ 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_int_from_si); \
++ DYNSYM (isl_val_int_from_ui); \
++ DYNSYM (isl_val_mul); \
++ DYNSYM (isl_val_neg); \
++ DYNSYM (isl_val_sub); \
++ DYNSYM (isl_printer_print_union_map); \
++ DYNSYM (isl_pw_aff_get_ctx); \
++ DYNSYM (isl_val_is_int); \
++ DYNSYM (isl_ctx_get_max_operations); \
++ DYNSYM (isl_ctx_set_max_operations); \
++ DYNSYM (isl_ctx_last_error); \
++ DYNSYM (isl_ctx_reset_operations); \
++ DYNSYM (isl_map_coalesce); \
++ DYNSYM (isl_printer_print_schedule); \
++ DYNSYM (isl_set_set_dim_id); \
++ DYNSYM (isl_union_map_coalesce); \
++ DYNSYM (isl_multi_val_set_val); \
++ DYNSYM (isl_multi_val_zero); \
++ DYNSYM (isl_options_set_schedule_max_coefficient); \
++ DYNSYM (isl_options_set_tile_scale_tile_loops); \
++ DYNSYM (isl_schedule_copy); \
++ DYNSYM (isl_schedule_get_map); \
++ DYNSYM (isl_schedule_map_schedule_node_bottom_up); \
++ DYNSYM (isl_schedule_node_band_get_permutable); \
++ DYNSYM (isl_schedule_node_band_get_space); \
++ DYNSYM (isl_schedule_node_band_tile); \
++ DYNSYM (isl_schedule_node_child); \
++ DYNSYM (isl_schedule_node_free); \
++ DYNSYM (isl_schedule_node_get_child); \
++ DYNSYM (isl_schedule_node_get_ctx); \
++ DYNSYM (isl_schedule_node_get_type); \
++ DYNSYM (isl_schedule_node_n_children); \
++ DYNSYM (isl_union_map_is_equal); \
++ DYNSYM (isl_union_access_info_compute_flow); \
++ DYNSYM (isl_union_access_info_from_sink); \
++ DYNSYM (isl_union_access_info_set_may_source); \
++ DYNSYM (isl_union_access_info_set_must_source); \
++ DYNSYM (isl_union_access_info_set_schedule); \
++ DYNSYM (isl_union_flow_free); \
++ DYNSYM (isl_union_flow_get_may_dependence); \
++ DYNSYM (isl_union_flow_get_must_dependence); \
++ DYNSYM (isl_aff_var_on_domain); \
++ DYNSYM (isl_multi_aff_from_aff); \
++ DYNSYM (isl_schedule_get_ctx); \
++ DYNSYM (isl_multi_aff_set_tuple_id); \
++ DYNSYM (isl_multi_aff_dim); \
++ DYNSYM (isl_schedule_get_domain); \
++ DYNSYM (isl_union_set_is_empty); \
++ DYNSYM (isl_union_set_get_space); \
++ DYNSYM (isl_union_pw_multi_aff_empty); \
++ DYNSYM (isl_union_set_foreach_set); \
++ DYNSYM (isl_union_set_free); \
++ DYNSYM (isl_multi_union_pw_aff_from_union_pw_multi_aff); \
++ DYNSYM (isl_multi_union_pw_aff_apply_multi_aff); \
++ DYNSYM (isl_schedule_insert_partial_schedule); \
++ DYNSYM (isl_union_pw_multi_aff_free); \
++ DYNSYM (isl_pw_multi_aff_project_out_map); \
++ DYNSYM (isl_union_pw_multi_aff_add_pw_multi_aff); \
++ DYNSYM (isl_schedule_from_domain); \
++ DYNSYM (isl_schedule_sequence); \
++ DYNSYM (isl_ast_build_node_from_schedule); \
++ DYNSYM (isl_ast_node_mark_get_node); \
++ DYNSYM (isl_schedule_node_band_member_get_ast_loop_type); \
++ DYNSYM (isl_schedule_node_band_member_set_ast_loop_type); \
++ DYNSYM (isl_val_n_abs_num_chunks); \
++ DYNSYM (isl_val_get_abs_num_chunks); \
++ DYNSYM (isl_val_int_from_chunks); \
++ DYNSYM (isl_val_is_neg); \
++ DYNSYM (isl_version);
++
++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)
++#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_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
++#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
++#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_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)
++#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map)
++#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx)
++#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int)
++#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations)
++#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations)
++#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error)
++#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations)
++#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce)
++#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
++#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
++#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
++#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
++#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
++#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
++#define isl_options_set_tile_scale_tile_loops (*isl_pointers__.p_isl_options_set_tile_scale_tile_loops)
++#define isl_schedule_copy (*isl_pointers__.p_isl_schedule_copy)
++#define isl_schedule_get_map (*isl_pointers__.p_isl_schedule_get_map)
++#define isl_schedule_map_schedule_node_bottom_up (*isl_pointers__.p_isl_schedule_map_schedule_node_bottom_up)
++#define isl_schedule_node_band_get_permutable (*isl_pointers__.p_isl_schedule_node_band_get_permutable)
++#define isl_schedule_node_band_get_space (*isl_pointers__.p_isl_schedule_node_band_get_space)
++#define isl_schedule_node_band_tile (*isl_pointers__.p_isl_schedule_node_band_tile)
++#define isl_schedule_node_child (*isl_pointers__.p_isl_schedule_node_child)
++#define isl_schedule_node_free (*isl_pointers__.p_isl_schedule_node_free)
++#define isl_schedule_node_get_child (*isl_pointers__.p_isl_schedule_node_get_child)
++#define isl_schedule_node_get_ctx (*isl_pointers__.p_isl_schedule_node_get_ctx)
++#define isl_schedule_node_get_type (*isl_pointers__.p_isl_schedule_node_get_type)
++#define isl_schedule_node_n_children (*isl_pointers__.p_isl_schedule_node_n_children)
++#define isl_union_map_is_equal (*isl_pointers__.p_isl_union_map_is_equal)
++#define isl_union_access_info_compute_flow (*isl_pointers__.p_isl_union_access_info_compute_flow)
++#define isl_union_access_info_from_sink (*isl_pointers__.p_isl_union_access_info_from_sink)
++#define isl_union_access_info_set_may_source (*isl_pointers__.p_isl_union_access_info_set_may_source)
++#define isl_union_access_info_set_must_source (*isl_pointers__.p_isl_union_access_info_set_must_source)
++#define isl_union_access_info_set_schedule (*isl_pointers__.p_isl_union_access_info_set_schedule)
++#define isl_union_flow_free (*isl_pointers__.p_isl_union_flow_free)
++#define isl_union_flow_get_may_dependence (*isl_pointers__.p_isl_union_flow_get_may_dependence)
++#define isl_union_flow_get_must_dependence (*isl_pointers__.p_isl_union_flow_get_must_dependence)
++#define isl_aff_var_on_domain (*isl_pointers__.p_isl_aff_var_on_domain)
++#define isl_multi_aff_from_aff (*isl_pointers__.p_isl_multi_aff_from_aff)
++#define isl_schedule_get_ctx (*isl_pointers__.p_isl_schedule_get_ctx)
++#define isl_multi_aff_set_tuple_id (*isl_pointers__.p_isl_multi_aff_set_tuple_id)
++#define isl_multi_aff_dim (*isl_pointers__.p_isl_multi_aff_dim)
++#define isl_schedule_get_domain (*isl_pointers__.p_isl_schedule_get_domain)
++#define isl_union_set_is_empty (*isl_pointers__.p_isl_union_set_is_empty)
++#define isl_union_set_get_space (*isl_pointers__.p_isl_union_set_get_space)
++#define isl_union_pw_multi_aff_empty (*isl_pointers__.p_isl_union_pw_multi_aff_empty)
++#define isl_union_set_foreach_set (*isl_pointers__.p_isl_union_set_foreach_set)
++#define isl_union_set_free (*isl_pointers__.p_isl_union_set_free)
++#define isl_multi_union_pw_aff_from_union_pw_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_from_union_pw_multi_aff)
++#define isl_multi_union_pw_aff_apply_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_apply_multi_aff)
++#define isl_schedule_insert_partial_schedule (*isl_pointers__.p_isl_schedule_insert_partial_schedule)
++#define isl_union_pw_multi_aff_free (*isl_pointers__.p_isl_union_pw_multi_aff_free)
++#define isl_pw_multi_aff_project_out_map (*isl_pointers__.p_isl_pw_multi_aff_project_out_map)
++#define isl_union_pw_multi_aff_add_pw_multi_aff (*isl_pointers__.p_isl_union_pw_multi_aff_add_pw_multi_aff)
++#define isl_schedule_from_domain (*isl_pointers__.p_isl_schedule_from_domain)
++#define isl_schedule_sequence (*isl_pointers__.p_isl_schedule_sequence)
++#define isl_ast_build_node_from_schedule (*isl_pointers__.p_isl_ast_build_node_from_schedule)
++#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
++#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
++#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
++#define isl_val_n_abs_num_chunks (*isl_pointers__.p_isl_val_n_abs_num_chunks)
++#define isl_val_get_abs_num_chunks (*isl_pointers__.p_isl_val_get_abs_num_chunks)
++#define isl_val_int_from_chunks (*isl_pointers__.p_isl_val_int_from_chunks)
++#define isl_val_is_neg (*isl_pointers__.p_isl_val_is_neg)
++#define isl_version (*isl_pointers__.p_isl_version)
+
+ typedef struct poly_dr *poly_dr_p;
+
+@@ -458,5 +1038,6 @@ extern void build_scops (vec *);
+ extern void dot_all_sese (FILE *, vec &);
+ extern void dot_sese (sese_l &);
+ extern void dot_cfg ();
++extern const char *get_isl_version (bool);
+
+ #endif
+--- gcc/graphite.c.jj 2015-11-04 14:15:32.000000000 +0100
++++ gcc/graphite.c 2015-11-04 14:56:02.645536409 +0100
+@@ -55,6 +55,35 @@ along with GCC; see the file COPYING3.
+ #include "tree-vectorizer.h"
+ #include "graphite.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.15", 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
++ isl_pointers__.inited = true;
++ return true;
++}
++
+ /* Print global statistics to FILE. */
+
+ static void
+@@ -299,6 +328,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))
+@@ -342,6 +380,14 @@ graphite_transform_loops (void)
+ isl_ctx_free (ctx);
+ }
+
++const char *
++get_isl_version (bool force)
++{
++ if (force)
++ init_isl_pointers ();
++ return (isl_pointers__.inited && isl_version) ? isl_version () : "none";
++}
++
+ #else /* If isl is not available: #ifndef HAVE_isl. */
+
+ static void
+--- gcc/toplev.c.jj 2017-02-19 13:02:31.000000000 +0100
++++ gcc/toplev.c 2017-02-19 16:50:25.536301350 +0100
+@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3.
+
+ #ifdef HAVE_isl
+ #include
++extern const char *get_isl_version (bool);
+ #endif
+
+ static void general_init (const char *, bool);
+@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i
+ #ifndef HAVE_isl
+ "none"
+ #else
+- isl_version ()
++ get_isl_version (*indent == 0)
+ #endif
+ );
+ if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
diff --git a/SOURCES/gcc7-libgomp-omp_h-multilib.patch b/SOURCES/gcc7-libgomp-omp_h-multilib.patch
new file mode 100644
index 0000000..d0e98d1
--- /dev/null
+++ b/SOURCES/gcc7-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/SOURCES/gcc7-libstdc++-docs.patch b/SOURCES/gcc7-libstdc++-docs.patch
new file mode 100644
index 0000000..b9f63a3
--- /dev/null
+++ b/SOURCES/gcc7-libstdc++-docs.patch
@@ -0,0 +1,24 @@
+--- 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 7.1.1
++
+ 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
+@@ -20,7 +20,9 @@
+ 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 locally
++ for the 7.1.1 release,
++ online
+ for each GCC release
+ and
+
diff --git a/SOURCES/gcc7-libtool-no-rpath.patch b/SOURCES/gcc7-libtool-no-rpath.patch
new file mode 100644
index 0000000..466c661
--- /dev/null
+++ b/SOURCES/gcc7-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/SOURCES/gcc7-no-add-needed.patch b/SOURCES/gcc7-no-add-needed.patch
new file mode 100644
index 0000000..4102e1c
--- /dev/null
+++ b/SOURCES/gcc7-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/SOURCES/gcc7-ppc32-retaddr.patch b/SOURCES/gcc7-ppc32-retaddr.patch
new file mode 100644
index 0000000..7e8eeb5
--- /dev/null
+++ b/SOURCES/gcc7-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/SOURCES/gcc7-pr80725.patch b/SOURCES/gcc7-pr80725.patch
new file mode 100644
index 0000000..47f992d
--- /dev/null
+++ b/SOURCES/gcc7-pr80725.patch
@@ -0,0 +1,73 @@
+2017-05-24 Andreas Krebbel
+
+ PR target/80725
+ * config/s390/s390.c (s390_check_qrst_address): Check incoming
+ address against address_operand predicate.
+ * config/s390/s390.md ("*indirect_jump"): Swap alternatives.
+
+ * gcc.target/s390/pr80725.c: New test.
+
+--- gcc/config/s390/s390.c (revision 248406)
++++ gcc/config/s390/s390.c (revision 248407)
+@@ -3102,6 +3102,9 @@ s390_check_qrst_address (char c, rtx op,
+ struct s390_address addr;
+ bool decomposed = false;
+
++ if (!address_operand (op, GET_MODE (op)))
++ return 0;
++
+ /* This check makes sure that no symbolic address (except literal
+ pool references) are accepted by the R or T constraints. */
+ if (s390_loadrelative_operand_p (op, NULL, NULL))
+--- gcc/config/s390/s390.md (revision 248406)
++++ gcc/config/s390/s390.md (revision 248407)
+@@ -9660,14 +9660,16 @@ (define_expand "indirect_jump"
+ operands[0] = force_reg (Pmode, operands[0]);
+ })
+
++; The first constraint must be an "extra address constraint" in order
++; to trigger address reloading in LRA/reload
+ (define_insn "*indirect_jump"
+ [(set (pc)
+- (match_operand 0 "address_operand" "a,ZR"))]
++ (match_operand 0 "address_operand" "ZR,a"))]
+ ""
+ "@
+- br\t%0
+- b\t%a0"
+- [(set_attr "op_type" "RR,RX")
++ b\t%a0
++ br\t%0"
++ [(set_attr "op_type" "RX,RR")
+ (set_attr "type" "branch")
+ (set_attr "atype" "agen")
+ (set_attr "cpu_facility" "*")])
+--- gcc/testsuite/gcc.target/s390/pr80725.c (nonexistent)
++++ gcc/testsuite/gcc.target/s390/pr80725.c (revision 248407)
+@@ -0,0 +1,26 @@
++/* Regression test for PR/80725. */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -march=zEC12" } */
++
++int a, e;
++const char b;
++char c;
++const int d;
++void bar (short);
++
++void
++foo (int x, int y)
++{
++ long f = d;
++ short g = 0;
++ while (e)
++ while (a < x)
++ {
++ if (y)
++ goto *d;
++ g = b | b + g;
++ bar (g);
++ c = (char) (long) foo;
++ }
++}
diff --git a/SOURCES/gcc7-rh1118870.patch b/SOURCES/gcc7-rh1118870.patch
new file mode 100644
index 0000000..9865e72
--- /dev/null
+++ b/SOURCES/gcc7-rh1118870.patch
@@ -0,0 +1,20 @@
+2014-07-23 Jonathan Wakely
+
+ * testsuite/30_threads/condition_variable_any/rh1118870.cc: New test.
+
+--- libstdc++-v3/testsuite/30_threads/condition_variable_any/rh1118870.cc
++++ libstdc++-v3/testsuite/30_threads/condition_variable_any/rh1118870.cc
+@@ -0,0 +1,13 @@
++// { dg-options " -std=gnu++11 -pthread" }
++#include
++#include
++
++int main()
++{
++ const size_t sz = sizeof(std::condition_variable_any);
++ char garbage[sz];
++ memset(garbage, 0xff, sz);
++ auto cond = new ((void*)garbage) std::condition_variable_any();
++ cond->notify_all();
++ cond->~condition_variable_any();
++}
diff --git a/SOURCES/gcc7-sparc-config-detection.patch b/SOURCES/gcc7-sparc-config-detection.patch
new file mode 100644
index 0000000..bb06b35
--- /dev/null
+++ b/SOURCES/gcc7-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
+@@ -2790,7 +2790,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
+@@ -2844,7 +2844,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/default64.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/SPECS/gcc-libraries.spec b/SPECS/gcc-libraries.spec
index 3ac30f7..7836b0c 100644
--- a/SPECS/gcc-libraries.spec
+++ b/SPECS/gcc-libraries.spec
@@ -1,9 +1,10 @@
-%global DATE 20160406
-%global SVNREV 234777
-%global gcc_version 5.3.1
+%global DATE 20170526
+%global SVNREV 248505
+%global gcc_version 7.1.1
+%global gcc_major 7
# 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 3
+%global gcc_release 2
%global mpc_version 0.8.1
%global _unpackaged_files_terminate_build 0
%global multilib_64_archs sparc64 ppc64 s390x x86_64
@@ -19,6 +20,16 @@
%ifarch x86_64
%global multilib_32_arch i686
%endif
+%ifarch %{ix86} x86_64 ia64
+%global build_libquadmath 1
+%else
+%global build_libquadmath 0
+%endif
+%ifarch %{ix86} x86_64
+%global build_libcilkrts 1
+%else
+%global build_libcilkrts 0
+%endif
%ifarch aarch64
%if 0%{?rhel} >= 7
%global build_libatomic 1
@@ -38,28 +49,18 @@
%else
%global build_libitm 1
%endif
-%ifarch %{ix86} x86_64
-%global build_libcilkrts 1
-%else
-%global build_libcilkrts 0
-%endif
-%ifarch %{ix86} x86_64
-%global build_libmpx 1
-%else
-%global build_libmpx 0
-%endif
-%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64
+%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips}
%global attr_ifunc 1
%else
%global attr_ifunc 0
%endif
Summary: GCC runtime libraries
Name: gcc-libraries
-Provides: libatomic libitm libcilkrts libmpx
+Provides: libatomic libitm libcilkrts libgfortran4
Obsoletes: libitm
Version: %{gcc_version}
-Release: %{gcc_release}.1%{?dist}
+Release: %{gcc_release}.2.1%{?dist}
# libgcc, libgfortran, libmudflap, libgomp, libstdc++ and crtstuff have
# GCC Runtime Exception.
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
@@ -81,7 +82,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Need binutils which support --build-id >= 2.17.50.0.17-3
# Need binutils which support %gnu_unique_object >= 2.19.51.0.14
# Need binutils which support .cfi_sections >= 2.19.51.0.14-33
-BuildRequires: binutils >= 2.19.51.0.14-33
+# Need binutils which support --no-add-needed >= 2.20.51.0.2-12
+# Need binutils which support -plugin
+BuildRequires: binutils >= 2.24
# While gcc doesn't include statically linked binaries, during testing
# -static is used several times.
BuildRequires: glibc-static
@@ -90,7 +93,6 @@ BuildRequires: /usr/bin/pod2man
%if 0%{?rhel} >= 7
BuildRequires: texinfo-tex
%endif
-#BuildRequires: systemtap-sdt-devel >= 1.3
# For VTA guality testing
BuildRequires: gdb
# Make sure pthread.h doesn't contain __thread tokens
@@ -119,10 +121,12 @@ BuildRequires: libunwind >= 0.98
# Need binutils that support .weakref
# Need binutils that supports --hash-style=gnu
# Need binutils that support mffgpr/mftgpr
-# Need binutils which support --build-id >= 2.17.50.0.17-3
-# Need binutils which support %gnu_unique_object >= 2.19.51.0.14
-# Need binutils which support .cfi_sections >= 2.19.51.0.14-33
-Requires: binutils >= 2.19.51.0.14-33
+# Need binutils that support --build-id
+# Need binutils that support %gnu_unique_object
+# Need binutils that support .cfi_sections
+# Need binutils that support --no-add-needed
+# Need binutils that support -plugin
+Requires: binutils >= 2.24
# Make sure gdb will understand DW_FORM_strp
Conflicts: gdb < 5.1-2
Requires: glibc-devel >= 2.2.90-12
@@ -139,7 +143,7 @@ BuildRequires: libmpc-devel >= 0.8.1
%endif
Requires(post): /sbin/install-info
Requires(preun): /sbin/install-info
-ExclusiveArch: %{ix86} x86_64 ppc ppc64 s390 s390x aarch64
+ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390 s390x aarch64
%global oformat %{nil}
%global oformat2 %{nil}
@@ -172,25 +176,23 @@ ExclusiveArch: %{ix86} x86_64 ppc ppc64 s390 s390x aarch64
%global oformat OUTPUT_FORMAT(elf64-powerpcle)
%endif
-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
-Patch11: gcc5-no-add-needed.patch
-Patch12: gcc5-libgo-p224.patch
-Patch15: gcc5-rh1279639.patch
-
-#Patch1000: gcc5-libstdc++-compat.patch
-#Patch1001: gcc5-libgfortran-compat.patch
-Patch1002: gcc5-alt-compat-test.patch
-#Patch1003: gcc5-libquadmath-compat.patch
-Patch1004: gcc5-libstdc++44-xfail.patch
-Patch1005: gcc5-rh1118870.patch
-Patch1100: gcc5-htm-in-asm.patch
+Patch0: gcc7-hack.patch
+Patch1: gcc7-ppc32-retaddr.patch
+Patch2: gcc7-i386-libgomp.patch
+Patch3: gcc7-sparc-config-detection.patch
+Patch4: gcc7-libgomp-omp_h-multilib.patch
+Patch5: gcc7-libtool-no-rpath.patch
+Patch6: gcc7-isl-dl.patch
+Patch7: gcc7-libstdc++-docs.patch
+Patch8: gcc7-no-add-needed.patch
+Patch9: gcc7-aarch64-async-unw-tables.patch
+Patch10: gcc7-foffload-default.patch
+Patch11: gcc7-Wno-format-security.patch
+Patch12: gcc7-pr80725.patch
+
+Patch1002: gcc7-alt-compat-test.patch
+Patch1005: gcc7-rh1118870.patch
+Patch1100: gcc7-htm-in-asm.patch
%if 0%{?rhel} >= 7
%global nonsharedver 48
@@ -253,6 +255,21 @@ Requires(preun): /sbin/install-info
This package contains the Memory Protection Extensions runtime libraries
which is used for -fcheck-pointer-bounds -mmpx instrumented programs.
+%package -n libgfortran4
+Summary: Fortran runtime
+Group: System Environment/Libraries
+Autoreq: true
+%if %{build_libquadmath}
+Requires: libquadmath
+%endif
+%if "%{version}" != "%{gcc_version}"
+Provides: libgfortran = %{gcc_provides}
+%endif
+
+%description -n libgfortran4
+This package contains Fortran shared library which is needed to run
+Fortran dynamically linked programs.
+
%prep
%if 0%{?rhel} >= 7
%setup -q -n gcc-%{version}-%{DATE}
@@ -260,21 +277,19 @@ which is used for -fcheck-pointer-bounds -mmpx instrumented programs.
%setup -q -n gcc-%{version}-%{DATE} -a 1
%endif
%patch0 -p0 -b .hack~
-%patch1 -p0 -b .java-nomulti~
-%patch2 -p0 -b .ppc32-retaddr~
-%patch3 -p0 -b .rh330771~
-%patch4 -p0 -b .i386-libgomp~
-%patch5 -p0 -b .sparc-config-detection~
-%patch6 -p0 -b .libgomp-omp_h-multilib~
-%patch7 -p0 -b .libtool-no-rpath~
-%patch11 -p0 -b .no-add-needed~
-%patch12 -p0 -b .libgo-p224~
-rm -f libgo/go/crypto/elliptic/p224{,_test}.go
-%patch15 -p0 -b .rh1279639~
-
-# nonshared stuff not ready yet for DTS4
-#%patch1000 -p0 -b .libstdc++-compat~
-#%patch1001 -p0 -b .libgfortran-compat~
+%patch1 -p0 -b .ppc32-retaddr~
+%patch2 -p0 -b .i386-libgomp~
+%patch3 -p0 -b .sparc-config-detection~
+%patch4 -p0 -b .libgomp-omp_h-multilib~
+%patch5 -p0 -b .libtool-no-rpath~
+%patch8 -p0 -b .no-add-needed~
+%patch9 -p0 -b .aarch64-async-unw-tables~
+%patch10 -p0 -b .foffload-default~
+%patch11 -p0 -b .Wno-format-security~
+%patch12 -p0 -b .pr80725~
+
+sed -i -e 's/ -Wl,-z,nodlopen//g' gcc/ada/gcc-interface/Makefile.in
+
%ifarch %{ix86} x86_64
%if 0%{?rhel} < 7
# On i?86/x86_64 there are some incompatibilities in _Decimal* as well as
@@ -283,16 +298,8 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go
%endif
%endif
-#%if 0%{?rhel} < 7
-#%patch1003 -p0 -b .libquadmath-compat~
-#%endif
-
-# We probably don't care about libstdc++ testsuite here.
-#%if 0%{?rhel} == 6
-#%patch1004 -p0 -b .libstdc++44-xfail~
-#%endif
%patch1005 -p0 -b .rh1118870~
-%patch1100 -p0 -b .gcc5-htm-in-asm~
+%patch1100 -p0 -b .gcc6-htm-in-asm~
%if 0%{?rhel} == 6
# Default to -gdwarf-3 rather than -gdwarf-4
@@ -386,17 +393,13 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
GCJFLAGS="$OPT_FLAGS" \
../configure --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
- --with-bugurl=http://bugzilla.redhat.com/bugzilla --disable-bootstrap \
+ --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap \
--enable-shared --enable-threads=posix --enable-checking=release \
-%ifarch ppc64le
- --enable-targets=powerpcle-linux --disable-multilib \
-%else
- --enable-multilib \
-%endif
+ --enable-multilib --disable-libsanitizer \
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \
--enable-gnu-unique-object \
--enable-linker-build-id \
- --enable-languages=c,c++,lto \
+ --enable-languages=c,c++,lto,fortran \
--enable-plugin --with-linker-hash-style=gnu \
%if 0%{?rhel} >= 7
--enable-initfini-array \
@@ -404,15 +407,6 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
--disable-initfini-array \
%endif
--disable-libgcj \
-%if 0%{rhel} < 8
- --with-default-libstdcxx-abi=gcc4-compatible \
-%endif
- --without-isl \
-%if %{build_libmpx}
- --enable-libmpx \
-%else
- --disable-libmpx \
-%endif
--without-ppl --without-cloog \
%if 0%{?rhel} < 7
--with-mpc=`pwd`/mpc-install \
@@ -440,18 +434,13 @@ CC="$CC" CXX="$CXX" 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 ppc64p7
+%ifarch ppc ppc64 ppc64le ppc64p7
%if 0%{?rhel} >= 7
--with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \
%else
--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
-%endif
%ifarch ppc
--build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32
%endif
@@ -475,7 +464,11 @@ GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS"
# Copy various doc files here and there
cd ..
-mkdir -p rpm.doc/libatomic rpm.doc/libitm rpm.doc/libcilkrts rpm.doc/libmpx
+mkdir -p rpm.doc/gfortran rpm.doc/libatomic rpm.doc/libitm rpm.doc/libcilkrts rpm.doc/libmpx
+
+(cd libgfortran; for i in ChangeLog*; do
+ cp -p $i ../rpm.doc/gfortran/$i.libgfortran
+done)
%if %{build_libitm}
(cd libitm; for i in ChangeLog*; do
@@ -495,12 +488,6 @@ done)
done)
%endif
-%if %{build_libmpx}
-(cd libmpx; for i in ChangeLog*; do
- cp -p $i ../rpm.doc/libmpx/$i.libmpx
-done)
-%endif
-
rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9]
find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9
@@ -546,14 +533,31 @@ cp -a temp/usr/%{_lib}/libcilkrts.so.5* %{buildroot}%{_prefix}/%{_lib}/
cd ../..
%endif
-%if %{build_libmpx}
-cd %{gcc_target_platform}/libmpx/
+%if %{build_libquadmath}
+cd %{gcc_target_platform}/libquadmath/
mkdir temp
make install DESTDIR=`pwd`/temp
-cp -a temp/usr/%{_lib}/libmpx.so.* %{buildroot}%{_prefix}/%{_lib}/
+cp -a temp/usr/%{_lib}/libquadmath.so.0* %{buildroot}%{_prefix}/%{_lib}/
cd ../..
%endif
+cd %{gcc_target_platform}/libgfortran/
+mkdir temp
+%if %{build_libquadmath}
+# It needs to find libquadmath.so.
+export LIBRARY_PATH=`pwd`/../../%{gcc_target_platform}/libquadmath/temp/usr/%{_lib}
+%endif
+make install DESTDIR=`pwd`/temp
+cp -a temp/usr/%{_lib}/libgfortran.so.4* %{buildroot}%{_prefix}/%{_lib}/
+cd ../..
+
+
+# Remove binaries we will not be including, so that they don't end up in
+# gcc-libraries-debuginfo.
+%if 0%{?rhel} >= 7
+rm -f %{buildroot}%{_prefix}/%{_lib}/libquadmath.so*
+%endif
+
rm -f gcc/libgcc_s.so
ln -sf libgcc_s.so.1 gcc/libgcc_s.so
@@ -561,7 +565,11 @@ ln -sf libgcc_s.so.1 gcc/libgcc_s.so
cd obj-%{gcc_target_platform}
# run the tests.
+%ifnarch ppc64le
make %{?_smp_mflags} -k check RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector}'" || :
+%else
+make %{?_smp_mflags} -k check || :
+%endif
( LC_ALL=C ../contrib/test_summary -t || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}' > testresults
echo ====================TESTING=========================
cat testresults
@@ -598,6 +606,15 @@ if [ -f %{_infodir}/libcilkrts.info.gz ]; then
--info-dir=%{_infodir} %{_infodir}/libcilkrts.info.gz || :
fi
+%post -n libgfortran4
+/sbin/ldconfig
+if [ -f %{_infodir}/libgfortran.info.gz ]; then
+ /sbin/install-info \
+ --info-dir=%{_infodir} %{_infodir}/libgfortran.info.gz || :
+fi
+
+%post -n libmpx -p /sbin/ldconfig
+
%preun -n libitm
if [ $1 = 0 -a -f %{_infodir}/libitm.info.gz ]; then
/sbin/install-info --delete \
@@ -610,6 +627,12 @@ if [ $1 = 0 -a -f %{_infodir}/libatomic.info.gz ]; then
--info-dir=%{_infodir} %{_infodir}/libatomic.info.gz || :
fi
+%preun -n libgfortran4
+if [ $1 = 0 -a -f %{_infodir}/libgfortran.info.gz ]; then
+ /sbin/install-info --delete \
+ --info-dir=%{_infodir} %{_infodir}/libgfortran.info.gz || :
+fi
+
%preun -n libcilkrts
if [ $1 = 0 -a -f %{_infodir}/libcilkrts.info.gz ]; then
/sbin/install-info --delete \
@@ -622,7 +645,7 @@ fi
%postun -n libcilkrts -p /sbin/ldconfig
-%post -n libmpx -p /sbin/ldconfig
+%postun -n libgfortran4 -p /sbin/ldconfig
%postun -n libmpx -p /sbin/ldconfig
@@ -651,30 +674,54 @@ fi
%doc gcc/COPYING3 COPYING.RUNTIME rpm.doc/libcilkrts/*
%endif
-%if %{build_libmpx}
-%files -n libmpx
+%files -n libgfortran4
%defattr(-,root,root,-)
-%{_prefix}/%{_lib}/libmpx.so.*
+%{_prefix}/%{_lib}/libgfortran.so.4*
-%doc gcc/COPYING3 COPYING.RUNTIME rpm.doc/libmpx/*
-%endif
+%doc gcc/COPYING3 COPYING.RUNTIME rpm.doc/gfortran/*
%changelog
-* Tue Aug 23 2016 Marek Polacek 5.3.1-3.1
-- run the whole testsuite
+* Tue Jun 20 2017 Marek Polacek 7.1.1-2.2.1
+- don't run make check with -fstack-protector on ppc64le
+
+* Thu Jun 15 2017 Marek Polacek 7.1.1-2.1.1
+- bump gcc_release (DTS7 gcc-gfortran requires libgfortran4 >= 7.1.1-2)
+
+* Mon Jun 12 2017 Marek Polacek 7.1.1-1.2.1
+- remove libquadmath.so.* so that it doesn't end up in debuginfo
+
+* Mon Jun 5 2017 Marek Polacek 7.1.1-1.1.1
+- rename libgfortran2 to libgfortran4
+- update from Fedora gcc-7.1.1-2.fc27
+
+* Wed May 24 2017 Marek Polacek 7.0.1-4.2.1
+- also build on ppc64le
+
+* Mon Mar 20 2017 Marek Polacek 7.0.1-4.1.1
+- also build on aarch64
+- drop libitm
+- only enable libatomic for aarch64
+
+* Fri Mar 17 2017 Marek Polacek 7.0.1-3.1.1
+- drop libquadmath and rename libgfortran to libgfortran2
+
+* Wed Mar 15 2017 Marek Polacek 7.0.1-2.1.1
+- also include the libquadmath subpackage
-* Fri Aug 05 2016 Marek Polacek 5.3.1-2.1
-- enable libatomic on aarch64 (#1362438)
-- enable libcilkrts and libmpx testsuites
+* Tue Mar 14 2017 Marek Polacek 7.0.1-1.1.1
+- update from Fedora 7.0.1-0.12.fc26 (#1412815)
+- add the libgfortran subpackage
-* Tue May 10 2016 Marek Polacek 5.3.1-1.1
-- update from DTS gcc-5.3.1-6.1 (#1265252)
+* Wed Oct 19 2016 Marek Polacek 6.2.1-1.1.1
+- update from DTS 6.2.1 (#1265255)
-* Mon Jul 20 2015 Marek Polacek 5.2.1-2.1
-- don't build libatomic and libitm for RHEL7
+* Tue Oct 18 2016 Marek Polacek 5.3.1-1.1.1
+- update from DTS 5.3.1 (#1265255)
+- run the whole testsuite (because of Cilk+)
-* Mon Jul 20 2015 Marek Polacek 5.2.1-1.1
-- update from DTS gcc-5.2.1-1
+* Tue Dec 15 2015 Marek Polacek 5.2.1-2.1.1
+- update from DTS 5.2.1-2 (#1265253)
+- drop libmpx (#1275357)
* Fri Apr 10 2015 Marek Polacek 5.0.0-1.1.1
- update from Fedora gcc-5.0.0-0.21.fc22