From ad1377105ce1148d5de599d82c6f622bec44e832 Mon Sep 17 00:00:00 2001
From: Waldemar Brodkorb <wbx@openadk.org>
Date: Wed, 27 Sep 2017 05:50:28 +0200
Subject: update kinetis k70 sample, remove gcc 4.x

---
 toolchain/gcc/patches/4.9.4/disable-atomics.patch  |    12 -
 toolchain/gcc/patches/4.9.4/disable-dwarf.bfin     |    12 -
 toolchain/gcc/patches/4.9.4/disable-dwarf.frv      |    12 -
 .../4.9.4/disable-split-stack-nothread.patch       |    10 -
 toolchain/gcc/patches/4.9.4/disable-tm.patch       |    14 -
 toolchain/gcc/patches/4.9.4/fix-m86k-libgcc.patch  |    11 -
 toolchain/gcc/patches/4.9.4/gcc.bfin               |    12 -
 toolchain/gcc/patches/4.9.4/gcc.musl               |   669 -
 toolchain/gcc/patches/4.9.4/gcc.nds32              | 70904 -------------------
 .../gcc/patches/4.9.4/libstdcxx-uclibc-c99.patch   |   237 -
 toolchain/gcc/patches/4.9.4/microbaze.uclibc-ng    |    20 -
 .../4.9.4/microblaze-enable-dwarf-eh-support.patch |   166 -
 toolchain/gcc/patches/4.9.4/remove-write-macro.frv |    11 -
 toolchain/gcc/patches/4.9.4/stdlib-h.ia64          |    30 -
 .../patches/4.9.4/uclibc-cmath-long-double.patch   |   434 -
 15 files changed, 72554 deletions(-)
 delete mode 100644 toolchain/gcc/patches/4.9.4/disable-atomics.patch
 delete mode 100644 toolchain/gcc/patches/4.9.4/disable-dwarf.bfin
 delete mode 100644 toolchain/gcc/patches/4.9.4/disable-dwarf.frv
 delete mode 100644 toolchain/gcc/patches/4.9.4/disable-split-stack-nothread.patch
 delete mode 100644 toolchain/gcc/patches/4.9.4/disable-tm.patch
 delete mode 100644 toolchain/gcc/patches/4.9.4/fix-m86k-libgcc.patch
 delete mode 100644 toolchain/gcc/patches/4.9.4/gcc.bfin
 delete mode 100644 toolchain/gcc/patches/4.9.4/gcc.musl
 delete mode 100644 toolchain/gcc/patches/4.9.4/gcc.nds32
 delete mode 100644 toolchain/gcc/patches/4.9.4/libstdcxx-uclibc-c99.patch
 delete mode 100644 toolchain/gcc/patches/4.9.4/microbaze.uclibc-ng
 delete mode 100644 toolchain/gcc/patches/4.9.4/microblaze-enable-dwarf-eh-support.patch
 delete mode 100644 toolchain/gcc/patches/4.9.4/remove-write-macro.frv
 delete mode 100644 toolchain/gcc/patches/4.9.4/stdlib-h.ia64
 delete mode 100644 toolchain/gcc/patches/4.9.4/uclibc-cmath-long-double.patch

(limited to 'toolchain')

