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