summaryrefslogtreecommitdiff
path: root/toolchain
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@uclibc-ng.org>2016-08-24 22:24:38 +0200
committerWaldemar Brodkorb <wbx@uclibc-ng.org>2016-08-24 22:25:08 +0200
commit9683c207c75e5bc6513b1e8db6bdc2ed4c3db1f5 (patch)
tree510da161ad9e89032f4df8738ca26ad0a2d6b33d /toolchain
parent9c15da431e4f1c8faf9bf747578b2c6b6c4d7d02 (diff)
gcc: update to 6.2.0, cleanup symbol names to simplify minor updates
Remove old versions of gcc no longer used or regulary tested. We concentrate on the latest three major versions for most of the architectures.
Diffstat (limited to 'toolchain')
-rw-r--r--toolchain/gcc/Makefile.inc58
-rw-r--r--toolchain/gcc/patches/4.5.4/cflags-honour.patch232
-rw-r--r--toolchain/gcc/patches/4.5.4/disable-dwarf.frv11
-rw-r--r--toolchain/gcc/patches/4.7.4/armhf.patch72
-rw-r--r--toolchain/gcc/patches/4.7.4/cflags.patch241
-rw-r--r--toolchain/gcc/patches/4.7.4/openbsd-lto.patch13
-rw-r--r--toolchain/gcc/patches/4.7.4/ppc-uclibc-cmath.patch217
-rw-r--r--toolchain/gcc/patches/4.8.3/cflags.patch231
-rw-r--r--toolchain/gcc/patches/4.8.5/cflags.patch231
-rw-r--r--toolchain/gcc/patches/4.8.5/disable-atomics.patch12
-rw-r--r--toolchain/gcc/patches/4.8.5/disable-tm.patch14
-rw-r--r--toolchain/gcc/patches/4.8.5/gcc.musl633
-rw-r--r--toolchain/gcc/patches/4.8.5/libstdcxx-uclibc-c99.patch273
-rw-r--r--toolchain/gcc/patches/4.8.5/uclibc-cmath.ppc1878
-rw-r--r--toolchain/gcc/patches/6.2.0/add-crtreloc.frv (renamed from toolchain/gcc/patches/6.1.0/add-crtreloc.frv)0
-rw-r--r--toolchain/gcc/patches/6.2.0/bfin-workaround.patch (renamed from toolchain/gcc/patches/6.1.0/bfin-workaround.patch)0
-rw-r--r--toolchain/gcc/patches/6.2.0/fix-dwarf-fdpic.patch (renamed from toolchain/gcc/patches/6.1.0/fix-dwarf-fdpic.patch)0
-rw-r--r--toolchain/gcc/patches/6.2.0/fix-m86k-libgcc.patch (renamed from toolchain/gcc/patches/6.1.0/fix-m86k-libgcc.patch)0
-rw-r--r--toolchain/gcc/patches/6.2.0/frv-remove-write-macro.patch (renamed from toolchain/gcc/patches/6.1.0/frv-remove-write-macro.patch)0
-rw-r--r--toolchain/gcc/patches/6.2.0/libgcc_linker-script.patch (renamed from toolchain/gcc/patches/6.1.0/libgcc_linker-script.patch)0
-rw-r--r--toolchain/gcc/patches/6.2.0/uclinux-threads.patch (renamed from toolchain/gcc/patches/6.1.0/uclinux-threads.patch)0
-rw-r--r--toolchain/gcc/patches/6.2.0/xtensa-musl.patch (renamed from toolchain/gcc/patches/6.1.0/xtensa-musl.patch)0
-rw-r--r--toolchain/gcc/patches/arc-2015.12/100-libstdcxx-uclibc-c99.patch273
-rw-r--r--toolchain/gcc/patches/arc-2015.12/851-PR-other-56780.patch244
-rw-r--r--toolchain/gcc/patches/arc-2015.12/900-UPDATE-Fix-handling-complex-PIC-moves.patch103
-rw-r--r--toolchain/gcc/patches/arc-2015.12/901-UPDATE1-Fix-handling-complex-PIC-moves.patch83
-rw-r--r--toolchain/gcc/patches/arc-2015.12/950-Don-t-allow-mcompact-casesi-for-ARCv2.patch100
27 files changed, 13 insertions, 4906 deletions
diff --git a/toolchain/gcc/Makefile.inc b/toolchain/gcc/Makefile.inc
index c970c05c5..a13750b87 100644
--- a/toolchain/gcc/Makefile.inc
+++ b/toolchain/gcc/Makefile.inc
@@ -2,15 +2,15 @@
# material, please see the LICENCE file in the top-level directory.
PKG_NAME:= gcc
-ifeq ($(ADK_TOOLCHAIN_GCC_6_1_0),y)
-PKG_VERSION:= 6.1.0
-PKG_HASH:= 724a61d190f27d5028791587149c6a6d6a312d6659a61636be5be86b6e809b59
+ifeq ($(ADK_TOOLCHAIN_GCC_6),y)
+PKG_VERSION:= 6.2.0
+PKG_HASH:= ba8c49e54f1b3e04434d6261e5718ed843d1ba3e54a070740913acfbd815e577
PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
PKG_RELEASE:= 1
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
LIBSTDCXXVER:= 22
endif
-ifeq ($(ADK_TOOLCHAIN_GCC_5_4_0),y)
+ifeq ($(ADK_TOOLCHAIN_GCC_5),y)
PKG_VERSION:= 5.4.0
PKG_HASH:= 37089e80c3f2e9a0663d7ccc51c2a6c7dbbf3275bc1e4ed1ed3b1460cd5b3030
PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
@@ -18,15 +18,7 @@ PKG_RELEASE:= 1
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
LIBSTDCXXVER:= 21
endif
-ifeq ($(ADK_TOOLCHAIN_GCC_5_3_OR1K),y)
-PKG_VERSION:= musl-5.3.0
-PKG_GIT:= branch
-PKG_SITES:= https://github.com/openrisc/or1k-gcc.git
-PKG_RELEASE:= 1
-DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.xz
-LIBSTDCXXVER:= 21
-endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_9_4),y)
+ifeq ($(ADK_TOOLCHAIN_GCC_4_9),y)
PKG_VERSION:= 4.9.4
PKG_HASH:= 1680f92781b92cbdb57d7e4f647c650678c594154cb0d707fd9a994424a9860d
PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
@@ -34,14 +26,6 @@ PKG_RELEASE:= 1
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
LIBSTDCXXVER:= 20
endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_8_5),y)
-PKG_VERSION:= 4.8.5
-PKG_HASH:= 1dbc5cd94c9947fe5dffd298e569de7f44c3cedbd428fceea59490d336d8295a
-PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
-PKG_RELEASE:= 1
-DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
-LIBSTDCXXVER:= 19
-endif
ifeq ($(ADK_TOOLCHAIN_GCC_ARC),y)
PKG_VERSION:= arc-2016.03
PKG_GIT:= tag
@@ -49,31 +33,15 @@ PKG_SITES:= https://github.com/foss-for-synopsys-dwc-arc-processors/gcc.git
PKG_RELEASE:= 1
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.xz
endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_7_4),y)
-PKG_VERSION:= 4.7.4
-PKG_HASH:= ddbaa583c5d4e4f0928bf15d9f6b6c283349e16eedc47bde71e1b813f6f37819
-PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
-PKG_RELEASE:= 1
-DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
-LIBSTDCXXVER:= 17
-endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_6_3),y)
-PKG_VERSION:= 4.6.3
-PKG_HASH:= 3122a8f1a30106034ec70bad633c3fd899d8b6a1216c723f0f03be22c2fe65b0
-PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
-PKG_RELEASE:= 1
-DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
-LIBSTDCXXVER:= 19
-endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_5_4),y)
-PKG_VERSION:= 4.5.4
-PKG_HASH:= 33fb968907ef7b6c528f6395ba049eb34c4df859bf5aa6c2bc3856268801e078
-PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
+ifeq ($(ADK_TOOLCHAIN_GCC_OR1K),y)
+PKG_VERSION:= musl-5.3.0
+PKG_GIT:= branch
+PKG_SITES:= https://github.com/openrisc/or1k-gcc.git
PKG_RELEASE:= 1
-DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
-LIBSTDCXXVER:= 19
+DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.xz
+LIBSTDCXXVER:= 21
endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_4_7),y)
+ifeq ($(ADK_TOOLCHAIN_GCC_4_4),y)
PKG_VERSION:= 4.4.7
PKG_HASH:= 76ad7c433af1c798a1e116c4dfa8f5f794f0d32bff65f88c54dcd5e5d146fc32
PKG_SITES:= ${MASTER_SITE_GNU:=gcc/gcc-${PKG_VERSION}/}
@@ -81,7 +49,7 @@ PKG_RELEASE:= 1
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
LIBSTDCXXVER:= 19
endif
-ifeq ($(ADK_TOOLCHAIN_GCC_4_2_4),y)
+ifeq ($(ADK_TOOLCHAIN_GCC_4_2),y)
PKG_VERSION:= 4.2.4
PKG_HASH:= 7cb75c5183bd18f415860084440377016dc78feeee2852227b831f2e4fcaa5d6
PKG_SITES:= http://gcc.cybermirror.org/releases/gcc-${PKG_VERSION}/
diff --git a/toolchain/gcc/patches/4.5.4/cflags-honour.patch b/toolchain/gcc/patches/4.5.4/cflags-honour.patch
deleted file mode 100644
index df61de0d0..000000000
--- a/toolchain/gcc/patches/4.5.4/cflags-honour.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-diff -Nur gcc-4.5.4.orig/gcc/common.opt gcc-4.5.4/gcc/common.opt
---- gcc-4.5.4.orig/gcc/common.opt 2010-03-18 04:01:09.000000000 +0100
-+++ gcc-4.5.4/gcc/common.opt 2014-08-29 11:25:51.000000000 +0200
-@@ -105,6 +105,10 @@
- Common Joined
- Treat specified warning as error
-
-+Werror-maybe-reset
-+Common
-+If environment variable GCC_NO_WERROR is set, act as -Wno-error
-+
- Wextra
- Common Var(extra_warnings) Warning
- Print extra (possibly unwanted) warnings
-@@ -613,6 +617,9 @@
- Common Report Var(flag_guess_branch_prob) Optimization
- Enable guessing of branch probabilities
-
-+fhonour-copts
-+Common RejectNegative
-+
- ; Nonzero means ignore `#ident' directives. 0 means handle them.
- ; Generate position-independent code for executables if possible
- ; On SVR4 targets, it also controls whether or not to emit a
-diff -Nur gcc-4.5.4.orig/gcc/c.opt gcc-4.5.4/gcc/c.opt
---- gcc-4.5.4.orig/gcc/c.opt 2010-04-02 21:54:46.000000000 +0200
-+++ gcc-4.5.4/gcc/c.opt 2014-08-29 11:25:51.000000000 +0200
-@@ -219,6 +219,10 @@
- C ObjC RejectNegative Warning
- This switch is deprecated; use -Werror=implicit-function-declaration instead
-
-+Werror-maybe-reset
-+C ObjC C++ ObjC++
-+; Documented in common.opt
-+
- Wfloat-equal
- C ObjC C++ ObjC++ Var(warn_float_equal) Warning
- Warn if testing floating point numbers for equality
-@@ -633,6 +637,9 @@
- fhonor-std
- C++ ObjC++
-
-+fhonour-copts
-+C ObjC C++ ObjC++ RejectNegative
-+
- fhosted
- C ObjC
- Assume normal C execution environment
-diff -Nur gcc-4.5.4.orig/gcc/c-opts.c gcc-4.5.4/gcc/c-opts.c
---- gcc-4.5.4.orig/gcc/c-opts.c 2010-04-02 21:54:46.000000000 +0200
-+++ gcc-4.5.4/gcc/c-opts.c 2014-08-29 11:25:51.000000000 +0200
-@@ -106,6 +106,9 @@
- /* Number of deferred options scanned for -include. */
- static size_t include_cursor;
-
-+/* Check if a port honours COPTS. */
-+static int honour_copts = 0;
-+
- static void set_Wimplicit (int);
- static void handle_OPT_d (const char *);
- static void set_std_cxx98 (int);
-@@ -472,6 +475,9 @@
- enable_warning_as_error ("implicit-function-declaration", value, CL_C | CL_ObjC);
- break;
-
-+ case OPT_Werror_maybe_reset:
-+ break;
-+
- case OPT_Wformat:
- set_Wformat (value);
- break;
-@@ -704,6 +710,12 @@
- flag_exceptions = value;
- break;
-
-+ case OPT_fhonour_copts:
-+ if (c_language == clk_c) {
-+ honour_copts++;
-+ }
-+ break;
-+
- case OPT_fimplement_inlines:
- flag_implement_inlines = value;
- break;
-@@ -1240,6 +1252,47 @@
- return false;
- }
-
-+ if (c_language == clk_c) {
-+ char *ev = getenv ("GCC_HONOUR_COPTS");
-+ int evv;
-+ if (ev == NULL)
-+ evv = -1;
-+ else if ((*ev == '0') || (*ev == '\0'))
-+ evv = 0;
-+ else if (*ev == '1')
-+ evv = 1;
-+ else if (*ev == '2')
-+ evv = 2;
-+ else if (*ev == 's')
-+ evv = -1;
-+ else {
-+ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
-+ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */
-+ }
-+ if (evv == 1) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in lenient mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ warning (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ } else if (evv == 2) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in strict mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ error ("someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ return false;
-+ }
-+ } else if (evv == 0) {
-+ if (honour_copts != 1)
-+ inform (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ }
-+
- return true;
- }
-
-diff -Nur gcc-4.5.4.orig/gcc/doc/cppopts.texi gcc-4.5.4/gcc/doc/cppopts.texi
---- gcc-4.5.4.orig/gcc/doc/cppopts.texi 2010-04-02 21:54:46.000000000 +0200
-+++ gcc-4.5.4/gcc/doc/cppopts.texi 2014-08-29 11:25:51.000000000 +0200
-@@ -164,6 +164,11 @@
- Make all warnings into hard errors. Source code which triggers warnings
- will be rejected.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
- @item -Wsystem-headers
- @opindex Wsystem-headers
- Issue warnings for code in system headers. These are normally unhelpful
-diff -Nur gcc-4.5.4.orig/gcc/doc/invoke.texi gcc-4.5.4/gcc/doc/invoke.texi
---- gcc-4.5.4.orig/gcc/doc/invoke.texi 2011-03-23 23:03:29.000000000 +0100
-+++ gcc-4.5.4/gcc/doc/invoke.texi 2014-08-29 11:25:51.000000000 +0200
-@@ -4324,6 +4324,22 @@
- @option{-Wall} and by @option{-pedantic}, which can be disabled with
- @option{-Wno-pointer-sign}.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
-+ at item -fhonour-copts
-+ at opindex fhonour-copts
-+If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
-+given at least once, and warn if it is given more than once.
-+If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
-+given exactly once.
-+If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
-+is not given exactly once.
-+The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
-+This flag and environment variable only affect the C language.
-+
- @item -Wstack-protector
- @opindex Wstack-protector
- @opindex Wno-stack-protector
-@@ -6076,7 +6092,7 @@
- second branch or a point immediately following it, depending on whether
- the condition is known to be true or false.
-
--Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
-+Enabled at levels @option{-O3}.
-
- @item -fsplit-wide-types
- @opindex fsplit-wide-types
-diff -Nur gcc-4.5.4.orig/gcc/java/jvspec.c gcc-4.5.4/gcc/java/jvspec.c
---- gcc-4.5.4.orig/gcc/java/jvspec.c 2010-01-20 11:35:38.000000000 +0100
-+++ gcc-4.5.4/gcc/java/jvspec.c 2014-08-29 11:25:51.000000000 +0200
-@@ -667,6 +667,7 @@
- class name. Append dummy `.c' that can be stripped by set_input so %b
- is correct. */
- set_input (concat (main_class_name, "main.c", NULL));
-+ putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack! */
- err = do_spec (jvgenmain_spec);
- if (err == 0)
- {
-diff -Nur gcc-4.5.4.orig/gcc/opts.c gcc-4.5.4/gcc/opts.c
---- gcc-4.5.4.orig/gcc/opts.c 2010-05-17 12:13:28.000000000 +0200
-+++ gcc-4.5.4/gcc/opts.c 2014-08-29 11:25:51.000000000 +0200
-@@ -897,8 +897,6 @@
- flag_schedule_insns_after_reload = opt2;
- #endif
- flag_regmove = opt2;
-- flag_strict_aliasing = opt2;
-- flag_strict_overflow = opt2;
- flag_reorder_blocks = opt2;
- flag_reorder_functions = opt2;
- flag_tree_vrp = opt2;
-@@ -918,6 +916,8 @@
-
- /* -O3 optimizations. */
- opt3 = (optimize >= 3);
-+ flag_strict_aliasing = opt3;
-+ flag_strict_overflow = opt3;
- flag_predictive_commoning = opt3;
- flag_inline_functions = opt3;
- flag_unswitch_loops = opt3;
-@@ -1646,6 +1646,17 @@
- enable_warning_as_error (arg, value, lang_mask);
- break;
-
-+ case OPT_Werror_maybe_reset:
-+ {
-+ char *ev = getenv ("GCC_NO_WERROR");
-+ if ((ev != NULL) && (*ev != '0'))
-+ warnings_are_errors = 0;
-+ }
-+ break;
-+
-+ case OPT_fhonour_copts:
-+ break;
-+
- case OPT_Wlarger_than_:
- /* This form corresponds to -Wlarger-than-.
- Kept for backward compatibility.
diff --git a/toolchain/gcc/patches/4.5.4/disable-dwarf.frv b/toolchain/gcc/patches/4.5.4/disable-dwarf.frv
deleted file mode 100644
index ee4ca01a1..000000000
--- a/toolchain/gcc/patches/4.5.4/disable-dwarf.frv
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Nur gcc-4.5.4.orig/gcc/config/t-linux gcc-4.5.4/gcc/config/t-linux
---- gcc-4.5.4.orig/gcc/config/t-linux 2009-04-21 21:03:23.000000000 +0200
-+++ gcc-4.5.4/gcc/config/t-linux 2015-11-21 17:25:52.720653570 +0100
-@@ -27,6 +27,6 @@
- SHLIB_MAPFILES += $(srcdir)/config/libgcc-glibc.ver
-
- # Use unwind-dw2-fde-glibc
--LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
-+LIB2ADDEH = $(srcdir)/unwind-dw2.c \
- $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
- LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
diff --git a/toolchain/gcc/patches/4.7.4/armhf.patch b/toolchain/gcc/patches/4.7.4/armhf.patch
deleted file mode 100644
index 4c0bf744d..000000000
--- a/toolchain/gcc/patches/4.7.4/armhf.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -Nur gcc-4.7.2.orig/gcc/config/arm/linux-eabi.h gcc-4.7.2/gcc/config/arm/linux-eabi.h
---- gcc-4.7.2.orig/gcc/config/arm/linux-eabi.h 2011-11-02 16:03:19.000000000 +0100
-+++ gcc-4.7.2/gcc/config/arm/linux-eabi.h 2013-05-03 16:38:21.000000000 +0200
-@@ -34,7 +34,21 @@
- /* We default to a soft-float ABI so that binaries can run on all
- target hardware. */
- #undef TARGET_DEFAULT_FLOAT_ABI
-+#ifdef TARGET_CONFIGURED_FLOAT_ABI
-+#if TARGET_CONFIGURED_FLOAT_ABI == 2
-+#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
-+#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=hard"
-+#elif TARGET_CONFIGURED_FLOAT_ABI == 1
-+#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFTFP
-+#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=softfp"
-+#else
- #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT
-+#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=soft"
-+#endif
-+#else
-+#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT
-+#define MULTILIB_DEFAULT_FLOAT_ABI "mfloat-abi=soft"
-+#endif
-
- /* We default to the "aapcs-linux" ABI so that enums are int-sized by
- default. */
-@@ -62,7 +76,45 @@
- /* Use ld-linux.so.3 so that it will be possible to run "classic"
- GNU/Linux binaries on an EABI system. */
- #undef GLIBC_DYNAMIC_LINKER
--#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3"
-+#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3"
-+#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3"
-+#ifdef TARGET_CONFIGURED_FLOAT_ABI
-+#if TARGET_CONFIGURED_FLOAT_ABI == 2
-+#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_HARD_FLOAT
-+#else
-+#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
-+#endif
-+#else
-+#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
-+#endif
-+
-+#define GLIBC_DYNAMIC_LINKER \
-+ "%{mfloat-abi=hard:" GLIBC_DYNAMIC_LINKER_HARD_FLOAT "} \
-+ %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
-+ %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
-+
-+/* Set the multilib defaults according the configuration, needed to
-+ let gcc -print-multi-dir do the right thing. */
-+
-+#if TARGET_BIG_ENDIAN_DEFAULT
-+#define MULTILIB_DEFAULT_ENDIAN "mbig-endian"
-+#else
-+#define MULTILIB_DEFAULT_ENDIAN "mlittle-endian"
-+#endif
-+
-+#ifndef TARGET_CONFIGURED_THUMB_MODE
-+#define MULTILIB_DEFAULT_MODE "marm"
-+#elif TARGET_CONFIGURED_THUMB_MODE == 1
-+#define MULTILIB_DEFAULT_MODE "mthumb"
-+#else
-+#define MULTILIB_DEFAULT_MODE "marm"
-+#endif
-+
-+#undef MULTILIB_DEFAULTS
-+#define MULTILIB_DEFAULTS \
-+ { MULTILIB_DEFAULT_MODE, MULTILIB_DEFAULT_ENDIAN, \
-+ MULTILIB_DEFAULT_FLOAT_ABI, "mno-thumb-interwork" }
-+
-
- /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
- use the GNU/Linux version, not the generic BPABI version. */
diff --git a/toolchain/gcc/patches/4.7.4/cflags.patch b/toolchain/gcc/patches/4.7.4/cflags.patch
deleted file mode 100644
index a9ccdcbc8..000000000
--- a/toolchain/gcc/patches/4.7.4/cflags.patch
+++ /dev/null
@@ -1,241 +0,0 @@
-diff -Nur gcc-4.7.2.orig/gcc/c-family/c-opts.c gcc-4.7.2/gcc/c-family/c-opts.c
---- gcc-4.7.2.orig/gcc/c-family/c-opts.c 2012-01-18 14:10:40.000000000 +0100
-+++ gcc-4.7.2/gcc/c-family/c-opts.c 2012-09-22 12:53:33.000000000 +0200
-@@ -108,6 +108,9 @@
- /* Number of deferred options scanned for -include. */
- static size_t include_cursor;
-
-+/* Check if a port honours COPTS. */
-+static int honour_copts = 0;
-+
- static void handle_OPT_d (const char *);
- static void set_std_cxx98 (int);
- static void set_std_cxx11 (int);
-@@ -449,6 +452,9 @@
- cpp_opts->warn_endif_labels = value;
- break;
-
-+ case OPT_Werror_maybe_reset:
-+ break;
-+
- case OPT_Wformat:
- set_Wformat (value);
- break;
-@@ -592,6 +598,12 @@
- flag_no_builtin = !value;
- break;
-
-+ case OPT_fhonour_copts:
-+ if (c_language == clk_c) {
-+ honour_copts++;
-+ }
-+ break;
-+
- case OPT_fconstant_string_class_:
- constant_string_class_name = arg;
- break;
-@@ -1098,6 +1110,47 @@
- return false;
- }
-
-+ if (c_language == clk_c) {
-+ char *ev = getenv ("GCC_HONOUR_COPTS");
-+ int evv;
-+ if (ev == NULL)
-+ evv = -1;
-+ else if ((*ev == '0') || (*ev == '\0'))
-+ evv = 0;
-+ else if (*ev == '1')
-+ evv = 1;
-+ else if (*ev == '2')
-+ evv = 2;
-+ else if (*ev == 's')
-+ evv = -1;
-+ else {
-+ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
-+ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */
-+ }
-+ if (evv == 1) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in lenient mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ warning (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ } else if (evv == 2) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in strict mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ error ("someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ return false;
-+ }
-+ } else if (evv == 0) {
-+ if (honour_copts != 1)
-+ inform (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ }
-+
- return true;
- }
-
-diff -Nur gcc-4.7.2.orig/gcc/c-family/c.opt gcc-4.7.2/gcc/c-family/c.opt
---- gcc-4.7.2.orig/gcc/c-family/c.opt 2012-02-06 11:31:18.000000000 +0100
-+++ gcc-4.7.2/gcc/c-family/c.opt 2012-09-22 12:53:33.000000000 +0200
-@@ -371,6 +371,10 @@
- C ObjC RejectNegative Warning Alias(Werror=, implicit-function-declaration)
- This switch is deprecated; use -Werror=implicit-function-declaration instead
-
-+Werror-maybe-reset
-+C ObjC C++ ObjC++
-+; Documented in common.opt
-+
- Wfloat-equal
- C ObjC C++ ObjC++ Var(warn_float_equal) Warning
- Warn if testing floating point numbers for equality
-@@ -830,6 +834,9 @@
- fhonor-std
- C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
-
-+fhonour-copts
-+C ObjC C++ ObjC++ RejectNegative
-+
- fhosted
- C ObjC
- Assume normal C execution environment
-diff -Nur gcc-4.7.2.orig/gcc/common.opt gcc-4.7.2/gcc/common.opt
---- gcc-4.7.2.orig/gcc/common.opt 2012-08-06 16:34:27.000000000 +0200
-+++ gcc-4.7.2/gcc/common.opt 2012-09-22 12:53:33.000000000 +0200
-@@ -531,6 +531,10 @@
- Common Joined
- Treat specified warning as error
-
-+Werror-maybe-reset
-+Common
-+If environment variable GCC_NO_WERROR is set, act as -Wno-error
-+
- Wextra
- Common Var(extra_warnings) Warning
- Print extra (possibly unwanted) warnings
-@@ -1209,6 +1213,9 @@
- Common Report Var(flag_guess_branch_prob) Optimization
- Enable guessing of branch probabilities
-
-+fhonour-copts
-+Common RejectNegative
-+
- ; Nonzero means ignore `#ident' directives. 0 means handle them.
- ; Generate position-independent code for executables if possible
- ; On SVR4 targets, it also controls whether or not to emit a
-diff -Nur gcc-4.7.2.orig/gcc/doc/cppopts.texi gcc-4.7.2/gcc/doc/cppopts.texi
---- gcc-4.7.2.orig/gcc/doc/cppopts.texi 2011-12-20 21:44:13.000000000 +0100
-+++ gcc-4.7.2/gcc/doc/cppopts.texi 2012-09-22 12:53:33.000000000 +0200
-@@ -164,6 +164,11 @@
- Make all warnings into hard errors. Source code which triggers warnings
- will be rejected.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
- @item -Wsystem-headers
- @opindex Wsystem-headers
- Issue warnings for code in system headers. These are normally unhelpful
-diff -Nur gcc-4.7.2.orig/gcc/doc/invoke.texi gcc-4.7.2/gcc/doc/invoke.texi
---- gcc-4.7.2.orig/gcc/doc/invoke.texi 2012-09-14 22:45:27.000000000 +0200
-+++ gcc-4.7.2/gcc/doc/invoke.texi 2012-09-22 12:53:33.000000000 +0200
-@@ -242,7 +242,7 @@
- -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol
- -Wno-deprecated-declarations -Wdisabled-optimization @gol
- -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol
---Wno-endif-labels -Werror -Werror=* @gol
-+-Wno-endif-labels -Werror -Werror=* -Werror-maybe-reset @gol
- -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
- -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
- -Wformat-security -Wformat-y2k @gol
-@@ -4651,6 +4651,22 @@
- @option{-Wall} and by @option{-pedantic}, which can be disabled with
- @option{-Wno-pointer-sign}.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
-+ at item -fhonour-copts
-+ at opindex fhonour-copts
-+If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
-+given at least once, and warn if it is given more than once.
-+If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
-+given exactly once.
-+If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
-+is not given exactly once.
-+The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
-+This flag and environment variable only affect the C language.
-+
- @item -Wstack-protector
- @opindex Wstack-protector
- @opindex Wno-stack-protector
-@@ -6570,7 +6586,7 @@
- second branch or a point immediately following it, depending on whether
- the condition is known to be true or false.
-
--Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
-+Enabled at levels @option{-O3}.
-
- @item -fsplit-wide-types
- @opindex fsplit-wide-types
-diff -Nur gcc-4.7.2.orig/gcc/java/jvspec.c gcc-4.7.2/gcc/java/jvspec.c
---- gcc-4.7.2.orig/gcc/java/jvspec.c 2011-02-13 20:20:01.000000000 +0100
-+++ gcc-4.7.2/gcc/java/jvspec.c 2012-09-22 12:53:33.000000000 +0200
-@@ -627,6 +627,7 @@
- class name. Append dummy `.c' that can be stripped by set_input so %b
- is correct. */
- set_input (concat (main_class_name, "main.c", NULL));
-+ putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack! */
- err = do_spec (jvgenmain_spec);
- if (err == 0)
- {
-diff -Nur gcc-4.7.2.orig/gcc/opts.c gcc-4.7.2/gcc/opts.c
---- gcc-4.7.2.orig/gcc/opts.c 2012-01-10 17:27:55.000000000 +0100
-+++ gcc-4.7.2/gcc/opts.c 2012-09-22 12:53:33.000000000 +0200
-@@ -470,8 +470,6 @@
- { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 },
- #endif
- { OPT_LEVELS_2_PLUS, OPT_fregmove, NULL, 1 },
-- { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 },
-- { OPT_LEVELS_2_PLUS, OPT_fstrict_overflow, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_freorder_blocks, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 },
-@@ -489,6 +487,8 @@
- { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_foptimize_strlen, NULL, 1 },
-
- /* -O3 optimizations. */
-+ { OPT_LEVELS_3_PLUS, OPT_fstrict_aliasing, NULL, 1 },
-+ { OPT_LEVELS_3_PLUS, OPT_fstrict_overflow, NULL, 1 },
- { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
- { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
- /* Inlining of functions reducing size is a good idea with -Os
-@@ -1432,6 +1432,17 @@
- opts, opts_set, loc, dc);
- break;
-
-+ case OPT_Werror_maybe_reset:
-+ {
-+ char *ev = getenv ("GCC_NO_WERROR");
-+ if ((ev != NULL) && (*ev != '0'))
-+ warnings_are_errors = 0;
-+ }
-+ break;
-+
-+ case OPT_fhonour_copts:
-+ break;
-+
- case OPT_Wlarger_than_:
- opts->x_larger_than_size = value;
- opts->x_warn_larger_than = value != -1;
diff --git a/toolchain/gcc/patches/4.7.4/openbsd-lto.patch b/toolchain/gcc/patches/4.7.4/openbsd-lto.patch
deleted file mode 100644
index 8a94971b7..000000000
--- a/toolchain/gcc/patches/4.7.4/openbsd-lto.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -Nur gcc-4.7.3.orig/gcc/config.host gcc-4.7.3/gcc/config.host
---- gcc-4.7.3.orig/gcc/config.host Tue Oct 18 08:14:14 2011
-+++ gcc-4.7.3/gcc/config.host Tue Jan 7 04:33:29 2014
-@@ -292,6 +292,9 @@
- out_host_hook_obj=host-solaris.o
- host_xmake_file="${host_xmake_file} x-solaris"
- ;;
-+ *-*-openbsd*)
-+ host_lto_plugin_soname=liblto_plugin.so.0.0
-+ ;;
- *-*-linux*)
- out_host_hook_obj=host-linux.o
- host_xmake_file="${host_xmake_file} x-linux"
diff --git a/toolchain/gcc/patches/4.7.4/ppc-uclibc-cmath.patch b/toolchain/gcc/patches/4.7.4/ppc-uclibc-cmath.patch
deleted file mode 100644
index 0e64e8d0e..000000000
--- a/toolchain/gcc/patches/4.7.4/ppc-uclibc-cmath.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-diff -Nur gcc-4.7.3.orig/libstdc++-v3/include/tr1/cmath gcc-4.7.3/libstdc++-v3/include/tr1/cmath
---- gcc-4.7.3.orig/libstdc++-v3/include/tr1/cmath 2011-11-14 00:51:42.000000000 +0100
-+++ gcc-4.7.3/libstdc++-v3/include/tr1/cmath 2013-09-22 20:13:54.000000000 +0200
-@@ -159,143 +159,213 @@
- // functions
- using ::acosh;
- using ::acoshf;
-+#ifdef __LONG_DOUBLE_128__
- using ::acoshl;
-+#endif
-
- using ::asinh;
- using ::asinhf;
-+#ifdef __LONG_DOUBLE_128__
- using ::asinhl;
-+#endif
-
- using ::atanh;
- using ::atanhf;
-+#ifdef __LONG_DOUBLE_128__
- using ::atanhl;
-+#endif
-
- using ::cbrt;
- using ::cbrtf;
-+#ifdef __LONG_DOUBLE_128__
- using ::cbrtl;
-+#endif
-
- using ::copysign;
- using ::copysignf;
-+#ifdef __LONG_DOUBLE_128__
- using ::copysignl;
-+#endif
-
- using ::erf;
- using ::erff;
-+#ifdef __LONG_DOUBLE_128__
- using ::erfl;
-+#endif
-
- using ::erfc;
- using ::erfcf;
-+#ifdef __LONG_DOUBLE_128__
- using ::erfcl;
-+#endif
-
- using ::exp2;
- using ::exp2f;
-+#ifdef __LONG_DOUBLE_128__
- using ::exp2l;
-+#endif
-
- using ::expm1;
- using ::expm1f;
-+#ifdef __LONG_DOUBLE_128__
- using ::expm1l;
-+#endif
-
- using ::fdim;
- using ::fdimf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fdiml;
-+#endif
-
- using ::fma;
- using ::fmaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fmal;
-+#endif
-
- using ::fmax;
- using ::fmaxf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fmaxl;
-+#endif
-
- using ::fmin;
- using ::fminf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fminl;
-+#endif
-
- using ::hypot;
- using ::hypotf;
-+#ifdef __LONG_DOUBLE_128__
- using ::hypotl;
-+#endif
-
- using ::ilogb;
- using ::ilogbf;
-+#ifdef __LONG_DOUBLE_128__
- using ::ilogbl;
-+#endif
-
- using ::lgamma;
- using ::lgammaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lgammal;
-+#endif
-
- using ::llrint;
- using ::llrintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::llrintl;
-+#endif
-
- using ::llround;
- using ::llroundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::llroundl;
-+#endif
-
- using ::log1p;
- using ::log1pf;
-+#ifdef __LONG_DOUBLE_128__
- using ::log1pl;
-+#endif
-
- using ::log2;
- using ::log2f;
-+#ifdef __LONG_DOUBLE_128__
- using ::log2l;
-+#endif
-
- using ::logb;
- using ::logbf;
-+#ifdef __LONG_DOUBLE_128__
- using ::logbl;
-+#endif
-
- using ::lrint;
- using ::lrintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lrintl;
-+#endif
-
- using ::lround;
- using ::lroundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lroundl;
-+#endif
-
- using ::nan;
- using ::nanf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nanl;
-+#endif
-
- using ::nearbyint;
- using ::nearbyintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nearbyintl;
-+#endif
-
- using ::nextafter;
- using ::nextafterf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nextafterl;
-+#endif
-
- using ::nexttoward;
- using ::nexttowardf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nexttowardl;
-+#endif
-
- using ::remainder;
- using ::remainderf;
-+#ifdef __LONG_DOUBLE_128__
- using ::remainderl;
-+#endif
-
- using ::remquo;
- using ::remquof;
-+#ifdef __LONG_DOUBLE_128__
- using ::remquol;
-+#endif
-
- using ::rint;
- using ::rintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::rintl;
-+#endif
-
- using ::round;
- using ::roundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::roundl;
-+#endif
-
- using ::scalbln;
- using ::scalblnf;
-+#ifdef __LONG_DOUBLE_128__
- using ::scalblnl;
-+#endif
-
- using ::scalbn;
- using ::scalbnf;
-+#ifdef __LONG_DOUBLE_128__
- using ::scalbnl;
-+#endif
-
- using ::tgamma;
- using ::tgammaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::tgammal;
-+#endif
-
- using ::trunc;
- using ::truncf;
-+#ifdef __LONG_DOUBLE_128__
- using ::truncl;
-+#endif
-
- #endif
-
diff --git a/toolchain/gcc/patches/4.8.3/cflags.patch b/toolchain/gcc/patches/4.8.3/cflags.patch
deleted file mode 100644
index 4f9de8069..000000000
--- a/toolchain/gcc/patches/4.8.3/cflags.patch
+++ /dev/null
@@ -1,231 +0,0 @@
-diff -Nur gcc-4.8.2.orig/gcc/c-family/c.opt gcc-4.8.2/gcc/c-family/c.opt
---- gcc-4.8.2.orig/gcc/c-family/c.opt 2013-01-19 06:25:25.000000000 +0100
-+++ gcc-4.8.2/gcc/c-family/c.opt 2014-02-23 20:22:48.000000000 +0100
-@@ -379,6 +379,10 @@
- C ObjC RejectNegative Warning Alias(Werror=, implicit-function-declaration)
- This switch is deprecated; use -Werror=implicit-function-declaration instead
-
-+Werror-maybe-reset
-+C ObjC C++ ObjC++
-+; Documented in common.opt
-+
- Wfloat-equal
- C ObjC C++ ObjC++ Var(warn_float_equal) Warning
- Warn if testing floating point numbers for equality
-@@ -949,6 +953,9 @@
- fhonor-std
- C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
-
-+fhonour-copts
-+C ObjC C++ ObjC++ RejectNegative
-+
- fhosted
- C ObjC
- Assume normal C execution environment
-diff -Nur gcc-4.8.2.orig/gcc/c-family/c-opts.c gcc-4.8.2/gcc/c-family/c-opts.c
---- gcc-4.8.2.orig/gcc/c-family/c-opts.c 2013-02-18 20:42:56.000000000 +0100
-+++ gcc-4.8.2/gcc/c-family/c-opts.c 2014-02-23 20:22:48.000000000 +0100
-@@ -104,6 +104,9 @@
- /* Whether any standard preincluded header has been preincluded. */
- static bool done_preinclude;
-
-+/* Check if a port honours COPTS. */
-+static int honour_copts = 0;
-+
- static void handle_OPT_d (const char *);
- static void set_std_cxx98 (int);
- static void set_std_cxx11 (int);
-@@ -491,6 +494,12 @@
- flag_no_builtin = !value;
- break;
-
-+ case OPT_fhonour_copts:
-+ if (c_language == clk_c) {
-+ honour_copts++;
-+ }
-+ break;
-+
- case OPT_fconstant_string_class_:
- constant_string_class_name = arg;
- break;
-@@ -1027,6 +1036,47 @@
- return false;
- }
-
-+ if (c_language == clk_c) {
-+ char *ev = getenv ("GCC_HONOUR_COPTS");
-+ int evv;
-+ if (ev == NULL)
-+ evv = -1;
-+ else if ((*ev == '0') || (*ev == '\0'))
-+ evv = 0;
-+ else if (*ev == '1')
-+ evv = 1;
-+ else if (*ev == '2')
-+ evv = 2;
-+ else if (*ev == 's')
-+ evv = -1;
-+ else {
-+ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
-+ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */
-+ }
-+ if (evv == 1) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in lenient mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ warning (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ } else if (evv == 2) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in strict mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ error ("someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ return false;
-+ }
-+ } else if (evv == 0) {
-+ if (honour_copts != 1)
-+ inform (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ }
-+
- return true;
- }
-
-diff -Nur gcc-4.8.2.orig/gcc/common.opt gcc-4.8.2/gcc/common.opt
---- gcc-4.8.2.orig/gcc/common.opt 2013-03-14 10:13:36.000000000 +0100
-+++ gcc-4.8.2/gcc/common.opt 2014-02-23 20:22:48.000000000 +0100
-@@ -541,6 +541,10 @@
- Common Joined
- Treat specified warning as error
-
-+Werror-maybe-reset
-+Common
-+If environment variable GCC_NO_WERROR is set, act as -Wno-error
-+
- Wextra
- Common Var(extra_warnings) Warning
- Print extra (possibly unwanted) warnings
-@@ -1242,6 +1246,9 @@
- Common Report Var(flag_guess_branch_prob) Optimization
- Enable guessing of branch probabilities
-
-+fhonour-copts
-+Common RejectNegative
-+
- ; Nonzero means ignore `#ident' directives. 0 means handle them.
- ; Generate position-independent code for executables if possible
- ; On SVR4 targets, it also controls whether or not to emit a
-diff -Nur gcc-4.8.2.orig/gcc/doc/cppopts.texi gcc-4.8.2/gcc/doc/cppopts.texi
---- gcc-4.8.2.orig/gcc/doc/cppopts.texi 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.2/gcc/doc/cppopts.texi 2014-02-23 20:22:48.000000000 +0100
-@@ -163,6 +163,11 @@
- Make all warnings into hard errors. Source code which triggers warnings
- will be rejected.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
- @item -Wsystem-headers
- @opindex Wsystem-headers
- Issue warnings for code in system headers. These are normally unhelpful
-diff -Nur gcc-4.8.2.orig/gcc/doc/invoke.texi gcc-4.8.2/gcc/doc/invoke.texi
---- gcc-4.8.2.orig/gcc/doc/invoke.texi 2013-06-19 21:55:50.000000000 +0200
-+++ gcc-4.8.2/gcc/doc/invoke.texi 2014-02-23 20:22:48.000000000 +0100
-@@ -240,7 +240,7 @@
- -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol
- -Wno-deprecated-declarations -Wdisabled-optimization @gol
- -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol
---Wno-endif-labels -Werror -Werror=* @gol
-+-Wno-endif-labels -Werror -Werror=* -Werror-maybe-reset @gol
- -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
- -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
- -Wformat-security -Wformat-y2k @gol
-@@ -4807,6 +4807,22 @@
- @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
- @option{-Wno-pointer-sign}.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
-+ at item -fhonour-copts
-+ at opindex fhonour-copts
-+If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
-+given at least once, and warn if it is given more than once.
-+If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
-+given exactly once.
-+If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
-+is not given exactly once.
-+The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
-+This flag and environment variable only affect the C language.
-+
- @item -Wstack-protector
- @opindex Wstack-protector
- @opindex Wno-stack-protector
-@@ -6918,7 +6934,7 @@
- second branch or a point immediately following it, depending on whether
- the condition is known to be true or false.
-
--Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
-+Enabled at levels @option{-O3}.
-
- @item -fsplit-wide-types
- @opindex fsplit-wide-types
-diff -Nur gcc-4.8.2.orig/gcc/java/jvspec.c gcc-4.8.2/gcc/java/jvspec.c
---- gcc-4.8.2.orig/gcc/java/jvspec.c 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.2/gcc/java/jvspec.c 2014-02-23 20:22:48.000000000 +0100
-@@ -626,6 +626,7 @@
- class name. Append dummy `.c' that can be stripped by set_input so %b
- is correct. */
- set_input (concat (main_class_name, "main.c", NULL));
-+ putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack! */
- err = do_spec (jvgenmain_spec);
- if (err == 0)
- {
-diff -Nur gcc-4.8.2.orig/gcc/opts.c gcc-4.8.2/gcc/opts.c
---- gcc-4.8.2.orig/gcc/opts.c 2013-03-05 07:01:13.000000000 +0100
-+++ gcc-4.8.2/gcc/opts.c 2014-02-23 20:22:48.000000000 +0100
-@@ -468,8 +468,6 @@
- { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 },
- #endif
- { OPT_LEVELS_2_PLUS, OPT_fregmove, NULL, 1 },
-- { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 },
-- { OPT_LEVELS_2_PLUS, OPT_fstrict_overflow, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_freorder_blocks, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 },
-@@ -488,6 +486,8 @@
- { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 },
-
- /* -O3 optimizations. */
-+ { OPT_LEVELS_3_PLUS, OPT_fstrict_aliasing, NULL, 1 },
-+ { OPT_LEVELS_3_PLUS, OPT_fstrict_overflow, NULL, 1 },
- { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
- { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
- /* Inlining of functions reducing size is a good idea with -Os
-@@ -1423,6 +1423,17 @@
- opts, opts_set, loc, dc);
- break;
-
-+ case OPT_Werror_maybe_reset:
-+ {
-+ char *ev = getenv ("GCC_NO_WERROR");
-+ if ((ev != NULL) && (*ev != '0'))
-+ warnings_are_errors = 0;
-+ }
-+ break;
-+
-+ case OPT_fhonour_copts:
-+ break;
-+
- case OPT_Wlarger_than_:
- opts->x_larger_than_size = value;
- opts->x_warn_larger_than = value != -1;
diff --git a/toolchain/gcc/patches/4.8.5/cflags.patch b/toolchain/gcc/patches/4.8.5/cflags.patch
deleted file mode 100644
index 4f9de8069..000000000
--- a/toolchain/gcc/patches/4.8.5/cflags.patch
+++ /dev/null
@@ -1,231 +0,0 @@
-diff -Nur gcc-4.8.2.orig/gcc/c-family/c.opt gcc-4.8.2/gcc/c-family/c.opt
---- gcc-4.8.2.orig/gcc/c-family/c.opt 2013-01-19 06:25:25.000000000 +0100
-+++ gcc-4.8.2/gcc/c-family/c.opt 2014-02-23 20:22:48.000000000 +0100
-@@ -379,6 +379,10 @@
- C ObjC RejectNegative Warning Alias(Werror=, implicit-function-declaration)
- This switch is deprecated; use -Werror=implicit-function-declaration instead
-
-+Werror-maybe-reset
-+C ObjC C++ ObjC++
-+; Documented in common.opt
-+
- Wfloat-equal
- C ObjC C++ ObjC++ Var(warn_float_equal) Warning
- Warn if testing floating point numbers for equality
-@@ -949,6 +953,9 @@
- fhonor-std
- C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
-
-+fhonour-copts
-+C ObjC C++ ObjC++ RejectNegative
-+
- fhosted
- C ObjC
- Assume normal C execution environment
-diff -Nur gcc-4.8.2.orig/gcc/c-family/c-opts.c gcc-4.8.2/gcc/c-family/c-opts.c
---- gcc-4.8.2.orig/gcc/c-family/c-opts.c 2013-02-18 20:42:56.000000000 +0100
-+++ gcc-4.8.2/gcc/c-family/c-opts.c 2014-02-23 20:22:48.000000000 +0100
-@@ -104,6 +104,9 @@
- /* Whether any standard preincluded header has been preincluded. */
- static bool done_preinclude;
-
-+/* Check if a port honours COPTS. */
-+static int honour_copts = 0;
-+
- static void handle_OPT_d (const char *);
- static void set_std_cxx98 (int);
- static void set_std_cxx11 (int);
-@@ -491,6 +494,12 @@
- flag_no_builtin = !value;
- break;
-
-+ case OPT_fhonour_copts:
-+ if (c_language == clk_c) {
-+ honour_copts++;
-+ }
-+ break;
-+
- case OPT_fconstant_string_class_:
- constant_string_class_name = arg;
- break;
-@@ -1027,6 +1036,47 @@
- return false;
- }
-
-+ if (c_language == clk_c) {
-+ char *ev = getenv ("GCC_HONOUR_COPTS");
-+ int evv;
-+ if (ev == NULL)
-+ evv = -1;
-+ else if ((*ev == '0') || (*ev == '\0'))
-+ evv = 0;
-+ else if (*ev == '1')
-+ evv = 1;
-+ else if (*ev == '2')
-+ evv = 2;
-+ else if (*ev == 's')
-+ evv = -1;
-+ else {
-+ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
-+ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */
-+ }
-+ if (evv == 1) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in lenient mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ warning (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ } else if (evv == 2) {
-+ if (honour_copts == 0) {
-+ error ("someone does not honour COPTS at all in strict mode");
-+ return false;
-+ } else if (honour_copts != 1) {
-+ error ("someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ return false;
-+ }
-+ } else if (evv == 0) {
-+ if (honour_copts != 1)
-+ inform (0, "someone does not honour COPTS correctly, passed %d times",
-+ honour_copts);
-+ }
-+ }
-+
- return true;
- }
-
-diff -Nur gcc-4.8.2.orig/gcc/common.opt gcc-4.8.2/gcc/common.opt
---- gcc-4.8.2.orig/gcc/common.opt 2013-03-14 10:13:36.000000000 +0100
-+++ gcc-4.8.2/gcc/common.opt 2014-02-23 20:22:48.000000000 +0100
-@@ -541,6 +541,10 @@
- Common Joined
- Treat specified warning as error
-
-+Werror-maybe-reset
-+Common
-+If environment variable GCC_NO_WERROR is set, act as -Wno-error
-+
- Wextra
- Common Var(extra_warnings) Warning
- Print extra (possibly unwanted) warnings
-@@ -1242,6 +1246,9 @@
- Common Report Var(flag_guess_branch_prob) Optimization
- Enable guessing of branch probabilities
-
-+fhonour-copts
-+Common RejectNegative
-+
- ; Nonzero means ignore `#ident' directives. 0 means handle them.
- ; Generate position-independent code for executables if possible
- ; On SVR4 targets, it also controls whether or not to emit a
-diff -Nur gcc-4.8.2.orig/gcc/doc/cppopts.texi gcc-4.8.2/gcc/doc/cppopts.texi
---- gcc-4.8.2.orig/gcc/doc/cppopts.texi 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.2/gcc/doc/cppopts.texi 2014-02-23 20:22:48.000000000 +0100
-@@ -163,6 +163,11 @@
- Make all warnings into hard errors. Source code which triggers warnings
- will be rejected.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
- @item -Wsystem-headers
- @opindex Wsystem-headers
- Issue warnings for code in system headers. These are normally unhelpful
-diff -Nur gcc-4.8.2.orig/gcc/doc/invoke.texi gcc-4.8.2/gcc/doc/invoke.texi
---- gcc-4.8.2.orig/gcc/doc/invoke.texi 2013-06-19 21:55:50.000000000 +0200
-+++ gcc-4.8.2/gcc/doc/invoke.texi 2014-02-23 20:22:48.000000000 +0100
-@@ -240,7 +240,7 @@
- -Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol
- -Wno-deprecated-declarations -Wdisabled-optimization @gol
- -Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol
---Wno-endif-labels -Werror -Werror=* @gol
-+-Wno-endif-labels -Werror -Werror=* -Werror-maybe-reset @gol
- -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
- -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
- -Wformat-security -Wformat-y2k @gol
-@@ -4807,6 +4807,22 @@
- @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
- @option{-Wno-pointer-sign}.
-
-+ at item -Werror-maybe-reset
-+ at opindex Werror-maybe-reset
-+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
-+variable is set to anything other than 0 or empty.
-+
-+ at item -fhonour-copts
-+ at opindex fhonour-copts
-+If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
-+given at least once, and warn if it is given more than once.
-+If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
-+given exactly once.
-+If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
-+is not given exactly once.
-+The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
-+This flag and environment variable only affect the C language.
-+
- @item -Wstack-protector
- @opindex Wstack-protector
- @opindex Wno-stack-protector
-@@ -6918,7 +6934,7 @@
- second branch or a point immediately following it, depending on whether
- the condition is known to be true or false.
-
--Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
-+Enabled at levels @option{-O3}.
-
- @item -fsplit-wide-types
- @opindex fsplit-wide-types
-diff -Nur gcc-4.8.2.orig/gcc/java/jvspec.c gcc-4.8.2/gcc/java/jvspec.c
---- gcc-4.8.2.orig/gcc/java/jvspec.c 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.2/gcc/java/jvspec.c 2014-02-23 20:22:48.000000000 +0100
-@@ -626,6 +626,7 @@
- class name. Append dummy `.c' that can be stripped by set_input so %b
- is correct. */
- set_input (concat (main_class_name, "main.c", NULL));
-+ putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack! */
- err = do_spec (jvgenmain_spec);
- if (err == 0)
- {
-diff -Nur gcc-4.8.2.orig/gcc/opts.c gcc-4.8.2/gcc/opts.c
---- gcc-4.8.2.orig/gcc/opts.c 2013-03-05 07:01:13.000000000 +0100
-+++ gcc-4.8.2/gcc/opts.c 2014-02-23 20:22:48.000000000 +0100
-@@ -468,8 +468,6 @@
- { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 },
- #endif
- { OPT_LEVELS_2_PLUS, OPT_fregmove, NULL, 1 },
-- { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 },
-- { OPT_LEVELS_2_PLUS, OPT_fstrict_overflow, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_freorder_blocks, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 },
- { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 },
-@@ -488,6 +486,8 @@
- { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 },
-
- /* -O3 optimizations. */
-+ { OPT_LEVELS_3_PLUS, OPT_fstrict_aliasing, NULL, 1 },
-+ { OPT_LEVELS_3_PLUS, OPT_fstrict_overflow, NULL, 1 },
- { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
- { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
- /* Inlining of functions reducing size is a good idea with -Os
-@@ -1423,6 +1423,17 @@
- opts, opts_set, loc, dc);
- break;
-
-+ case OPT_Werror_maybe_reset:
-+ {
-+ char *ev = getenv ("GCC_NO_WERROR");
-+ if ((ev != NULL) && (*ev != '0'))
-+ warnings_are_errors = 0;
-+ }
-+ break;
-+
-+ case OPT_fhonour_copts:
-+ break;
-+
- case OPT_Wlarger_than_:
- opts->x_larger_than_size = value;
- opts->x_warn_larger_than = value != -1;
diff --git a/toolchain/gcc/patches/4.8.5/disable-atomics.patch b/toolchain/gcc/patches/4.8.5/disable-atomics.patch
deleted file mode 100644
index 4ab553218..000000000
--- a/toolchain/gcc/patches/4.8.5/disable-atomics.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nur gcc-4.8.3.orig/libgcc/config.host gcc-4.8.3/libgcc/config.host
---- gcc-4.8.3.orig/libgcc/config.host 2014-03-20 17:12:30.000000000 +0100
-+++ gcc-4.8.3/libgcc/config.host 2014-07-26 13:15:06.359463368 +0200
-@@ -689,7 +689,7 @@
- m68k*-*-openbsd*)
- ;;
- m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux with uClibc
-- tmake_file="$tmake_file m68k/t-floatlib m68k/t-linux"
-+ tmake_file="$tmake_file m68k/t-floatlib"
- md_unwind_header=m68k/linux-unwind.h
- ;;
- m68k-*-linux*) # Motorola m68k's running GNU/Linux
diff --git a/toolchain/gcc/patches/4.8.5/disable-tm.patch b/toolchain/gcc/patches/4.8.5/disable-tm.patch
deleted file mode 100644
index 02b5cb854..000000000
--- a/toolchain/gcc/patches/4.8.5/disable-tm.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -Nur gcc-4.8.3.orig/gcc/config/m68k/uclinux.h gcc-4.8.3/gcc/config/m68k/uclinux.h
---- gcc-4.8.3.orig/gcc/config/m68k/uclinux.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/m68k/uclinux.h 2014-08-25 17:03:59.543127685 +0200
-@@ -20,6 +20,10 @@
- along with GCC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
-
-+/* Do not use TM clone registry. It breaks -msep-data (-fPIC) code. */
-+/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54584 */
-+#define USE_TM_CLONE_REGISTRY 0
-+
- #undef STARTFILE_SPEC
- #define STARTFILE_SPEC \
- "%{mshared-library-id=0|!mshared-library-id=*: crt1.o%s ;: Scrt1.o%s} \
diff --git a/toolchain/gcc/patches/4.8.5/gcc.musl b/toolchain/gcc/patches/4.8.5/gcc.musl
deleted file mode 100644
index 4150dfcdf..000000000
--- a/toolchain/gcc/patches/4.8.5/gcc.musl
+++ /dev/null
@@ -1,633 +0,0 @@
-diff -Nur gcc-4.8.3.orig/fixincludes/mkfixinc.sh gcc-4.8.3/fixincludes/mkfixinc.sh
---- gcc-4.8.3.orig/fixincludes/mkfixinc.sh 2012-10-28 22:42:48.000000000 +0100
-+++ gcc-4.8.3/fixincludes/mkfixinc.sh 2014-05-23 08:22:46.987415702 +0200
-@@ -19,7 +19,8 @@
- powerpc-*-eabi* | \
- powerpc-*-rtems* | \
- powerpcle-*-eabisim* | \
-- powerpcle-*-eabi* )
-+ powerpcle-*-eabi* | \
-+ *-musl* )
- # IF there is no include fixing,
- # THEN create a no-op fixer and exit
- (echo "#! /bin/sh" ; echo "exit 0" ) > ${target}
-diff -Nur gcc-4.8.3.orig/gcc/config/aarch64/aarch64-linux.h gcc-4.8.3/gcc/config/aarch64/aarch64-linux.h
---- gcc-4.8.3.orig/gcc/config/aarch64/aarch64-linux.h 2013-08-13 15:22:18.000000000 +0200
-+++ gcc-4.8.3/gcc/config/aarch64/aarch64-linux.h 2014-05-23 08:22:46.987415702 +0200
-@@ -21,7 +21,11 @@
- #ifndef GCC_AARCH64_LINUX_H
- #define GCC_AARCH64_LINUX_H
-
-+/* The AArch64 port currently supports two dynamic linkers:
-+ - ld-linux-aarch64.so.1 - GLIBC dynamic linker
-+ - ld-musl-aarch64.so.1 - musl libc dynamic linker */
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64.so.1"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64.so.1"
-
- #define CPP_SPEC "%{pthread:-D_REENTRANT}"
-
-diff -Nur gcc-4.8.3.orig/gcc/config/arm/linux-eabi.h gcc-4.8.3/gcc/config/arm/linux-eabi.h
---- gcc-4.8.3.orig/gcc/config/arm/linux-eabi.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/arm/linux-eabi.h 2014-05-23 08:22:46.987415702 +0200
-@@ -77,6 +77,23 @@
- %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
- %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
-
-+/* For ARM musl currently supports four dynamic linkers:
-+ - ld-musl-arm.so.1 - for the EABI-derived soft-float ABI
-+ - ld-musl-armhf.so.1 - for the EABI-derived hard-float ABI
-+ - ld-musl-armeb.so.1 - for the EABI-derived soft-float ABI, EB
-+ - ld-musl-armebhf.so.1 - for the EABI-derived hard-float ABI, EB
-+ musl does not support the legacy OABI mode.
-+ All the dynamic linkers live in /lib.
-+ We default to soft-float, EL. */
-+#undef MUSL_DYNAMIC_LINKER
-+#if TARGET_BIG_ENDIAN_DEFAULT
-+#define MUSL_DYNAMIC_LINKER_E "%{mlittle-endian:;:eb}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}"
-+#endif
-+#define MUSL_DYNAMIC_LINKER \
-+ "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1"
-+
- /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
- use the GNU/Linux version, not the generic BPABI version. */
- #undef LINK_SPEC
-diff -Nur gcc-4.8.3.orig/gcc/config/i386/linux64.h gcc-4.8.3/gcc/config/i386/linux64.h
---- gcc-4.8.3.orig/gcc/config/i386/linux64.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/i386/linux64.h 2014-05-23 08:22:46.987415702 +0200
-@@ -30,3 +30,7 @@
- #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
- #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
- #define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
-+
-+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
-+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
-+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1"
-diff -Nur gcc-4.8.3.orig/gcc/config/i386/linux.h gcc-4.8.3/gcc/config/i386/linux.h
---- gcc-4.8.3.orig/gcc/config/i386/linux.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/i386/linux.h 2014-05-23 08:22:46.987415702 +0200
-@@ -21,3 +21,4 @@
-
- #define GNU_USER_LINK_EMULATION "elf_i386"
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
-diff -Nur gcc-4.8.3.orig/gcc/config/linux.h gcc-4.8.3/gcc/config/linux.h
---- gcc-4.8.3.orig/gcc/config/linux.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/linux.h 2014-05-23 08:22:46.987415702 +0200
-@@ -32,10 +32,12 @@
- #define OPTION_GLIBC (DEFAULT_LIBC == LIBC_GLIBC)
- #define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
- #define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
-+#define OPTION_MUSL (DEFAULT_LIBC == LIBC_MUSL)
- #else
- #define OPTION_GLIBC (linux_libc == LIBC_GLIBC)
- #define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
- #define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
-+#define OPTION_MUSL (linux_libc == LIBC_MUSL)
- #endif
-
- #define GNU_USER_TARGET_OS_CPP_BUILTINS() \
-@@ -53,18 +55,21 @@
- uClibc or Bionic is the default C library and whether
- -muclibc or -mglibc or -mbionic has been passed to change the default. */
-
--#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LD1, LD2, LD3) \
-- "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:" LD1 "}}"
-+#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LIBC4, LD1, LD2, LD3, LD4) \
-+ "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:%{" LIBC4 ":" LD4 ";:" LD1 "}}}"
-
- #if DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
-- CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", G, U, B)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+ CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", "mmusl", G, U, B, M)
- #elif DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
-- CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", U, G, B)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+ CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", "mmusl", U, G, B, M)
- #elif DEFAULT_LIBC == LIBC_BIONIC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
-- CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", B, G, U)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+ CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", "mmusl", B, G, U, M)
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+ CHOOSE_DYNAMIC_LINKER1 ("mmusl", "mglibc", "muclibc", "mbionic", M, G, U, B)
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif /* DEFAULT_LIBC */
-@@ -84,21 +89,21 @@
-
- #define GNU_USER_DYNAMIC_LINKER \
- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
-- BIONIC_DYNAMIC_LINKER)
-+ BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
- #define GNU_USER_DYNAMIC_LINKER32 \
- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
-- BIONIC_DYNAMIC_LINKER32)
-+ BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
- #define GNU_USER_DYNAMIC_LINKER64 \
- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
-- BIONIC_DYNAMIC_LINKER64)
-+ BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
- #define GNU_USER_DYNAMIC_LINKERX32 \
- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERX32, UCLIBC_DYNAMIC_LINKERX32, \
-- BIONIC_DYNAMIC_LINKERX32)
-+ BIONIC_DYNAMIC_LINKERX32, MUSL_DYNAMIC_LINKERX32)
-
- /* Determine whether the entire c99 runtime
- is present in the runtime library. */
- #undef TARGET_C99_FUNCTIONS
--#define TARGET_C99_FUNCTIONS (OPTION_GLIBC)
-+#define TARGET_C99_FUNCTIONS (OPTION_GLIBC || OPTION_MUSL)
-
- /* Whether we have sincos that follows the GNU extension. */
- #undef TARGET_HAS_SINCOS
-@@ -107,3 +112,74 @@
- /* Whether we have Bionic libc runtime */
- #undef TARGET_HAS_BIONIC
- #define TARGET_HAS_BIONIC (OPTION_BIONIC)
-+
-+/* musl avoids problematic includes by rearranging the include directories.
-+ * Unfortunately, this is mostly duplicated from cppdefault.c */
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define INCLUDE_DEFAULTS_MUSL_GPP \
-+ { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, \
-+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 }, \
-+ { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1, \
-+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 }, \
-+ { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1, \
-+ GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
-+
-+#ifdef LOCAL_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_LOCAL \
-+ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 }, \
-+ { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_LOCAL
-+#endif
-+
-+#ifdef PREFIX_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_PREFIX \
-+ { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_PREFIX
-+#endif
-+
-+#ifdef CROSS_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_CROSS \
-+ { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_CROSS
-+#endif
-+
-+#ifdef TOOL_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_TOOL \
-+ { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_TOOL
-+#endif
-+
-+#ifdef NATIVE_SYSTEM_HEADER_DIR
-+#define INCLUDE_DEFAULTS_MUSL_NATIVE \
-+ { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
-+ { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_NATIVE
-+#endif
-+
-+#if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT)
-+# undef INCLUDE_DEFAULTS_MUSL_LOCAL
-+# define INCLUDE_DEFAULTS_MUSL_LOCAL
-+# undef INCLUDE_DEFAULTS_MUSL_NATIVE
-+# define INCLUDE_DEFAULTS_MUSL_NATIVE
-+#else
-+# undef INCLUDE_DEFAULTS_MUSL_CROSS
-+# define INCLUDE_DEFAULTS_MUSL_CROSS
-+#endif
-+
-+#undef INCLUDE_DEFAULTS
-+#define INCLUDE_DEFAULTS \
-+ { \
-+ INCLUDE_DEFAULTS_MUSL_GPP \
-+ INCLUDE_DEFAULTS_MUSL_PREFIX \
-+ INCLUDE_DEFAULTS_MUSL_CROSS \
-+ INCLUDE_DEFAULTS_MUSL_TOOL \
-+ INCLUDE_DEFAULTS_MUSL_NATIVE \
-+ { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 }, \
-+ { 0, 0, 0, 0, 0, 0 } \
-+ }
-+#endif
-diff -Nur gcc-4.8.3.orig/gcc/config/linux.opt gcc-4.8.3/gcc/config/linux.opt
---- gcc-4.8.3.orig/gcc/config/linux.opt 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/linux.opt 2014-05-23 08:22:46.987415702 +0200
-@@ -30,3 +30,7 @@
- muclibc
- Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
- Use uClibc C library
-+
-+mmusl
-+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
-+Use musl C library
-diff -Nur gcc-4.8.3.orig/gcc/config/microblaze/linux.h gcc-4.8.3/gcc/config/microblaze/linux.h
---- gcc-4.8.3.orig/gcc/config/microblaze/linux.h 2013-03-14 16:43:23.000000000 +0100
-+++ gcc-4.8.3/gcc/config/microblaze/linux.h 2014-05-23 08:22:46.987415702 +0200
-@@ -25,7 +25,22 @@
- #undef TLS_NEEDS_GOT
- #define TLS_NEEDS_GOT 1
-
--#define DYNAMIC_LINKER "/lib/ld.so.1"
-+#if TARGET_BIG_ENDIAN_DEFAULT == 0 /* LE */
-+#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E ".so.1"
-+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
-+
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define DYNAMIC_LINKER MUSL_DYNAMIC_LINKER
-+#else
-+#define DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER
-+#endif
-+
-+
- #undef SUBTARGET_EXTRA_SPECS
- #define SUBTARGET_EXTRA_SPECS \
- { "dynamic_linker", DYNAMIC_LINKER }
-diff -Nur gcc-4.8.3.orig/gcc/config/mips/linux.h gcc-4.8.3/gcc/config/mips/linux.h
---- gcc-4.8.3.orig/gcc/config/mips/linux.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/mips/linux.h 2014-05-23 08:22:48.643418636 +0200
-@@ -18,3 +18,10 @@
- <http://www.gnu.org/licenses/>. */
-
- #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
-+
-+#if TARGET_ENDIAN_DEFAULT == 0 /* LE */
-+#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips" MUSL_DYNAMIC_LINKER_E ".so.1"
-diff -Nur gcc-4.8.3.orig/gcc/config/rs6000/linux64.h gcc-4.8.3/gcc/config/rs6000/linux64.h
---- gcc-4.8.3.orig/gcc/config/rs6000/linux64.h 2014-04-04 17:10:24.000000000 +0200
-+++ gcc-4.8.3/gcc/config/rs6000/linux64.h 2014-05-23 08:22:48.643418636 +0200
-@@ -374,17 +374,21 @@
- #endif
- #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
- #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
-+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-powerpc.so.1"
-+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-powerpc64.so.1"
- #if DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}"
- #elif DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}"
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}"
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif
- #define GNU_USER_DYNAMIC_LINKER32 \
-- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
-+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
- #define GNU_USER_DYNAMIC_LINKER64 \
-- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
-+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
-
- #undef DEFAULT_ASM_ENDIAN
- #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
-diff -Nur gcc-4.8.3.orig/gcc/config/rs6000/secureplt.h gcc-4.8.3/gcc/config/rs6000/secureplt.h
---- gcc-4.8.3.orig/gcc/config/rs6000/secureplt.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/config/rs6000/secureplt.h 2014-05-23 08:22:48.643418636 +0200
-@@ -18,3 +18,4 @@
- <http://www.gnu.org/licenses/>. */
-
- #define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt"
-+#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt"
-diff -Nur gcc-4.8.3.orig/gcc/config/rs6000/sysv4.h gcc-4.8.3/gcc/config/rs6000/sysv4.h
---- gcc-4.8.3.orig/gcc/config/rs6000/sysv4.h 2014-04-04 16:50:31.000000000 +0200
-+++ gcc-4.8.3/gcc/config/rs6000/sysv4.h 2014-05-23 08:22:48.643418636 +0200
-@@ -537,6 +537,9 @@
- #ifndef CC1_SECURE_PLT_DEFAULT_SPEC
- #define CC1_SECURE_PLT_DEFAULT_SPEC ""
- #endif
-+#ifndef LINK_SECURE_PLT_DEFAULT_SPEC
-+#define LINK_SECURE_PLT_DEFAULT_SPEC ""
-+#endif
-
- /* Pass -G xxx to the compiler. */
- #define CC1_SPEC "%{G*} %(cc1_cpu)" \
-@@ -585,7 +588,8 @@
-
- /* Override the default target of the linker. */
- #define LINK_TARGET_SPEC \
-- ENDIAN_SELECT("", " --oformat elf32-powerpcle", "")
-+ ENDIAN_SELECT("", " --oformat elf32-powerpcle", "") \
-+ "%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
-
- /* Any specific OS flags. */
- #define LINK_OS_SPEC "\
-@@ -763,15 +767,18 @@
-
- #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
- #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-powerpc.so.1"
- #if DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}"
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}"
- #elif !defined (DEFAULT_LIBC) || DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}"
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif
- #define GNU_USER_DYNAMIC_LINKER \
-- CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
-+ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
-
- #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
- %{rdynamic:-export-dynamic} \
-@@ -894,6 +901,7 @@
- { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \
- { "link_os_default", LINK_OS_DEFAULT_SPEC }, \
- { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
-+ { "link_secure_plt_default", LINK_SECURE_PLT_DEFAULT_SPEC }, \
- { "cpp_os_ads", CPP_OS_ADS_SPEC }, \
- { "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
- { "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
-diff -Nur gcc-4.8.3.orig/gcc/config/sh/linux.h gcc-4.8.3/gcc/config/sh/linux.h
---- gcc-4.8.3.orig/gcc/config/sh/linux.h 2013-03-14 04:01:53.000000000 +0100
-+++ gcc-4.8.3/gcc/config/sh/linux.h 2014-05-23 08:22:48.643418636 +0200
-@@ -43,7 +43,14 @@
-
- #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
-
-+#if TARGET_ENDIAN_DEFAULT == 0 /* BE */
-+#define MUSL_DYNAMIC_LINKER_E "eb"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E
-+#endif
-+
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E ".so.1"
-
- #undef SUBTARGET_LINK_EMUL_SUFFIX
- #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
-diff -Nur gcc-4.8.3.orig/gcc/config.gcc gcc-4.8.3/gcc/config.gcc
---- gcc-4.8.3.orig/gcc/config.gcc 2014-05-06 17:29:04.000000000 +0200
-+++ gcc-4.8.3/gcc/config.gcc 2014-05-23 08:22:49.895420854 +0200
-@@ -550,7 +550,7 @@
- esac
-
- # Common C libraries.
--tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
-+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
-
- # Common parts for widely ported systems.
- case ${target} in
-@@ -653,6 +653,9 @@
- *-*-*uclibc*)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
- ;;
-+ *-*-*musl*)
-+ tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
-+ ;;
- *)
- tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
- ;;
-@@ -2135,6 +2138,10 @@
- powerpc*-*-linux*paired*)
- tm_file="${tm_file} rs6000/750cl.h" ;;
- esac
-+ case ${target} in
-+ *-linux*-musl*)
-+ enable_secureplt=yes ;;
-+ esac
- if test x${enable_secureplt} = xyes; then
- tm_file="rs6000/secureplt.h ${tm_file}"
- fi
-diff -Nur gcc-4.8.3.orig/gcc/configure gcc-4.8.3/gcc/configure
---- gcc-4.8.3.orig/gcc/configure 2014-04-28 12:05:29.000000000 +0200
-+++ gcc-4.8.3/gcc/configure 2014-05-23 08:22:49.903420868 +0200
-@@ -26821,6 +26821,9 @@
- else
- gcc_cv_libc_provides_ssp=no
- case "$target" in
-+ *-*-musl*)
-+ # All versions of musl provide stack protector
-+ gcc_cv_libc_provides_ssp=yes;;
- *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
- # glibc 2.4 and later provides __stack_chk_fail and
- # either __stack_chk_guard, or TLS access to stack guard canary.
-@@ -26854,6 +26857,7 @@
- # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
- # simply assert that glibc does provide this, which is true for all
- # realistically usable GNU/Hurd configurations.
-+ # All supported versions of musl provide it as well
- gcc_cv_libc_provides_ssp=yes;;
- *-*-darwin* | *-*-freebsd*)
- ac_fn_c_check_func "$LINENO" "__stack_chk_fail" "ac_cv_func___stack_chk_fail"
-@@ -26936,6 +26940,9 @@
- gcc_cv_target_dl_iterate_phdr=no
- fi
- ;;
-+ *-linux-musl*)
-+ gcc_cv_target_dl_iterate_phdr=yes
-+ ;;
- esac
-
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
-diff -Nur gcc-4.8.3.orig/gcc/configure.ac gcc-4.8.3/gcc/configure.ac
---- gcc-4.8.3.orig/gcc/configure.ac 2014-04-28 12:05:29.000000000 +0200
-+++ gcc-4.8.3/gcc/configure.ac 2014-05-23 08:22:49.903420868 +0200
-@@ -4750,6 +4750,9 @@
- gcc_cv_libc_provides_ssp,
- [gcc_cv_libc_provides_ssp=no
- case "$target" in
-+ *-*-musl*)
-+ # All versions of musl provide stack protector
-+ gcc_cv_libc_provides_ssp=yes;;
- *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
- [# glibc 2.4 and later provides __stack_chk_fail and
- # either __stack_chk_guard, or TLS access to stack guard canary.
-@@ -4783,6 +4786,7 @@
- # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
- # simply assert that glibc does provide this, which is true for all
- # realistically usable GNU/Hurd configurations.
-+ # All supported versions of musl provide it as well
- gcc_cv_libc_provides_ssp=yes;;
- *-*-darwin* | *-*-freebsd*)
- AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
-@@ -4848,6 +4852,9 @@
- gcc_cv_target_dl_iterate_phdr=no
- fi
- ;;
-+ *-linux-musl*)
-+ gcc_cv_target_dl_iterate_phdr=yes
-+ ;;
- esac
- GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
-diff -Nur gcc-4.8.3.orig/gcc/ginclude/stddef.h gcc-4.8.3/gcc/ginclude/stddef.h
---- gcc-4.8.3.orig/gcc/ginclude/stddef.h 2013-01-10 21:38:27.000000000 +0100
-+++ gcc-4.8.3/gcc/ginclude/stddef.h 2014-05-23 08:22:49.903420868 +0200
-@@ -181,6 +181,7 @@
- #ifndef _GCC_SIZE_T
- #ifndef _SIZET_
- #ifndef __size_t
-+#ifndef __DEFINED_size_t /* musl */
- #define __size_t__ /* BeOS */
- #define __SIZE_T__ /* Cray Unicos/Mk */
- #define _SIZE_T
-@@ -197,6 +198,7 @@
- #define ___int_size_t_h
- #define _GCC_SIZE_T
- #define _SIZET_
-+#define __DEFINED_size_t /* musl */
- #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
- || defined(__FreeBSD_kernel__)
- /* __size_t is a typedef on FreeBSD 5, must not trash it. */
-@@ -214,6 +216,7 @@
- typedef long ssize_t;
- #endif /* __BEOS__ */
- #endif /* !(defined (__GNUG__) && defined (size_t)) */
-+#endif /* __DEFINED_size_t */
- #endif /* __size_t */
- #endif /* _SIZET_ */
- #endif /* _GCC_SIZE_T */
-diff -Nur gcc-4.8.3.orig/libgcc/unwind-dw2-fde-dip.c gcc-4.8.3/libgcc/unwind-dw2-fde-dip.c
---- gcc-4.8.3.orig/libgcc/unwind-dw2-fde-dip.c 2013-02-04 20:06:20.000000000 +0100
-+++ gcc-4.8.3/libgcc/unwind-dw2-fde-dip.c 2014-05-23 08:22:49.955420959 +0200
-@@ -46,33 +46,13 @@
- #include "unwind-compat.h"
- #include "gthr.h"
-
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
-- && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
-- || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
-- && defined(__BIONIC__)
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
-- && defined(__FreeBSD__) && __FreeBSD__ >= 7
--# define ElfW __ElfN
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
-- && defined(__OpenBSD__)
--# define ElfW(type) Elf_##type
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
-- && defined(TARGET_DL_ITERATE_PHDR) \
-- && defined(__sun__) && defined(__svr4__)
-+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR)
- # define USE_PT_GNU_EH_FRAME
-+# ifdef __OpenBSD__
-+# define ElfW(type) Elf_##typ
-+# elif defined(__FreeBSD__) && __FreeBSD__ >= 7
-+# define ElfW __ElfN
-+# endif
- #endif
-
- #if defined(USE_PT_GNU_EH_FRAME)
-diff -Nur gcc-4.8.3.orig/libgomp/config/posix/time.c gcc-4.8.3/libgomp/config/posix/time.c
---- gcc-4.8.3.orig/libgomp/config/posix/time.c 2013-01-14 19:18:49.000000000 +0100
-+++ gcc-4.8.3/libgomp/config/posix/time.c 2014-05-23 08:22:49.975420996 +0200
-@@ -28,6 +28,8 @@
- The following implementation uses the most simple POSIX routines.
- If present, POSIX 4 clocks should be used instead. */
-
-+#define _POSIX_C_SOURCE 199309L /* for clocks */
-+
- #include "libgomp.h"
- #include <unistd.h>
- #if TIME_WITH_SYS_TIME
-diff -Nur gcc-4.8.3.orig/libitm/config/arm/hwcap.cc gcc-4.8.3/libitm/config/arm/hwcap.cc
---- gcc-4.8.3.orig/libitm/config/arm/hwcap.cc 2013-02-03 18:46:11.000000000 +0100
-+++ gcc-4.8.3/libitm/config/arm/hwcap.cc 2014-05-23 08:22:49.979421003 +0200
-@@ -40,7 +40,11 @@
-
- #ifdef __linux__
- #include <unistd.h>
-+#ifdef __GLIBC__
- #include <sys/fcntl.h>
-+#else
-+#include <fcntl.h>
-+#endif
- #include <elf.h>
-
- static void __attribute__((constructor))
-diff -Nur gcc-4.8.3.orig/libitm/config/linux/x86/tls.h gcc-4.8.3/libitm/config/linux/x86/tls.h
---- gcc-4.8.3.orig/libitm/config/linux/x86/tls.h 2013-02-03 18:46:11.000000000 +0100
-+++ gcc-4.8.3/libitm/config/linux/x86/tls.h 2014-05-23 08:22:49.999421038 +0200
-@@ -25,16 +25,19 @@
- #ifndef LIBITM_X86_TLS_H
- #define LIBITM_X86_TLS_H 1
-
--#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
-+#if defined(__GLIBC_PREREQ)
-+#if __GLIBC_PREREQ(2, 10)
- /* Use slots in the TCB head rather than __thread lookups.
- GLIBC has reserved words 10 through 13 for TM. */
- #define HAVE_ARCH_GTM_THREAD 1
- #define HAVE_ARCH_GTM_THREAD_DISP 1
- #endif
-+#endif
-
- #include "config/generic/tls.h"
-
--#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
-+#if defined(__GLIBC_PREREQ)
-+#if __GLIBC_PREREQ(2, 10)
- namespace GTM HIDDEN {
-
- #ifdef __x86_64__
-@@ -101,5 +104,6 @@
-
- } // namespace GTM
- #endif /* >= GLIBC 2.10 */
-+#endif
-
- #endif // LIBITM_X86_TLS_H
-diff -Nur gcc-4.8.3.orig/libstdc++-v3/configure.host gcc-4.8.3/libstdc++-v3/configure.host
---- gcc-4.8.3.orig/libstdc++-v3/configure.host 2013-06-19 03:18:38.000000000 +0200
-+++ gcc-4.8.3/libstdc++-v3/configure.host 2014-05-23 08:22:50.015421065 +0200
-@@ -264,6 +264,13 @@
- os_include_dir="os/bsd/freebsd"
- ;;
- gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-+ # check for musl by target
-+ case "${host_os}" in
-+ *-musl*)
-+ os_include_dir="os/generic"
-+ ;;
-+ *)
-+
- if [ "$uclibc" = "yes" ]; then
- os_include_dir="os/uclibc"
- elif [ "$bionic" = "yes" ]; then
-@@ -272,6 +279,9 @@
- os_include_dir="os/gnu-linux"
- fi
- ;;
-+
-+ esac
-+ ;;
- hpux*)
- os_include_dir="os/hpux"
- ;;
diff --git a/toolchain/gcc/patches/4.8.5/libstdcxx-uclibc-c99.patch b/toolchain/gcc/patches/4.8.5/libstdcxx-uclibc-c99.patch
deleted file mode 100644
index 792976fd5..000000000
--- a/toolchain/gcc/patches/4.8.5/libstdcxx-uclibc-c99.patch
+++ /dev/null
@@ -1,273 +0,0 @@
-Allow C99-depending features of libstdc++ with uClibc
-
-The libstdc++ code is fairly restrictive on how it checks for C99
-compatibility: it requires *complete* C99 support to enable certain
-features. For example, uClibc provides a good number of C99 features,
-but not C99 complex number support. For this reason, libstdc++
-completely disables many the standard C++ methods that can in fact
-work because uClibc provides the necessary functions.
-
-This patch is similar and highly inspired from
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58393, but implemented in
-a way that doesn't involve changing the configure.ac script, as
-autoreconfiguring gcc is complicated. It simply relies on the fact
-that uClibc defines the __UCLIBC__ definition.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-Index: b/libstdc++-v3/config/locale/generic/c_locale.h
-===================================================================
---- a/libstdc++-v3/config/locale/generic/c_locale.h
-+++ b/libstdc++-v3/config/locale/generic/c_locale.h
-@@ -70,7 +70,7 @@
- __builtin_va_list __args;
- __builtin_va_start(__args, __fmt);
-
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
- #else
- const int __ret = __builtin_vsprintf(__out, __fmt, __args);
-Index: b/libstdc++-v3/config/locale/gnu/c_locale.h
-===================================================================
---- a/libstdc++-v3/config/locale/gnu/c_locale.h
-+++ b/libstdc++-v3/config/locale/gnu/c_locale.h
-@@ -88,7 +88,7 @@
- __builtin_va_list __args;
- __builtin_va_start(__args, __fmt);
-
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
- #else
- const int __ret = __builtin_vsprintf(__out, __fmt, __args);
-Index: b/libstdc++-v3/include/bits/basic_string.h
-===================================================================
---- a/libstdc++-v3/include/bits/basic_string.h
-+++ b/libstdc++-v3/include/bits/basic_string.h
-@@ -2809,7 +2809,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
-+#if ((__cplusplus >= 201103L) && (defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)) \
- && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
-
- #include <ext/string_conversions.h>
-Index: b/libstdc++-v3/include/bits/locale_facets.tcc
-===================================================================
---- a/libstdc++-v3/include/bits/locale_facets.tcc
-+++ b/libstdc++-v3/include/bits/locale_facets.tcc
-@@ -987,7 +987,7 @@
- char __fbuf[16];
- __num_base::_S_format_float(__io, __fbuf, __mod);
-
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- // First try a buffer perhaps big enough (most probably sufficient
- // for non-ios_base::fixed outputs)
- int __cs_size = __max_digits * 3;
-Index: b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
-===================================================================
---- a/libstdc++-v3/include/bits/locale_facets_nonio.tcc
-+++ b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
-@@ -572,7 +572,7 @@
- {
- const locale __loc = __io.getloc();
- const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- // First try a buffer perhaps big enough.
- int __cs_size = 64;
- char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
-Index: b/libstdc++-v3/include/c_compatibility/math.h
-===================================================================
---- a/libstdc++-v3/include/c_compatibility/math.h
-+++ b/libstdc++-v3/include/c_compatibility/math.h
-@@ -56,7 +56,7 @@
- using std::floor;
- using std::fmod;
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::fpclassify;
- using std::isfinite;
- using std::isinf;
-Index: b/libstdc++-v3/include/c_compatibility/wchar.h
-===================================================================
---- a/libstdc++-v3/include/c_compatibility/wchar.h
-+++ b/libstdc++-v3/include/c_compatibility/wchar.h
-@@ -103,7 +103,7 @@
- using std::wmemset;
- using std::wcsftime;
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::wcstold;
- using std::wcstoll;
- using std::wcstoull;
-Index: b/libstdc++-v3/include/c_global/cstdlib
-===================================================================
---- a/libstdc++-v3/include/c_global/cstdlib
-+++ b/libstdc++-v3/include/c_global/cstdlib
-@@ -182,7 +182,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef _Exit
- #undef llabs
-Index: b/libstdc++-v3/include/c_global/cwchar
-===================================================================
---- a/libstdc++-v3/include/c_global/cwchar
-+++ b/libstdc++-v3/include/c_global/cwchar
-@@ -232,7 +232,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef wcstold
- #undef wcstoll
-@@ -289,7 +289,7 @@
- using std::vwscanf;
- #endif
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::wcstold;
- using std::wcstoll;
- using std::wcstoull;
-Index: b/libstdc++-v3/include/c_std/cstdio
-===================================================================
---- a/libstdc++-v3/include/c_std/cstdio
-+++ b/libstdc++-v3/include/c_std/cstdio
-@@ -139,7 +139,7 @@
- using ::vsprintf;
- } // namespace std
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef snprintf
- #undef vfscanf
-Index: b/libstdc++-v3/include/c_std/cstdlib
-===================================================================
---- a/libstdc++-v3/include/c_std/cstdlib
-+++ b/libstdc++-v3/include/c_std/cstdlib
-@@ -180,7 +180,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef _Exit
- #undef llabs
-Index: b/libstdc++-v3/include/c_std/cwchar
-===================================================================
---- a/libstdc++-v3/include/c_std/cwchar
-+++ b/libstdc++-v3/include/c_std/cwchar
-@@ -228,7 +228,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef wcstold
- #undef wcstoll
-Index: b/libstdc++-v3/include/ext/vstring.h
-===================================================================
---- a/libstdc++-v3/include/ext/vstring.h
-+++ b/libstdc++-v3/include/ext/vstring.h
-@@ -2571,7 +2571,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99))
-+#if ((__cplusplus >= 201103L) && (defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)))
-
- #include <ext/string_conversions.h>
-
-Index: b/libstdc++-v3/include/tr1/cstdio
-===================================================================
---- a/libstdc++-v3/include/tr1/cstdio
-+++ b/libstdc++-v3/include/tr1/cstdio
-@@ -33,7 +33,7 @@
-
- #include <cstdio>
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- namespace std _GLIBCXX_VISIBILITY(default)
- {
-Index: b/libstdc++-v3/include/tr1/cstdlib
-===================================================================
---- a/libstdc++-v3/include/tr1/cstdlib
-+++ b/libstdc++-v3/include/tr1/cstdlib
-@@ -35,7 +35,7 @@
-
- #if _GLIBCXX_HOSTED
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- namespace std _GLIBCXX_VISIBILITY(default)
- {
-Index: b/libstdc++-v3/include/tr1/cwchar
-===================================================================
---- a/libstdc++-v3/include/tr1/cwchar
-+++ b/libstdc++-v3/include/tr1/cwchar
-@@ -52,7 +52,7 @@
- using std::vwscanf;
- #endif
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::wcstold;
- using std::wcstoll;
- using std::wcstoull;
-Index: b/libstdc++-v3/include/tr1/stdlib.h
-===================================================================
---- a/libstdc++-v3/include/tr1/stdlib.h
-+++ b/libstdc++-v3/include/tr1/stdlib.h
-@@ -33,7 +33,7 @@
-
- #if _GLIBCXX_HOSTED
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- using std::tr1::atoll;
- using std::tr1::strtoll;
-Index: b/libstdc++-v3/src/c++11/debug.cc
-===================================================================
---- a/libstdc++-v3/src/c++11/debug.cc
-+++ b/libstdc++-v3/src/c++11/debug.cc
-@@ -787,7 +787,7 @@
- int __n __attribute__ ((__unused__)),
- const char* __fmt, _Tp __s) const throw ()
- {
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- std::snprintf(__buf, __n, __fmt, __s);
- #else
- std::sprintf(__buf, __fmt, __s);
-Index: b/libstdc++-v3/include/c_global/cstdio
-===================================================================
---- a/libstdc++-v3/include/c_global/cstdio
-+++ b/libstdc++-v3/include/c_global/cstdio
-@@ -139,7 +139,7 @@
- using ::vsprintf;
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef snprintf
- #undef vfscanf
diff --git a/toolchain/gcc/patches/4.8.5/uclibc-cmath.ppc b/toolchain/gcc/patches/4.8.5/uclibc-cmath.ppc
deleted file mode 100644
index 81bd123fc..000000000
--- a/toolchain/gcc/patches/4.8.5/uclibc-cmath.ppc
+++ /dev/null
@@ -1,1878 +0,0 @@
-diff -Nur gcc-4.8.3.orig/libstdc++-v3/include/c_global/cmath gcc-4.8.3/libstdc++-v3/include/c_global/cmath
---- gcc-4.8.3.orig/libstdc++-v3/include/c_global/cmath 2013-02-03 18:54:05.000000000 +0100
-+++ gcc-4.8.3/libstdc++-v3/include/c_global/cmath 2014-07-27 07:24:43.600272987 +0200
-@@ -1040,143 +1040,213 @@
- // functions
- using ::acosh;
- using ::acoshf;
-+#ifdef __LONG_DOUBLE_128__
- using ::acoshl;
-+#endif
-
- using ::asinh;
- using ::asinhf;
-+#ifdef __LONG_DOUBLE_128__
- using ::asinhl;
-+#endif
-
- using ::atanh;
- using ::atanhf;
-+#ifdef __LONG_DOUBLE_128__
- using ::atanhl;
-+#endif
-
- using ::cbrt;
- using ::cbrtf;
-+#ifdef __LONG_DOUBLE_128__
- using ::cbrtl;
-+#endif
-
- using ::copysign;
- using ::copysignf;
-+#ifdef __LONG_DOUBLE_128__
- using ::copysignl;
-+#endif
-
- using ::erf;
- using ::erff;
-+#ifdef __LONG_DOUBLE_128__
- using ::erfl;
-+#endif
-
- using ::erfc;
- using ::erfcf;
-+#ifdef __LONG_DOUBLE_128__
- using ::erfcl;
-+#endif
-
- using ::exp2;
- using ::exp2f;
-+#ifdef __LONG_DOUBLE_128__
- using ::exp2l;
-+#endif
-
- using ::expm1;
- using ::expm1f;
-+#ifdef __LONG_DOUBLE_128__
- using ::expm1l;
-+#endif
-
- using ::fdim;
- using ::fdimf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fdiml;
-+#endif
-
- using ::fma;
- using ::fmaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fmal;
-+#endif
-
- using ::fmax;
- using ::fmaxf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fmaxl;
-+#endif
-
- using ::fmin;
- using ::fminf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fminl;
-+#endif
-
- using ::hypot;
- using ::hypotf;
-+#ifdef __LONG_DOUBLE_128__
- using ::hypotl;
-+#endif
-
- using ::ilogb;
- using ::ilogbf;
-+#ifdef __LONG_DOUBLE_128__
- using ::ilogbl;
-+#endif
-
- using ::lgamma;
- using ::lgammaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lgammal;
-+#endif
-
- using ::llrint;
- using ::llrintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::llrintl;
-+#endif
-
- using ::llround;
- using ::llroundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::llroundl;
-+#endif
-
- using ::log1p;
- using ::log1pf;
-+#ifdef __LONG_DOUBLE_128__
- using ::log1pl;
-+#endif
-
- using ::log2;
- using ::log2f;
-+#ifdef __LONG_DOUBLE_128__
- using ::log2l;
-+#endif
-
- using ::logb;
- using ::logbf;
-+#ifdef __LONG_DOUBLE_128__
- using ::logbl;
-+#endif
-
- using ::lrint;
- using ::lrintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lrintl;
-+#endif
-
- using ::lround;
- using ::lroundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lroundl;
-+#endif
-
- using ::nan;
- using ::nanf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nanl;
-+#endif
-
- using ::nearbyint;
- using ::nearbyintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nearbyintl;
-+#endif
-
- using ::nextafter;
- using ::nextafterf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nextafterl;
-+#endif
-
- using ::nexttoward;
- using ::nexttowardf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nexttowardl;
-+#endif
-
- using ::remainder;
- using ::remainderf;
-+#ifdef __LONG_DOUBLE_128__
- using ::remainderl;
-+#endif
-
- using ::remquo;
- using ::remquof;
-+#ifdef __LONG_DOUBLE_128__
- using ::remquol;
-+#endif
-
- using ::rint;
- using ::rintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::rintl;
-+#endif
-
- using ::round;
- using ::roundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::roundl;
-+#endif
-
- using ::scalbln;
- using ::scalblnf;
-+#ifdef __LONG_DOUBLE_128__
- using ::scalblnl;
-+#endif
-
- using ::scalbn;
- using ::scalbnf;
-+#ifdef __LONG_DOUBLE_128__
- using ::scalbnl;
-+#endif
-
- using ::tgamma;
- using ::tgammaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::tgammal;
-+#endif
-
- using ::trunc;
- using ::truncf;
-+#ifdef __LONG_DOUBLE_128__
- using ::truncl;
-+#endif
-
- /// Additional overloads.
- constexpr float
-diff -Nur gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath gcc-4.8.3/libstdc++-v3/include/tr1/cmath
---- gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath 2013-02-03 18:54:05.000000000 +0100
-+++ gcc-4.8.3/libstdc++-v3/include/tr1/cmath 2014-07-26 12:58:43.652151897 +0200
-@@ -158,143 +158,213 @@
- // functions
- using ::acosh;
- using ::acoshf;
-+#ifdef __LONG_DOUBLE_128__
- using ::acoshl;
-+#endif
-
- using ::asinh;
- using ::asinhf;
-+#ifdef __LONG_DOUBLE_128__
- using ::asinhl;
-+#endif
-
- using ::atanh;
- using ::atanhf;
-+#ifdef __LONG_DOUBLE_128__
- using ::atanhl;
-+#endif
-
- using ::cbrt;
- using ::cbrtf;
-+#ifdef __LONG_DOUBLE_128__
- using ::cbrtl;
-+#endif
-
- using ::copysign;
- using ::copysignf;
-+#ifdef __LONG_DOUBLE_128__
- using ::copysignl;
-+#endif
-
- using ::erf;
- using ::erff;
-+#ifdef __LONG_DOUBLE_128__
- using ::erfl;
-+#endif
-
- using ::erfc;
- using ::erfcf;
-+#ifdef __LONG_DOUBLE_128__
- using ::erfcl;
-+#endif
-
- using ::exp2;
- using ::exp2f;
-+#ifdef __LONG_DOUBLE_128__
- using ::exp2l;
-+#endif
-
- using ::expm1;
- using ::expm1f;
-+#ifdef __LONG_DOUBLE_128__
- using ::expm1l;
-+#endif
-
- using ::fdim;
- using ::fdimf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fdiml;
-+#endif
-
- using ::fma;
- using ::fmaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fmal;
-+#endif
-
- using ::fmax;
- using ::fmaxf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fmaxl;
-+#endif
-
- using ::fmin;
- using ::fminf;
-+#ifdef __LONG_DOUBLE_128__
- using ::fminl;
-+#endif
-
- using ::hypot;
- using ::hypotf;
-+#ifdef __LONG_DOUBLE_128__
- using ::hypotl;
-+#endif
-
- using ::ilogb;
- using ::ilogbf;
-+#ifdef __LONG_DOUBLE_128__
- using ::ilogbl;
-+#endif
-
- using ::lgamma;
- using ::lgammaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lgammal;
-+#endif
-
- using ::llrint;
- using ::llrintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::llrintl;
-+#endif
-
- using ::llround;
- using ::llroundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::llroundl;
-+#endif
-
- using ::log1p;
- using ::log1pf;
-+#ifdef __LONG_DOUBLE_128__
- using ::log1pl;
-+#endif
-
- using ::log2;
- using ::log2f;
-+#ifdef __LONG_DOUBLE_128__
- using ::log2l;
-+#endif
-
- using ::logb;
- using ::logbf;
-+#ifdef __LONG_DOUBLE_128__
- using ::logbl;
-+#endif
-
- using ::lrint;
- using ::lrintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lrintl;
-+#endif
-
- using ::lround;
- using ::lroundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::lroundl;
-+#endif
-
- using ::nan;
- using ::nanf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nanl;
-+#endif
-
- using ::nearbyint;
- using ::nearbyintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nearbyintl;
-+#endif
-
- using ::nextafter;
- using ::nextafterf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nextafterl;
-+#endif
-
- using ::nexttoward;
- using ::nexttowardf;
-+#ifdef __LONG_DOUBLE_128__
- using ::nexttowardl;
-+#endif
-
- using ::remainder;
- using ::remainderf;
-+#ifdef __LONG_DOUBLE_128__
- using ::remainderl;
-+#endif
-
- using ::remquo;
- using ::remquof;
-+#ifdef __LONG_DOUBLE_128__
- using ::remquol;
-+#endif
-
- using ::rint;
- using ::rintf;
-+#ifdef __LONG_DOUBLE_128__
- using ::rintl;
-+#endif
-
- using ::round;
- using ::roundf;
-+#ifdef __LONG_DOUBLE_128__
- using ::roundl;
-+#endif
-
- using ::scalbln;
- using ::scalblnf;
-+#ifdef __LONG_DOUBLE_128__
- using ::scalblnl;
-+#endif
-
- using ::scalbn;
- using ::scalbnf;
-+#ifdef __LONG_DOUBLE_128__
- using ::scalbnl;
-+#endif
-
- using ::tgamma;
- using ::tgammaf;
-+#ifdef __LONG_DOUBLE_128__
- using ::tgammal;
-+#endif
-
- using ::trunc;
- using ::truncf;
-+#ifdef __LONG_DOUBLE_128__
- using ::truncl;
-+#endif
-
- #endif
-
-diff -Nur gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath.orig gcc-4.8.3/libstdc++-v3/include/tr1/cmath.orig
---- gcc-4.8.3.orig/libstdc++-v3/include/tr1/cmath.orig 1970-01-01 01:00:00.000000000 +0100
-+++ gcc-4.8.3/libstdc++-v3/include/tr1/cmath.orig 2013-02-03 18:54:05.000000000 +0100
-@@ -0,0 +1,1440 @@
-+// TR1 cmath -*- C++ -*-
-+
-+// Copyright (C) 2006-2013 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library. This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+
-+// Under Section 7 of GPL version 3, you are granted additional
-+// permissions described in the GCC Runtime Library Exception, version
-+// 3.1, as published by the Free Software Foundation.
-+
-+// You should have received a copy of the GNU General Public License and
-+// a copy of the GCC Runtime Library Exception along with this program;
-+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-+// <http://www.gnu.org/licenses/>.
-+
-+/** @file tr1/cmath
-+ * This is a TR1 C++ Library header.
-+ */
-+
-+#ifndef _GLIBCXX_TR1_CMATH
-+#define _GLIBCXX_TR1_CMATH 1
-+
-+#pragma GCC system_header
-+
-+#include <cmath>
-+
-+#ifdef _GLIBCXX_USE_C99_MATH_TR1
-+
-+#undef acosh
-+#undef acoshf
-+#undef acoshl
-+#undef asinh
-+#undef asinhf
-+#undef asinhl
-+#undef atanh
-+#undef atanhf
-+#undef atanhl
-+#undef cbrt
-+#undef cbrtf
-+#undef cbrtl
-+#undef copysign
-+#undef copysignf
-+#undef copysignl
-+#undef erf
-+#undef erff
-+#undef erfl
-+#undef erfc
-+#undef erfcf
-+#undef erfcl
-+#undef exp2
-+#undef exp2f
-+#undef exp2l
-+#undef expm1
-+#undef expm1f
-+#undef expm1l
-+#undef fdim
-+#undef fdimf
-+#undef fdiml
-+#undef fma
-+#undef fmaf
-+#undef fmal
-+#undef fmax
-+#undef fmaxf
-+#undef fmaxl
-+#undef fmin
-+#undef fminf
-+#undef fminl
-+#undef hypot
-+#undef hypotf
-+#undef hypotl
-+#undef ilogb
-+#undef ilogbf
-+#undef ilogbl
-+#undef lgamma
-+#undef lgammaf
-+#undef lgammal
-+#undef llrint
-+#undef llrintf
-+#undef llrintl
-+#undef llround
-+#undef llroundf
-+#undef llroundl
-+#undef log1p
-+#undef log1pf
-+#undef log1pl
-+#undef log2
-+#undef log2f
-+#undef log2l
-+#undef logb
-+#undef logbf
-+#undef logbl
-+#undef lrint
-+#undef lrintf
-+#undef lrintl
-+#undef lround
-+#undef lroundf
-+#undef lroundl
-+#undef nan
-+#undef nanf
-+#undef nanl
-+#undef nearbyint
-+#undef nearbyintf
-+#undef nearbyintl
-+#undef nextafter
-+#undef nextafterf
-+#undef nextafterl
-+#undef nexttoward
-+#undef nexttowardf
-+#undef nexttowardl
-+#undef remainder
-+#undef remainderf
-+#undef remainderl
-+#undef remquo
-+#undef remquof
-+#undef remquol
-+#undef rint
-+#undef rintf
-+#undef rintl
-+#undef round
-+#undef roundf
-+#undef roundl
-+#undef scalbln
-+#undef scalblnf
-+#undef scalblnl
-+#undef scalbn
-+#undef scalbnf
-+#undef scalbnl
-+#undef tgamma
-+#undef tgammaf
-+#undef tgammal
-+#undef trunc
-+#undef truncf
-+#undef truncl
-+
-+#endif
-+
-+namespace std _GLIBCXX_VISIBILITY(default)
-+{
-+namespace tr1
-+{
-+_GLIBCXX_BEGIN_NAMESPACE_VERSION
-+
-+#if _GLIBCXX_USE_C99_MATH_TR1
-+
-+ // types
-+ using ::double_t;
-+ using ::float_t;
-+
-+ // functions
-+ using ::acosh;
-+ using ::acoshf;
-+ using ::acoshl;
-+
-+ using ::asinh;
-+ using ::asinhf;
-+ using ::asinhl;
-+
-+ using ::atanh;
-+ using ::atanhf;
-+ using ::atanhl;
-+
-+ using ::cbrt;
-+ using ::cbrtf;
-+ using ::cbrtl;
-+
-+ using ::copysign;
-+ using ::copysignf;
-+ using ::copysignl;
-+
-+ using ::erf;
-+ using ::erff;
-+ using ::erfl;
-+
-+ using ::erfc;
-+ using ::erfcf;
-+ using ::erfcl;
-+
-+ using ::exp2;
-+ using ::exp2f;
-+ using ::exp2l;
-+
-+ using ::expm1;
-+ using ::expm1f;
-+ using ::expm1l;
-+
-+ using ::fdim;
-+ using ::fdimf;
-+ using ::fdiml;
-+
-+ using ::fma;
-+ using ::fmaf;
-+ using ::fmal;
-+
-+ using ::fmax;
-+ using ::fmaxf;
-+ using ::fmaxl;
-+
-+ using ::fmin;
-+ using ::fminf;
-+ using ::fminl;
-+
-+ using ::hypot;
-+ using ::hypotf;
-+ using ::hypotl;
-+
-+ using ::ilogb;
-+ using ::ilogbf;
-+ using ::ilogbl;
-+
-+ using ::lgamma;
-+ using ::lgammaf;
-+ using ::lgammal;
-+
-+ using ::llrint;
-+ using ::llrintf;
-+ using ::llrintl;
-+
-+ using ::llround;
-+ using ::llroundf;
-+ using ::llroundl;
-+
-+ using ::log1p;
-+ using ::log1pf;
-+ using ::log1pl;
-+
-+ using ::log2;
-+ using ::log2f;
-+ using ::log2l;
-+
-+ using ::logb;
-+ using ::logbf;
-+ using ::logbl;
-+
-+ using ::lrint;
-+ using ::lrintf;
-+ using ::lrintl;
-+
-+ using ::lround;
-+ using ::lroundf;
-+ using ::lroundl;
-+
-+ using ::nan;
-+ using ::nanf;
-+ using ::nanl;
-+
-+ using ::nearbyint;
-+ using ::nearbyintf;
-+ using ::nearbyintl;
-+
-+ using ::nextafter;
-+ using ::nextafterf;
-+ using ::nextafterl;
-+
-+ using ::nexttoward;
-+ using ::nexttowardf;
-+ using ::nexttowardl;
-+
-+ using ::remainder;
-+ using ::remainderf;
-+ using ::remainderl;
-+
-+ using ::remquo;
-+ using ::remquof;
-+ using ::remquol;
-+
-+ using ::rint;
-+ using ::rintf;
-+ using ::rintl;
-+
-+ using ::round;
-+ using ::roundf;
-+ using ::roundl;
-+
-+ using ::scalbln;
-+ using ::scalblnf;
-+ using ::scalblnl;
-+
-+ using ::scalbn;
-+ using ::scalbnf;
-+ using ::scalbnl;
-+
-+ using ::tgamma;
-+ using ::tgammaf;
-+ using ::tgammal;
-+
-+ using ::trunc;
-+ using ::truncf;
-+ using ::truncl;
-+
-+#endif
-+
-+#if _GLIBCXX_USE_C99_MATH
-+#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
-+
-+ /// Function template definitions [8.16.3].
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ fpclassify(_Tp __f)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
-+ FP_SUBNORMAL, FP_ZERO, __type(__f));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isfinite(_Tp __f)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isfinite(__type(__f));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isinf(_Tp __f)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isinf(__type(__f));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isnan(_Tp __f)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isnan(__type(__f));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isnormal(_Tp __f)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isnormal(__type(__f));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ signbit(_Tp __f)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_signbit(__type(__f));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isgreater(_Tp __f1, _Tp __f2)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isgreater(__type(__f1), __type(__f2));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isgreaterequal(_Tp __f1, _Tp __f2)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isgreaterequal(__type(__f1), __type(__f2));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isless(_Tp __f1, _Tp __f2)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isless(__type(__f1), __type(__f2));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ islessequal(_Tp __f1, _Tp __f2)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_islessequal(__type(__f1), __type(__f2));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ islessgreater(_Tp __f1, _Tp __f2)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_islessgreater(__type(__f1), __type(__f2));
-+ }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-+ int>::__type
-+ isunordered(_Tp __f1, _Tp __f2)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __builtin_isunordered(__type(__f1), __type(__f2));
-+ }
-+
-+#endif
-+#endif
-+
-+#if _GLIBCXX_USE_C99_MATH_TR1
-+
-+ /// Additional overloads [8.16.4].
-+ using std::acos;
-+
-+ inline float
-+ acosh(float __x)
-+ { return __builtin_acoshf(__x); }
-+
-+ inline long double
-+ acosh(long double __x)
-+ { return __builtin_acoshl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ acosh(_Tp __x)
-+ { return __builtin_acosh(__x); }
-+
-+ using std::asin;
-+
-+ inline float
-+ asinh(float __x)
-+ { return __builtin_asinhf(__x); }
-+
-+ inline long double
-+ asinh(long double __x)
-+ { return __builtin_asinhl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ asinh(_Tp __x)
-+ { return __builtin_asinh(__x); }
-+
-+ using std::atan;
-+ using std::atan2;
-+
-+ inline float
-+ atanh(float __x)
-+ { return __builtin_atanhf(__x); }
-+
-+ inline long double
-+ atanh(long double __x)
-+ { return __builtin_atanhl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ atanh(_Tp __x)
-+ { return __builtin_atanh(__x); }
-+
-+ inline float
-+ cbrt(float __x)
-+ { return __builtin_cbrtf(__x); }
-+
-+ inline long double
-+ cbrt(long double __x)
-+ { return __builtin_cbrtl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ cbrt(_Tp __x)
-+ { return __builtin_cbrt(__x); }
-+
-+ using std::ceil;
-+
-+ inline float
-+ copysign(float __x, float __y)
-+ { return __builtin_copysignf(__x, __y); }
-+
-+ inline long double
-+ copysign(long double __x, long double __y)
-+ { return __builtin_copysignl(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ copysign(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return copysign(__type(__x), __type(__y));
-+ }
-+
-+ using std::cos;
-+ using std::cosh;
-+
-+ inline float
-+ erf(float __x)
-+ { return __builtin_erff(__x); }
-+
-+ inline long double
-+ erf(long double __x)
-+ { return __builtin_erfl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ erf(_Tp __x)
-+ { return __builtin_erf(__x); }
-+
-+ inline float
-+ erfc(float __x)
-+ { return __builtin_erfcf(__x); }
-+
-+ inline long double
-+ erfc(long double __x)
-+ { return __builtin_erfcl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ erfc(_Tp __x)
-+ { return __builtin_erfc(__x); }
-+
-+ using std::exp;
-+
-+ inline float
-+ exp2(float __x)
-+ { return __builtin_exp2f(__x); }
-+
-+ inline long double
-+ exp2(long double __x)
-+ { return __builtin_exp2l(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ exp2(_Tp __x)
-+ { return __builtin_exp2(__x); }
-+
-+ inline float
-+ expm1(float __x)
-+ { return __builtin_expm1f(__x); }
-+
-+ inline long double
-+ expm1(long double __x)
-+ { return __builtin_expm1l(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ expm1(_Tp __x)
-+ { return __builtin_expm1(__x); }
-+
-+ // Note: we deal with fabs in a special way, because an using std::fabs
-+ // would bring in also the overloads for complex types, which in C++0x
-+ // mode have a different return type.
-+ // With __CORRECT_ISO_CPP_MATH_H_PROTO, math.h imports std::fabs in the
-+ // global namespace after the declarations of the float / double / long
-+ // double overloads but before the std::complex overloads.
-+ using ::fabs;
-+
-+#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
-+ inline float
-+ fabs(float __x)
-+ { return __builtin_fabsf(__x); }
-+
-+ inline long double
-+ fabs(long double __x)
-+ { return __builtin_fabsl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ fabs(_Tp __x)
-+ { return __builtin_fabs(__x); }
-+#endif
-+
-+ inline float
-+ fdim(float __x, float __y)
-+ { return __builtin_fdimf(__x, __y); }
-+
-+ inline long double
-+ fdim(long double __x, long double __y)
-+ { return __builtin_fdiml(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ fdim(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return fdim(__type(__x), __type(__y));
-+ }
-+
-+ using std::floor;
-+
-+ inline float
-+ fma(float __x, float __y, float __z)
-+ { return __builtin_fmaf(__x, __y, __z); }
-+
-+ inline long double
-+ fma(long double __x, long double __y, long double __z)
-+ { return __builtin_fmal(__x, __y, __z); }
-+
-+ template<typename _Tp, typename _Up, typename _Vp>
-+ inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
-+ fma(_Tp __x, _Up __y, _Vp __z)
-+ {
-+ typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
-+ return fma(__type(__x), __type(__y), __type(__z));
-+ }
-+
-+ inline float
-+ fmax(float __x, float __y)
-+ { return __builtin_fmaxf(__x, __y); }
-+
-+ inline long double
-+ fmax(long double __x, long double __y)
-+ { return __builtin_fmaxl(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ fmax(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return fmax(__type(__x), __type(__y));
-+ }
-+
-+ inline float
-+ fmin(float __x, float __y)
-+ { return __builtin_fminf(__x, __y); }
-+
-+ inline long double
-+ fmin(long double __x, long double __y)
-+ { return __builtin_fminl(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ fmin(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return fmin(__type(__x), __type(__y));
-+ }
-+
-+ using std::fmod;
-+ using std::frexp;
-+
-+ inline float
-+ hypot(float __x, float __y)
-+ { return __builtin_hypotf(__x, __y); }
-+
-+ inline long double
-+ hypot(long double __x, long double __y)
-+ { return __builtin_hypotl(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ hypot(_Tp __y, _Up __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return hypot(__type(__y), __type(__x));
-+ }
-+
-+ inline int
-+ ilogb(float __x)
-+ { return __builtin_ilogbf(__x); }
-+
-+ inline int
-+ ilogb(long double __x)
-+ { return __builtin_ilogbl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ int>::__type
-+ ilogb(_Tp __x)
-+ { return __builtin_ilogb(__x); }
-+
-+ using std::ldexp;
-+
-+ inline float
-+ lgamma(float __x)
-+ { return __builtin_lgammaf(__x); }
-+
-+ inline long double
-+ lgamma(long double __x)
-+ { return __builtin_lgammal(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ lgamma(_Tp __x)
-+ { return __builtin_lgamma(__x); }
-+
-+ inline long long
-+ llrint(float __x)
-+ { return __builtin_llrintf(__x); }
-+
-+ inline long long
-+ llrint(long double __x)
-+ { return __builtin_llrintl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ long long>::__type
-+ llrint(_Tp __x)
-+ { return __builtin_llrint(__x); }
-+
-+ inline long long
-+ llround(float __x)
-+ { return __builtin_llroundf(__x); }
-+
-+ inline long long
-+ llround(long double __x)
-+ { return __builtin_llroundl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ long long>::__type
-+ llround(_Tp __x)
-+ { return __builtin_llround(__x); }
-+
-+ using std::log;
-+ using std::log10;
-+
-+ inline float
-+ log1p(float __x)
-+ { return __builtin_log1pf(__x); }
-+
-+ inline long double
-+ log1p(long double __x)
-+ { return __builtin_log1pl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ log1p(_Tp __x)
-+ { return __builtin_log1p(__x); }
-+
-+ // DR 568.
-+ inline float
-+ log2(float __x)
-+ { return __builtin_log2f(__x); }
-+
-+ inline long double
-+ log2(long double __x)
-+ { return __builtin_log2l(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ log2(_Tp __x)
-+ { return __builtin_log2(__x); }
-+
-+ inline float
-+ logb(float __x)
-+ { return __builtin_logbf(__x); }
-+
-+ inline long double
-+ logb(long double __x)
-+ { return __builtin_logbl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ logb(_Tp __x)
-+ {
-+ return __builtin_logb(__x);
-+ }
-+
-+ inline long
-+ lrint(float __x)
-+ { return __builtin_lrintf(__x); }
-+
-+ inline long
-+ lrint(long double __x)
-+ { return __builtin_lrintl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ long>::__type
-+ lrint(_Tp __x)
-+ { return __builtin_lrint(__x); }
-+
-+ inline long
-+ lround(float __x)
-+ { return __builtin_lroundf(__x); }
-+
-+ inline long
-+ lround(long double __x)
-+ { return __builtin_lroundl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ long>::__type
-+ lround(_Tp __x)
-+ { return __builtin_lround(__x); }
-+
-+ inline float
-+ nearbyint(float __x)
-+ { return __builtin_nearbyintf(__x); }
-+
-+ inline long double
-+ nearbyint(long double __x)
-+ { return __builtin_nearbyintl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ nearbyint(_Tp __x)
-+ { return __builtin_nearbyint(__x); }
-+
-+ inline float
-+ nextafter(float __x, float __y)
-+ { return __builtin_nextafterf(__x, __y); }
-+
-+ inline long double
-+ nextafter(long double __x, long double __y)
-+ { return __builtin_nextafterl(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ nextafter(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return nextafter(__type(__x), __type(__y));
-+ }
-+
-+ inline float
-+ nexttoward(float __x, long double __y)
-+ { return __builtin_nexttowardf(__x, __y); }
-+
-+ inline long double
-+ nexttoward(long double __x, long double __y)
-+ { return __builtin_nexttowardl(__x, __y); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ nexttoward(_Tp __x, long double __y)
-+ { return __builtin_nexttoward(__x, __y); }
-+
-+ // DR 550. What should the return type of pow(float,int) be?
-+ // NB: C++0x and TR1 != C++03.
-+ // using std::pow;
-+
-+ inline float
-+ remainder(float __x, float __y)
-+ { return __builtin_remainderf(__x, __y); }
-+
-+ inline long double
-+ remainder(long double __x, long double __y)
-+ { return __builtin_remainderl(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ remainder(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return remainder(__type(__x), __type(__y));
-+ }
-+
-+ inline float
-+ remquo(float __x, float __y, int* __pquo)
-+ { return __builtin_remquof(__x, __y, __pquo); }
-+
-+ inline long double
-+ remquo(long double __x, long double __y, int* __pquo)
-+ { return __builtin_remquol(__x, __y, __pquo); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ remquo(_Tp __x, _Up __y, int* __pquo)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return remquo(__type(__x), __type(__y), __pquo);
-+ }
-+
-+ inline float
-+ rint(float __x)
-+ { return __builtin_rintf(__x); }
-+
-+ inline long double
-+ rint(long double __x)
-+ { return __builtin_rintl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ rint(_Tp __x)
-+ { return __builtin_rint(__x); }
-+
-+ inline float
-+ round(float __x)
-+ { return __builtin_roundf(__x); }
-+
-+ inline long double
-+ round(long double __x)
-+ { return __builtin_roundl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ round(_Tp __x)
-+ { return __builtin_round(__x); }
-+
-+ inline float
-+ scalbln(float __x, long __ex)
-+ { return __builtin_scalblnf(__x, __ex); }
-+
-+ inline long double
-+ scalbln(long double __x, long __ex)
-+ { return __builtin_scalblnl(__x, __ex); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ scalbln(_Tp __x, long __ex)
-+ { return __builtin_scalbln(__x, __ex); }
-+
-+ inline float
-+ scalbn(float __x, int __ex)
-+ { return __builtin_scalbnf(__x, __ex); }
-+
-+ inline long double
-+ scalbn(long double __x, int __ex)
-+ { return __builtin_scalbnl(__x, __ex); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ scalbn(_Tp __x, int __ex)
-+ { return __builtin_scalbn(__x, __ex); }
-+
-+ using std::sin;
-+ using std::sinh;
-+ using std::sqrt;
-+ using std::tan;
-+ using std::tanh;
-+
-+ inline float
-+ tgamma(float __x)
-+ { return __builtin_tgammaf(__x); }
-+
-+ inline long double
-+ tgamma(long double __x)
-+ { return __builtin_tgammal(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ tgamma(_Tp __x)
-+ { return __builtin_tgamma(__x); }
-+
-+ inline float
-+ trunc(float __x)
-+ { return __builtin_truncf(__x); }
-+
-+ inline long double
-+ trunc(long double __x)
-+ { return __builtin_truncl(__x); }
-+
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-+ double>::__type
-+ trunc(_Tp __x)
-+ { return __builtin_trunc(__x); }
-+
-+#endif
-+_GLIBCXX_END_NAMESPACE_VERSION
-+}
-+}
-+
-+namespace std _GLIBCXX_VISIBILITY(default)
-+{
-+namespace tr1
-+{
-+_GLIBCXX_BEGIN_NAMESPACE_VERSION
-+
-+ // DR 550. What should the return type of pow(float,int) be?
-+ // NB: C++0x and TR1 != C++03.
-+ inline double
-+ pow(double __x, double __y)
-+ { return std::pow(__x, __y); }
-+
-+ inline float
-+ pow(float __x, float __y)
-+ { return std::pow(__x, __y); }
-+
-+ inline long double
-+ pow(long double __x, long double __y)
-+ { return std::pow(__x, __y); }
-+
-+ template<typename _Tp, typename _Up>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-+ pow(_Tp __x, _Up __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-+ return std::pow(__type(__x), __type(__y));
-+ }
-+
-+_GLIBCXX_END_NAMESPACE_VERSION
-+}
-+}
-+
-+#include <bits/stl_algobase.h>
-+#include <limits>
-+#include <tr1/type_traits>
-+
-+#include <tr1/gamma.tcc>
-+#include <tr1/bessel_function.tcc>
-+#include <tr1/beta_function.tcc>
-+#include <tr1/ell_integral.tcc>
-+#include <tr1/exp_integral.tcc>
-+#include <tr1/hypergeometric.tcc>
-+#include <tr1/legendre_function.tcc>
-+#include <tr1/modified_bessel_func.tcc>
-+#include <tr1/poly_hermite.tcc>
-+#include <tr1/poly_laguerre.tcc>
-+#include <tr1/riemann_zeta.tcc>
-+
-+namespace std _GLIBCXX_VISIBILITY(default)
-+{
-+namespace tr1
-+{
-+_GLIBCXX_BEGIN_NAMESPACE_VERSION
-+
-+ /**
-+ * @defgroup tr1_math_spec_func Mathematical Special Functions
-+ * @ingroup numerics
-+ *
-+ * A collection of advanced mathematical special functions.
-+ * @{
-+ */
-+
-+ inline float
-+ assoc_laguerref(unsigned int __n, unsigned int __m, float __x)
-+ { return __detail::__assoc_laguerre<float>(__n, __m, __x); }
-+
-+ inline long double
-+ assoc_laguerrel(unsigned int __n, unsigned int __m, long double __x)
-+ {
-+ return __detail::__assoc_laguerre<long double>(__n, __m, __x);
-+ }
-+
-+ /// 5.2.1.1 Associated Laguerre polynomials.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__assoc_laguerre<__type>(__n, __m, __x);
-+ }
-+
-+ inline float
-+ assoc_legendref(unsigned int __l, unsigned int __m, float __x)
-+ { return __detail::__assoc_legendre_p<float>(__l, __m, __x); }
-+
-+ inline long double
-+ assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
-+ { return __detail::__assoc_legendre_p<long double>(__l, __m, __x); }
-+
-+ /// 5.2.1.2 Associated Legendre functions.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ assoc_legendre(unsigned int __l, unsigned int __m, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__assoc_legendre_p<__type>(__l, __m, __x);
-+ }
-+
-+ inline float
-+ betaf(float __x, float __y)
-+ { return __detail::__beta<float>(__x, __y); }
-+
-+ inline long double
-+ betal(long double __x, long double __y)
-+ { return __detail::__beta<long double>(__x, __y); }
-+
-+ /// 5.2.1.3 Beta functions.
-+ template<typename _Tpx, typename _Tpy>
-+ inline typename __gnu_cxx::__promote_2<_Tpx, _Tpy>::__type
-+ beta(_Tpx __x, _Tpy __y)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tpx, _Tpy>::__type __type;
-+ return __detail::__beta<__type>(__x, __y);
-+ }
-+
-+ inline float
-+ comp_ellint_1f(float __k)
-+ { return __detail::__comp_ellint_1<float>(__k); }
-+
-+ inline long double
-+ comp_ellint_1l(long double __k)
-+ { return __detail::__comp_ellint_1<long double>(__k); }
-+
-+ /// 5.2.1.4 Complete elliptic integrals of the first kind.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ comp_ellint_1(_Tp __k)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__comp_ellint_1<__type>(__k);
-+ }
-+
-+ inline float
-+ comp_ellint_2f(float __k)
-+ { return __detail::__comp_ellint_2<float>(__k); }
-+
-+ inline long double
-+ comp_ellint_2l(long double __k)
-+ { return __detail::__comp_ellint_2<long double>(__k); }
-+
-+ /// 5.2.1.5 Complete elliptic integrals of the second kind.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ comp_ellint_2(_Tp __k)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__comp_ellint_2<__type>(__k);
-+ }
-+
-+ inline float
-+ comp_ellint_3f(float __k, float __nu)
-+ { return __detail::__comp_ellint_3<float>(__k, __nu); }
-+
-+ inline long double
-+ comp_ellint_3l(long double __k, long double __nu)
-+ { return __detail::__comp_ellint_3<long double>(__k, __nu); }
-+
-+ /// 5.2.1.6 Complete elliptic integrals of the third kind.
-+ template<typename _Tp, typename _Tpn>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type
-+ comp_ellint_3(_Tp __k, _Tpn __nu)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Tpn>::__type __type;
-+ return __detail::__comp_ellint_3<__type>(__k, __nu);
-+ }
-+
-+ inline float
-+ conf_hypergf(float __a, float __c, float __x)
-+ { return __detail::__conf_hyperg<float>(__a, __c, __x); }
-+
-+ inline long double
-+ conf_hypergl(long double __a, long double __c, long double __x)
-+ { return __detail::__conf_hyperg<long double>(__a, __c, __x); }
-+
-+ /// 5.2.1.7 Confluent hypergeometric functions.
-+ template<typename _Tpa, typename _Tpc, typename _Tp>
-+ inline typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type
-+ conf_hyperg(_Tpa __a, _Tpc __c, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_3<_Tpa, _Tpc, _Tp>::__type __type;
-+ return __detail::__conf_hyperg<__type>(__a, __c, __x);
-+ }
-+
-+ inline float
-+ cyl_bessel_if(float __nu, float __x)
-+ { return __detail::__cyl_bessel_i<float>(__nu, __x); }
-+
-+ inline long double
-+ cyl_bessel_il(long double __nu, long double __x)
-+ { return __detail::__cyl_bessel_i<long double>(__nu, __x); }
-+
-+ /// 5.2.1.8 Regular modified cylindrical Bessel functions.
-+ template<typename _Tpnu, typename _Tp>
-+ inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
-+ cyl_bessel_i(_Tpnu __nu, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
-+ return __detail::__cyl_bessel_i<__type>(__nu, __x);
-+ }
-+
-+ inline float
-+ cyl_bessel_jf(float __nu, float __x)
-+ { return __detail::__cyl_bessel_j<float>(__nu, __x); }
-+
-+ inline long double
-+ cyl_bessel_jl(long double __nu, long double __x)
-+ { return __detail::__cyl_bessel_j<long double>(__nu, __x); }
-+
-+ /// 5.2.1.9 Cylindrical Bessel functions (of the first kind).
-+ template<typename _Tpnu, typename _Tp>
-+ inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
-+ cyl_bessel_j(_Tpnu __nu, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
-+ return __detail::__cyl_bessel_j<__type>(__nu, __x);
-+ }
-+
-+ inline float
-+ cyl_bessel_kf(float __nu, float __x)
-+ { return __detail::__cyl_bessel_k<float>(__nu, __x); }
-+
-+ inline long double
-+ cyl_bessel_kl(long double __nu, long double __x)
-+ { return __detail::__cyl_bessel_k<long double>(__nu, __x); }
-+
-+ /// 5.2.1.10 Irregular modified cylindrical Bessel functions.
-+ template<typename _Tpnu, typename _Tp>
-+ inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
-+ cyl_bessel_k(_Tpnu __nu, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
-+ return __detail::__cyl_bessel_k<__type>(__nu, __x);
-+ }
-+
-+ inline float
-+ cyl_neumannf(float __nu, float __x)
-+ { return __detail::__cyl_neumann_n<float>(__nu, __x); }
-+
-+ inline long double
-+ cyl_neumannl(long double __nu, long double __x)
-+ { return __detail::__cyl_neumann_n<long double>(__nu, __x); }
-+
-+ /// 5.2.1.11 Cylindrical Neumann functions.
-+ template<typename _Tpnu, typename _Tp>
-+ inline typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type
-+ cyl_neumann(_Tpnu __nu, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tpnu, _Tp>::__type __type;
-+ return __detail::__cyl_neumann_n<__type>(__nu, __x);
-+ }
-+
-+ inline float
-+ ellint_1f(float __k, float __phi)
-+ { return __detail::__ellint_1<float>(__k, __phi); }
-+
-+ inline long double
-+ ellint_1l(long double __k, long double __phi)
-+ { return __detail::__ellint_1<long double>(__k, __phi); }
-+
-+ /// 5.2.1.12 Incomplete elliptic integrals of the first kind.
-+ template<typename _Tp, typename _Tpp>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
-+ ellint_1(_Tp __k, _Tpp __phi)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type;
-+ return __detail::__ellint_1<__type>(__k, __phi);
-+ }
-+
-+ inline float
-+ ellint_2f(float __k, float __phi)
-+ { return __detail::__ellint_2<float>(__k, __phi); }
-+
-+ inline long double
-+ ellint_2l(long double __k, long double __phi)
-+ { return __detail::__ellint_2<long double>(__k, __phi); }
-+
-+ /// 5.2.1.13 Incomplete elliptic integrals of the second kind.
-+ template<typename _Tp, typename _Tpp>
-+ inline typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type
-+ ellint_2(_Tp __k, _Tpp __phi)
-+ {
-+ typedef typename __gnu_cxx::__promote_2<_Tp, _Tpp>::__type __type;
-+ return __detail::__ellint_2<__type>(__k, __phi);
-+ }
-+
-+ inline float
-+ ellint_3f(float __k, float __nu, float __phi)
-+ { return __detail::__ellint_3<float>(__k, __nu, __phi); }
-+
-+ inline long double
-+ ellint_3l(long double __k, long double __nu, long double __phi)
-+ { return __detail::__ellint_3<long double>(__k, __nu, __phi); }
-+
-+ /// 5.2.1.14 Incomplete elliptic integrals of the third kind.
-+ template<typename _Tp, typename _Tpn, typename _Tpp>
-+ inline typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type
-+ ellint_3(_Tp __k, _Tpn __nu, _Tpp __phi)
-+ {
-+ typedef typename __gnu_cxx::__promote_3<_Tp, _Tpn, _Tpp>::__type __type;
-+ return __detail::__ellint_3<__type>(__k, __nu, __phi);
-+ }
-+
-+ inline float
-+ expintf(float __x)
-+ { return __detail::__expint<float>(__x); }
-+
-+ inline long double
-+ expintl(long double __x)
-+ { return __detail::__expint<long double>(__x); }
-+
-+ /// 5.2.1.15 Exponential integrals.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ expint(_Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__expint<__type>(__x);
-+ }
-+
-+ inline float
-+ hermitef(unsigned int __n, float __x)
-+ { return __detail::__poly_hermite<float>(__n, __x); }
-+
-+ inline long double
-+ hermitel(unsigned int __n, long double __x)
-+ { return __detail::__poly_hermite<long double>(__n, __x); }
-+
-+ /// 5.2.1.16 Hermite polynomials.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ hermite(unsigned int __n, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__poly_hermite<__type>(__n, __x);
-+ }
-+
-+ inline float
-+ hypergf(float __a, float __b, float __c, float __x)
-+ { return __detail::__hyperg<float>(__a, __b, __c, __x); }
-+
-+ inline long double
-+ hypergl(long double __a, long double __b, long double __c, long double __x)
-+ { return __detail::__hyperg<long double>(__a, __b, __c, __x); }
-+
-+ /// 5.2.1.17 Hypergeometric functions.
-+ template<typename _Tpa, typename _Tpb, typename _Tpc, typename _Tp>
-+ inline typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type
-+ hyperg(_Tpa __a, _Tpb __b, _Tpc __c, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote_4<_Tpa, _Tpb, _Tpc, _Tp>::__type __type;
-+ return __detail::__hyperg<__type>(__a, __b, __c, __x);
-+ }
-+
-+ inline float
-+ laguerref(unsigned int __n, float __x)
-+ { return __detail::__laguerre<float>(__n, __x); }
-+
-+ inline long double
-+ laguerrel(unsigned int __n, long double __x)
-+ { return __detail::__laguerre<long double>(__n, __x); }
-+
-+ /// 5.2.1.18 Laguerre polynomials.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ laguerre(unsigned int __n, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__laguerre<__type>(__n, __x);
-+ }
-+
-+ inline float
-+ legendref(unsigned int __n, float __x)
-+ { return __detail::__poly_legendre_p<float>(__n, __x); }
-+
-+ inline long double
-+ legendrel(unsigned int __n, long double __x)
-+ { return __detail::__poly_legendre_p<long double>(__n, __x); }
-+
-+ /// 5.2.1.19 Legendre polynomials.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ legendre(unsigned int __n, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__poly_legendre_p<__type>(__n, __x);
-+ }
-+
-+ inline float
-+ riemann_zetaf(float __x)
-+ { return __detail::__riemann_zeta<float>(__x); }
-+
-+ inline long double
-+ riemann_zetal(long double __x)
-+ { return __detail::__riemann_zeta<long double>(__x); }
-+
-+ /// 5.2.1.20 Riemann zeta function.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ riemann_zeta(_Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__riemann_zeta<__type>(__x);
-+ }
-+
-+ inline float
-+ sph_besself(unsigned int __n, float __x)
-+ { return __detail::__sph_bessel<float>(__n, __x); }
-+
-+ inline long double
-+ sph_bessell(unsigned int __n, long double __x)
-+ { return __detail::__sph_bessel<long double>(__n, __x); }
-+
-+ /// 5.2.1.21 Spherical Bessel functions.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ sph_bessel(unsigned int __n, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__sph_bessel<__type>(__n, __x);
-+ }
-+
-+ inline float
-+ sph_legendref(unsigned int __l, unsigned int __m, float __theta)
-+ { return __detail::__sph_legendre<float>(__l, __m, __theta); }
-+
-+ inline long double
-+ sph_legendrel(unsigned int __l, unsigned int __m, long double __theta)
-+ { return __detail::__sph_legendre<long double>(__l, __m, __theta); }
-+
-+ /// 5.2.1.22 Spherical associated Legendre functions.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__sph_legendre<__type>(__l, __m, __theta);
-+ }
-+
-+ inline float
-+ sph_neumannf(unsigned int __n, float __x)
-+ { return __detail::__sph_neumann<float>(__n, __x); }
-+
-+ inline long double
-+ sph_neumannl(unsigned int __n, long double __x)
-+ { return __detail::__sph_neumann<long double>(__n, __x); }
-+
-+ /// 5.2.1.23 Spherical Neumann functions.
-+ template<typename _Tp>
-+ inline typename __gnu_cxx::__promote<_Tp>::__type
-+ sph_neumann(unsigned int __n, _Tp __x)
-+ {
-+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-+ return __detail::__sph_neumann<__type>(__n, __x);
-+ }
-+
-+ /* @} */ // tr1_math_spec_func
-+_GLIBCXX_END_NAMESPACE_VERSION
-+}
-+}
-+
-+#endif // _GLIBCXX_TR1_CMATH
diff --git a/toolchain/gcc/patches/6.1.0/add-crtreloc.frv b/toolchain/gcc/patches/6.2.0/add-crtreloc.frv
index 1fa7024b6..1fa7024b6 100644
--- a/toolchain/gcc/patches/6.1.0/add-crtreloc.frv
+++ b/toolchain/gcc/patches/6.2.0/add-crtreloc.frv
diff --git a/toolchain/gcc/patches/6.1.0/bfin-workaround.patch b/toolchain/gcc/patches/6.2.0/bfin-workaround.patch
index 7b57a285b..7b57a285b 100644
--- a/toolchain/gcc/patches/6.1.0/bfin-workaround.patch
+++ b/toolchain/gcc/patches/6.2.0/bfin-workaround.patch
diff --git a/toolchain/gcc/patches/6.1.0/fix-dwarf-fdpic.patch b/toolchain/gcc/patches/6.2.0/fix-dwarf-fdpic.patch
index 315b40668..315b40668 100644
--- a/toolchain/gcc/patches/6.1.0/fix-dwarf-fdpic.patch
+++ b/toolchain/gcc/patches/6.2.0/fix-dwarf-fdpic.patch
diff --git a/toolchain/gcc/patches/6.1.0/fix-m86k-libgcc.patch b/toolchain/gcc/patches/6.2.0/fix-m86k-libgcc.patch
index e8481d549..e8481d549 100644
--- a/toolchain/gcc/patches/6.1.0/fix-m86k-libgcc.patch
+++ b/toolchain/gcc/patches/6.2.0/fix-m86k-libgcc.patch
diff --git a/toolchain/gcc/patches/6.1.0/frv-remove-write-macro.patch b/toolchain/gcc/patches/6.2.0/frv-remove-write-macro.patch
index db20d37d7..db20d37d7 100644
--- a/toolchain/gcc/patches/6.1.0/frv-remove-write-macro.patch
+++ b/toolchain/gcc/patches/6.2.0/frv-remove-write-macro.patch
diff --git a/toolchain/gcc/patches/6.1.0/libgcc_linker-script.patch b/toolchain/gcc/patches/6.2.0/libgcc_linker-script.patch
index 783d15d0a..783d15d0a 100644
--- a/toolchain/gcc/patches/6.1.0/libgcc_linker-script.patch
+++ b/toolchain/gcc/patches/6.2.0/libgcc_linker-script.patch
diff --git a/toolchain/gcc/patches/6.1.0/uclinux-threads.patch b/toolchain/gcc/patches/6.2.0/uclinux-threads.patch
index faf94248a..faf94248a 100644
--- a/toolchain/gcc/patches/6.1.0/uclinux-threads.patch
+++ b/toolchain/gcc/patches/6.2.0/uclinux-threads.patch
diff --git a/toolchain/gcc/patches/6.1.0/xtensa-musl.patch b/toolchain/gcc/patches/6.2.0/xtensa-musl.patch
index fa00abbfa..fa00abbfa 100644
--- a/toolchain/gcc/patches/6.1.0/xtensa-musl.patch
+++ b/toolchain/gcc/patches/6.2.0/xtensa-musl.patch
diff --git a/toolchain/gcc/patches/arc-2015.12/100-libstdcxx-uclibc-c99.patch b/toolchain/gcc/patches/arc-2015.12/100-libstdcxx-uclibc-c99.patch
deleted file mode 100644
index 0d02ef0fb..000000000
--- a/toolchain/gcc/patches/arc-2015.12/100-libstdcxx-uclibc-c99.patch
+++ /dev/null
@@ -1,273 +0,0 @@
-Allow C99-depending features of libstdc++ with uClibc
-
-The libstdc++ code is fairly restrictive on how it checks for C99
-compatibility: it requires *complete* C99 support to enable certain
-features. For example, uClibc provides a good number of C99 features,
-but not C99 complex number support. For this reason, libstdc++
-completely disables many the standard C++ methods that can in fact
-work because uClibc provides the necessary functions.
-
-This patch is similar and highly inspired from
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58393, but implemented in
-a way that doesn't involve changing the configure.ac script, as
-autoreconfiguring gcc is complicated. It simply relies on the fact
-that uClibc defines the __UCLIBC__ definition.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-Index: b/libstdc++-v3/config/locale/generic/c_locale.h
-===================================================================
---- a/libstdc++-v3/config/locale/generic/c_locale.h
-+++ b/libstdc++-v3/config/locale/generic/c_locale.h
-@@ -70,7 +70,7 @@
- __builtin_va_list __args;
- __builtin_va_start(__args, __fmt);
-
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
- #else
- const int __ret = __builtin_vsprintf(__out, __fmt, __args);
-Index: b/libstdc++-v3/config/locale/gnu/c_locale.h
-===================================================================
---- a/libstdc++-v3/config/locale/gnu/c_locale.h
-+++ b/libstdc++-v3/config/locale/gnu/c_locale.h
-@@ -88,7 +88,7 @@
- __builtin_va_list __args;
- __builtin_va_start(__args, __fmt);
-
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
- #else
- const int __ret = __builtin_vsprintf(__out, __fmt, __args);
-Index: b/libstdc++-v3/include/bits/basic_string.h
-===================================================================
---- a/libstdc++-v3/include/bits/basic_string.h
-+++ b/libstdc++-v3/include/bits/basic_string.h
-@@ -2811,7 +2811,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
-+#if ((__cplusplus >= 201103L) && (defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)) \
- && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
-
- #include <ext/string_conversions.h>
-Index: b/libstdc++-v3/include/bits/locale_facets.tcc
-===================================================================
---- a/libstdc++-v3/include/bits/locale_facets.tcc
-+++ b/libstdc++-v3/include/bits/locale_facets.tcc
-@@ -987,7 +987,7 @@
- char __fbuf[16];
- __num_base::_S_format_float(__io, __fbuf, __mod);
-
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- // First try a buffer perhaps big enough (most probably sufficient
- // for non-ios_base::fixed outputs)
- int __cs_size = __max_digits * 3;
-Index: b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
-===================================================================
---- a/libstdc++-v3/include/bits/locale_facets_nonio.tcc
-+++ b/libstdc++-v3/include/bits/locale_facets_nonio.tcc
-@@ -572,7 +572,7 @@
- {
- const locale __loc = __io.getloc();
- const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- // First try a buffer perhaps big enough.
- int __cs_size = 64;
- char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
-Index: b/libstdc++-v3/include/c_compatibility/math.h
-===================================================================
---- a/libstdc++-v3/include/c_compatibility/math.h
-+++ b/libstdc++-v3/include/c_compatibility/math.h
-@@ -56,7 +56,7 @@
- using std::floor;
- using std::fmod;
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::fpclassify;
- using std::isfinite;
- using std::isinf;
-Index: b/libstdc++-v3/include/c_compatibility/wchar.h
-===================================================================
---- a/libstdc++-v3/include/c_compatibility/wchar.h
-+++ b/libstdc++-v3/include/c_compatibility/wchar.h
-@@ -103,7 +103,7 @@
- using std::wmemset;
- using std::wcsftime;
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::wcstold;
- using std::wcstoll;
- using std::wcstoull;
-Index: b/libstdc++-v3/include/c_global/cstdlib
-===================================================================
---- a/libstdc++-v3/include/c_global/cstdlib
-+++ b/libstdc++-v3/include/c_global/cstdlib
-@@ -182,7 +182,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef _Exit
- #undef llabs
-Index: b/libstdc++-v3/include/c_global/cwchar
-===================================================================
---- a/libstdc++-v3/include/c_global/cwchar
-+++ b/libstdc++-v3/include/c_global/cwchar
-@@ -232,7 +232,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef wcstold
- #undef wcstoll
-@@ -289,7 +289,7 @@
- using std::vwscanf;
- #endif
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::wcstold;
- using std::wcstoll;
- using std::wcstoull;
-Index: b/libstdc++-v3/include/c_std/cstdio
-===================================================================
---- a/libstdc++-v3/include/c_std/cstdio
-+++ b/libstdc++-v3/include/c_std/cstdio
-@@ -139,7 +139,7 @@
- using ::vsprintf;
- } // namespace std
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef snprintf
- #undef vfscanf
-Index: b/libstdc++-v3/include/c_std/cstdlib
-===================================================================
---- a/libstdc++-v3/include/c_std/cstdlib
-+++ b/libstdc++-v3/include/c_std/cstdlib
-@@ -180,7 +180,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef _Exit
- #undef llabs
-Index: b/libstdc++-v3/include/c_std/cwchar
-===================================================================
---- a/libstdc++-v3/include/c_std/cwchar
-+++ b/libstdc++-v3/include/c_std/cwchar
-@@ -228,7 +228,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef wcstold
- #undef wcstoll
-Index: b/libstdc++-v3/include/ext/vstring.h
-===================================================================
---- a/libstdc++-v3/include/ext/vstring.h
-+++ b/libstdc++-v3/include/ext/vstring.h
-@@ -2571,7 +2571,7 @@
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
-
--#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99))
-+#if ((__cplusplus >= 201103L) && (defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)))
-
- #include <ext/string_conversions.h>
-
-Index: b/libstdc++-v3/include/tr1/cstdio
-===================================================================
---- a/libstdc++-v3/include/tr1/cstdio
-+++ b/libstdc++-v3/include/tr1/cstdio
-@@ -33,7 +33,7 @@
-
- #include <cstdio>
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- namespace std _GLIBCXX_VISIBILITY(default)
- {
-Index: b/libstdc++-v3/include/tr1/cstdlib
-===================================================================
---- a/libstdc++-v3/include/tr1/cstdlib
-+++ b/libstdc++-v3/include/tr1/cstdlib
-@@ -35,7 +35,7 @@
-
- #if _GLIBCXX_HOSTED
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- namespace std _GLIBCXX_VISIBILITY(default)
- {
-Index: b/libstdc++-v3/include/tr1/cwchar
-===================================================================
---- a/libstdc++-v3/include/tr1/cwchar
-+++ b/libstdc++-v3/include/tr1/cwchar
-@@ -52,7 +52,7 @@
- using std::vwscanf;
- #endif
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- using std::wcstold;
- using std::wcstoll;
- using std::wcstoull;
-Index: b/libstdc++-v3/include/tr1/stdlib.h
-===================================================================
---- a/libstdc++-v3/include/tr1/stdlib.h
-+++ b/libstdc++-v3/include/tr1/stdlib.h
-@@ -33,7 +33,7 @@
-
- #if _GLIBCXX_HOSTED
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- using std::tr1::atoll;
- using std::tr1::strtoll;
-Index: b/libstdc++-v3/src/c++11/debug.cc
-===================================================================
---- a/libstdc++-v3/src/c++11/debug.cc
-+++ b/libstdc++-v3/src/c++11/debug.cc
-@@ -787,7 +787,7 @@
- int __n __attribute__ ((__unused__)),
- const char* __fmt, _Tp __s) const throw ()
- {
--#ifdef _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
- std::snprintf(__buf, __n, __fmt, __s);
- #else
- std::sprintf(__buf, __fmt, __s);
-Index: b/libstdc++-v3/include/c_global/cstdio
-===================================================================
---- a/libstdc++-v3/include/c_global/cstdio
-+++ b/libstdc++-v3/include/c_global/cstdio
-@@ -138,7 +138,7 @@
- using ::vsprintf;
- } // namespace
-
--#if _GLIBCXX_USE_C99
-+#if defined(_GLIBCXX_USE_C99) || defined(__UCLIBC__)
-
- #undef snprintf
- #undef vfscanf
diff --git a/toolchain/gcc/patches/arc-2015.12/851-PR-other-56780.patch b/toolchain/gcc/patches/arc-2015.12/851-PR-other-56780.patch
deleted file mode 100644
index feb433920..000000000
--- a/toolchain/gcc/patches/arc-2015.12/851-PR-other-56780.patch
+++ /dev/null
@@ -1,244 +0,0 @@
-From afe990251bd9b3a063f03da31a3b8d139d033bc3 Mon Sep 17 00:00:00 2001
-From: ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Sat, 1 Jun 2013 00:20:49 +0000
-Subject: [PATCH] PR other/56780
-
-* libiberty/configure.ac: Move test for --enable-install-libiberty
-outside of the 'with_target_subdir' test so that it actually gets
-run. Add output messages to show the test result.
-* libiberty/configure: Regenerate.
-* libiberty/Makefile.in (install_to_libdir): Place the
-installation of the libiberty library in the same guard as that
-used for the headers to prevent it being installed unless
-requested via --enable-install-libiberty.
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@199570 138bc75d-0d04-0410-961f-82ee72b054a4
-
-libiberty: fix --enable-install-libiberty flag [PR 56780]
-
-Commit 199570 fixed the --disable-install-libiberty behavior, but it also
-added a bug where the enable path never works because the initial clear
-of target_header_dir wasn't deleted. So we end up initializing properly
-at the top only to reset it at the end all the time.
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206367 138bc75d-0d04-0410-961f-82ee72b054a4
-
-[Romain
- squash the two upstream commits
- Remove the ChangeLog]
-Signed-off-by: Romain Naour <romain.naour@openwide.fr>
----
- libiberty/Makefile.in | 24 ++++++++++-----------
- libiberty/configure | 57 +++++++++++++++++++++++++++-----------------------
- libiberty/configure.ac | 47 ++++++++++++++++++++++-------------------
- 3 files changed, 68 insertions(+), 60 deletions(-)
-
-diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
-index f6a3ebd..75ff82d 100644
---- a/libiberty/Makefile.in
-+++ b/libiberty/Makefile.in
-@@ -355,19 +355,19 @@ install-strip: install
- # since it will be passed the multilib flags.
- MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
- install_to_libdir: all
-- ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR)
-- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n
-- ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
-- mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)
- if test -n "${target_header_dir}"; then \
-- case "${target_header_dir}" in \
-- /*) thd=${target_header_dir};; \
-- *) thd=${includedir}/${target_header_dir};; \
-- esac; \
-- ${mkinstalldirs} $(DESTDIR)$${thd}; \
-- for h in ${INSTALLED_HEADERS}; do \
-- ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \
-- done; \
-+ ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
-+ $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n; \
-+ ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ); \
-+ mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB); \
-+ case "${target_header_dir}" in \
-+ /*) thd=${target_header_dir};; \
-+ *) thd=${includedir}/${target_header_dir};; \
-+ esac; \
-+ ${mkinstalldirs} $(DESTDIR)$${thd}; \
-+ for h in ${INSTALLED_HEADERS}; do \
-+ ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \
-+ done; \
- fi
- @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-diff --git a/libiberty/configure b/libiberty/configure
-index 5367027..4feb95a 100755
---- a/libiberty/configure
-+++ b/libiberty/configure
-@@ -675,8 +675,8 @@ with_cross_host
- with_newlib
- enable_maintainer_mode
- enable_multilib
--enable_largefile
- enable_install_libiberty
-+enable_largefile
- '
- ac_precious_vars='build_alias
- host_alias
-@@ -1303,8 +1303,8 @@ Optional Features:
- enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
- --enable-multilib build many library versions (default)
-+ --enable-install-libiberty Install headers and library for end users
- --disable-largefile omit support for large files
-- --enable-install-libiberty Install headers for end users
-
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-@@ -2784,6 +2784,35 @@ if test $cross_compiling = no && test $multilib = yes \
- cross_compiling=maybe
- fi
-
-+# We may wish to install the target headers somewhere.
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install libiberty headers and static library" >&5
-+$as_echo_n "checking whether to install libiberty headers and static library... " >&6; }
-+
-+# Check whether --enable-install-libiberty was given.
-+if test "${enable_install_libiberty+set}" = set; then :
-+ enableval=$enable_install_libiberty; enable_install_libiberty=$enableval
-+else
-+ enable_install_libiberty=no
-+fi
-+
-+# Option parsed, now set things appropriately.
-+case x"$enable_install_libiberty" in
-+ xyes|x)
-+ target_header_dir=libiberty
-+ ;;
-+ xno)
-+ target_header_dir=
-+ ;;
-+ *)
-+ # This could be sanity-checked in various ways...
-+ target_header_dir="${enable_install_libiberty}"
-+ ;;
-+esac
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_install_libiberty" >&5
-+$as_echo "$enable_install_libiberty" >&6; }
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: target_header_dir = $target_header_dir" >&5
-+$as_echo "$as_me: target_header_dir = $target_header_dir" >&6;}
-+
-
- ac_ext=c
- ac_cpp='$CPP $CPPFLAGS'
-@@ -5476,7 +5505,6 @@ fi
-
- setobjs=
- CHECK=
--target_header_dir=
- if test -n "${with_target_subdir}"; then
-
- # We are being configured as a target library. AC_REPLACE_FUNCS
-@@ -5759,29 +5787,6 @@ _ACEOF
-
- esac
-
-- # We may wish to install the target headers somewhere.
-- # Check whether --enable-install-libiberty was given.
--if test "${enable_install_libiberty+set}" = set; then :
-- enableval=$enable_install_libiberty; enable_install_libiberty=$enableval
--else
-- enable_install_libiberty=no
--fi
--
-- # Option parsed, now set things appropriately.
-- case x"$enable_install_libiberty" in
-- xyes|x)
-- target_header_dir=libiberty
-- ;;
-- xno)
-- target_header_dir=
-- ;;
-- *)
-- # This could be sanity-checked in various ways...
-- target_header_dir="${enable_install_libiberty}"
-- ;;
-- esac
--
--
- else
-
- # Not a target library, so we set things up to run the test suite.
-diff --git a/libiberty/configure.ac b/libiberty/configure.ac
-index c763894..f17e6b6 100644
---- a/libiberty/configure.ac
-+++ b/libiberty/configure.ac
-@@ -128,6 +128,31 @@ if test $cross_compiling = no && test $multilib = yes \
- cross_compiling=maybe
- fi
-
-+# We may wish to install the target headers somewhere.
-+AC_MSG_CHECKING([whether to install libiberty headers and static library])
-+dnl install-libiberty is disabled by default
-+
-+AC_ARG_ENABLE(install-libiberty,
-+[ --enable-install-libiberty Install headers and library for end users],
-+enable_install_libiberty=$enableval,
-+enable_install_libiberty=no)dnl
-+
-+# Option parsed, now set things appropriately.
-+case x"$enable_install_libiberty" in
-+ xyes|x)
-+ target_header_dir=libiberty
-+ ;;
-+ xno)
-+ target_header_dir=
-+ ;;
-+ *)
-+ # This could be sanity-checked in various ways...
-+ target_header_dir="${enable_install_libiberty}"
-+ ;;
-+esac
-+AC_MSG_RESULT($enable_install_libiberty)
-+AC_MSG_NOTICE([target_header_dir = $target_header_dir])
-+
- GCC_NO_EXECUTABLES
- AC_PROG_CC
- AC_SYS_LARGEFILE
-@@ -380,7 +405,6 @@ fi
-
- setobjs=
- CHECK=
--target_header_dir=
- if test -n "${with_target_subdir}"; then
-
- # We are being configured as a target library. AC_REPLACE_FUNCS
-@@ -492,27 +516,6 @@ if test -n "${with_target_subdir}"; then
-
- esac
-
-- # We may wish to install the target headers somewhere.
-- AC_ARG_ENABLE(install-libiberty,
-- [ --enable-install-libiberty Install headers for end users],
-- enable_install_libiberty=$enableval,
-- enable_install_libiberty=no)dnl
--
-- # Option parsed, now set things appropriately.
-- case x"$enable_install_libiberty" in
-- xyes|x)
-- target_header_dir=libiberty
-- ;;
-- xno)
-- target_header_dir=
-- ;;
-- *)
-- # This could be sanity-checked in various ways...
-- target_header_dir="${enable_install_libiberty}"
-- ;;
-- esac
--
--
- else
-
- # Not a target library, so we set things up to run the test suite.
---
-1.9.3
-
diff --git a/toolchain/gcc/patches/arc-2015.12/900-UPDATE-Fix-handling-complex-PIC-moves.patch b/toolchain/gcc/patches/arc-2015.12/900-UPDATE-Fix-handling-complex-PIC-moves.patch
deleted file mode 100644
index 48228dcb6..000000000
--- a/toolchain/gcc/patches/arc-2015.12/900-UPDATE-Fix-handling-complex-PIC-moves.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From b55922d45fd16f5e8fc7c3885da42b2b9b37754d Mon Sep 17 00:00:00 2001
-From: Claudiu Zissulescu <claziss@synopsys.com>
-Date: Mon, 18 Jan 2016 16:43:18 +0100
-Subject: [PATCH] UPDATE: Fix handling complex PIC moves.
-
-fwprop is putting in the REG_EQUIV notes which are involving the
-constant pic unspecs. Then, loop may use those notes for
-optimizations rezulting in complex patterns that are not supported by
-the current implementation. The following piece of code tries to
-convert the complex instruction in simpler ones.
-
-The fix is done in development tree: [arc-4.8-dev b55922d]
-and will be a part of the next release of ARC GNU tools.
-Once that new release happens this patch must be removed.
-
-
-gcc/
-2016-01-18 Claudiu Zissulescu <claziss@synopsys.com>
-
- * config/arc/arc.c (arc_legitimize_pic_address): Handle MINUS
- operations when doing PIC moves. Make this function static.
- (arc_legitimate_pc_offset_p): Use
- arc_raw_symbolic_reference_mentioned_p.
- * config/arc/arc-protos.h (arc_legitimize_pic_address): Remove.
-
- gcc/config/arc/arc-protos.h | 1 -
- gcc/config/arc/arc.c | 33 +++++++++++++++++++--------------
- 2 files changed, 19 insertions(+), 15 deletions(-)
-
- * config/arc/arc.c (arc_legitimize_pic_address): Handle complex
-diff --git a/gcc/config/arc/arc-protos.h b/gcc/config/arc/arc-protos.h
-index 464e0ab..5986e06 100644
---- a/gcc/config/arc/arc-protos.h
-+++ b/gcc/config/arc/arc-protos.h
-@@ -53,7 +53,6 @@ extern unsigned int arc_compute_frame_size ();
- extern bool arc_ccfsm_branch_deleted_p (void);
- extern void arc_ccfsm_record_branch_deleted (void);
-
--extern rtx arc_legitimize_pic_address (rtx, rtx);
- void arc_asm_output_aligned_decl_local (FILE *, tree, const char *,
- unsigned HOST_WIDE_INT,
- unsigned HOST_WIDE_INT,
-diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
-index a89c8ee..f7cae9f 100644
---- a/gcc/config/arc/arc.c
-+++ b/gcc/config/arc/arc.c
-@@ -5243,19 +5243,7 @@ arc_legitimate_pc_offset_p (rtx addr)
- if (GET_CODE (addr) != CONST)
- return false;
- addr = XEXP (addr, 0);
-- if (GET_CODE (addr) == PLUS)
-- {
-- if (GET_CODE (XEXP (addr, 1)) != CONST_INT)
-- return false;
-- addr = XEXP (addr, 0);
-- }
-- return (GET_CODE (addr) == UNSPEC
-- && XVECLEN (addr, 0) == 1
-- && (XINT (addr, 1) == ARC_UNSPEC_GOT
-- || XINT (addr, 1) == ARC_UNSPEC_GOTOFFPC
-- || XINT (addr, 1) == UNSPEC_TLS_GD
-- || XINT (addr, 1) == UNSPEC_TLS_IE)
-- && GET_CODE (XVECEXP (addr, 0, 0)) == SYMBOL_REF);
-+ return flag_pic && !arc_raw_symbolic_reference_mentioned_p (addr, false);
- }
-
- /* Return true if ADDR is a valid pic address.
-@@ -5522,7 +5510,7 @@ arc_legitimize_tls_address (rtx addr, enum tls_model model)
- The return value is the legitimated address.
- If OLDX is non-zero, it is the target to assign the address to first. */
-
--rtx
-+static rtx
- arc_legitimize_pic_address (rtx orig, rtx oldx)
- {
- rtx addr = orig;
-@@ -5569,6 +5557,23 @@ arc_legitimize_pic_address (rtx orig, rtx oldx)
- /* Check that the unspec is one of the ones we generate? */
- return orig;
- }
-+ else if (GET_CODE (addr) == MINUS)
-+ {
-+ /* The same story with fwprop. */
-+ rtx op0 = XEXP (addr, 0);
-+ rtx op1 = XEXP (addr, 1);
-+ gcc_assert (oldx);
-+ gcc_assert (GET_CODE (op1) == UNSPEC);
-+
-+ emit_move_insn (oldx,
-+ gen_rtx_CONST (SImode,
-+ arc_legitimize_pic_address (op1,
-+ NULL_RTX)));
-+ emit_insn (gen_rtx_SET (VOIDmode, oldx,
-+ gen_rtx_MINUS (SImode, op0, oldx)));
-+ return oldx;
-+
-+ }
- else if (GET_CODE (addr) != PLUS)
- {
- /* fwprop is putting in the REG_EQUIV notes which are
---
-2.5.0
-
diff --git a/toolchain/gcc/patches/arc-2015.12/901-UPDATE1-Fix-handling-complex-PIC-moves.patch b/toolchain/gcc/patches/arc-2015.12/901-UPDATE1-Fix-handling-complex-PIC-moves.patch
deleted file mode 100644
index 28cb7c191..000000000
--- a/toolchain/gcc/patches/arc-2015.12/901-UPDATE1-Fix-handling-complex-PIC-moves.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From f00b0f17d6889d811468c2c77508fbea8bfc377d Mon Sep 17 00:00:00 2001
-From: Claudiu Zissulescu <claziss@synopsys.com>
-Date: Tue, 19 Jan 2016 14:40:16 +0100
-Subject: [PATCH] UPDATE1: Fix handling complex PIC moves.
-
-The arc_legitimate_pc_offset_p condition is too lax. Updated it.
-
-The fix is done in development tree: [arc-4.8-dev f00b0f1]
-and will be a part of the next release of ARC GNU tools.
-Once that new release happens this patch must be removed.
-
-gcc/
-2016-01-18 Claudiu Zissulescu <claziss@synopsys.com>
-
- * config/arc/arc.c (arc_needs_pcl_p ): New function
- (arc_legitimate_pc_offset_p): Use arc_needs_pcl_p.
----
- gcc/config/arc/arc.c | 42 ++++++++++++++++++++++++++++++++++++++++--
- 1 file changed, 40 insertions(+), 2 deletions(-)
-
-diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
-index f7cae9f..18d88a3 100644
---- a/gcc/config/arc/arc.c
-+++ b/gcc/config/arc/arc.c
-@@ -5234,6 +5234,45 @@ arc_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED,
- }
- }
-
-+/* Helper used by arc_legitimate_pc_offset_p. */
-+
-+static bool
-+arc_needs_pcl_p (rtx x)
-+{
-+ register const char *fmt;
-+ register int i, j;
-+
-+ if ((GET_CODE (x) == UNSPEC)
-+ && (XVECLEN (x, 0) == 1)
-+ && (GET_CODE (XVECEXP (x, 0, 0)) == SYMBOL_REF))
-+ switch (XINT (x, 1))
-+ {
-+ case ARC_UNSPEC_GOT:
-+ case ARC_UNSPEC_GOTOFFPC:
-+ case UNSPEC_TLS_GD:
-+ case UNSPEC_TLS_IE:
-+ return true;
-+ default:
-+ break;
-+ }
-+
-+ fmt = GET_RTX_FORMAT (GET_CODE (x));
-+ for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--)
-+ {
-+ if (fmt[i] == 'e')
-+ {
-+ if (arc_needs_pcl_p (XEXP (x, i)))
-+ return true;
-+ }
-+ else if (fmt[i] == 'E')
-+ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
-+ if (arc_needs_pcl_p (XVECEXP (x, i, j)))
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
- /* Return true if ADDR is an address that needs to be expressed as an
- explicit sum of pcl + offset. */
-
-@@ -5242,8 +5281,7 @@ arc_legitimate_pc_offset_p (rtx addr)
- {
- if (GET_CODE (addr) != CONST)
- return false;
-- addr = XEXP (addr, 0);
-- return flag_pic && !arc_raw_symbolic_reference_mentioned_p (addr, false);
-+ return arc_needs_pcl_p (addr);
- }
-
- /* Return true if ADDR is a valid pic address.
---
-2.5.0
-
diff --git a/toolchain/gcc/patches/arc-2015.12/950-Don-t-allow-mcompact-casesi-for-ARCv2.patch b/toolchain/gcc/patches/arc-2015.12/950-Don-t-allow-mcompact-casesi-for-ARCv2.patch
deleted file mode 100644
index dc03a028e..000000000
--- a/toolchain/gcc/patches/arc-2015.12/950-Don-t-allow-mcompact-casesi-for-ARCv2.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 09463827001a7b8094f4b9460514370a1876d908 Mon Sep 17 00:00:00 2001
-From: Claudiu Zissulescu <claziss@synopsys.com>
-Date: Wed, 20 Jan 2016 16:32:40 +0100
-Subject: [PATCH] Don't allow mcompact-casesi for ARCv2
-
-The compact casesi is not working for arcv2 processors family as it
-makes use of the add_s rx,rx,pcl instruction which is only valid for
-arc6xx and arc700 processors. Also not having this instruction makes
-no much sens to change the compact-casesi pattern to use normal add
-instructions as it nullifies the advantage of short instruction use.
-The default casesi pattern betters suits the arcv2 architecture.
-
-The fix is done in development tree: [arc-4.8-dev 0946382]
-and will be a part of the next release of ARC GNU tools.
-Once that new release happens this patch must be removed.
-
-gcc/
-2016-01-20 Claudiu Zissulescu <claziss@synopsys.com>
-
- * common/config/arc/arc-common.c (arc_option_optimization_table):
- Remove mcompact-casesi option.
- * config/arc/arc.c (arc_override_options): Use compact-casesi only
- for arcv1.
- * config/arc/arc.md (casesi_load): Use short instructions.
----
- gcc/common/config/arc/arc-common.c | 1 -
- gcc/config/arc/arc.c | 9 +++++----
- gcc/config/arc/arc.md | 10 ++++++++--
- 3 files changed, 13 insertions(+), 7 deletions(-)
-
- * config/arc/arc.c (arc_legitimize_pic_address): Handle MINUS
-diff --git a/gcc/common/config/arc/arc-common.c b/gcc/common/config/arc/arc-common.c
-index e2e36fa..310bc80 100644
---- a/gcc/common/config/arc/arc-common.c
-+++ b/gcc/common/config/arc/arc-common.c
-@@ -58,7 +58,6 @@ static const struct default_options arc_option_optimization_table[] =
- { OPT_LEVELS_ALL, OPT_mbbit_peephole, NULL, 1 },
- { OPT_LEVELS_SIZE, OPT_mq_class, NULL, 1 },
- { OPT_LEVELS_SIZE, OPT_mcase_vector_pcrel, NULL, 1 },
-- { OPT_LEVELS_SIZE, OPT_mcompact_casesi, NULL, 1 },
- { OPT_LEVELS_NONE, 0, NULL, 0 }
- };
-
-diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
-index 18d88a3..f828398 100644
---- a/gcc/config/arc/arc.c
-+++ b/gcc/config/arc/arc.c
-@@ -1151,6 +1151,11 @@ arc_override_options (void)
- if (arc_size_opt_level == 3)
- optimize_size = 1;
-
-+ if (TARGET_V2)
-+ TARGET_COMPACT_CASESI = 0;
-+ else if (optimize_size == 1)
-+ TARGET_COMPACT_CASESI = 1;
-+
- if (flag_pic)
- target_flags |= MASK_NO_SDATA_SET;
-
-@@ -1163,10 +1168,6 @@ arc_override_options (void)
- if (!TARGET_Q_CLASS)
- TARGET_COMPACT_CASESI = 0;
-
-- /* For the time being don't support COMPACT_CASESI for ARCv2. */
-- if (TARGET_V2)
-- TARGET_COMPACT_CASESI = 0;
--
- if (TARGET_COMPACT_CASESI)
- TARGET_CASE_VECTOR_PC_RELATIVE = 1;
-
-diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
-index bc4ac38..ba7c8bc 100644
---- a/gcc/config/arc/arc.md
-+++ b/gcc/config/arc/arc.md
-@@ -3837,14 +3837,20 @@
- switch (GET_MODE (diff_vec))
- {
- case SImode:
-- return \"ld.as %0,[%1,%2]%&\";
-+ if ((which_alternative == 0) && TARGET_CODE_DENSITY)
-+ return \"ld_s.as %0,[%1,%2]%&\";
-+ else
-+ return \"ld.as %0,[%1,%2]%&\";
- case HImode:
- if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
- return \"ldw.as %0,[%1,%2]\";
- return \"ldw.x.as %0,[%1,%2]\";
- case QImode:
- if (ADDR_DIFF_VEC_FLAGS (diff_vec).offset_unsigned)
-- return \"ldb%? %0,[%1,%2]%&\";
-+ if (which_alternative == 0)
-+ return \"ldb_s %0,[%1,%2]%&\";
-+ else
-+ return \"ldb %0,[%1,%2]%&\";
- return \"ldb.x %0,[%1,%2]\";
- default:
- gcc_unreachable ();
---
-2.5.0
-