diff mbox series

[LEDE-DEV,2/2] toolchain/arc: update to the most recent release arc-2017.09

Message ID 20180124172603.10249-3-Evgeniy.Didin@synopsys.com
State Accepted
Delegated to: Hauke Mehrtens
Headers show
Series toolchain/arc: update to release arc-2017.09 | expand

Commit Message

Evgeniy Didin Jan. 24, 2018, 5:26 p.m. UTC
This commit finally bumps ARC tools to the most recent arc-2017.09 release version.

ARC GNU tools of version arc-2017.09 bring some quite significant changes like:
 * Binutils v2.29 with additional ARC patches
 * GCC 7.1.1 with additional ARC patches

More information on this release could be found here: 
  https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/tag/arc-2017.09-release 

Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
CC: Alexey Brodkin <abrodkin@synopsys.com>
CC: John Crispin <john@phrozen.org>
---
 package/devel/gdb-arc/Makefile                     |   6 +-
 toolchain/binutils/Config.in                       |   8 +-
 toolchain/binutils/Config.version                  |   4 +-
 toolchain/binutils/Makefile                        |   6 +-
 toolchain/gcc/Config.in                            |   8 +-
 toolchain/gcc/Config.version                       |   8 +-
 toolchain/gcc/common.mk                            |   8 +-
 .../arc-2017.03-release/230-musl_libssp.patch      |  13 ---
 .../280-musl-disable-ifunc-by-default.patch        |  36 -------
 .../300-mips_Os_cpu_rtx_cost_model.patch           |  11 ---
 .../800-arm_v5te_no_ldrd_strd.patch                |  11 ---
 .../830-arm_unbreak_armv4t.patch                   |  13 ---
 .../arc-2017.03-release/870-ppc_no_crtsavres.patch |  11 ---
 .../arc-2017.03-release/880-no_java_section.patch  |  11 ---
 .../arc-2017.03-release/881-no_tm_section.patch    |  11 ---
 .../arc-2017.03-release/900-bad-mips16-crt.patch   |   9 --
 .../940-no-clobber-stamp-bits.patch                |  11 ---
 .../001-revert_register_mode_search.patch          |  14 ++-
 .../002-case_insensitive.patch                     |  10 ++
 .../010-documentation.patch                        |  14 ++-
 .../arc-2017.09-release/230-musl_libssp.patch      |  28 ++++++
 .../300-mips_Os_cpu_rtx_cost_model.patch           |  21 ++++
 .../800-arm_v5te_no_ldrd_strd.patch                |  32 ++++++
 .../810-arm-softfloat-libgcc.patch                 |  10 +-
 .../820-libgcc_pic.patch                           |  14 ++-
 .../840-armv4_pass_fix-v4bx_to_ld.patch            |  11 ++-
 .../850-use_shared_libgcc.patch                    |  11 ++-
 .../851-libgcc_no_compat.patch                     |  10 ++
 .../arc-2017.09-release/870-ppc_no_crtsavres.patch |  18 ++++
 .../arc-2017.09-release/881-no_tm_section.patch    |  22 +++++
 .../arc-2017.09-release/900-bad-mips16-crt.patch   |  30 ++++++
 .../910-mbsd_multi.patch                           | 110 ++++-----------------
 .../920-specs_nonfatal_getenv.patch                |   9 +-
 .../930-fix-mips-noexecstack.patch                 |   6 +-
 .../940-no-clobber-stamp-bits.patch                |  33 +++++++
 .../950-cpp_file_path_translation.patch            |  43 ++++----
 toolchain/gdb/Makefile                             |   6 +-
 37 files changed, 345 insertions(+), 292 deletions(-)
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/230-musl_libssp.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/280-musl-disable-ifunc-by-default.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/300-mips_Os_cpu_rtx_cost_model.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/800-arm_v5te_no_ldrd_strd.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/830-arm_unbreak_armv4t.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/870-ppc_no_crtsavres.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/880-no_java_section.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/881-no_tm_section.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/900-bad-mips16-crt.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.03-release/940-no-clobber-stamp-bits.patch
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/001-revert_register_mode_search.patch (84%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/002-case_insensitive.patch (64%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/010-documentation.patch (65%)
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/230-musl_libssp.patch
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/300-mips_Os_cpu_rtx_cost_model.patch
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/800-arm_v5te_no_ldrd_strd.patch
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/810-arm-softfloat-libgcc.patch (80%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/820-libgcc_pic.patch (71%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/840-armv4_pass_fix-v4bx_to_ld.patch (78%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/850-use_shared_libgcc.patch (81%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/851-libgcc_no_compat.patch (63%)
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/870-ppc_no_crtsavres.patch
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/881-no_tm_section.patch
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/900-bad-mips16-crt.patch
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/910-mbsd_multi.patch (50%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/920-specs_nonfatal_getenv.patch (59%)
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/930-fix-mips-noexecstack.patch (95%)
 create mode 100644 toolchain/gcc/patches/arc-2017.09-release/940-no-clobber-stamp-bits.patch
 rename toolchain/gcc/patches/{arc-2017.03-release => arc-2017.09-release}/950-cpp_file_path_translation.patch (80%)

Comments

Hauke Mehrtens Jan. 24, 2018, 8:43 p.m. UTC | #1
On 01/24/2018 06:26 PM, Evgeniy Didin wrote:
> This commit finally bumps ARC tools to the most recent arc-2017.09 release version.
> 
> ARC GNU tools of version arc-2017.09 bring some quite significant changes like:
>  * Binutils v2.29 with additional ARC patches
>  * GCC 7.1.1 with additional ARC patches
> 
> More information on this release could be found here: 
>   https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/tag/arc-2017.09-release 
> 
> Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
> CC: Alexey Brodkin <abrodkin@synopsys.com>
> CC: John Crispin <john@phrozen.org>
> ---

Would it be possible to use upstream gcc 7, upstream binutils 2.29 and
upstream gdb 8 instead of the special arc versions?
If you need some extra patches you can add them to the existing patches
directory.

If this is not possible will this be possible with the next major
versions of gcc, binutils and gdb?

I would like to get rid of most of the arc specialties and make arc
behave more like all the other targets.

Hauke
Alexey Brodkin Jan. 24, 2018, 8:52 p.m. UTC | #2
Hi Hauke,

On Wed, 2018-01-24 at 21:43 +0100, Hauke Mehrtens wrote:
> On 01/24/2018 06:26 PM, Evgeniy Didin wrote:
> > This commit finally bumps ARC tools to the most recent arc-2017.09 release version.
> > 
> > ARC GNU tools of version arc-2017.09 bring some quite significant changes like:
> >  * Binutils v2.29 with additional ARC patches
> >  * GCC 7.1.1 with additional ARC patches
> > 
> > More information on this release could be found here: 
> >   https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_foss-2Dfor-2Dsynopsys-2Ddwc-2Darc-2Dprocessors_toolchain_releases_tag_arc-2D2017
> > .09-2Drelease&d=DwICaQ&c=DPL6_X_6JkXFx7AXWqB0tg&r=lqdeeSSEes0GFDDl656eViXO7breS55ytWkhpk5R81I&m=2rUJ8ayGY-
> > 54h0qn7dft_Zi3T1jFwJ88tA46p6c9l_I&s=U9snLQpnWd5Ku9JtYuf1pnf0YOcXzlrV5CnhDxTAepU&e= 
> > 
> > Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com>
> > CC: Alexey Brodkin <abrodkin@synopsys.com>
> > CC: John Crispin <john@phrozen.org>
> > ---
> 
> Would it be possible to use upstream gcc 7, upstream binutils 2.29 and
> upstream gdb 8 instead of the special arc versions?
> If you need some extra patches you can add them to the existing patches
> directory.

That's perfectly possible even though there're still some patches that didn't make
its way into latest releases of GCC and Binutils.

So the plan was to first bump versions of our tarballs and see how it goes
and if all goes smooth switch to upstream releases.

Otherwise if we switch right from much older tools based on GCC 6.3 (if I'm not mistaken)
and Binutils (2.27 or what) to GCC 7.2 and Binutils 2.29 chances are much higher that
something goes wrong and we'll spend much more time on fixing things.

> If this is not possible will this be possible with the next major
> versions of gcc, binutils and gdb?
> 
> I would like to get rid of most of the arc specialties and make arc
> behave more like all the other targets.

That's very well understood and we're very close to this.
Also note we have working glibc for ARCv2 (read archs48) which is being actively
reviewed on glibc's mailing list. Unfortunately it looks like ARC port won't be
a part of the next glibc's release [mostly because with pure upstream tools we're
getting a bit too much of failures in glibc's test-suite] but for the next one
I hope we'll be well prepared.

-Alexey
diff mbox series

Patch

diff --git a/package/devel/gdb-arc/Makefile b/package/devel/gdb-arc/Makefile
index 6cdf6bdf5f..7d087ffcb6 100644
--- a/package/devel/gdb-arc/Makefile
+++ b/package/devel/gdb-arc/Makefile
@@ -8,14 +8,14 @@ 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=gdb-arc
-PKG_VERSION:=arc-2017.03-gdb
+PKG_VERSION:=arc-2017.09-gdb
 PKG_RELEASE:=1
 
-PKG_SOURCE:=gdb-arc-2017.03-gdb.tar.gz
+PKG_SOURCE:=gdb-arc-2017.09-gdb.tar.gz
 PKG_SOURCE_URL:=https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/archive/$(PKG_VERSION)
 PKG_HASH:=6a91f86cc487c1548d3f5d4f29f7226d2019c0db8a63633aeabd5914a340f3f9
 
-PKG_BUILD_DIR:=$(BUILD_DIR)/binutils-gdb-arc-2017.03-gdb
+PKG_BUILD_DIR:=$(BUILD_DIR)/binutils-gdb-arc-2017.09-gdb
 
 PKG_BUILD_PARALLEL:=1
 PKG_INSTALL:=1
diff --git a/toolchain/binutils/Config.in b/toolchain/binutils/Config.in
index 25f721a6b5..56bcd162a2 100644
--- a/toolchain/binutils/Config.in
+++ b/toolchain/binutils/Config.in
@@ -3,7 +3,7 @@ 
 choice
 	prompt "Binutils Version" if TOOLCHAINOPTS
 	default BINUTILS_USE_VERSION_2_28 if !arc
-	default BINUTILS_USE_VERSION_2_28_ARC if arc
+	default BINUTILS_USE_VERSION_2_29_ARC if arc
 	help
 	  Select the version of binutils you wish to use.
 
@@ -17,10 +17,10 @@  choice
 		bool "Binutils 2.28"
 		select BINUTILS_VERSION_2_28
 
-	config BINUTILS_USE_VERSION_2_28_ARC
+	config BINUTILS_USE_VERSION_2_29_ARC
 		depends on arc
-		bool "ARC binutils 2.28"
-		select BINUTILS_VERSION_2_28_ARC
+		bool "ARC binutils 2.29"
+		select BINUTILS_VERSION_2_29_ARC
 
 	config BINUTILS_USE_VERSION_2_29_1
 		depends on !arc
diff --git a/toolchain/binutils/Config.version b/toolchain/binutils/Config.version
index 54df1730c7..159a25f10f 100644
--- a/toolchain/binutils/Config.version
+++ b/toolchain/binutils/Config.version
@@ -5,7 +5,7 @@  config BINUTILS_VERSION_2_28
 	default y if (!TOOLCHAINOPTS && !arc)
 	bool
 
-config BINUTILS_VERSION_2_28_ARC
+config BINUTILS_VERSION_2_29_ARC
 	default y if (!TOOLCHAINOPTS && arc)
 	bool
 
@@ -17,4 +17,4 @@  config BINUTILS_VERSION
 	default "2.27"		       if BINUTILS_VERSION_2_27
 	default "2.28"		       if BINUTILS_VERSION_2_28
 	default "2.29.1"	       if BINUTILS_VERSION_2_29_1
-	default "arc-2017.03"          if BINUTILS_VERSION_2_28_ARC
+	default "arc-2017.09"          if BINUTILS_VERSION_2_29_ARC
diff --git a/toolchain/binutils/Makefile b/toolchain/binutils/Makefile
index fd4af5c25c..c46d29933d 100644
--- a/toolchain/binutils/Makefile
+++ b/toolchain/binutils/Makefile
@@ -25,11 +25,11 @@  ifeq ($(PKG_VERSION),2.29.1)
   PKG_HASH:=1509dff41369fb70aed23682351b663b56db894034773e6dbf7d5d6071fc55cc
 endif
 
-ifneq ($(CONFIG_BINUTILS_VERSION_2_28_ARC),)
-  PKG_REV:=arc-2017.03-release
+ifneq ($(CONFIG_BINUTILS_VERSION_2_29_ARC),)
+  PKG_REV:=arc-2017.09-release
   PKG_SOURCE_URL:=https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/archive/$(PKG_REV)/
   PKG_SOURCE:=$(PKG_NAME)-$(PKG_REV).tar.gz
-  PKG_HASH:=f9c1e09ef10aaf9619181f49587f464ba0a70d29b7f6f879047140acac852409
+  PKG_HASH:=2ea086fd5521e942926dd6ff6922ce31c29ee7ffc754fca3d06385e0f27600f8
   BINUTILS_DIR:=$(PKG_NAME)-gdb-$(PKG_REV)
   HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(BINUTILS_DIR)
 endif
diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in
index a54c8d12d3..06e9f487b9 100644
--- a/toolchain/gcc/Config.in
+++ b/toolchain/gcc/Config.in
@@ -2,14 +2,14 @@ 
 
 choice
 	prompt "GCC compiler Version" if TOOLCHAINOPTS
-	default GCC_USE_VERSION_6_3_ARC if arc
+	default GCC_USE_VERSION_7_1_ARC if arc
 	default GCC_USE_VERSION_5
 	help
 	  Select the version of gcc you wish to use.
 
-	config GCC_USE_VERSION_6_3_ARC
-		select GCC_VERSION_6_3_ARC
-		bool "gcc 6.3.x with support of ARC cores"
+	config GCC_USE_VERSION_7_1_ARC
+		select GCC_VERSION_7_1_ARC
+		bool "gcc 7.1.x with support of ARC cores"
 		depends on arc
 
 	config GCC_USE_VERSION_5
diff --git a/toolchain/gcc/Config.version b/toolchain/gcc/Config.version
index 4edf8a87a9..ee0f3f10c3 100644
--- a/toolchain/gcc/Config.version
+++ b/toolchain/gcc/Config.version
@@ -1,14 +1,14 @@ 
-config GCC_VERSION_6_3_ARC
+config GCC_VERSION_7_1_ARC
 	default y if (!TOOLCHAINOPTS && arc)
 	bool
 
 config GCC_VERSION
 	string
-	default "arc-2017.03-release"   if GCC_VERSION_6_3_ARC
+	default "arc-2017.09-release"   if GCC_VERSION_7_1_ARC
 	default "6.3.0"         if GCC_USE_VERSION_6
 	default "7.2.0"         if GCC_USE_VERSION_7
 	default "5.5.0"
 
-config GCC_VERSION_6_3
+config GCC_VERSION_7_1
 	bool
-	default y	if GCC_VERSION_6_3_ARC
+	default y	if GCC_VERSION_7_1_ARC
diff --git a/toolchain/gcc/common.mk b/toolchain/gcc/common.mk
index 69214aca03..7c4e773a0f 100644
--- a/toolchain/gcc/common.mk
+++ b/toolchain/gcc/common.mk
@@ -41,12 +41,12 @@  ifeq ($(PKG_VERSION),7.2.0)
   PKG_HASH:=1cf7adf8ff4b5aa49041c8734bbcf1ad18cc4c94d0029aae0f4e48841088479a
 endif
 
-ifneq ($(CONFIG_GCC_VERSION_6_3_ARC),)
-    PKG_VERSION:=6.3.0
+ifneq ($(CONFIG_GCC_VERSION_7_1_ARC),)
+    PKG_VERSION:=7.1.1
     PKG_SOURCE_URL:=https://github.com/foss-for-synopsys-dwc-arc-processors/gcc/archive/$(GCC_VERSION)
     PKG_SOURCE:=$(PKG_NAME)-$(GCC_VERSION).tar.gz
-    PKG_HASH:=b7223e134199b1a6f71de629da6aa845790e55d28e9892143dde09b1bc878110
-    PKG_REV:=2017.03-release
+    PKG_HASH:=90596af8b9c26a434cec0a3b3d37d0c7c755ab6a65496af6ca32529fab5a6cfe
+    PKG_REV:=2017.09-release
     GCC_DIR:=gcc-arc-$(PKG_REV)
     HOST_BUILD_DIR = $(BUILD_DIR_HOST)/$(PKG_NAME)-$(GCC_VERSION)
 endif
diff --git a/toolchain/gcc/patches/arc-2017.03-release/230-musl_libssp.patch b/toolchain/gcc/patches/arc-2017.03-release/230-musl_libssp.patch
deleted file mode 100644
index 8dfd1fc287..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/230-musl_libssp.patch
+++ /dev/null
@@ -1,13 +0,0 @@ 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
-@@ -858,7 +858,9 @@ proper position among the other output f
- #endif
- 
- #ifndef LINK_SSP_SPEC
--#ifdef TARGET_LIBC_PROVIDES_SSP
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define LINK_SSP_SPEC "-lssp_nonshared"
-+#elif defined(TARGET_LIBC_PROVIDES_SSP)
- #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
- 		       "|fstack-protector-strong|fstack-protector-explicit:}"
- #else
diff --git a/toolchain/gcc/patches/arc-2017.03-release/280-musl-disable-ifunc-by-default.patch b/toolchain/gcc/patches/arc-2017.03-release/280-musl-disable-ifunc-by-default.patch
deleted file mode 100644
index df09e4f636..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/280-musl-disable-ifunc-by-default.patch
+++ /dev/null
@@ -1,36 +0,0 @@ 
-From 450fb05e2a7510d37744f044009f8237d902f65c Mon Sep 17 00:00:00 2001
-From: nsz <nsz@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Tue, 30 Aug 2016 10:26:22 +0000
-Subject: [PATCH] disable ifunc on *-musl by default
-
-gcc/
-	* config.gcc (*-*-*musl*): Disable gnu-indirect-function.
-
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@239859 138bc75d-0d04-0410-961f-82ee72b054a4
----
- gcc/ChangeLog  | 4 ++++
- gcc/config.gcc | 4 ++--
- 2 files changed, 6 insertions(+), 2 deletions(-)
-
---- a/gcc/config.gcc
-+++ b/gcc/config.gcc
-@@ -1495,7 +1495,7 @@ i[34567]86-*-linux* | i[34567]86-*-kfree
- 		extra_options="${extra_options} linux-android.opt"
- 		# Assume modern glibc if not targeting Android nor uclibc.
- 		case ${target} in
--		*-*-*android*|*-*-*uclibc*)
-+		*-*-*android*|*-*-*uclibc*|*-*-*musl*)
- 		  ;;
- 		*)
- 		  default_gnu_indirect_function=yes
-@@ -1564,7 +1564,7 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu
- 		extra_options="${extra_options} linux-android.opt"
- 		# Assume modern glibc if not targeting Android nor uclibc.
- 		case ${target} in
--		*-*-*android*|*-*-*uclibc*)
-+		*-*-*android*|*-*-*uclibc*|*-*-*musl*)
- 		  ;;
- 		*)
- 		  default_gnu_indirect_function=yes
diff --git a/toolchain/gcc/patches/arc-2017.03-release/300-mips_Os_cpu_rtx_cost_model.patch b/toolchain/gcc/patches/arc-2017.03-release/300-mips_Os_cpu_rtx_cost_model.patch
deleted file mode 100644
index d76bd8cb1d..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/300-mips_Os_cpu_rtx_cost_model.patch
+++ /dev/null
@@ -1,11 +0,0 @@ 
---- a/gcc/config/mips/mips.c
-+++ b/gcc/config/mips/mips.c
-@@ -17928,7 +17928,7 @@ mips_option_override (void)
-     flag_pcc_struct_return = 0;
- 
-   /* Decide which rtx_costs structure to use.  */
--  if (optimize_size)
-+  if (0 && optimize_size)
-     mips_cost = &mips_rtx_cost_optimize_size;
-   else
-     mips_cost = &mips_rtx_cost_data[mips_tune];
diff --git a/toolchain/gcc/patches/arc-2017.03-release/800-arm_v5te_no_ldrd_strd.patch b/toolchain/gcc/patches/arc-2017.03-release/800-arm_v5te_no_ldrd_strd.patch
deleted file mode 100644
index 2e7c23f851..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/800-arm_v5te_no_ldrd_strd.patch
+++ /dev/null
@@ -1,11 +0,0 @@ 
---- a/gcc/config/arm/arm.h
-+++ b/gcc/config/arm/arm.h
-@@ -166,7 +166,7 @@ extern void (*arm_lang_output_object_att
- /* Thumb-1 only.  */
- #define TARGET_THUMB1_ONLY		(TARGET_THUMB1 && !arm_arch_notm)
- 
--#define TARGET_LDRD			(arm_arch5e && ARM_DOUBLEWORD_ALIGN \
-+#define TARGET_LDRD			(arm_arch6 && ARM_DOUBLEWORD_ALIGN \
-                                          && !TARGET_THUMB1)
- 
- #define TARGET_CRC32			(arm_arch_crc)
diff --git a/toolchain/gcc/patches/arc-2017.03-release/830-arm_unbreak_armv4t.patch b/toolchain/gcc/patches/arc-2017.03-release/830-arm_unbreak_armv4t.patch
deleted file mode 100644
index 37f8f2a54d..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/830-arm_unbreak_armv4t.patch
+++ /dev/null
@@ -1,13 +0,0 @@ 
-http://sourceware.org/ml/crossgcc/2008-05/msg00009.html
-
---- a/gcc/config/arm/linux-eabi.h
-+++ b/gcc/config/arm/linux-eabi.h
-@@ -45,7 +45,7 @@
-    The ARM10TDMI core is the default for armv5t, so set
-    SUBTARGET_CPU_DEFAULT to achieve this.  */
- #undef  SUBTARGET_CPU_DEFAULT
--#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
-+#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
- 
- /* TARGET_BIG_ENDIAN_DEFAULT is set in
-    config.gcc for big endian configurations.  */
diff --git a/toolchain/gcc/patches/arc-2017.03-release/870-ppc_no_crtsavres.patch b/toolchain/gcc/patches/arc-2017.03-release/870-ppc_no_crtsavres.patch
deleted file mode 100644
index 9e543a0fc2..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/870-ppc_no_crtsavres.patch
+++ /dev/null
@@ -1,11 +0,0 @@ 
---- a/gcc/config/rs6000/rs6000.c
-+++ b/gcc/config/rs6000/rs6000.c
-@@ -24171,7 +24171,7 @@ rs6000_savres_strategy (rs6000_stack_t *
-   /* Define cutoff for using out-of-line functions to save registers.  */
-   if (DEFAULT_ABI == ABI_V4 || TARGET_ELF)
-     {
--      if (!optimize_size)
-+      if (1)
- 	{
- 	  strategy |= SAVE_INLINE_FPRS | REST_INLINE_FPRS;
- 	  strategy |= SAVE_INLINE_GPRS | REST_INLINE_GPRS;
diff --git a/toolchain/gcc/patches/arc-2017.03-release/880-no_java_section.patch b/toolchain/gcc/patches/arc-2017.03-release/880-no_java_section.patch
deleted file mode 100644
index 0fa9e627c2..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/880-no_java_section.patch
+++ /dev/null
@@ -1,11 +0,0 @@ 
---- a/gcc/defaults.h
-+++ b/gcc/defaults.h
-@@ -395,7 +395,7 @@ see the files COPYING3 and COPYING.RUNTI
- /* If we have named section and we support weak symbols, then use the
-    .jcr section for recording java classes which need to be registered
-    at program start-up time.  */
--#if defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK
-+#if 0 && defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK
- #ifndef JCR_SECTION_NAME
- #define JCR_SECTION_NAME ".jcr"
- #endif
diff --git a/toolchain/gcc/patches/arc-2017.03-release/881-no_tm_section.patch b/toolchain/gcc/patches/arc-2017.03-release/881-no_tm_section.patch
deleted file mode 100644
index fab5db3be5..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/881-no_tm_section.patch
+++ /dev/null
@@ -1,11 +0,0 @@ 
---- a/libgcc/crtstuff.c
-+++ b/libgcc/crtstuff.c
-@@ -152,7 +152,7 @@ call_ ## FUNC (void)					\
- #endif
- 
- #if !defined(USE_TM_CLONE_REGISTRY) && defined(OBJECT_FORMAT_ELF)
--# define USE_TM_CLONE_REGISTRY 1
-+# define USE_TM_CLONE_REGISTRY 0
- #endif
- 
- /* We do not want to add the weak attribute to the declarations of these
diff --git a/toolchain/gcc/patches/arc-2017.03-release/900-bad-mips16-crt.patch b/toolchain/gcc/patches/arc-2017.03-release/900-bad-mips16-crt.patch
deleted file mode 100644
index dd6e9dc889..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/900-bad-mips16-crt.patch
+++ /dev/null
@@ -1,9 +0,0 @@ 
---- a/libgcc/config/mips/t-mips16
-+++ b/libgcc/config/mips/t-mips16
-@@ -43,3 +43,6 @@ SYNC_CFLAGS = -mno-mips16
- 
- # Version these symbols if building libgcc.so.
- SHLIB_MAPFILES += $(srcdir)/config/mips/libgcc-mips16.ver
-+
-+CRTSTUFF_T_CFLAGS += -mno-mips16
-+CRTSTUFF_T_CFLAGS_S += -mno-mips16
diff --git a/toolchain/gcc/patches/arc-2017.03-release/940-no-clobber-stamp-bits.patch b/toolchain/gcc/patches/arc-2017.03-release/940-no-clobber-stamp-bits.patch
deleted file mode 100644
index 68e62865b1..0000000000
--- a/toolchain/gcc/patches/arc-2017.03-release/940-no-clobber-stamp-bits.patch
+++ /dev/null
@@ -1,11 +0,0 @@ 
---- a/libstdc++-v3/include/Makefile.in
-+++ b/libstdc++-v3/include/Makefile.in
-@@ -1459,7 +1459,7 @@ stamp-bits: ${bits_headers}
- 	@$(STAMP) stamp-bits
- 
- stamp-bits-sup: stamp-bits ${bits_sup_headers}
--	@-cd ${bits_builddir} && $(LN_S) $? . 2>/dev/null
-+	@-cd ${bits_builddir} && $(LN_S) $(filter-out stamp-bits,$?) . 2>/dev/null
- 	@$(STAMP) stamp-bits-sup
- 
- stamp-c_base: ${c_base_headers}
diff --git a/toolchain/gcc/patches/arc-2017.03-release/001-revert_register_mode_search.patch b/toolchain/gcc/patches/arc-2017.09-release/001-revert_register_mode_search.patch
similarity index 84%
rename from toolchain/gcc/patches/arc-2017.03-release/001-revert_register_mode_search.patch
rename to toolchain/gcc/patches/arc-2017.09-release/001-revert_register_mode_search.patch
index bd6fbdb4a9..63e3fee003 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/001-revert_register_mode_search.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/001-revert_register_mode_search.patch
@@ -1,3 +1,15 @@ 
+commit 31285a20390a5e53a74a2a71d1b5c82f366ddd5a
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Tue May 6 11:49:05 2014 +0000
+
+    gcc: revert an upstream patch that is causing a regression on powerpc
+    
+    https://forum.openwrt.org/viewtopic.php?pid=232494#p232494
+    
+    Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+    
+    SVN-Revision: 40709
+
 Revert of:
 
 commit 275035b56823b26d5fb7e90fad945b998648edf2
@@ -14,7 +26,7 @@  Date:   Thu Sep 5 14:09:07 2013 +0000
 
 --- a/gcc/reginfo.c
 +++ b/gcc/reginfo.c
-@@ -625,35 +625,40 @@ choose_hard_reg_mode (unsigned int regno
+@@ -637,35 +637,40 @@ choose_hard_reg_mode (unsigned int regno
         mode = GET_MODE_WIDER_MODE (mode))
      if ((unsigned) hard_regno_nregs[regno][mode] == nregs
  	&& HARD_REGNO_MODE_OK (regno, mode)
diff --git a/toolchain/gcc/patches/arc-2017.03-release/002-case_insensitive.patch b/toolchain/gcc/patches/arc-2017.09-release/002-case_insensitive.patch
similarity index 64%
rename from toolchain/gcc/patches/arc-2017.03-release/002-case_insensitive.patch
rename to toolchain/gcc/patches/arc-2017.09-release/002-case_insensitive.patch
index b3d2dbe291..3442076d7d 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/002-case_insensitive.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/002-case_insensitive.patch
@@ -1,3 +1,13 @@ 
+commit 81cc26c706b2bc8c8c1eb1a322e5c5157900836e
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Sun Oct 19 21:45:51 2014 +0000
+
+    gcc: do not assume that the Mac OS X filesystem is case insensitive
+    
+    Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+    
+    SVN-Revision: 42973
+
 --- a/include/filenames.h
 +++ b/include/filenames.h
 @@ -43,11 +43,6 @@ extern "C" {
diff --git a/toolchain/gcc/patches/arc-2017.03-release/010-documentation.patch b/toolchain/gcc/patches/arc-2017.09-release/010-documentation.patch
similarity index 65%
rename from toolchain/gcc/patches/arc-2017.03-release/010-documentation.patch
rename to toolchain/gcc/patches/arc-2017.09-release/010-documentation.patch
index 2adb28c83d..0106814f41 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/010-documentation.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/010-documentation.patch
@@ -1,6 +1,18 @@ 
+commit 098bd91f5eae625c7d2ee621e10930fc4434e5e2
+Author: Luka Perkov <luka@openwrt.org>
+Date:   Tue Feb 26 16:16:33 2013 +0000
+
+    gcc: don't build documentation
+    
+    This closes #13039.
+    
+    Signed-off-by: Luka Perkov <luka@openwrt.org>
+    
+    SVN-Revision: 35807
+
 --- a/gcc/Makefile.in
 +++ b/gcc/Makefile.in
-@@ -3021,18 +3021,10 @@ doc/gcc.info: $(TEXI_GCC_FILES)
+@@ -3121,18 +3121,10 @@ doc/gcc.info: $(TEXI_GCC_FILES)
  doc/gccint.info: $(TEXI_GCCINT_FILES)
  doc/cppinternals.info: $(TEXI_CPPINT_FILES)
  
diff --git a/toolchain/gcc/patches/arc-2017.09-release/230-musl_libssp.patch b/toolchain/gcc/patches/arc-2017.09-release/230-musl_libssp.patch
new file mode 100644
index 0000000000..eebee9175c
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/230-musl_libssp.patch
@@ -0,0 +1,28 @@ 
+commit 1877bc9d8f2be143fbe530347a945850d0ecd234
+Author: Steven Barth <cyrus@openwrt.org>
+Date:   Mon Jun 22 10:31:07 2015 +0000
+
+    gcc/musl: rework SSP-support
+    
+    Make musl provide libssp_nonshared.a and make GCC link it unconditionally
+    if musl is used. This should be a no-op if SSP is disabled and seems to be
+    the only reliable way of dealing with SSP over all packages due to the mess
+    that is linkerflags handling in packages.
+    
+    Signed-off-by: Steven Barth <steven@midlink.org>
+    
+    SVN-Revision: 46108
+
+--- a/gcc/gcc.c
++++ b/gcc/gcc.c
+@@ -861,7 +861,9 @@ proper position among the other output f
+ #endif
+ 
+ #ifndef LINK_SSP_SPEC
+-#ifdef TARGET_LIBC_PROVIDES_SSP
++#if DEFAULT_LIBC == LIBC_MUSL
++#define LINK_SSP_SPEC "-lssp_nonshared"
++#elif defined(TARGET_LIBC_PROVIDES_SSP)
+ #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
+ 		       "|fstack-protector-strong|fstack-protector-explicit:}"
+ #else
diff --git a/toolchain/gcc/patches/arc-2017.09-release/300-mips_Os_cpu_rtx_cost_model.patch b/toolchain/gcc/patches/arc-2017.09-release/300-mips_Os_cpu_rtx_cost_model.patch
new file mode 100644
index 0000000000..84c0fdab66
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/300-mips_Os_cpu_rtx_cost_model.patch
@@ -0,0 +1,21 @@ 
+commit ecf7671b769fe96f7b5134be442089f8bdba55d2
+Author: Felix Fietkau <nbd@nbd.name>
+Date:   Thu Aug 4 20:29:45 2016 +0200
+
+gcc: add a patch to generate better code with Os on mips
+
+Also happens to reduce compressed code size a bit
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+
+--- a/gcc/config/mips/mips.c
++++ b/gcc/config/mips/mips.c
+@@ -19784,7 +19784,7 @@ mips_option_override (void)
+     flag_pcc_struct_return = 0;
+ 
+   /* Decide which rtx_costs structure to use.  */
+-  if (optimize_size)
++  if (0 && optimize_size)
+     mips_cost = &mips_rtx_cost_optimize_size;
+   else
+     mips_cost = &mips_rtx_cost_data[mips_tune];
diff --git a/toolchain/gcc/patches/arc-2017.09-release/800-arm_v5te_no_ldrd_strd.patch b/toolchain/gcc/patches/arc-2017.09-release/800-arm_v5te_no_ldrd_strd.patch
new file mode 100644
index 0000000000..76200a1661
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/800-arm_v5te_no_ldrd_strd.patch
@@ -0,0 +1,32 @@ 
+commit b050f87d13b5dc7ed82feb9a90f4529de58bdf25
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Wed Feb 19 19:20:10 2014 +0000
+
+    gcc: prevent the use of LDRD/STRD on ARMv5TE
+    
+    These instructions are for 64-bit load/store. On ARMv5TE, the CPU
+    requires addresses to be aligned to 64-bit. When misaligned, behavior is
+    undefined (effectively either loads the same word twice on LDRD, or
+    corrupts surrounding memory on STRD).
+    
+    On ARMv6 and newer, unaligned access is safe.
+    
+    Removing these instructions for ARMv5TE is necessary, because GCC
+    ignores alignment information in pointers and does unsafe optimizations
+    that have shown up as bugs in various places.
+    
+    Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+    
+    SVN-Revision: 39638
+
+--- a/gcc/config/arm/arm.h
++++ b/gcc/config/arm/arm.h
+@@ -150,7 +150,7 @@ extern tree arm_fp16_type_node;
+ /* Thumb-1 only.  */
+ #define TARGET_THUMB1_ONLY		(TARGET_THUMB1 && !arm_arch_notm)
+ 
+-#define TARGET_LDRD			(arm_arch5e && ARM_DOUBLEWORD_ALIGN \
++#define TARGET_LDRD			(arm_arch6 && ARM_DOUBLEWORD_ALIGN \
+                                          && !TARGET_THUMB1)
+ 
+ #define TARGET_CRC32			(arm_arch_crc)
diff --git a/toolchain/gcc/patches/arc-2017.03-release/810-arm-softfloat-libgcc.patch b/toolchain/gcc/patches/arc-2017.09-release/810-arm-softfloat-libgcc.patch
similarity index 80%
rename from toolchain/gcc/patches/arc-2017.03-release/810-arm-softfloat-libgcc.patch
rename to toolchain/gcc/patches/arc-2017.09-release/810-arm-softfloat-libgcc.patch
index 1d06f5b2ec..5c9d86aead 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/810-arm-softfloat-libgcc.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/810-arm-softfloat-libgcc.patch
@@ -1,3 +1,11 @@ 
+commit 8570c4be394cff7282f332f97da2ff569a927ddb
+Author: Imre Kaloz <kaloz@openwrt.org>
+Date:   Wed Feb 2 20:06:12 2011 +0000
+
+    fixup arm soft-float symbols
+    
+    SVN-Revision: 25325
+
 --- a/libgcc/config/arm/t-linux
 +++ b/libgcc/config/arm/t-linux
 @@ -1,6 +1,10 @@
@@ -14,7 +22,7 @@ 
  # difference.
 --- a/gcc/config/arm/linux-elf.h
 +++ b/gcc/config/arm/linux-elf.h
-@@ -60,8 +60,6 @@
+@@ -58,8 +58,6 @@
     %{shared:-lc} \
     %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
  
diff --git a/toolchain/gcc/patches/arc-2017.03-release/820-libgcc_pic.patch b/toolchain/gcc/patches/arc-2017.09-release/820-libgcc_pic.patch
similarity index 71%
rename from toolchain/gcc/patches/arc-2017.03-release/820-libgcc_pic.patch
rename to toolchain/gcc/patches/arc-2017.09-release/820-libgcc_pic.patch
index f925d96f66..0cc1e07e2b 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/820-libgcc_pic.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/820-libgcc_pic.patch
@@ -1,6 +1,14 @@ 
+commit c96312958c0621e72c9b32da5bc224ffe2161384
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Mon Oct 19 23:26:09 2009 +0000
+
+    gcc: create a proper libgcc_pic.a static library for relinking (4.3.3+ for now, backport will follow)
+    
+    SVN-Revision: 18086
+
 --- a/libgcc/Makefile.in
 +++ b/libgcc/Makefile.in
-@@ -888,11 +888,12 @@ $(libgcov-driver-objects): %$(objext): $
+@@ -920,11 +920,12 @@ $(libgcov-driver-objects): %$(objext): $
  
  # Static libraries.
  libgcc.a: $(libgcc-objects)
@@ -14,7 +22,7 @@ 
  	-rm -f $@
  
  	objects="$(objects)";					\
-@@ -913,7 +914,7 @@ all: libunwind.a
+@@ -945,7 +946,7 @@ all: libunwind.a
  endif
  
  ifeq ($(enable_shared),yes)
@@ -23,7 +31,7 @@ 
  ifneq ($(LIBUNWIND),)
  all: libunwind$(SHLIB_EXT)
  libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
-@@ -1115,6 +1116,10 @@ install-shared:
+@@ -1151,6 +1152,10 @@ install-shared:
  	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
  	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
  
diff --git a/toolchain/gcc/patches/arc-2017.03-release/840-armv4_pass_fix-v4bx_to_ld.patch b/toolchain/gcc/patches/arc-2017.09-release/840-armv4_pass_fix-v4bx_to_ld.patch
similarity index 78%
rename from toolchain/gcc/patches/arc-2017.03-release/840-armv4_pass_fix-v4bx_to_ld.patch
rename to toolchain/gcc/patches/arc-2017.09-release/840-armv4_pass_fix-v4bx_to_ld.patch
index cb1fb98235..b9c9b161ad 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/840-armv4_pass_fix-v4bx_to_ld.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/840-armv4_pass_fix-v4bx_to_ld.patch
@@ -1,6 +1,15 @@ 
+commit 7edc8ca5456d9743dd0075eb3cc5b04f4f24c8cc
+Author: Imre Kaloz <kaloz@openwrt.org>
+Date:   Wed Feb 2 19:34:36 2011 +0000
+
+    add armv4 fixup patches
+    
+    SVN-Revision: 25322
+
+
 --- a/gcc/config/arm/linux-eabi.h
 +++ b/gcc/config/arm/linux-eabi.h
-@@ -94,10 +94,15 @@
+@@ -88,10 +88,15 @@
  #define MUSL_DYNAMIC_LINKER \
    "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1"
  
diff --git a/toolchain/gcc/patches/arc-2017.03-release/850-use_shared_libgcc.patch b/toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch
similarity index 81%
rename from toolchain/gcc/patches/arc-2017.03-release/850-use_shared_libgcc.patch
rename to toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch
index cd20244c69..1d07efed80 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/850-use_shared_libgcc.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch
@@ -1,6 +1,13 @@ 
+commit dcfc40358b5a3cae7320c17f8d1cebd5ad5540cd
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Sun Feb 12 20:25:47 2012 +0000
+
+    gcc 4.6: port over the missing patch 850-use_shared_libgcc.patch to prevent libgcc crap from leaking into every single binary
+    
+    SVN-Revision: 30486
 --- a/gcc/config/arm/linux-eabi.h
 +++ b/gcc/config/arm/linux-eabi.h
-@@ -132,10 +132,6 @@
+@@ -126,10 +126,6 @@
    "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} "	\
    LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC)
  
@@ -26,7 +33,7 @@ 
     -muclibc or -mglibc or -mbionic or -mmusl has been passed to change
 --- a/libgcc/mkmap-symver.awk
 +++ b/libgcc/mkmap-symver.awk
-@@ -132,5 +132,5 @@ function output(lib) {
+@@ -136,5 +136,5 @@ function output(lib) {
    else if (inherit[lib])
      printf("} %s;\n", inherit[lib]);
    else
diff --git a/toolchain/gcc/patches/arc-2017.03-release/851-libgcc_no_compat.patch b/toolchain/gcc/patches/arc-2017.09-release/851-libgcc_no_compat.patch
similarity index 63%
rename from toolchain/gcc/patches/arc-2017.03-release/851-libgcc_no_compat.patch
rename to toolchain/gcc/patches/arc-2017.09-release/851-libgcc_no_compat.patch
index 80c3476841..d710e40717 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/851-libgcc_no_compat.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/851-libgcc_no_compat.patch
@@ -1,3 +1,13 @@ 
+commit 64661de100da1ec1061ef3e5e400285dce115e6b
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Sun May 10 13:16:35 2015 +0000
+
+    gcc: add some size optimization patches
+    
+    Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+    
+    SVN-Revision: 45664
+
 --- a/libgcc/config/t-libunwind
 +++ b/libgcc/config/t-libunwind
 @@ -2,8 +2,7 @@
diff --git a/toolchain/gcc/patches/arc-2017.09-release/870-ppc_no_crtsavres.patch b/toolchain/gcc/patches/arc-2017.09-release/870-ppc_no_crtsavres.patch
new file mode 100644
index 0000000000..156468b45e
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/870-ppc_no_crtsavres.patch
@@ -0,0 +1,18 @@ 
+commit d8c570a1531035c3e26bcd94741e5f5b9c36b5d9
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Mon Mar 5 00:51:01 2012 +0000
+
+    gcc: do not emit references to _savegpr_* and _restgpr_* on powerpc, as they are tricky to deal with wrt. libgcc. they cannot be linked dynamically
+    
+    SVN-Revision: 30814
+--- a/gcc/config/rs6000/rs6000.c
++++ b/gcc/config/rs6000/rs6000.c
+@@ -26936,7 +26936,7 @@ rs6000_savres_strategy (rs6000_stack_t *
+   /* Define cutoff for using out-of-line functions to save registers.  */
+   if (DEFAULT_ABI == ABI_V4 || TARGET_ELF)
+     {
+-      if (!optimize_size)
++      if (1)
+ 	{
+ 	  strategy |= SAVE_INLINE_FPRS | REST_INLINE_FPRS;
+ 	  strategy |= SAVE_INLINE_GPRS | REST_INLINE_GPRS;
diff --git a/toolchain/gcc/patches/arc-2017.09-release/881-no_tm_section.patch b/toolchain/gcc/patches/arc-2017.09-release/881-no_tm_section.patch
new file mode 100644
index 0000000000..a58dc27e64
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/881-no_tm_section.patch
@@ -0,0 +1,22 @@ 
+commit 565988ab47bd9b96b50608564aee2104aeb4b7ae
+Author: Felix Fietkau <nbd@nbd.name>
+Date:   Tue Dec 13 14:20:49 2016 +0100
+
+    gcc: rip out transactional memory related bloat from crtbegin
+    
+    Slightly improves compression for each executable, saving about 4k from
+    the default ar71xx rootfs
+    
+    Signed-off-by: Felix Fietkau <nbd@nbd.name>
+
+--- a/libgcc/crtstuff.c
++++ b/libgcc/crtstuff.c
+@@ -152,7 +152,7 @@ call_ ## FUNC (void)					\
+ #endif
+ 
+ #if !defined(USE_TM_CLONE_REGISTRY) && defined(OBJECT_FORMAT_ELF)
+-# define USE_TM_CLONE_REGISTRY 1
++# define USE_TM_CLONE_REGISTRY 0
+ #endif
+ 
+ /* We do not want to add the weak attribute to the declarations of these
diff --git a/toolchain/gcc/patches/arc-2017.09-release/900-bad-mips16-crt.patch b/toolchain/gcc/patches/arc-2017.09-release/900-bad-mips16-crt.patch
new file mode 100644
index 0000000000..f5cc0a74ee
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/900-bad-mips16-crt.patch
@@ -0,0 +1,30 @@ 
+commit 9dc38e48f7a6f88b7ac7bfaced91f53660204e46
+Author: Florian Fainelli <florian@openwrt.org>
+Date:   Fri Apr 5 12:36:06 2013 +0000
+
+    toolchain/gcc: .init and .fini need to pick one ISA
+    
+    The .init and .fini sections are built by concatenating code
+    fragments. Putting mips16 code in the middle of a mips32 code block
+    doesn't work. Make gcc built the magic crt stuff in no-mips16 mode.
+    
+    This is specific to 4.6-linaro but is probably portable to other gcc
+    flavors. Adding this to the t-libgcc-mips16 makefile fragment is a
+    hack not suitable for pushing upstream, but there is no mips/t-linux
+    or mips/t-uclibc and I am not going to touch gcc/configure for two
+    lines.
+    
+    Signed-off-by: Jay Carlson <nop@nop.com>
+    Signed-off-by: Florian Fainelli <florian@openwrt.org>
+    
+    SVN-Revision: 36200
+
+--- a/libgcc/config/mips/t-mips16
++++ b/libgcc/config/mips/t-mips16
+@@ -43,3 +43,6 @@ SYNC_CFLAGS = -mno-mips16
+ 
+ # Version these symbols if building libgcc.so.
+ SHLIB_MAPFILES += $(srcdir)/config/mips/libgcc-mips16.ver
++
++CRTSTUFF_T_CFLAGS += -mno-mips16
++CRTSTUFF_T_CFLAGS_S += -mno-mips16
diff --git a/toolchain/gcc/patches/arc-2017.03-release/910-mbsd_multi.patch b/toolchain/gcc/patches/arc-2017.09-release/910-mbsd_multi.patch
similarity index 50%
rename from toolchain/gcc/patches/arc-2017.03-release/910-mbsd_multi.patch
rename to toolchain/gcc/patches/arc-2017.09-release/910-mbsd_multi.patch
index 62203dfcf6..286cfadae7 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/910-mbsd_multi.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/910-mbsd_multi.patch
@@ -1,22 +1,23 @@ 
+commit 99368862e44740ff4fd33760893f04e14f9dbdf1
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Tue Jul 31 00:52:27 2007 +0000
 
-	This patch brings over a few features from MirBSD:
+    Port the mbsd_multi patch from freewrt, which adds -fhonour-copts. This will emit warnings in packages that don't use our target cflags properly
+    
+    SVN-Revision: 8256
+
+	This patch brings over a feature from MirBSD:
 	* -fhonour-copts
 	  If this option is not given, it's warned (depending
 	  on environment variables). This is to catch errors
 	  of misbuilt packages which override CFLAGS themselves.
-	* -Werror-maybe-reset
-	  Has the effect of -Wno-error if GCC_NO_WERROR is
-	  set and not '0', a no-operation otherwise. This is
-	  to be able to use -Werror in "make" but prevent
-	  GNU autoconf generated configure scripts from
-	  freaking out.
 
 	This patch was authored by Thorsten Glaser <tg at mirbsd.de>
 	with copyright assignment to the FSF in effect.
 
 --- a/gcc/c-family/c-opts.c
 +++ b/gcc/c-family/c-opts.c
-@@ -107,6 +107,9 @@ static int class_dump_flags;
+@@ -108,6 +108,9 @@ static int class_dump_flags;
  /* Whether any standard preincluded header has been preincluded.  */
  static bool done_preinclude;
  
@@ -26,7 +27,7 @@ 
  static void handle_OPT_d (const char *);
  static void set_std_cxx98 (int);
  static void set_std_cxx11 (int);
-@@ -442,6 +445,12 @@ c_common_handle_option (size_t scode, co
+@@ -456,6 +459,12 @@ c_common_handle_option (size_t scode, co
        flag_no_builtin = !value;
        break;
  
@@ -39,7 +40,7 @@ 
      case OPT_fconstant_string_class_:
        constant_string_class_name = arg;
        break;
-@@ -1041,6 +1050,47 @@ c_common_init (void)
+@@ -1084,6 +1093,47 @@ c_common_init (void)
        return false;
      }
  
@@ -89,18 +90,7 @@ 
  
 --- a/gcc/c-family/c.opt
 +++ b/gcc/c-family/c.opt
-@@ -438,6 +438,10 @@ Wfloat-conversion
- C ObjC C++ ObjC++ Var(warn_float_conversion) Warning LangEnabledBy(C ObjC C++ ObjC++,Wconversion)
- Warn for implicit type conversions that cause loss of floating point precision.
- 
-+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.
-@@ -1252,6 +1256,9 @@ C++ ObjC++ Optimization Alias(fexception
+@@ -1412,6 +1412,9 @@ C++ ObjC++ Optimization Alias(fexception
  fhonor-std
  C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
  
@@ -112,18 +102,7 @@ 
  Assume normal C execution environment.
 --- a/gcc/common.opt
 +++ b/gcc/common.opt
-@@ -581,6 +581,10 @@ Werror=
- 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.
-@@ -1432,6 +1436,9 @@ fguess-branch-probability
+@@ -1510,6 +1510,9 @@ fguess-branch-probability
  Common Report Var(flag_guess_branch_prob) Optimization
  Enable guessing of branch probabilities.
  
@@ -135,60 +114,24 @@ 
  ; On SVR4 targets, it also controls whether or not to emit a
 --- a/gcc/opts.c
 +++ b/gcc/opts.c
-@@ -1783,6 +1783,17 @@ common_handle_option (struct gcc_options
+@@ -1928,6 +1928,9 @@ common_handle_option (struct gcc_options
  			       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;
---- a/gcc/doc/cppopts.texi
-+++ b/gcc/doc/cppopts.texi
-@@ -163,6 +163,11 @@ in older programs.  This warning is on b
- 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
 --- a/gcc/doc/invoke.texi
 +++ b/gcc/doc/invoke.texi
-@@ -263,7 +263,7 @@ Objective-C and Objective-C++ Dialects}.
- -Wno-discarded-qualifiers -Wno-discarded-array-qualifiers @gol
- -Wno-div-by-zero -Wdouble-promotion -Wduplicated-cond @gol
- -Wempty-body  -Wenum-compare -Wno-endif-labels @gol
---Werror  -Werror=* -Wfatal-errors -Wfloat-equal  -Wformat  -Wformat=2 @gol
-+-Werror  -Werror=* -Werror-maybe-reset -Wfatal-errors -Wfloat-equal  -Wformat  -Wformat=2 @gol
- -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
- -Wformat-security  -Wformat-signedness  -Wformat-y2k -Wframe-address @gol
- -Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
-@@ -5737,6 +5737,22 @@ This option is only supported for C and
+@@ -6567,6 +6567,17 @@ This option is only supported for C and
  @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
++@item -fhonour-copts
++@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
@@ -201,22 +144,3 @@ 
  @item -Wstack-protector
  @opindex Wstack-protector
  @opindex Wno-stack-protector
-@@ -6605,7 +6621,7 @@ so, the first branch is redirected to ei
- 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
---- a/gcc/java/jvspec.c
-+++ b/gcc/java/jvspec.c
-@@ -629,6 +629,7 @@ lang_specific_pre_link (void)
-      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 --git a/toolchain/gcc/patches/arc-2017.03-release/920-specs_nonfatal_getenv.patch b/toolchain/gcc/patches/arc-2017.09-release/920-specs_nonfatal_getenv.patch
similarity index 59%
rename from toolchain/gcc/patches/arc-2017.03-release/920-specs_nonfatal_getenv.patch
rename to toolchain/gcc/patches/arc-2017.09-release/920-specs_nonfatal_getenv.patch
index dc0acb95a8..69b40621dc 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/920-specs_nonfatal_getenv.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/920-specs_nonfatal_getenv.patch
@@ -1,6 +1,13 @@ 
+Author: Jo-Philipp Wich <jow@openwrt.org>
+Date:   Sat Apr 21 03:02:39 2012 +0000
+
+    gcc: add patch to make the getenv() spec function nonfatal if requested environment variable is unset
+    
+    SVN-Revision: 31390
+
 --- a/gcc/gcc.c
 +++ b/gcc/gcc.c
-@@ -9198,8 +9198,10 @@ getenv_spec_function (int argc, const ch
+@@ -9280,8 +9280,10 @@ getenv_spec_function (int argc, const ch
      value = varname;
  
    if (!value)
diff --git a/toolchain/gcc/patches/arc-2017.03-release/930-fix-mips-noexecstack.patch b/toolchain/gcc/patches/arc-2017.09-release/930-fix-mips-noexecstack.patch
similarity index 95%
rename from toolchain/gcc/patches/arc-2017.03-release/930-fix-mips-noexecstack.patch
rename to toolchain/gcc/patches/arc-2017.09-release/930-fix-mips-noexecstack.patch
index 2a99840b63..90d10f11e4 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/930-fix-mips-noexecstack.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/930-fix-mips-noexecstack.patch
@@ -48,9 +48,9 @@  sellcey@mips.com
 
 --- a/gcc/config/mips/mips.c
 +++ b/gcc/config/mips/mips.c
-@@ -20228,6 +20228,9 @@ mips_promote_function_mode (const_tree t
- #undef TARGET_HARD_REGNO_SCRATCH_OK
- #define TARGET_HARD_REGNO_SCRATCH_OK mips_hard_regno_scratch_ok
+@@ -22561,6 +22561,9 @@ mips_promote_function_mode (const_tree t
+ #undef TARGET_CUSTOM_FUNCTION_DESCRIPTORS
+ #define TARGET_CUSTOM_FUNCTION_DESCRIPTORS 2
  
 +#undef TARGET_ASM_FILE_END
 +#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
diff --git a/toolchain/gcc/patches/arc-2017.09-release/940-no-clobber-stamp-bits.patch b/toolchain/gcc/patches/arc-2017.09-release/940-no-clobber-stamp-bits.patch
new file mode 100644
index 0000000000..8b88b4066d
--- /dev/null
+++ b/toolchain/gcc/patches/arc-2017.09-release/940-no-clobber-stamp-bits.patch
@@ -0,0 +1,33 @@ 
+commit 548d9a008ff265e9eaa3c7e0e6e301c6bd5645e6
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Fri Dec 12 17:01:57 2014 +0000
+
+    gcc: don't clobber stamp-bits with a symlink to itself
+    
+    Several versions of gcc have an issue in libstdc++v3 where the build may
+    clobber stamp-bits with a link to itself.  This doesn't manifest itself
+    on all systems.  On several Ubuntu systems, this doesn't appear to be a
+    problem, but it is an issue on Fedora 16 systems.
+    
+    To fix the issue, we'll simply filter out stamp-bits from the symlinks
+    to be generated.
+    
+    Note: gcc 4.4.7 is unaffected by this issue, so no fix is necessary
+    there.
+    
+    Signed-off-by: John Szakmeister <john@szakmeister.net>
+    
+    SVN-Revision: 43669
+
+
+--- a/libstdc++-v3/include/Makefile.in
++++ b/libstdc++-v3/include/Makefile.in
+@@ -1476,7 +1476,7 @@ stamp-bits: ${bits_headers}
+ 	@$(STAMP) stamp-bits
+ 
+ stamp-bits-sup: stamp-bits ${bits_sup_headers}
+-	@-cd ${bits_builddir} && $(LN_S) $? . 2>/dev/null
++	@-cd ${bits_builddir} && $(LN_S) $(filter-out stamp-bits,$?) . 2>/dev/null
+ 	@$(STAMP) stamp-bits-sup
+ 
+ stamp-c_base: ${c_base_headers}
diff --git a/toolchain/gcc/patches/arc-2017.03-release/950-cpp_file_path_translation.patch b/toolchain/gcc/patches/arc-2017.09-release/950-cpp_file_path_translation.patch
similarity index 80%
rename from toolchain/gcc/patches/arc-2017.03-release/950-cpp_file_path_translation.patch
rename to toolchain/gcc/patches/arc-2017.09-release/950-cpp_file_path_translation.patch
index d467eb7c9a..60729dd7fe 100644
--- a/toolchain/gcc/patches/arc-2017.03-release/950-cpp_file_path_translation.patch
+++ b/toolchain/gcc/patches/arc-2017.09-release/950-cpp_file_path_translation.patch
@@ -1,8 +1,18 @@ 
+commit 331735a357a73c7b8adc205241ac3cc6543d985e
+Author: Felix Fietkau <nbd@openwrt.org>
+Date:   Tue Nov 17 12:38:22 2015 +0000
+
+    gcc: add a patch to 5.x that supports translation of __FILE__ paths
+    
+    Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+    
+    SVN-Revision: 47490
+
 Forward ported from attachment to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47047
 
 --- a/gcc/c-family/c-opts.c
 +++ b/gcc/c-family/c-opts.c
-@@ -574,6 +574,10 @@ c_common_handle_option (size_t scode, co
+@@ -588,6 +588,10 @@ c_common_handle_option (size_t scode, co
        add_path (xstrdup (arg), SYSTEM, 0, true);
        break;
  
@@ -15,7 +25,7 @@  Forward ported from attachment to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=4
        break;
 --- a/gcc/c-family/c.opt
 +++ b/gcc/c-family/c.opt
-@@ -1632,6 +1632,10 @@ iquote
+@@ -1825,6 +1825,10 @@ iquote
  C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs)
  -iquote <dir>	Add <dir> to the end of the quote include path.
  
@@ -28,19 +38,19 @@  Forward ported from attachment to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=4
  -iwithprefix <dir>	Add <dir> to the end of the system include path.
 --- a/gcc/doc/cpp.texi
 +++ b/gcc/doc/cpp.texi
-@@ -4444,6 +4444,7 @@ without notice.
+@@ -4272,6 +4272,7 @@ Refer to the GCC manual for full documen
  @c man begin SYNOPSIS
  cpp [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
      [@option{-I}@var{dir}@dots{}] [@option{-iquote}@var{dir}@dots{}]
 +    [@option{-iremap}@var{src}:@var{dst}]
-     [@option{-W}@var{warn}@dots{}]
      [@option{-M}|@option{-MM}] [@option{-MG}] [@option{-MF} @var{filename}]
      [@option{-MP}] [@option{-MQ} @var{target}@dots{}]
+     [@option{-MT} @var{target}@dots{}]
 --- a/gcc/doc/cppopts.texi
 +++ b/gcc/doc/cppopts.texi
-@@ -532,6 +532,12 @@ Search @var{dir} only for header files r
- If @var{dir} begins with @code{=}, then the @code{=} will be replaced
- by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
+@@ -220,6 +220,12 @@ extensions @samp{.i}, @samp{.ii} or @sam
+ extensions that GCC uses for preprocessed files created by
+ @option{-save-temps}.
  
 +@item -iremap @var{src}:@var{dst}
 +@opindex iremap
@@ -53,20 +63,9 @@  Forward ported from attachment to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=4
  When preprocessing, handle directives, but do not expand macros.
 --- a/gcc/doc/invoke.texi
 +++ b/gcc/doc/invoke.texi
-@@ -476,8 +476,8 @@ Objective-C and Objective-C++ Dialects}.
- @item Directory Options
- @xref{Directory Options,,Options for Directory Search}.
- @gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir} @gol
---iquote@var{dir} -L@var{dir} -no-canonical-prefixes -I- @gol
----sysroot=@var{dir} --no-sysroot-suffix}
-+-iquote@var{dir} -iremap@var{src}:@var{dst} -L@var{dir} -no-canonical-prefixes @gol
-+-I- --sysroot=@var{dir} --no-sysroot-suffix}
- 
- @item Code Generation Options
- @xref{Code Gen Options,,Options for Code Generation Conventions}.
-@@ -10861,6 +10861,12 @@ be searched for header files only for th
- "@var{file}"}; they are not searched for @code{#include <@var{file}>},
- otherwise just like @option{-I}.
+@@ -11863,6 +11863,12 @@ by @option{-fplugin=@var{name}} instead
+ @option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
+ to be used by the user, but only passed by the driver.
  
 +@item -iremap @var{src}:@var{dst}
 +@opindex iremap
@@ -79,7 +78,7 @@  Forward ported from attachment to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=4
  Add directory @var{dir} to the list of directories to be searched
 --- a/libcpp/include/cpplib.h
 +++ b/libcpp/include/cpplib.h
-@@ -760,6 +760,9 @@ extern void cpp_set_lang (cpp_reader *,
+@@ -820,6 +820,9 @@ extern void cpp_set_lang (cpp_reader *,
  /* Set the include paths.  */
  extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
  
diff --git a/toolchain/gdb/Makefile b/toolchain/gdb/Makefile
index abd6d033cc..5c80eef9aa 100644
--- a/toolchain/gdb/Makefile
+++ b/toolchain/gdb/Makefile
@@ -9,11 +9,11 @@  include $(TOPDIR)/rules.mk
 PKG_NAME:=gdb
 
 ifeq ($(CONFIG_arc),y)
-PKG_VERSION:=arc-2017.03-gdb
+PKG_VERSION:=arc-2017.09-gdb
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/archive/arc-2017.03-gdb
-PKG_HASH:=f47930161e9e99c46ab018dabbf56024739dda29c51f92495eaa0d4d7e3511f6
+PKG_SOURCE_URL:=https://github.com/foss-for-synopsys-dwc-arc-processors/binutils-gdb/archive/arc-2017.09-gdb
+PKG_HASH:=7e3c2a763bf500a40c5c4591a7e22c591dafc1f214b1d514895c1096e85c883a
 GDB_DIR:=binutils-$(PKG_NAME)-$(PKG_VERSION)
 PATCH_DIR:=./patches-arc
 else