Patchwork [5/7] arc: Add support for ARC-specific GCC

login
register
mail settings
Submitter Mischa Jonker
Date April 22, 2013, 11:37 a.m.
Message ID <1366630651-6857-6-git-send-email-mjonker@synopsys.com>
Download mbox | patch
Permalink /patch/238478/
State Changes Requested
Headers show

Comments

Mischa Jonker - April 22, 2013, 11:37 a.m.
ARC support in GCC is not upstream yet...

Signed-off-by: Mischa Jonker <mjonker@synopsys.com>
---
 support/gnuconfig/config.sub                       |    4 +-
 toolchain/Config.in                                |    3 +-
 .../gcc/4.4.7-arc/fix_branch_out_of_range.patch    |   22 ++++++++++++++++++++
 toolchain/gcc/Config.in                            |   22 ++++++++++++-------
 toolchain/gcc/gcc-uclibc-4.x.mk                    |    4 +++
 5 files changed, 44 insertions(+), 11 deletions(-)
 create mode 100644 toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch
Thomas Petazzoni - April 22, 2013, 3:56 p.m.
Dear Mischa Jonker,

On Mon, 22 Apr 2013 13:37:29 +0200, Mischa Jonker wrote:
> ARC support in GCC is not upstream yet...
> 
> Signed-off-by: Mischa Jonker <mjonker@synopsys.com>
> ---
>  support/gnuconfig/config.sub                       |    4 +-
>  toolchain/Config.in                                |    3 +-
>  .../gcc/4.4.7-arc/fix_branch_out_of_range.patch    |   22 ++++++++++++++++++++
>  toolchain/gcc/Config.in                            |   22 ++++++++++++-------
>  toolchain/gcc/gcc-uclibc-4.x.mk                    |    4 +++
>  5 files changed, 44 insertions(+), 11 deletions(-)
>  create mode 100644 toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch
> 
> diff --git a/support/gnuconfig/config.sub b/support/gnuconfig/config.sub
> index 8509813..b2958ad 100755
> --- a/support/gnuconfig/config.sub
> +++ b/support/gnuconfig/config.sub
> @@ -259,7 +259,7 @@ case $basic_machine in
>  	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
>  	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
>  	| am33_2.0 \
> -	| arc \
> +	| arc | arceb \
>  	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
>  	| avr | avr32 \
>  	| be32 | be64 \
> @@ -372,7 +372,7 @@ case $basic_machine in
>  	| aarch64-* | aarch64_be-* \
>  	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
>  	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
> -	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
> +	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
>  	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
>  	| avr-* | avr32-* \
>  	| be32-* | be64-* \

This should be in a separate patch. Is this change upstream in the
gnuconfig project. We from time to time sync up with the upstream
variant, so if you want those changes to be preserved over time, they
need to be upstreamed.

> diff --git a/toolchain/Config.in b/toolchain/Config.in
> index fa78cf4..5d1c592 100644
> --- a/toolchain/Config.in
> +++ b/toolchain/Config.in
> @@ -22,7 +22,8 @@ config BR2_TOOLCHAIN_EXTERNAL
>  
>  config BR2_TOOLCHAIN_CTNG
>  	bool "Crosstool-NG toolchain"
> -	depends on !BR2_microblaze && !BR2_aarch64 && !BR2_xtensa
> +	depends on !BR2_microblaze && !BR2_aarch64 && !BR2_xtensa && \
> +		   !BR2_arc && !BR2_arceb
>  	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
>  	help
>  	  Say 'y' if you want to generate the toolchain with crosstool-NG

This should also be part of a separate patch, ideally.