diff --git a/toolchain/gcc/patches/4.9.4/disable-atomics.patch b/toolchain/gcc/patches/4.9.4/disable-atomics.patch
deleted file mode 100644
index 4ab553218..000000000
--- a/toolchain/gcc/patches/4.9.4/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.9.4/disable-dwarf.bfin b/toolchain/gcc/patches/4.9.4/disable-dwarf.bfin
deleted file mode 100644
index c11baec92..000000000
--- a/toolchain/gcc/patches/4.9.4/disable-dwarf.bfin
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nur gcc-git.orig/libgcc/config.host gcc-git/libgcc/config.host
---- gcc-git.orig/libgcc/config.host	2015-10-23 21:12:52.000000000 +0200
-+++ gcc-git/libgcc/config.host	2015-11-15 21:17:38.385745887 +0100
-@@ -231,7 +231,7 @@
-   esac
-   ;;
- *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
--  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-+  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
-   if test x$enable_vtable_verify = xyes; then
-     extra_parts="$extra_parts vtv_start.o vtv_end.o vtv_start_preinit.o vtv_end_preinit.o"
diff --git a/toolchain/gcc/patches/4.9.4/disable-dwarf.frv b/toolchain/gcc/patches/4.9.4/disable-dwarf.frv
deleted file mode 100644
index c11baec92..000000000
--- a/toolchain/gcc/patches/4.9.4/disable-dwarf.frv
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nur gcc-git.orig/libgcc/config.host gcc-git/libgcc/config.host
---- gcc-git.orig/libgcc/config.host	2015-10-23 21:12:52.000000000 +0200
-+++ gcc-git/libgcc/config.host	2015-11-15 21:17:38.385745887 +0100
-@@ -231,7 +231,7 @@
-   esac
-   ;;
- *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
--  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-+  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
-   if test x$enable_vtable_verify = xyes; then
-     extra_parts="$extra_parts vtv_start.o vtv_end.o vtv_start_preinit.o vtv_end_preinit.o"
diff --git a/toolchain/gcc/patches/4.9.4/disable-split-stack-nothread.patch b/toolchain/gcc/patches/4.9.4/disable-split-stack-nothread.patch
deleted file mode 100644
index f78f93d8e..000000000
--- a/toolchain/gcc/patches/4.9.4/disable-split-stack-nothread.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-diff -Nur gcc-4.9.3.orig/libgcc/config/t-stack gcc-4.9.3/libgcc/config/t-stack
---- gcc-4.9.3.orig/libgcc/config/t-stack	2010-10-01 21:31:49.000000000 +0200
-+++ gcc-4.9.3/libgcc/config/t-stack	2016-03-07 03:07:56.773442671 +0100
-@@ -1,4 +1,6 @@
- # Makefile fragment to provide generic support for -fsplit-stack.
- # This should be used in config.host for any host which supports
- # -fsplit-stack.
-+ifeq ($(enable_threads),yes)
- LIB2ADD_ST += $(srcdir)/generic-morestack.c $(srcdir)/generic-morestack-thread.c
-+endif
diff --git a/toolchain/gcc/patches/4.9.4/disable-tm.patch b/toolchain/gcc/patches/4.9.4/disable-tm.patch
deleted file mode 100644
index 02b5cb854..000000000
--- a/toolchain/gcc/patches/4.9.4/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.9.4/fix-m86k-libgcc.patch b/toolchain/gcc/patches/4.9.4/fix-m86k-libgcc.patch
deleted file mode 100644
index e8481d549..000000000
--- a/toolchain/gcc/patches/4.9.4/fix-m86k-libgcc.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Nur gcc-4.9.3.orig/libgcc/config/m68k/linux-atomic.c gcc-4.9.3/libgcc/config/m68k/linux-atomic.c
---- gcc-4.9.3.orig/libgcc/config/m68k/linux-atomic.c	2014-01-02 23:25:22.000000000 +0100
-+++ gcc-4.9.3/libgcc/config/m68k/linux-atomic.c	2015-11-29 14:42:10.566143595 +0100
-@@ -33,7 +33,6 @@
-    using the kernel helper defined below.  There is no support for
-    64-bit operations yet.  */
- 
--#include <asm/unistd.h>
- #include <stdbool.h>
- 
- #ifndef __NR_atomic_cmpxchg_32
diff --git a/toolchain/gcc/patches/4.9.4/gcc.bfin b/toolchain/gcc/patches/4.9.4/gcc.bfin
deleted file mode 100644
index a0643f5fc..000000000
--- a/toolchain/gcc/patches/4.9.4/gcc.bfin
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nur gcc-4.9.3.orig/gcc/config.gcc gcc-4.9.3/gcc/config.gcc
---- gcc-4.9.3.orig/gcc/config.gcc	2015-05-21 22:50:59.000000000 +0200
-+++ gcc-4.9.3/gcc/config.gcc	2015-11-23 22:51:58.686375134 +0100
-@@ -1101,7 +1101,7 @@
- 	;;
- bfin*-linux-uclibc*)
- 	tm_file="${tm_file} dbxelf.h elfos.h bfin/elf.h gnu-user.h linux.h glibc-stdint.h bfin/linux.h ./linux-sysroot-suffix.h"
--	tmake_file="bfin/t-bfin-linux t-slibgcc t-linux"
-+	tmake_file="${tmake_file} bfin/t-bfin-linux t-slibgcc t-linux"
- 	use_collect2=no
- 	;;
- bfin*-rtems*)
diff --git a/toolchain/gcc/patches/4.9.4/gcc.musl b/toolchain/gcc/patches/4.9.4/gcc.musl
deleted file mode 100644
index 2005cd0e9..000000000
--- a/toolchain/gcc/patches/4.9.4/gcc.musl
+++ /dev/null
@@ -1,669 +0,0 @@
-diff -Nur gcc-4.9.2.orig/fixincludes/mkfixinc.sh gcc-4.9.2/fixincludes/mkfixinc.sh
---- gcc-4.9.2.orig/fixincludes/mkfixinc.sh	2012-10-28 16:42:48.000000000 -0500
-+++ gcc-4.9.2/fixincludes/mkfixinc.sh	2015-02-16 13:39:52.738182319 -0600
-@@ -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.9.2.orig/gcc/config/aarch64/aarch64-linux.h gcc-4.9.2/gcc/config/aarch64/aarch64-linux.h
---- gcc-4.9.2.orig/gcc/config/aarch64/aarch64-linux.h	2014-07-24 13:30:44.000000000 -0500
-+++ gcc-4.9.2/gcc/config/aarch64/aarch64-linux.h	2015-02-16 13:39:52.662182319 -0600
-@@ -23,6 +23,8 @@
- 
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
- 
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64.so.1"
-+
- #define CPP_SPEC "%{pthread:-D_REENTRANT}"
- 
- #define LINUX_TARGET_LINK_SPEC  "%{h*}		\
-diff -Nur gcc-4.9.2.orig/gcc/config/arm/linux-eabi.h gcc-4.9.2/gcc/config/arm/linux-eabi.h
---- gcc-4.9.2.orig/gcc/config/arm/linux-eabi.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/arm/linux-eabi.h	2015-02-16 13:39:52.678182319 -0600
-@@ -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.9.2.orig/gcc/config/i386/linux64.h gcc-4.9.2/gcc/config/i386/linux64.h
---- gcc-4.9.2.orig/gcc/config/i386/linux64.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/i386/linux64.h	2015-02-16 13:39:52.866182317 -0600
-@@ -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.9.2.orig/gcc/config/i386/linux.h gcc-4.9.2/gcc/config/i386/linux.h
---- gcc-4.9.2.orig/gcc/config/i386/linux.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/i386/linux.h	2015-02-16 13:39:52.866182317 -0600
-@@ -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.9.2.orig/gcc/config/linux.h gcc-4.9.2/gcc/config/linux.h
---- gcc-4.9.2.orig/gcc/config/linux.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/linux.h	2015-02-16 13:39:52.706182319 -0600
-@@ -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,92 @@
- 
- #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)
- 
- /* 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
-+
- #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
- /* This is a *uclinux* target.  We don't define below macros to normal linux
-    versions, because doing so would require *uclinux* targets to include
-diff -Nur gcc-4.9.2.orig/gcc/config/linux.opt gcc-4.9.2/gcc/config/linux.opt
---- gcc-4.9.2.orig/gcc/config/linux.opt	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/linux.opt	2015-02-16 13:39:52.706182319 -0600
-@@ -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.9.2.orig/gcc/config/microblaze/linux.h gcc-4.9.2/gcc/config/microblaze/linux.h
---- gcc-4.9.2.orig/gcc/config/microblaze/linux.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/microblaze/linux.h	2015-02-16 13:39:52.766182318 -0600
-@@ -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.9.2.orig/gcc/config/microblaze/microblaze.h gcc-4.9.2/gcc/config/microblaze/microblaze.h
---- gcc-4.9.2.orig/gcc/config/microblaze/microblaze.h	2014-02-23 12:53:47.000000000 -0600
-+++ gcc-4.9.2/gcc/config/microblaze/microblaze.h	2015-02-16 13:39:52.782182318 -0600
-@@ -218,6 +218,12 @@
- #undef PTRDIFF_TYPE
- #define PTRDIFF_TYPE "int"
- 
-+#undef SIZE_TYPE
-+#define SIZE_TYPE "unsigned int"
-+
-+#undef PTRDIFF_TYPE
-+#define PTRDIFF_TYPE "int"
-+
- #define CONSTANT_ALIGNMENT(EXP, ALIGN)					\
-   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR)	\
-    && (ALIGN) < BITS_PER_WORD						\
-diff -Nur gcc-4.9.2.orig/gcc/config/mips/linux.h gcc-4.9.2/gcc/config/mips/linux.h
---- gcc-4.9.2.orig/gcc/config/mips/linux.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/mips/linux.h	2015-02-16 13:39:52.782182318 -0600
-@@ -23,3 +23,10 @@
- #undef UCLIBC_DYNAMIC_LINKER
- #define UCLIBC_DYNAMIC_LINKER \
-   "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
-+
-+#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.9.2.orig/gcc/config/rs6000/linux64.h gcc-4.9.2/gcc/config/rs6000/linux64.h
---- gcc-4.9.2.orig/gcc/config/rs6000/linux64.h	2014-07-24 12:25:19.000000000 -0500
-+++ gcc-4.9.2/gcc/config/rs6000/linux64.h	2015-02-16 13:39:52.794182318 -0600
-@@ -375,17 +375,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.9.2.orig/gcc/config/rs6000/secureplt.h gcc-4.9.2/gcc/config/rs6000/secureplt.h
---- gcc-4.9.2.orig/gcc/config/rs6000/secureplt.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/rs6000/secureplt.h	2015-02-16 13:39:52.794182318 -0600
-@@ -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.9.2.orig/gcc/config/rs6000/sysv4.h gcc-4.9.2/gcc/config/rs6000/sysv4.h
---- gcc-4.9.2.orig/gcc/config/rs6000/sysv4.h	2014-07-24 12:25:19.000000000 -0500
-+++ gcc-4.9.2/gcc/config/rs6000/sysv4.h	2015-02-16 13:39:52.794182318 -0600
-@@ -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.9.2.orig/gcc/config/sh/linux.h gcc-4.9.2/gcc/config/sh/linux.h
---- gcc-4.9.2.orig/gcc/config/sh/linux.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/config/sh/linux.h	2015-02-16 13:39:52.818182318 -0600
-@@ -43,7 +43,14 @@
- 
- #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
- 
-+#if TARGET_BIG_ENDIAN_DEFAULT /* 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.9.2.orig/gcc/config.gcc gcc-4.9.2/gcc/config.gcc
---- gcc-4.9.2.orig/gcc/config.gcc	2014-09-17 09:16:02.000000000 -0500
-+++ gcc-4.9.2/gcc/config.gcc	2015-02-16 13:39:52.794182318 -0600
-@@ -594,7 +594,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"
- 
- # 32-bit x86 processors supported by --with-arch=.  Each processor
- # MUST be separated by exactly one space.
-@@ -719,6 +719,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"
-       ;;
-@@ -2331,6 +2334,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.9.2.orig/gcc/configure gcc-4.9.2/gcc/configure
---- gcc-4.9.2.orig/gcc/configure	2014-10-10 07:51:28.000000000 -0500
-+++ gcc-4.9.2/gcc/configure	2015-02-16 13:39:52.690182319 -0600
-@@ -27356,6 +27356,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.
-@@ -27388,6 +27391,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"
-@@ -27477,6 +27481,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.9.2.orig/gcc/configure.ac gcc-4.9.2/gcc/configure.ac
---- gcc-4.9.2.orig/gcc/configure.ac	2014-10-10 07:51:28.000000000 -0500
-+++ gcc-4.9.2/gcc/configure.ac	2015-02-16 13:39:52.694182319 -0600
-@@ -5039,6 +5039,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.
-@@ -5065,6 +5068,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],
-@@ -5131,6 +5135,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.9.2.orig/gcc/ginclude/stddef.h gcc-4.9.2/gcc/ginclude/stddef.h
---- gcc-4.9.2.orig/gcc/ginclude/stddef.h	2014-01-02 16:23:26.000000000 -0600
-+++ gcc-4.9.2/gcc/ginclude/stddef.h	2015-02-16 13:39:52.706182319 -0600
-@@ -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.9.2.orig/libgcc/gthr.h gcc-4.9.2/libgcc/gthr.h
---- gcc-4.9.2.orig/libgcc/gthr.h	2014-01-02 16:25:22.000000000 -0600
-+++ gcc-4.9.2/libgcc/gthr.h	2015-02-16 13:39:52.726182319 -0600
-@@ -136,10 +136,8 @@
- /* The pe-coff weak support isn't fully compatible to ELF's weak.
-    For static libraries it might would work, but as we need to deal
-    with shared versions too, we disable it for mingw-targets.  */
--#ifdef __MINGW32__
- #undef GTHREAD_USE_WEAK
- #define GTHREAD_USE_WEAK 0
--#endif
- 
- #ifndef GTHREAD_USE_WEAK
- #define GTHREAD_USE_WEAK 1
-diff -Nur gcc-4.9.2.orig/libgcc/unwind-dw2-fde-dip.c gcc-4.9.2/libgcc/unwind-dw2-fde-dip.c
---- gcc-4.9.2.orig/libgcc/unwind-dw2-fde-dip.c	2014-01-02 16:25:22.000000000 -0600
-+++ gcc-4.9.2/libgcc/unwind-dw2-fde-dip.c	2015-02-16 13:39:52.846182318 -0600
-@@ -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_##type
-+# elif defined(__FreeBSD__) && __FreeBSD__ >= 7
-+#  define ElfW __ElfN
-+# endif
- #endif
- 
- #if defined(USE_PT_GNU_EH_FRAME)
-diff -Nur gcc-4.9.2.orig/libgomp/config/posix/time.c gcc-4.9.2/libgomp/config/posix/time.c
---- gcc-4.9.2.orig/libgomp/config/posix/time.c	2014-01-02 16:25:54.000000000 -0600
-+++ gcc-4.9.2/libgomp/config/posix/time.c	2015-02-16 13:39:52.714182319 -0600
-@@ -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.9.2.orig/libitm/config/arm/hwcap.cc gcc-4.9.2/libitm/config/arm/hwcap.cc
---- gcc-4.9.2.orig/libitm/config/arm/hwcap.cc	2014-01-02 16:26:00.000000000 -0600
-+++ gcc-4.9.2/libitm/config/arm/hwcap.cc	2015-02-16 13:39:52.678182319 -0600
-@@ -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.9.2.orig/libitm/config/linux/x86/tls.h gcc-4.9.2/libitm/config/linux/x86/tls.h
---- gcc-4.9.2.orig/libitm/config/linux/x86/tls.h	2014-01-02 16:26:00.000000000 -0600
-+++ gcc-4.9.2/libitm/config/linux/x86/tls.h	2015-02-16 13:39:52.866182317 -0600
-@@ -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.9.2.orig/libstdc++-v3/configure.host gcc-4.9.2/libstdc++-v3/configure.host
---- gcc-4.9.2.orig/libstdc++-v3/configure.host	2013-07-04 16:07:44.000000000 -0500
-+++ gcc-4.9.2/libstdc++-v3/configure.host	2015-02-16 13:39:52.746182319 -0600
-@@ -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 -Nur gcc-4.9.2.orig/libstdc++-v3/config/os/gnu-linux/os_defines.h gcc-4.9.2/libstdc++-v3/config/os/gnu-linux/os_defines.h
---- gcc-4.9.2.orig/libstdc++-v3/config/os/gnu-linux/os_defines.h	2014-01-02 16:30:10.000000000 -0600
-+++ gcc-4.9.2/libstdc++-v3/config/os/gnu-linux/os_defines.h	2015-04-13 23:58:30.912857273 -0500
-@@ -41,8 +41,10 @@
- // Provide a declaration for the possibly deprecated gets function, as
- // glibc 2.15 and later does not declare gets for ISO C11 when
- // __GNU_SOURCE is defined.
-+#if defined(__GLIBC_PREREQ)
- #if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE)
- # undef _GLIBCXX_HAVE_GETS
- #endif
-+#endif
- 
- #endif
diff --git a/toolchain/gcc/patches/4.9.4/gcc.nds32 b/toolchain/gcc/patches/4.9.4/gcc.nds32
deleted file mode 100644
index d42faa77e..000000000
--- a/toolchain/gcc/patches/4.9.4/gcc.nds32
+++ /dev/null
@@ -1,70904 +0,0 @@
-diff -Nur gcc-4.9.4.orig/gcc/c/gccspec.c gcc-4.9.4/gcc/c/gccspec.c
---- gcc-4.9.4.orig/gcc/c/gccspec.c	2014-01-02 23:23:26.000000000 +0100
-+++ gcc-4.9.4/gcc/c/gccspec.c	2016-08-08 20:37:45.494269627 +0200
-@@ -104,5 +104,12 @@
-   return 0;  /* Not used for C.  */
- }
- 
-+/* Called before parsing the spec to tell which language driver is used.  */
-+int
-+lang_specific_is_c_plus_plus (void)
-+{
-+  return 0;
-+}
-+
- /* Number of extra output files that lang_specific_pre_link may generate.  */
- int lang_specific_extra_outfiles = 0;  /* Not used for C.  */
-diff -Nur gcc-4.9.4.orig/gcc/c-family/c.opt gcc-4.9.4/gcc/c-family/c.opt
---- gcc-4.9.4.orig/gcc/c-family/c.opt	2014-04-03 15:41:55.000000000 +0200
-+++ gcc-4.9.4/gcc/c-family/c.opt	2016-08-08 20:37:45.494269627 +0200
-@@ -851,10 +851,6 @@
- fbuilding-libgcc
- C ObjC C++ ObjC++ Undocumented Var(flag_building_libgcc)
- 
--fbuiltin
--C ObjC C++ ObjC++ Var(flag_no_builtin, 0)
--Recognize built-in functions
--
- fbuiltin-
- C ObjC C++ ObjC++ Joined
- 
-diff -Nur gcc-4.9.4.orig/gcc/c-family/cppspec.c gcc-4.9.4/gcc/c-family/cppspec.c
---- gcc-4.9.4.orig/gcc/c-family/cppspec.c	2014-01-02 23:23:26.000000000 +0100
-+++ gcc-4.9.4/gcc/c-family/cppspec.c	2016-08-08 20:37:45.494269627 +0200
-@@ -194,5 +194,12 @@
-   return 0;  /* Not used for cpp.  */
- }
- 
-+/* Called before parsing the spec to tell which language driver is used.  */
-+int
-+lang_specific_is_c_plus_plus (void)
-+{
-+  return 0;
-+}
-+
- /* Number of extra output files that lang_specific_pre_link may generate.  */
- int lang_specific_extra_outfiles = 0;  /* Not used for cpp.  */
-diff -Nur gcc-4.9.4.orig/gcc/common/config/nds32/nds32-common.c gcc-4.9.4/gcc/common/config/nds32/nds32-common.c
---- gcc-4.9.4.orig/gcc/common/config/nds32/nds32-common.c	2014-01-02 23:23:26.000000000 +0100
-+++ gcc-4.9.4/gcc/common/config/nds32/nds32-common.c	2016-08-08 20:37:45.494269627 +0200
-@@ -1,5 +1,5 @@
- /* Common hooks of Andes NDS32 cpu for GNU compiler
--   Copyright (C) 2012-2014 Free Software Foundation, Inc.
-+   Copyright (C) 2012-2015 Free Software Foundation, Inc.
-    Contributed by Andes Technology Corporation.
- 
-    This file is part of GCC.
-@@ -74,15 +74,57 @@
- /* Implement TARGET_OPTION_OPTIMIZATION_TABLE.  */
- static const struct default_options nds32_option_optimization_table[] =
- {
--  /* Enable -fomit-frame-pointer by default at -O1 or higher.  */
--  { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
-+#ifdef TARGET_DEFAULT_NO_MATH_ERRNO
-+  /* Under some configuration, we would like to use -fno-math-errno by default
-+     at all optimization levels for performance and code size consideration.
-+     Please check gcc/config.gcc for more implementation details.  */
-+  { OPT_LEVELS_ALL,               OPT_fmath_errno,         NULL, 0 },
-+#endif
-+#ifndef TARGET_LINUX_ABI
-+  /* Disable -fdelete-null-pointer-checks by default in ELF toolchain.  */
-+  { OPT_LEVELS_ALL,               OPT_flag_delete_null_pointer_checks,
-+							   NULL, 0 },
-+#endif
-+  /* Enable -fomit-frame-pointer by default at all optimization levels.  */
-+  { OPT_LEVELS_ALL,               OPT_fomit_frame_pointer, NULL, 1 },
-+  /* Enable -mrelax-hint by default at all optimization levels.  */
-+  { OPT_LEVELS_ALL,               OPT_mrelax_hint,         NULL, 1 },
-+  /* Enalbe -malways-align by default at -O1 and above, but not -Os or -Og.  */
-+  { OPT_LEVELS_1_PLUS_SPEED_ONLY, OPT_malways_align,       NULL, 1 },
-   /* Enable -mv3push by default at -Os, but it is useless under V2 ISA.  */
--  { OPT_LEVELS_SIZE,   OPT_mv3push,             NULL, 1 },
-+  { OPT_LEVELS_SIZE,              OPT_mv3push,             NULL, 1 },
-+  /* Enable -mload-store-opt by default at -Os.  */
-+  { OPT_LEVELS_SIZE,              OPT_mload_store_opt,     NULL, 1 },
-+  /* Enable -mregrename by default at -O1 and above.  */
-+  { OPT_LEVELS_1_PLUS,            OPT_mregrename,          NULL, 1 },
-+  /* Enable -mgcse by default at -O1 and above.  */
-+  { OPT_LEVELS_1_PLUS,            OPT_mgcse,               NULL, 1 },
-+#ifdef TARGET_OS_DEFAULT_IFC
-+  /* Enable -mifc by default at -Os, but it is useless under V2/V3M ISA.  */
-+  { OPT_LEVELS_SIZE,              OPT_mifc,                NULL, 1 },
-+#endif
-+#ifdef TARGET_OS_DEFAULT_EX9
-+  /* Enable -mex9 by default at -Os, but it is useless under V2/V3M ISA.  */
-+  { OPT_LEVELS_SIZE,              OPT_mex9,                NULL, 1 },
-+#endif
- 
--  { OPT_LEVELS_NONE,   0,                       NULL, 0 }
-+  { OPT_LEVELS_NONE,              0,                       NULL, 0 }
- };
- 
- /* ------------------------------------------------------------------------ */
-+
-+/* Implement TARGET_EXCEPT_UNWIND_INFO.  */
-+static enum unwind_info_type
-+nds32_except_unwind_info (struct gcc_options *opts ATTRIBUTE_UNUSED)
-+{
-+  if (TARGET_LINUX_ABI)
-+    return UI_DWARF2;
-+
-+  return UI_SJLJ;
-+}
-+
-+/* ------------------------------------------------------------------------ */
-+
- 
- /* Run-time Target Specification.  */
- 
-@@ -95,16 +137,22 @@
- 
-    Other MASK_XXX flags are set individually.
-    By default we enable
--     TARGET_GP_DIRECT: Generate gp-imply instruction.
--     TARGET_16_BIT   : Generate 16/32 bit mixed length instruction.
--     TARGET_PERF_EXT : Generate performance extention instrcution.
--     TARGET_CMOV     : Generate conditional move instruction.  */
-+     TARGET_16_BIT     : Generate 16/32 bit mixed length instruction.
-+     TARGET_EXT_PERF   : Generate performance extention instrcution.
-+     TARGET_EXT_PERF2  : Generate performance extention version 2 instrcution.
-+     TARGET_EXT_STRING : Generate string extention instrcution.
-+     TARGET_HW_ABS     : Generate hardware abs instruction.
-+     TARGET_CMOV       : Generate conditional move instruction.  */
- #undef TARGET_DEFAULT_TARGET_FLAGS
- #define TARGET_DEFAULT_TARGET_FLAGS		\
-   (TARGET_CPU_DEFAULT				\
--   | MASK_GP_DIRECT				\
-+   | TARGET_DEFAULT_FPU_ISA			\
-+   | TARGET_DEFAULT_FPU_FMA			\
-    | MASK_16_BIT				\
--   | MASK_PERF_EXT				\
-+   | MASK_EXT_PERF				\
-+   | MASK_EXT_PERF2				\
-+   | MASK_EXT_STRING				\
-+   | MASK_HW_ABS				\
-    | MASK_CMOV)
- 
- #undef TARGET_HANDLE_OPTION
-@@ -117,7 +165,7 @@
- /* Defining the Output Assembler Language.  */
- 
- #undef TARGET_EXCEPT_UNWIND_INFO
--#define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
-+#define TARGET_EXCEPT_UNWIND_INFO nds32_except_unwind_info
- 
- /* ------------------------------------------------------------------------ */
- 
-diff -Nur gcc-4.9.4.orig/gcc/common.opt gcc-4.9.4/gcc/common.opt
---- gcc-4.9.4.orig/gcc/common.opt	2015-02-26 03:43:52.000000000 +0100
-+++ gcc-4.9.4/gcc/common.opt	2016-08-08 20:37:45.494269627 +0200
-@@ -898,6 +898,10 @@
- Common Report Var(flag_btr_bb_exclusive) Optimization
- Restrict target load migration not to re-use registers in any basic block
- 
-+fbuiltin
-+Common Var(flag_no_builtin, 0)
-+Recognize built-in functions
-+
- fcall-saved-
- Common Joined RejectNegative Var(common_deferred_options) Defer
- -fcall-saved-<register>	Mark <register> as being preserved across functions
-@@ -1160,7 +1164,7 @@
- Common
- 
- ffat-lto-objects
--Common Var(flag_fat_lto_objects)
-+Common Var(flag_fat_lto_objects) Init(1)
- Output lto objects containing both the intermediate language and binary output.
- 
- ffinite-math-only
-@@ -2202,6 +2206,10 @@
- Common Report Var(flag_tree_sra) Optimization
- Perform scalar replacement of aggregates
- 
-+ftree-switch-shortcut
-+Common Report Var(flag_tree_switch_shortcut) Init(0) Optimization
-+Do fancy switch statement shortcutting
-+
- ftree-ter
- Common Report Var(flag_tree_ter) Optimization
- Replace temporary expressions in the SSA->normal pass
-diff -Nur gcc-4.9.4.orig/gcc/config/arm/arm.h gcc-4.9.4/gcc/config/arm/arm.h
---- gcc-4.9.4.orig/gcc/config/arm/arm.h	2016-03-29 15:32:37.000000000 +0200
-+++ gcc-4.9.4/gcc/config/arm/arm.h	2016-08-08 20:37:45.494269627 +0200
-@@ -1162,7 +1162,7 @@
- 
- /* Tell IRA to use the order we define rather than messing it up with its
-    own cost calculations.  */
--#define HONOR_REG_ALLOC_ORDER
-+#define HONOR_REG_ALLOC_ORDER 1
- 
- /* Interrupt functions can only use registers that have already been
-    saved by the prologue, even if they would normally be
-diff -Nur gcc-4.9.4.orig/gcc/config/i386/host-cygwin.c gcc-4.9.4/gcc/config/i386/host-cygwin.c
---- gcc-4.9.4.orig/gcc/config/i386/host-cygwin.c	2014-01-02 23:23:26.000000000 +0100
-+++ gcc-4.9.4/gcc/config/i386/host-cygwin.c	2016-08-08 20:37:45.494269627 +0200
-@@ -62,7 +62,7 @@
-       fatal_error ("can%'t extend PCH file: %m");
-   }
- 
--  base = mmap (NULL, sz, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
-+  base = mmap ((void *) 0x60000000, sz, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
- 
-   if (base == MAP_FAILED)
-     base = NULL;
-diff -Nur gcc-4.9.4.orig/gcc/config/nds32/0001-Add-option-m16bit-mno-16bit-for-backward-compatibili.patch gcc-4.9.4/gcc/config/nds32/0001-Add-option-m16bit-mno-16bit-for-backward-compatibili.patch
---- gcc-4.9.4.orig/gcc/config/nds32/0001-Add-option-m16bit-mno-16bit-for-backward-compatibili.patch	1970-01-01 01:00:00.000000000 +0100
-+++ gcc-4.9.4/gcc/config/nds32/0001-Add-option-m16bit-mno-16bit-for-backward-compatibili.patch	2016-08-08 20:37:45.494269627 +0200
-@@ -0,0 +1,26 @@
-+From c8f442699258adea1df44e6a11906b6e98dbb793 Mon Sep 17 00:00:00 2001
-+From: Kito Cheng <kito@andestech.com>
-+Date: Mon, 7 Dec 2015 17:50:51 +0800
-+Subject: [PATCH 1/2] Add option -m16bit/-mno-16bit for backward compatibility
-+
-+---
-+ gcc/config/nds32/nds32.opt | 3 +++
-+ 1 file changed, 3 insertions(+)
-+
-+diff --git a/gcc/config/nds32/nds32.opt b/gcc/config/nds32/nds32.opt
-+index ed3ccb9..78119a3 100644
-+--- a/gcc/config/nds32/nds32.opt
-++++ b/gcc/config/nds32/nds32.opt
-+@@ -129,6 +129,9 @@ m16-bit
-+ Target Report Mask(16_BIT)
-+ Generate 16-bit instructions.
-+ 
-++m16bit
-++Target Alias(m16-bit) Undocumented
-++
-+ mrelax-hint
-+ Target Report Mask(RELAX_HINT)
-+ Insert relax hint for linker to do relaxation.
-+-- 
-+2.4.3
-+
-diff -Nur gcc-4.9.4.orig/gcc/config/nds32/0002-Use-default-crt-begin-end-.o-which-provide-by-gcc-in.patch gcc-4.9.4/gcc/config/nds32/0002-Use-default-crt-begin-end-.o-which-provide-by-gcc-in.patch
---- gcc-4.9.4.orig/gcc/config/nds32/0002-Use-default-crt-begin-end-.o-which-provide-by-gcc-in.patch	1970-01-01 01:00:00.000000000 +0100
-+++ gcc-4.9.4/gcc/config/nds32/0002-Use-default-crt-begin-end-.o-which-provide-by-gcc-in.patch	2016-08-08 20:37:45.494269627 +0200
-@@ -0,0 +1,142 @@
-+From 8079ff97a5ea42ac56765bce2b4855d24dcc7b10 Mon Sep 17 00:00:00 2001
-+From: Kito Cheng <kito@andestech.com>
-+Date: Mon, 7 Dec 2015 10:25:03 +0800
-+Subject: [PATCH 2/2] Use default crt[begin|end]*.o which provide by gcc in
-+ linux toolchain
-+
-+---
-+ gcc/config/nds32/elf.h   | 46 ++++++++++++++++++++++++++++++++++++++++++++++
-+ gcc/config/nds32/nds32.h | 46 ----------------------------------------------
-+ libgcc/config.host       |  5 ++---
-+ 3 files changed, 48 insertions(+), 49 deletions(-)
-+
-+diff --git a/gcc/config/nds32/elf.h b/gcc/config/nds32/elf.h
-+index 808fd44..67e5b0e 100644
-+--- a/gcc/config/nds32/elf.h
-++++ b/gcc/config/nds32/elf.h
-+@@ -34,3 +34,49 @@
-+   NDS32_RELAX_SPEC \
-+   NDS32_IFC_SPEC \
-+   NDS32_EX9_SPEC
-++
-++#define LIB_SPEC \
-++  " -lc -lgloss"
-++
-++#define LIBGCC_SPEC \
-++  " -lgcc"
-++
-++/* The option -mno-ctor-dtor can disable constructor/destructor feature
-++   by applying different crt stuff.  In the convention, crt0.o is the
-++   startup file without constructor/destructor;
-++   crt1.o, crti.o, crtbegin.o, crtend.o, and crtn.o are the
-++   startup files with constructor/destructor.
-++   Note that crt0.o, crt1.o, crti.o, and crtn.o are provided
-++   by newlib/mculib/glibc/ublic, while crtbegin.o and crtend.o are
-++   currently provided by GCC for nds32 target.
-++
-++   For nds32 target so far:
-++   If -mno-ctor-dtor, we are going to link
-++   "crt0.o [user objects]".
-++   If -mctor-dtor, we are going to link
-++   "crt1.o crtbegin1.o [user objects] crtend1.o".
-++
-++   Note that the TARGET_DEFAULT_CTOR_DTOR would effect the
-++   default behavior.  Check gcc/config.gcc for more information.  */
-++#ifdef TARGET_DEFAULT_CTOR_DTOR
-++  #define STARTFILE_SPEC \
-++    " %{!mno-ctor-dtor:crt1.o%s;:crt0.o%s}" \
-++    " %{!mno-ctor-dtor:crtbegin1.o%s}" \
-++    " %{mcrt-arg:crtarg.o%s}"
-++  #define ENDFILE_SPEC \
-++    " %{!mno-ctor-dtor:crtend1.o%s}"
-++#else
-++  #define STARTFILE_SPEC \
-++    " %{mctor-dtor|coverage:crt1.o%s;:crt0.o%s}" \
-++    " %{mctor-dtor|coverage:crtbegin1.o%s}" \
-++    " %{mcrt-arg:crtarg.o%s}"
-++  #define ENDFILE_SPEC \
-++    " %{mctor-dtor|coverage:crtend1.o%s}"
-++#endif
-++
-++#define STARTFILE_CXX_SPEC \
-++  " %{!mno-ctor-dtor:crt1.o%s;:crt0.o%s}" \
-++  " %{!mno-ctor-dtor:crtbegin1.o%s}" \
-++  " %{mcrt-arg:crtarg.o%s}"
-++#define ENDFILE_CXX_SPEC \
-++  " %{!mno-ctor-dtor:crtend1.o%s}"
-+diff --git a/gcc/config/nds32/nds32.h b/gcc/config/nds32/nds32.h
-+index 954f54f..19978a0 100644
-+--- a/gcc/config/nds32/nds32.h
-++++ b/gcc/config/nds32/nds32.h
-+@@ -984,52 +984,6 @@ enum nds32_builtins
-+   " %{mext-zol:-mzol-ext}" \
-+   " %{O|O1|O2|O3|Ofast:-O1;:-Os}"
-+ 
-+-#define LIB_SPEC \
-+-  " -lc -lgloss"
-+-
-+-#define LIBGCC_SPEC \
-+-  " -lgcc"
-+-
-+-/* The option -mno-ctor-dtor can disable constructor/destructor feature
-+-   by applying different crt stuff.  In the convention, crt0.o is the
-+-   startup file without constructor/destructor;
-+-   crt1.o, crti.o, crtbegin.o, crtend.o, and crtn.o are the
-+-   startup files with constructor/destructor.
-+-   Note that crt0.o, crt1.o, crti.o, and crtn.o are provided
-+-   by newlib/mculib/glibc/ublic, while crtbegin.o and crtend.o are
-+-   currently provided by GCC for nds32 target.
-+-
-+-   For nds32 target so far:
-+-   If -mno-ctor-dtor, we are going to link
-+-   "crt0.o [user objects]".
-+-   If -mctor-dtor, we are going to link
-+-   "crt1.o crtbegin1.o [user objects] crtend1.o".
-+-
-+-   Note that the TARGET_DEFAULT_CTOR_DTOR would effect the
-+-   default behavior.  Check gcc/config.gcc for more information.  */
-+-#ifdef TARGET_DEFAULT_CTOR_DTOR
-+-  #define STARTFILE_SPEC \
-+-    " %{!mno-ctor-dtor:crt1.o%s;:crt0.o%s}" \
-+-    " %{!mno-ctor-dtor:crtbegin1.o%s}" \
-+-    " %{mcrt-arg:crtarg.o%s}"
-+-  #define ENDFILE_SPEC \
-+-    " %{!mno-ctor-dtor:crtend1.o%s}"
-+-#else
-+-  #define STARTFILE_SPEC \
-+-    " %{mctor-dtor|coverage:crt1.o%s;:crt0.o%s}" \
-+-    " %{mctor-dtor|coverage:crtbegin1.o%s}" \
-+-    " %{mcrt-arg:crtarg.o%s}"
-+-  #define ENDFILE_SPEC \
-+-    " %{mctor-dtor|coverage:crtend1.o%s}"
-+-#endif
-+-
-+-#define STARTFILE_CXX_SPEC \
-+-  " %{!mno-ctor-dtor:crt1.o%s;:crt0.o%s}" \
-+-  " %{!mno-ctor-dtor:crtbegin1.o%s}" \
-+-  " %{mcrt-arg:crtarg.o%s}"
-+-#define ENDFILE_CXX_SPEC \
-+-  " %{!mno-ctor-dtor:crtend1.o%s}"
-+-
-+ /* The TARGET_BIG_ENDIAN_DEFAULT is defined if we
-+    configure gcc with --target=nds32be-* setting.
-+    Check gcc/config.gcc for more information.  */
-+diff --git a/libgcc/config.host b/libgcc/config.host
-+index d980d8a..3710504 100644
-+--- a/libgcc/config.host
-++++ b/libgcc/config.host
-+@@ -882,9 +882,8 @@ msp430*-*-elf)
-+ nds32*-linux*)
-+ 	# Basic makefile fragment and extra_parts for crt stuff.
-+ 	# We also append c-isr library implementation.
-+-	tmake_file="${tmake_file} nds32/t-nds32 t-slibgcc-libgcc"
-+-	extra_parts="crtbegin1.o crtend1.o crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o "
-+-	tmake_file="${tmake_file} nds32/t-nds32-glibc t-softfp-sfdf t-softfp"
-++	tmake_file="${tmake_file} t-slibgcc-libgcc"
-++	tmake_file="${tmake_file} nds32/t-nds32-glibc nds32/t-crtstuff t-softfp-sfdf t-softfp"
-+ 	# Append library definition makefile fragment according to --with-nds32-lib=X setting.
-+ 	case "${with_nds32_lib}" in
-+ 	"" )
-+-- 
-+2.4.3
-+
-diff -Nur gcc-4.9.4.orig/gcc/config/nds32/constants.md gcc-4.9.4/gcc/config/nds32/constants.md
---- gcc-4.9.4.orig/gcc/config/nds32/constants.md	2014-01-02 23:23:26.000000000 +0100
-+++ gcc-4.9.4/gcc/config/nds32/constants.md	2016-08-08 20:37:45.494269627 +0200
-@@ -1,5 +1,5 @@
- ;; Constant defintions of Andes NDS32 cpu for GNU compiler
--;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
-+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
- ;; Contributed by Andes Technology Corporation.
- ;;
- ;; This file is part of GCC.
-@@ -23,24 +23,191 @@
- (define_constants
-   [(R8_REGNUM  8)
-    (TA_REGNUM 15)
-+   (TP_REGNUM 25)
-    (FP_REGNUM 28)
-    (GP_REGNUM 29)
-    (LP_REGNUM 30)
-    (SP_REGNUM 31)
-+   (LB_REGNUM 98)
-+   (LE_REGNUM 99)
-+   (LC_REGNUM 100)
-   ])
- 
- 
-+;; The unpec operation index.
-+(define_c_enum "unspec_element" [
-+  UNSPEC_COPYSIGN
-+  UNSPEC_FCPYNSD
-+  UNSPEC_FCPYNSS
-+  UNSPEC_FCPYSD
-+  UNSPEC_FCPYSS
-+  UNSPEC_AVE
-+  UNSPEC_BCLR
-+  UNSPEC_BSET
-+  UNSPEC_BTGL
-+  UNSPEC_BTST
-+  UNSPEC_CLIP
-+  UNSPEC_CLIPS
-+  UNSPEC_CLZ
-+  UNSPEC_CLO
-+  UNSPEC_ABS
-+  UNSPEC_MAX
-+  UNSPEC_MIN
-+  UNSPEC_PBSAD
-+  UNSPEC_PBSADA
-+  UNSPEC_BSE
-+  UNSPEC_BSE_2
-+  UNSPEC_BSP
-+  UNSPEC_BSP_2
-+  UNSPEC_FFB
-+  UNSPEC_FFMISM
-+  UNSPEC_FLMISM
-+  UNSPEC_KADDW
-+  UNSPEC_KSUBW
-+  UNSPEC_KADDH
-+  UNSPEC_KSUBH
-+  UNSPEC_KDMBB
-+  UNSPEC_KDMBT
-+  UNSPEC_KDMTB
-+  UNSPEC_KDMTT
-+  UNSPEC_KHMBB
-+  UNSPEC_KHMBT
-+  UNSPEC_KHMTB
-+  UNSPEC_KHMTT
-+  UNSPEC_KSLRAW
-+  UNSPEC_KSLRAWU
-+  UNSPEC_RDOV
-+  UNSPEC_CLROV
-+  UNSPEC_SVA
-+  UNSPEC_SVS
-+  UNSPEC_WSBH
-+  UNSPEC_LWUP
-+  UNSPEC_LBUP
-+  UNSPEC_SWUP
-+  UNSPEC_SBUP
-+  UNSPEC_LMWZB
-+  UNSPEC_SMWZB
-+  UNSPEC_UALOAD_HW
-+  UNSPEC_UALOAD_W
-+  UNSPEC_UALOAD_DW
-+  UNSPEC_UASTORE_HW
-+  UNSPEC_UASTORE_W
-+  UNSPEC_UASTORE_DW
-+  UNSPEC_GOTINIT
-+  UNSPEC_GOT
-+  UNSPEC_GOTOFF
-+  UNSPEC_PLT
-+  UNSPEC_TLSGD
-+  UNSPEC_TLSLD
-+  UNSPEC_TLSIE
-+  UNSPEC_TLSLE
-+  UNSPEC_ROUND
-+  UNSPEC_VEC_COMPARE
-+  UNSPEC_KHM
-+  UNSPEC_KHMX
-+  UNSPEC_CLIP_OV
-+  UNSPEC_CLIPS_OV
-+  UNSPEC_BITREV
-+  UNSPEC_KABS
-+  UNSPEC_LOOP_END
-+  UNSPEC_TLS_DESC
-+  UNSPEC_TLS_IE
-+])
-+
-+
- ;; The unspec_volatile operation index.
- (define_c_enum "unspec_volatile_element" [
--  UNSPEC_VOLATILE_FUNC_RETURN
-+  UNSPEC_VOLATILE_EH_RETURN
-   UNSPEC_VOLATILE_ISYNC
-   UNSPEC_VOLATILE_ISB
-+  UNSPEC_VOLATILE_DSB
-+  UNSPEC_VOLATILE_MSYNC
-+  UNSPEC_VOLATILE_MSYNC_ALL
-+  UNSPEC_VOLATILE_MSYNC_STORE
-   UNSPEC_VOLATILE_MFSR
-   UNSPEC_VOLATILE_MFUSR
-   UNSPEC_VOLATILE_MTSR
-   UNSPEC_VOLATILE_MTUSR
-   UNSPEC_VOLATILE_SETGIE_EN
-   UNSPEC_VOLATILE_SETGIE_DIS
-+  UNSPEC_VOLATILE_FMFCSR
-+  UNSPEC_VOLATILE_FMTCSR
-+  UNSPEC_VOLATILE_FMFCFG
-+  UNSPEC_VOLATILE_JR_ITOFF
-+  UNSPEC_VOLATILE_JR_TOFF
-+  UNSPEC_VOLATILE_JRAL_ITON
-+  UNSPEC_VOLATILE_JRAL_TON
-+  UNSPEC_VOLATILE_RET_ITOFF
-+  UNSPEC_VOLATILE_RET_TOFF
-+  UNSPEC_VOLATILE_STANDBY_NO_WAKE_GRANT
-+  UNSPEC_VOLATILE_STANDBY_WAKE_GRANT
-+  UNSPEC_VOLATILE_STANDBY_WAKE_DONE
-+  UNSPEC_VOLATILE_TEQZ
-+  UNSPEC_VOLATILE_TNEZ
-+  UNSPEC_VOLATILE_TRAP
-+  UNSPEC_VOLATILE_SETEND_BIG
-+  UNSPEC_VOLATILE_SETEND_LITTLE
-+  UNSPEC_VOLATILE_BREAK
-+  UNSPEC_VOLATILE_SYSCALL
-+  UNSPEC_VOLATILE_NOP
-+  UNSPEC_VOLATILE_RES_DEP
-+  UNSPEC_VOLATILE_DATA_DEP
-+  UNSPEC_VOLATILE_GET_CURRENT_SP
-+  UNSPEC_VOLATILE_SET_CURRENT_SP
-+  UNSPEC_VOLATILE_LLW
-+  UNSPEC_VOLATILE_SCW
-+  UNSPEC_VOLATILE_CCTL_L1D_INVALALL
-+  UNSPEC_VOLATILE_CCTL_L1D_WBALL_ALVL
-+  UNSPEC_VOLATILE_CCTL_L1D_WBALL_ONE_LVL
-+  UNSPEC_VOLATILE_CCTL_IDX_WRITE
-+  UNSPEC_VOLATILE_CCTL_IDX_READ
-+  UNSPEC_VOLATILE_CCTL_VA_WBINVAL_L1
-+  UNSPEC_VOLATILE_CCTL_VA_WBINVAL_LA
-+  UNSPEC_VOLATILE_CCTL_IDX_WBINVAL
-+  UNSPEC_VOLATILE_CCTL_VA_LCK
-+  UNSPEC_VOLATILE_DPREF_QW
-+  UNSPEC_VOLATILE_DPREF_HW
-+  UNSPEC_VOLATILE_DPREF_W
-+  UNSPEC_VOLATILE_DPREF_DW
-+  UNSPEC_VOLATILE_TLBOP_TRD
-+  UNSPEC_VOLATILE_TLBOP_TWR
-+  UNSPEC_VOLATILE_TLBOP_RWR
-+  UNSPEC_VOLATILE_TLBOP_RWLK
-+  UNSPEC_VOLATILE_TLBOP_UNLK
-+  UNSPEC_VOLATILE_TLBOP_PB
-+  UNSPEC_VOLATILE_TLBOP_INV
-+  UNSPEC_VOLATILE_TLBOP_FLUA
-+  UNSPEC_VOLATILE_ENABLE_INT
-+  UNSPEC_VOLATILE_DISABLE_INT
-+  UNSPEC_VOLATILE_SET_PENDING_SWINT
-+  UNSPEC_VOLATILE_CLR_PENDING_SWINT
-+  UNSPEC_VOLATILE_CLR_PENDING_HWINT
-+  UNSPEC_VOLATILE_GET_ALL_PENDING_INT
-+  UNSPEC_VOLATILE_GET_PENDING_INT
-+  UNSPEC_VOLATILE_SET_INT_PRIORITY
-+  UNSPEC_VOLATILE_GET_INT_PRIORITY
-+  UNSPEC_VOLATILE_SET_TRIG_LEVEL
-+  UNSPEC_VOLATILE_SET_TRIG_EDGE
-+  UNSPEC_VOLATILE_GET_TRIG_TYPE
-+  UNSPEC_VOLATILE_RELAX_GROUP
-+  UNSPEC_VOLATILE_INNERMOST_LOOP_BEGIN
-+  UNSPEC_VOLATILE_INNERMOST_LOOP_END
-+  UNSPEC_VOLATILE_MAYBE_ALIGN
-+  UNSPEC_VOLATILE_OMIT_FP_BEGIN
-+  UNSPEC_VOLATILE_OMIT_FP_END
-+  UNSPEC_VOLATILE_RETURN_ADDRESS
-+  UNSPEC_VOLATILE_POP25_RETURN
-+  UNSPEC_VOLATILE_UPDATE_GP
-+  UNSPEC_VOLATILE_SIGNATURE_BEGIN
-+  UNSPEC_VOLATILE_SIGNATURE_END
-+  UNSPEC_VOLATILE_NO_HWLOOP
-+  UNSPEC_VOLATILE_NO_IFC_BEGIN
-+  UNSPEC_VOLATILE_NO_IFC_END
-+  UNSPEC_VOLATILE_NO_EX9_BEGIN
-+  UNSPEC_VOLATILE_NO_EX9_END
-+  UNSPEC_VOLATILE_UNALIGNED_FEATURE
-+  UNSPEC_VOLATILE_ENABLE_UNALIGNED
-+  UNSPEC_VOLATILE_DISABLE_UNALIGNED
- ])
- 
- ;; ------------------------------------------------------------------------
-diff -Nur gcc-4.9.4.orig/gcc/config/nds32/constraints.md gcc-4.9.4/gcc/config/nds32/constraints.md
---- gcc-4.9.4.orig/gcc/config/nds32/constraints.md	2014-01-02 23:23:26.000000000 +0100
-+++ gcc-4.9.4/gcc/config/nds32/constraints.md	2016-08-08 20:37:45.498269782 +0200
-@@ -1,5 +1,5 @@
- ;; Constraint definitions of Andes NDS32 cpu for GNU compiler
--;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
-+;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
- ;; Contributed by Andes Technology Corporation.
- ;;
- ;; This file is part of GCC.
-@@ -25,9 +25,6 @@
- ;; Machine-dependent floating: G H
- 
- 
--(define_register_constraint "w" "(TARGET_ISA_V3 || TARGET_ISA_V3M) ? LOW_REGS : NO_REGS"
--  "LOW register class $r0 ~ $r7 constraint for V3/V3M ISA")
--
- (define_register_constraint "l" "LOW_REGS"
-   "LOW register class $r0 ~ $r7")
- 
-@@ -41,9 +38,59 @@
- (define_register_constraint "t" "R15_TA_REG"
-   "Temporary Assist register $ta (i.e. $r15)")
- 
-+(define_register_constraint "e" "R8_REG"
-+  "Function Entry register $r8)")
-+
- (define_register_constraint "k" "STACK_REG"
-   "Stack register $sp")
- 
-+(define_register_constraint "v" "R5_REG"
-+  "Register $r5")
-+
-+(define_register_constraint "x" "FRAME_POINTER_REG"
-+  "Frame pointer register $fp")
-+
-+(define_register_constraint "f"
-+  "(TARGET_FPU_SINGLE || TARGET_FPU_DOUBLE) ? FP_REGS : NO_REGS"
-+ "The Floating point registers $fs0 ~ $fs31")
-+
-+(define_register_constraint "A" "LOOP_REGS"
-+  "Loop register class")
-+
-+(define_constraint "Iv00"
-+  "Constant value 0"
-+  (and (match_code "const_int")
-+       (match_test "ival == 0")))
-+
-+(define_constraint "Iv01"
-+  "Constant value 1"
-+  (and (match_code "const_int")
-+       (match_test "ival == 1")))
-+
-+(define_constraint "Iv02"
-+  "Constant value 2"
-+  (and (match_code "const_int")
-+       (match_test "ival == 2")))
-+
-+(define_constraint "Iv04"
-+  "Constant value 4"
-+  (and (match_code "const_int")
-+       (match_test "ival == 4")))
-+
-+(define_constraint "Iv08"
-+  "Constant value 8"
-+  (and (match_code "const_int")
-+       (match_test "ival == 8")))
-+
-+(define_constraint "Iu01"
-+  "Unsigned immediate 1-bit value"
-+  (and (match_code "const_int")
-+       (match_test "ival == 1 || ival == 0")))
-+
-+(define_constraint "Iu02"
-+  "Unsigned immediate 2-bit value"
-+  (and (match_code "const_int")
-+       (match_test "ival < (1 << 2) && ival >= 0")))
- 
- (define_constraint "Iu03"
-   "Unsigned immediate 3-bit value"
-@@ -65,6 +112,11 @@
-   (and (match_code "const_int")
-        (match_test "ival < (1 << 4) && ival >= -(1 << 4)")))
- 
-+(define_constraint "Cs05"
-+  "Signed immediate 5-bit value"
-+  (and (match_code "const_double")
-+       (match_test "nds32_const_double_range_ok_p (op, SFmode, -(1 << 4), (1 << 4))")))
-+
- (define_constraint "Iu05"
-   "Unsigned immediate 5-bit value"
-   (and (match_code "const_int")
-@@ -75,6 +127,11 @@
-   (and (match_code "const_int")
-        (match_test "IN_RANGE (ival, -31, 0)")))
- 
-+(define_constraint "Iu06"
-+  "Unsigned immediate 6-bit value"
-+  (and (match_code "const_int")
-+       (match_test "ival < (1 << 6) && ival >= 0")))
-+
- ;; Ip05 is special and dedicated for v3 movpi45 instruction.
- ;; movpi45 has imm5u field but the range is 16 ~ 47.
- (define_constraint "Ip05"
-@@ -84,10 +141,10 @@
- 		    && ival >= (0 + 16)
- 		    && (TARGET_ISA_V3 || TARGET_ISA_V3M)")))
- 
--(define_constraint "Iu06"
-+(define_constraint "IU06"
-   "Unsigned immediate 6-bit value constraint for addri36.sp instruction"
-   (and (match_code "const_int")
--       (match_test "ival < (1 << 6)
-+       (match_test "ival < (1 << 8)
- 		    && ival >= 0
- 		    && (ival % 4 == 0)
- 		    && (TARGET_ISA_V3 || TARGET_ISA_V3M)")))
-@@ -103,6 +160,11 @@
-        (match_test "ival < (1 << 9) && ival >= 0")))
- 
- 
-+(define_constraint "Is08"
-+  "Signed immediate 8-bit value"
-+  (and (match_code "const_int")
-+       (match_test "ival < (1 << 7) && ival >= -(1 << 7)")))
-+
- (define_constraint "Is10"
-   "Signed immediate 10-bit value"
-   (and (match_code "const_int")
-@@ -113,6 +175,10 @@
-   (and (match_code "const_int")
-        (match_test "ival < (1 << 10) && ival >= -(1 << 10)")))
- 
-+(define_constraint "Is14"
-+  "Signed immediate 14-bit value"
-+  (and (match_code "const_int")
-+       (match_test "ival < (1 << 13) && ival >= -(1 << 13)")))
- 
- (define_constraint "Is15"
-   "Signed immediate 15-bit value"
-@@ -194,12 +260,21 @@
-   (and (match_code "const_int")
-        (match_test "ival < (1 << 19) && ival >= -(1 << 19)")))
- 
-+(define_constraint "Cs20"
-+  "Signed immediate 20-bit value"
-+  (and (match_code "const_double")
-+       (match_test "nds32_const_double_range_ok_p (op, SFmode, -(1 << 19), (1 << 19))")))
- 
- (define_constraint "Ihig"
-   "The immediate value that can be simply set high 20-bit"
-   (and (match_code "const_int")
-        (match_test "(ival != 0) && ((ival & 0xfff) == 0)")))
- 
-+(define_constraint "Chig"
-+  "The immediate value that can be simply set high 20-bit"
-+  (and (match_code "high")
-+       (match_test "GET_CODE (XEXP (op, 0)) == CONST_DOUBLE")))
-+
- (define_constraint "Izeb"
-   "The immediate value 0xff"
-   (and (match_code "const_int")
-@@ -213,12 +288,12 @@
- (define_constraint "Ixls"
-   "The immediate value 0x01"
-   (and (match_code "const_int")
--       (match_test "TARGET_PERF_EXT && (ival == 0x1)")))
-+       (match_test "TARGET_EXT_PERF && (ival == 0x1)")))
- 
- (define_constraint "Ix11"
-   "The immediate value 0x7ff"
-   (and (match_code "const_int")
--       (match_test "TARGET_PERF_EXT && (ival == 0x7ff)")))
-+       (match_test "TARGET_EXT_PERF && (ival == 0x7ff)")))
- 
- (define_constraint "Ibms"
-   "The immediate value with power of 2"
-@@ -232,23 +307,70 @@
-        (match_test "(TARGET_ISA_V3 || TARGET_ISA_V3M)
- 		    && (IN_RANGE (exact_log2 (ival + 1), 1, 8))")))
- 
-+(define_constraint "CVp5"
-+  "Unsigned immediate 5-bit value for movpi45 instruction with range 16-47"
-+  (and (match_code "const_vector")
-+       (match_test "nds32_valid_CVp5_p (op)")))
-+
-+(define_constraint "CVs5"
-+  "Signed immediate 5-bit value"
-+  (and (match_code "const_vector")
-+       (match_test "nds32_valid_CVs5_p (op)")))
-+
-+(define_constraint "CVs2"
-+  "Signed immediate 20-bit value"
-+  (and (match_code "const_vector")
-+       (match_test "nds32_valid_CVs2_p (op)")))
-+
-+(define_constraint "CVhi"
-+  "The immediate value that can be simply set high 20-bit"
-+  (and (match_code "const_vector")
-+       (match_test "nds32_valid_CVhi_p (op)")))
- 
- (define_memory_constraint "U33"
-   "Memory constraint for 333 format"
-   (and (match_code "mem")
--       (match_test "nds32_mem_format (op) == ADDRESS_LO_REG_IMM3U")))
-+       (match_test "nds32_mem_format (op) == ADDRESS_POST_INC_LO_REG_IMM3U
-+		    || nds32_mem_format (op) == ADDRESS_POST_MODIFY_LO_REG_IMM3U
-+		    || nds32_mem_format (op) == ADDRESS_LO_REG_IMM3U")))
- 
- (define_memory_constraint "U45"
-   "Memory constraint for 45 format"
-   (and (match_code "mem")
-        (match_test "(nds32_mem_format (op) == ADDRESS_REG)
--		    && (GET_MODE (op) == SImode)")))
-+		    && ((GET_MODE (op) == SImode)
-+		       || (GET_MODE (op) == SFmode))")))
-+
-+(define_memory_constraint "Ufe"
-+  "Memory constraint for fe format"
-+  (and (match_code "mem")
-+       (match_test "nds32_mem_format (op) == ADDRESS_R8_IMM7U
-+		    && (GET_MODE (op) == SImode
-+			|| GET_MODE (op) == SFmode)")))
- 
- (define_memory_constraint "U37"
-   "Memory constraint for 37 format"
-   (and (match_code "mem")
-        (match_test "(nds32_mem_format (op) == ADDRESS_SP_IMM7U
- 		    || nds32_mem_format (op) == ADDRESS_FP_IMM7U)
--		    && (GET_MODE (op) == SImode)")))
-+		    && (GET_MODE (op) == SImode
-+			|| GET_MODE (op) == SFmode)")))
-+
-+(define_memory_constraint "Umw"
-+  "Memory constraint for lwm/smw"
-+  (and (match_code "mem")
-+       (match_test "nds32_valid_smw_lwm_base_p (op)")))
-+
-+(define_memory_constraint "Da"
-+  "Memory constraint for non-offset loads/stores"
-+  (and (match_code "mem")
-+       (match_test "REG_P (XEXP (op, 0))
-+		    || (GET_CODE (XEXP (op, 0)) == POST_INC)")))
-+
-+(define_memory_constraint "Q"
-+  "Memory constraint for no symbol_ref and const"
-+  (and (match_code "mem")
-+       (match_test "(TARGET_FPU_SINGLE || TARGET_FPU_DOUBLE)
-+