> diff --git a/toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch b/toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch
> new file mode 100644
> index 0000000..f042a71
> --- /dev/null
> +++ b/toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch
> @@ -0,0 +1,22 @@
> +diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
> +index ff602c0..b3ca4c4 100644
> +--- a/gcc/config/arc/arc.c
> ++++ b/gcc/config/arc/arc.c
> +@@ -6565,7 +6565,7 @@ estimate required size increase).
> + 	      rtx *ccp = &XEXP (XVECEXP (pat, 0, 1), 0);
> + 
> + 	      offset = branch_dest (insn) - INSN_ADDRESSES (INSN_UID (insn));
> +-	      if ((offset >= -140 && offset < 140)
> ++	      if ((offset >= -120 && offset < 120)
> + 		  && rtx_equal_p (XEXP (op, 1), const0_rtx)
> +  		  && compact_register_operand (XEXP (op, 0), VOIDmode)
> + 		  && equality_comparison_operator (op, VOIDmode))
> +@@ -6687,7 +6687,7 @@ estimate required size increase).
> + 
> + 		  if (op0 != cmp0)
> +  		    cc_clob_rtx = gen_rtx_REG (CC_ZNmode, CC_REG);
> +- 		  else if ((offset >= -140 && offset < 140)
> ++ 		  else if ((offset >= -120 && offset < 120)
> + 			   && rtx_equal_p (op1, const0_rtx)
> + 			   && compact_register_operand (op0, VOIDmode)
> + 			   && (GET_CODE (op) == EQ

Patch lacks a description + Signed-off-by.

> diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in
> index d7e8715..2396e8e 100644
> --- a/toolchain/gcc/Config.in
> +++ b/toolchain/gcc/Config.in
> @@ -9,44 +9,49 @@ choice
>  	prompt "GCC compiler Version"
>  	default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8
>  	default BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 if BR2_avr32
> +	default BR2_GCC_VERSION_4_4_7_ARC if BR2_arc || BR2_arceb
>  	default BR2_GCC_VERSION_4_7_X
>  	help
>  	  Select the version of gcc you wish to use.
>  
> +	config BR2_GCC_VERSION_4_4_7_ARC
> +		depends on BR2_arc || BR2_arceb
> +		bool "gcc 4.4.7-arc"
> +
>  	config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
>  	       depends on BR2_avr32
>  	       bool "gcc 4.2.2-avr32-2.1.5"
>  
>  	config BR2_GCC_VERSION_4_3_X
> -		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
>  		bool "gcc 4.3.x"
>  
>  	config BR2_GCC_VERSION_4_4_X
> -		depends on !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
>  		bool "gcc 4.4.x"
>  
>  	config BR2_GCC_VERSION_4_5_X
> -		depends on !BR2_avr32 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526
>  		select BR2_GCC_NEEDS_MPC
>  		bool "gcc 4.5.x"
>  
>  	config BR2_GCC_VERSION_4_6_X
> -		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
>  		select BR2_GCC_NEEDS_MPC
>  		bool "gcc 4.6.x"
>  
>  	config BR2_GCC_VERSION_4_7_X
> -		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
>  		select BR2_GCC_NEEDS_MPC
>  		bool "gcc 4.7.x"
>  
>  	config BR2_GCC_VERSION_4_8_X
> -		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
>  		select BR2_GCC_NEEDS_MPC
>  		bool "gcc 4.8.x"
>  
>  	config BR2_GCC_VERSION_SNAP
> -		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
> +		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
>  		select BR2_GCC_NEEDS_MPC
>  		bool "gcc snapshot"

Hum, not really nice. Maybe it's time to split the lines. Or even to
have something like "BR2_ARCH_HAS_GCC_4_8", "BR2_ARCH_HAS_GCC_4_5",
etc. But maybe that can be as follow-up cleanups.

>  endchoice
> @@ -74,6 +79,7 @@ config BR2_GCC_VERSION
>  	default "4.2.2-avr32-2.1.5" if BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
>  	default "4.3.6"     if BR2_GCC_VERSION_4_3_X
>  	default "4.4.7"     if BR2_GCC_VERSION_4_4_X
> +	default "4.4.7-arc" if BR2_GCC_VERSION_4_4_7_ARC
>  	default "4.5.4"     if BR2_GCC_VERSION_4_5_X
>  	default "4.6.4"     if BR2_GCC_VERSION_4_6_X
>  	default "4.7.3"     if BR2_GCC_VERSION_4_7_X
> @@ -119,6 +125,6 @@ config BR2_GCC_ENABLE_TLS
>  
>  config BR2_GCC_ENABLE_OPENMP
>  	bool "Enable compiler OpenMP support"
> -	depends on !BR2_PTHREADS_NONE && !BR2_avr32
> +	depends on !BR2_PTHREADS_NONE && !BR2_avr32 && !BR2_arc && !BR2_arceb
>  	help
>  	  Enable OpenMP support for the compiler
> diff --git a/toolchain/gcc/gcc-uclibc-4.x.mk b/toolchain/gcc/gcc-uclibc-4.x.mk
> index fc11ad4..31afd48 100644
> --- a/toolchain/gcc/gcc-uclibc-4.x.mk
> +++ b/toolchain/gcc/gcc-uclibc-4.x.mk
> @@ -29,6 +29,8 @@ ifneq ($(GCC_SNAP_DATE),)
>   GCC_SITE:=ftp://gcc.gnu.org/pub/gcc/snapshots/$(GCC_SNAP_DATE)/
>  else ifeq ($(findstring avr32,$(GCC_VERSION)),avr32)
>   GCC_SITE:=ftp://www.at91.com/pub/buildroot/
> +else ifeq ($(findstring arc,$(GCC_VERSION)),arc)
> + GCC_SITE:=$(BR2_ARC_SITE)
>  else
>   GCC_SITE:=$(BR2_GNU_MIRROR:/=)/gcc/gcc-$(GCC_VERSION)
>  endif
> @@ -63,7 +65,9 @@ endif
>  
>  # Determine soft-float options
>  ifeq ($(BR2_SOFT_FLOAT),y)
> +ifeq ($(BR2_arc)$(BR2_arceb),)
>  SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft
> +endif

Hum. Maybe this --with-float=soft should instead only be passed for the
architectures for which it makes sense (ARM? PowerPC?).

>  ifeq ($(BR2_arm)$(BR2_armeb),y) # only set float-abi for arm
>  TARGET_SOFT_FLOAT:=-mfloat-abi=soft
>  else

Thomas
Mischa Jonker - April 24, 2013, 12:44 p.m.
>> diff --git a/support/gnuconfig/config.sub 
>> b/support/gnuconfig/config.sub index 8509813..b2958ad 100755
>> -	| arc \
>> +	| arc | arceb \

> This should be in a separate patch. Is this change upstream in the gnuconfig project. We from time to time sync up with the upstream variant, so if you want those changes to be preserved over time, they need to be upstreamed.

The change is in the upstream project now. Would you like me to change the gnuconfig patch in BuildRoot from 'add ARC to gnuconfig' to 'update gnuconfig from upstream'?

Mischa
Thomas Petazzoni - April 24, 2013, 2:27 p.m.
Dear Mischa Jonker,

On Wed, 24 Apr 2013 12:44:20 +0000, Mischa Jonker wrote:

> > This should be in a separate patch. Is this change upstream in the
> > gnuconfig project. We from time to time sync up with the upstream
> > variant, so if you want those changes to be preserved over time,
> > they need to be upstreamed.
> 
> The change is in the upstream project now. Would you like me to
> change the gnuconfig patch in BuildRoot from 'add ARC to gnuconfig'
> to 'update gnuconfig from upstream'?

Yes, that'd be great.

Thanks,

Thomas
Mischa Jonker - April 24, 2013, 3:19 p.m.
Hi Thomas,

> > The change is in the upstream project now. Would you like me to change 
> > the gnuconfig patch in BuildRoot from 'add ARC to gnuconfig'
> > to 'update gnuconfig from upstream'?

> Yes, that'd be great.

There are some patches with your name on it in support/gnuconfig/patches. 
These patches seem to be applied already on support/gnuconfig/*. I have 
updated these patches so that they apply cleanly on top of the new gnuconfig
(+small ARC-specific addition), but they still have your Signed-off-by tag. 

What's the proper procedure for signing off patches within a patch? 

Mischa
Yann E. MORIN - April 24, 2013, 9:19 p.m.
Mischa, All,

On Wed, Apr 24, 2013 at 03:19:14PM +0000, Mischa Jonker wrote:
> There are some patches with your name on it in support/gnuconfig/patches. 
> These patches seem to be applied already on support/gnuconfig/*. I have 
> updated these patches so that they apply cleanly on top of the new gnuconfig
> (+small ARC-specific addition), but they still have your Signed-off-by tag. 
> 
> What's the proper procedure for signing off patches within a patch? 

Two options:
  - update the patch, add your SoB-line
  - add a new patch with only your SoB-line

If your change adds a new semantic change (which is the case: add a new
architecture), then I'd favour the second option.

If your change is an addition (as a fix, or for completeness), then go
for option 1.

Regards,
Yann E. MORIN.

Patch

diff --git a/support/gnuconfig/config.sub b/support/gnuconfig/config.sub
index 8509813..b2958ad 100755
--- a/support/gnuconfig/config.sub
+++ b/support/gnuconfig/config.sub
@@ -259,7 +259,7 @@  case $basic_machine in
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc \
+	| arc | arceb \
 	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
 	| avr | avr32 \
 	| be32 | be64 \
@@ -372,7 +372,7 @@  case $basic_machine in
 	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
 	| be32-* | be64-* \
diff --git a/toolchain/Config.in b/toolchain/Config.in
index fa78cf4..5d1c592 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -22,7 +22,8 @@  config BR2_TOOLCHAIN_EXTERNAL
 
 config BR2_TOOLCHAIN_CTNG
 	bool "Crosstool-NG toolchain"
-	depends on !BR2_microblaze && !BR2_aarch64 && !BR2_xtensa
+	depends on !BR2_microblaze && !BR2_aarch64 && !BR2_xtensa && \
+		   !BR2_arc && !BR2_arceb
 	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
 	help
 	  Say 'y' if you want to generate the toolchain with crosstool-NG
diff --git a/toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch b/toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch
new file mode 100644
index 0000000..f042a71
--- /dev/null
+++ b/toolchain/gcc/4.4.7-arc/fix_branch_out_of_range.patch
@@ -0,0 +1,22 @@ 
+diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
+index ff602c0..b3ca4c4 100644
+--- a/gcc/config/arc/arc.c
++++ b/gcc/config/arc/arc.c
+@@ -6565,7 +6565,7 @@ estimate required size increase).
+ 	      rtx *ccp = &XEXP (XVECEXP (pat, 0, 1), 0);
+ 
+ 	      offset = branch_dest (insn) - INSN_ADDRESSES (INSN_UID (insn));
+-	      if ((offset >= -140 && offset < 140)
++	      if ((offset >= -120 && offset < 120)
+ 		  && rtx_equal_p (XEXP (op, 1), const0_rtx)
+  		  && compact_register_operand (XEXP (op, 0), VOIDmode)
+ 		  && equality_comparison_operator (op, VOIDmode))
+@@ -6687,7 +6687,7 @@ estimate required size increase).
+ 
+ 		  if (op0 != cmp0)
+  		    cc_clob_rtx = gen_rtx_REG (CC_ZNmode, CC_REG);
+- 		  else if ((offset >= -140 && offset < 140)
++ 		  else if ((offset >= -120 && offset < 120)
+ 			   && rtx_equal_p (op1, const0_rtx)
+ 			   && compact_register_operand (op0, VOIDmode)
+ 			   && (GET_CODE (op) == EQ
diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in
index d7e8715..2396e8e 100644
--- a/toolchain/gcc/Config.in
+++ b/toolchain/gcc/Config.in
@@ -9,44 +9,49 @@  choice
 	prompt "GCC compiler Version"
 	default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8
 	default BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 if BR2_avr32
+	default BR2_GCC_VERSION_4_4_7_ARC if BR2_arc || BR2_arceb
 	default BR2_GCC_VERSION_4_7_X
 	help
 	  Select the version of gcc you wish to use.
 
+	config BR2_GCC_VERSION_4_4_7_ARC
+		depends on BR2_arc || BR2_arceb
+		bool "gcc 4.4.7-arc"
+
 	config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
 	       depends on BR2_avr32
 	       bool "gcc 4.2.2-avr32-2.1.5"
 
 	config BR2_GCC_VERSION_4_3_X
-		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
 		bool "gcc 4.3.x"
 
 	config BR2_GCC_VERSION_4_4_X
-		depends on !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526
 		bool "gcc 4.4.x"
 
 	config BR2_GCC_VERSION_4_5_X
-		depends on !BR2_avr32 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526
 		select BR2_GCC_NEEDS_MPC
 		bool "gcc 4.5.x"
 
 	config BR2_GCC_VERSION_4_6_X
-		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
 		select BR2_GCC_NEEDS_MPC
 		bool "gcc 4.6.x"
 
 	config BR2_GCC_VERSION_4_7_X
-		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
 		select BR2_GCC_NEEDS_MPC
 		bool "gcc 4.7.x"
 
 	config BR2_GCC_VERSION_4_8_X
-		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
 		select BR2_GCC_NEEDS_MPC
 		bool "gcc 4.8.x"
 
 	config BR2_GCC_VERSION_SNAP
-		depends on !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
+		depends on !BR2_arc && !BR2_arceb && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
 		select BR2_GCC_NEEDS_MPC
 		bool "gcc snapshot"
 endchoice
@@ -74,6 +79,7 @@  config BR2_GCC_VERSION
 	default "4.2.2-avr32-2.1.5" if BR2_GCC_VERSION_4_2_2_AVR32_2_1_5
 	default "4.3.6"     if BR2_GCC_VERSION_4_3_X
 	default "4.4.7"     if BR2_GCC_VERSION_4_4_X
+	default "4.4.7-arc" if BR2_GCC_VERSION_4_4_7_ARC
 	default "4.5.4"     if BR2_GCC_VERSION_4_5_X
 	default "4.6.4"     if BR2_GCC_VERSION_4_6_X
 	default "4.7.3"     if BR2_GCC_VERSION_4_7_X
@@ -119,6 +125,6 @@  config BR2_GCC_ENABLE_TLS
 
 config BR2_GCC_ENABLE_OPENMP
 	bool "Enable compiler OpenMP support"
-	depends on !BR2_PTHREADS_NONE && !BR2_avr32
+	depends on !BR2_PTHREADS_NONE && !BR2_avr32 && !BR2_arc && !BR2_arceb
 	help
 	  Enable OpenMP support for the compiler
diff --git a/toolchain/gcc/gcc-uclibc-4.x.mk b/toolchain/gcc/gcc-uclibc-4.x.mk
index fc11ad4..31afd48 100644
--- a/toolchain/gcc/gcc-uclibc-4.x.mk
+++ b/toolchain/gcc/gcc-uclibc-4.x.mk
@@ -29,6 +29,8 @@  ifneq ($(GCC_SNAP_DATE),)
  GCC_SITE:=ftp://gcc.gnu.org/pub/gcc/snapshots/$(GCC_SNAP_DATE)/
 else ifeq ($(findstring avr32,$(GCC_VERSION)),avr32)
  GCC_SITE:=ftp://www.at91.com/pub/buildroot/
+else ifeq ($(findstring arc,$(GCC_VERSION)),arc)
+ GCC_SITE:=$(BR2_ARC_SITE)
 else
  GCC_SITE:=$(BR2_GNU_MIRROR:/=)/gcc/gcc-$(GCC_VERSION)
 endif
@@ -63,7 +65,9 @@  endif
 
 # Determine soft-float options
 ifeq ($(BR2_SOFT_FLOAT),y)
+ifeq ($(BR2_arc)$(BR2_arceb),)
 SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft
+endif
 ifeq ($(BR2_arm)$(BR2_armeb),y) # only set float-abi for arm
 TARGET_SOFT_FLOAT:=-mfloat-abi=soft
 else