Skip to contentSkip to conversation

Upgrade ARC port to new toolchain

PATCH Superseded Mischa Jonker 3 participants 7 messages Jul 18, 2013 – Jul 19, 2013

lore
Share & tools
lore
#0 lore raw

v2 cover Upgrade ARC port to new toolchain

These three patches upgrade the ARC toolchain to GCC 4.8 and Binutils 2.23.2. This fixes multiple issues (including most autobuilder failures from the past couple of weeks).

v2:
* Remove gcc 4.4.7 patch
* Fix whitespace in fix_branch_out_of_range.patch
* Remove binutils 2.19-arc dependencies (not required anymore)
* Fix gcc 4.8-arc dependencies (host-flex, host-bison still required :-( )

Mischa Jonker (3):
uclibc, eglibc: remove REALLY_NOSTDLIB references
arc: binutils: Go from 2.19-arc to 2.23.2-arc
arc: gcc: Go from 4.4.7 to 4.8 for ARC

 .../binutils/2.19-arc/add-empty-info-files.patch   |   72 ----------
 package/binutils/Config.in.host                    |    2 +-
 package/binutils/binutils.mk                       |    4 -
 package/eglibc/eglibc.mk                           |    2 +-
 package/gcc/4.8-arc/100-uclibc-conf.patch          |   15 ++
 package/gcc/4.8-arc/301-missing-execinfo_h.patch   |   13 ++
 package/gcc/4.8-arc/302-c99-snprintf.patch         |   13 ++
 .../gcc/4.8-arc/305-libmudflap-susv3-legacy.patch  |   49 +++++++
 package/gcc/4.8-arc/disable_gc_sections.patch      |  145 ++++++++++++++++++++
 .../fix_branch_out_of_range.patch                  |    2 +-
 package/gcc/Config.in.host                         |   13 +-
 package/gcc/gcc.mk                                 |    2 +-
 package/uclibc/uclibc.mk                           |   11 +-
 13 files changed, 248 insertions(+), 95 deletions(-)
 delete mode 100644 package/binutils/2.19-arc/add-empty-info-files.patch
 create mode 100644 package/gcc/4.8-arc/100-uclibc-conf.patch
 create mode 100644 package/gcc/4.8-arc/301-missing-execinfo_h.patch
 create mode 100644 package/gcc/4.8-arc/302-c99-snprintf.patch
 create mode 100644 package/gcc/4.8-arc/305-libmudflap-susv3-legacy.patch
 create mode 100644 package/gcc/4.8-arc/disable_gc_sections.patch
 rename package/gcc/{4.4.7-arc => 4.8-arc}/fix_branch_out_of_range.patch (96%)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH v2 1/3 uclibc, eglibc: remove REALLY_NOSTDLIB references

These were required with ARC gcc 4.4.7; ARC gcc 4.8 has been changed to behave the same as other architectures with -nostdlib, making this option obsolete.

---
 package/eglibc/eglibc.mk |    2 +-
 package/uclibc/uclibc.mk |   11 ++---------
 2 files changed, 3 insertions(+), 10 deletions(-)
package/eglibc/eglibc.mk +1 -1
index ccdc210..5431ac5 100644
@@ -61,7 +61,7 @@ define EGLIBC_CONFIGURE_CMDS
 	cp $(@D)/build/csu/crt1.o $(STAGING_DIR)/usr/lib/
 	cp $(@D)/build/csu/crti.o $(STAGING_DIR)/usr/lib/
 	cp $(@D)/build/csu/crtn.o $(STAGING_DIR)/usr/lib/
-	$(TARGET_CROSS)gcc -nostdlib $(REALLY_NOSTDLIB) \
+	$(TARGET_CROSS)gcc -nostdlib \
 		-nostartfiles -shared -x c /dev/null -o $(STAGING_DIR)/usr/lib/libc.so
 endef
 
package/uclibc/uclibc.mk +2 -9
index f775b15..d5ea7a4 100644
@@ -163,13 +163,6 @@ endef
 endif
 
 #
-# ARC definitions
-#
-ifeq ($(UCLIBC_TARGET_ARCH),arc)
-REALLY_NOSTDLIB = -really-nostdlib
-endif
-
-#
 # Endianess
 #
 
@@ -407,9 +400,9 @@ define UCLIBC_CONFIGURE_CMDS
 		RUNTIME_PREFIX=$(STAGING_DIR) \
 		headers lib/crt1.o lib/crti.o lib/crtn.o \
 		install_headers
-	$(TARGET_CROSS)gcc -nostdlib $(REALLY_NOSTDLIB) \
+	$(TARGET_CROSS)gcc -nostdlib \
 		-nostartfiles -shared -x c /dev/null -o $(STAGING_DIR)/usr/lib/libc.so
-	$(TARGET_CROSS)gcc -nostdlib $(REALLY_NOSTDLIB) \
+	$(TARGET_CROSS)gcc -nostdlib \
 		-nostartfiles -shared -x c /dev/null -o $(STAGING_DIR)/usr/lib/libm.so
 	cp -pLR $(UCLIBC_DIR)/lib/crt[1in].o $(STAGING_DIR)/usr/lib/
 endef
Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v2 2/3 arc: binutils: Go from 2.19-arc to 2.23.2-arc

In reply to Mischa Jonker
---
 .../binutils/2.19-arc/add-empty-info-files.patch   |   72 --------------------
 package/binutils/Config.in.host                    |    2 +-
 package/binutils/binutils.mk                       |    4 --
 3 files changed, 1 insertion(+), 77 deletions(-)
 delete mode 100644 package/binutils/2.19-arc/add-empty-info-files.patch
package/binutils/2.19-arc/add-empty-info-files.patch deleted +0 -72
deleted file mode 100644
index 90de429..0000000
@@ -1,72 +0,0 @@
-binutils: add empty info files to remove makeinfo dependency
-
-Signed-off-by: Mischa jonker <[email protected]>
----
- bfd/doc/bfd.info           |    1 +
- binutils/doc/binutils.info |    1 +
- etc/configure.info         |    1 +
- etc/standards.info         |    1 +
- gas/doc/as.info            |    1 +
- gprof/gprof.info           |    1 +
- ld/ld.info                 |    1 +
- 7 files changed, 7 insertions(+), 0 deletions(-)
- create mode 100644 bfd/doc/bfd.info
- create mode 100644 binutils/doc/binutils.info
- create mode 100644 etc/configure.info
- create mode 100644 etc/standards.info
- create mode 100644 gas/doc/as.info
- create mode 100644 gprof/gprof.info
- create mode 100644 ld/ld.info
-
-diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/bfd/doc/bfd.info
-@@ -0,0 +1 @@
-+
-diff --git a/binutils/doc/binutils.info b/binutils/doc/binutils.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/binutils/doc/binutils.info
-@@ -0,0 +1 @@
-+
-diff --git a/etc/configure.info b/etc/configure.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/etc/configure.info
-@@ -0,0 +1 @@
-+
-diff --git a/etc/standards.info b/etc/standards.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/etc/standards.info
-@@ -0,0 +1 @@
-+
-diff --git a/gas/doc/as.info b/gas/doc/as.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/gas/doc/as.info
-@@ -0,0 +1 @@
-+
-diff --git a/gprof/gprof.info b/gprof/gprof.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/gprof/gprof.info
-@@ -0,0 +1 @@
-+
-diff --git a/ld/ld.info b/ld/ld.info
-new file mode 100644
-index 0000000..8b13789
---- /dev/null
-+++ b/ld/ld.info
-@@ -0,0 +1 @@
-+
--- 
-1.7.0.4
-
package/binutils/Config.in.host +1 -1
index 9ddaed7..c2d2495 100644
@@ -44,7 +44,7 @@ endchoice
 config BR2_BINUTILS_VERSION
 	string
 	default "2.18-avr32-1.0.1" if BR2_BINUTILS_VERSION_2_18_AVR32_1_0_1
-	default "2.19-arc"	if BR2_arc
+	default "2.23.2-arc"	if BR2_arc
 	default "2.20.1"	if BR2_BINUTILS_VERSION_2_20_1
 	default "2.21"		if BR2_BINUTILS_VERSION_2_21
 	default "2.21.1"	if BR2_BINUTILS_VERSION_2_21_1
package/binutils/binutils.mk +0 -4
index 377bb79..f1723b2 100644
@@ -55,11 +55,7 @@ HOST_BINUTILS_CONF_OPT = --disable-multilib --disable-werror \
 			--with-sysroot=$(STAGING_DIR) \
 			$(BINUTILS_EXTRA_CONFIG_OPTIONS)
 
-ifeq ($(BINUTILS_VERSION),2.19-arc)
-HOST_BINUTILS_DEPENDENCIES = host-flex host-bison
-else
 HOST_BINUTILS_DEPENDENCIES =
-endif
 
 # We just want libbfd and libiberty, not the full-blown binutils in staging
 define BINUTILS_INSTALL_STAGING_CMDS
Signature · 1 line
1.7.9.5
#3 lore raw

PATCH v2 3/3 arc: gcc: Go from 4.4.7 to 4.8 for ARC

In reply to Mischa Jonker

This fixes multiple issues, including:
- 'operand out of range' errors (due to defaulting to medium calls instead of short calls)
- library dependencies that were not being found

---
 package/gcc/4.8-arc/100-uclibc-conf.patch          |   15 ++
 package/gcc/4.8-arc/301-missing-execinfo_h.patch   |   13 ++
 package/gcc/4.8-arc/302-c99-snprintf.patch         |   13 ++
 .../gcc/4.8-arc/305-libmudflap-susv3-legacy.patch  |   49 +++++++
 package/gcc/4.8-arc/disable_gc_sections.patch      |  145 ++++++++++++++++++++
 .../fix_branch_out_of_range.patch                  |    2 +-
 package/gcc/Config.in.host                         |   13 +-
 package/gcc/gcc.mk                                 |    2 +-
 8 files changed, 244 insertions(+), 8 deletions(-)
 create mode 100644 package/gcc/4.8-arc/100-uclibc-conf.patch
 create mode 100644 package/gcc/4.8-arc/301-missing-execinfo_h.patch
 create mode 100644 package/gcc/4.8-arc/302-c99-snprintf.patch
 create mode 100644 package/gcc/4.8-arc/305-libmudflap-susv3-legacy.patch
 create mode 100644 package/gcc/4.8-arc/disable_gc_sections.patch
 rename package/gcc/{4.4.7-arc => 4.8-arc}/fix_branch_out_of_range.patch (96%)
package/gcc/4.8-arc/100-uclibc-conf.patch new file +15 -0
new file mode 100644
index 0000000..d56bf0a
@@ -0,0 +1,15 @@
+Index: gcc-4.8.0/contrib/regression/objs-gcc.sh
+===================================================================
+--- gcc-4.8.0.orig/contrib/regression/objs-gcc.sh	2009-04-09 17:00:19.000000000 +0200
++++ gcc-4.8.0/contrib/regression/objs-gcc.sh	2013-03-23 17:39:04.000000000 +0100
+@@ -106,6 +106,10 @@
+  then
+   make all-gdb all-dejagnu all-ld || exit 1
+   make install-gdb install-dejagnu install-ld || exit 1
++elif [ $H_REAL_TARGET = $H_REAL_HOST -a $H_REAL_TARGET = i686-pc-linux-uclibc ]
++ then
++  make all-gdb all-dejagnu all-ld || exit 1
++  make install-gdb install-dejagnu install-ld || exit 1
+ elif [ $H_REAL_TARGET = $H_REAL_HOST ] ; then
+   make bootstrap || exit 1
+   make install || exit 1
package/gcc/4.8-arc/301-missing-execinfo_h.patch new file +13 -0
new file mode 100644
index 0000000..00efda2
@@ -0,0 +1,13 @@
+Index: gcc-4.8.0/boehm-gc/include/gc.h
+===================================================================
+--- gcc-4.8.0.orig/boehm-gc/include/gc.h	2007-04-23 23:10:09.000000000 +0200
++++ gcc-4.8.0/boehm-gc/include/gc.h	2013-03-23 17:39:20.000000000 +0100
+@@ -503,7 +503,7 @@
+ #if defined(__linux__) || defined(__GLIBC__)
+ # include <features.h>
+ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1 || __GLIBC__ > 2) \
+-     && !defined(__ia64__)
++     && !defined(__ia64__) && !defined(__UCLIBC__)
+ #   ifndef GC_HAVE_BUILTIN_BACKTRACE
+ #     define GC_HAVE_BUILTIN_BACKTRACE
+ #   endif
package/gcc/4.8-arc/302-c99-snprintf.patch new file +13 -0
new file mode 100644
index 0000000..cd4d2cc
@@ -0,0 +1,13 @@
+Index: gcc-4.8.0/libstdc++-v3/include/c_global/cstdio
+===================================================================
+--- gcc-4.8.0.orig/libstdc++-v3/include/c_global/cstdio	2013-02-03 18:54:05.000000000 +0100
++++ gcc-4.8.0/libstdc++-v3/include/c_global/cstdio	2013-03-23 17:39:32.000000000 +0100
+@@ -138,7 +138,7 @@
+   using ::vsprintf;
+ } // namespace
+ 
+-#if _GLIBCXX_USE_C99
++#if _GLIBCXX_USE_C99 || defined __UCLIBC__
+ 
+ #undef snprintf
+ #undef vfscanf
package/gcc/4.8-arc/305-libmudflap-susv3-legacy.patch new file +49 -0

49 lines not on this page · raw message

package/gcc/4.8-arc/disable_gc_sections.patch new file +145 -0

145 lines not on this page · raw message

package/gcc/4.8-arc/fix_branch_out_of_range.patch renamed from package/gcc/4.4.7-arc/fix_branch_out_of_range.patch +1 -1
similarity index 96%
rename from package/gcc/4.4.7-arc/fix_branch_out_of_range.patch
rename to package/gcc/4.8-arc/fix_branch_out_of_range.patch
index e39b1cc..5340a3b 100644
@@ -24,7 +24,7 @@ index ff602c0..b3ca4c4 100644
  		  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)
++		  else if ((offset >= -120 && offset < 120)
  			   && rtx_equal_p (op1, const0_rtx)
  			   && compact_register_operand (op0, VOIDmode)
  			   && (GET_CODE (op) == EQ
package/gcc/Config.in.host +7 -6
index 972f81f..c49b8ed 100644
@@ -7,15 +7,11 @@ 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
+	default BR2_GCC_VERSION_4_8_ARC if BR2_arc
 	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
-		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"
@@ -55,6 +51,11 @@ choice
 		select BR2_GCC_NEEDS_MPC
 		bool "gcc 4.8.x"
 
+	config BR2_GCC_VERSION_4_8_ARC
+		depends on BR2_arc
+		select BR2_GCC_NEEDS_MPC
+		bool "gcc 4.8-arc"
+
 	config BR2_GCC_VERSION_SNAP
 		depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8
 		select BR2_GCC_NEEDS_MPC
@@ -84,11 +85,11 @@ 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
 	default "4.8.1"     if BR2_GCC_VERSION_4_8_X
+	default "4.8-arc"   if BR2_GCC_VERSION_4_8_ARC
 	default $BR2_GCC_SNAP_DATE if BR2_GCC_VERSION_SNAP
 
 config BR2_EXTRA_GCC_CONFIG_OPTIONS
package/gcc/gcc.mk +1 -1
index ae2a363..c0d821b 100644
@@ -133,7 +133,7 @@ HOST_GCC_COMMON_DEPENDENCIES += host-mpc
 HOST_GCC_COMMON_CONF_OPT += --with-mpc=$(HOST_DIR)/usr
 endif
 
-ifeq ($(BR2_GCC_VERSION_4_4_7_ARC),y)
+ifeq ($(BR2_arc),y)
 HOST_GCC_COMMON_DEPENDENCIES += host-flex host-bison
 endif
 
Signature · 1 line
1.7.9.5
#4 lore raw

v2 cover Upgrade ARC port to new toolchain

In reply to Mischa Jonker

Dear Mischa Jonker,

Quoted 3 lines · Mischa Jonker

These three patches upgrade the ARC toolchain to GCC 4.8 and Binutils 2.23.2. This fixes multiple issues (including most autobuilder failures from the past couple of weeks).

Thanks!

While you're at it, have you followed the recent changes on floating point support for ARM? How does floating point support works on ARC? Completely soft-float? Hard float is possible? Always the same FPU?

Thanks!

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#5 lore raw

v2 cover Upgrade ARC port to new toolchain

Hi Thomas,

Quoted 2 lines

While you're at it, have you followed the recent changes on floating point support for ARM?

I saw the mails, but I haven't studied them in detail.

Quoted 2 lines

How does floating point support works on ARC?
Completely soft-float? Hard float is possible? Always the same FPU?

For the current generation of cores (ARC700 series for Linux) we do not really have an 'FPU'. The ARC cores have the possibility of adding various extensions, and for floating point we happen to have 4 different kinds of extensions: spfp-compact, dpfp-compact, spfp-fast, dpfp-fast. In reality, these are just ADD, SUB and MUL instructions, the rest still needs to happen in software. The single and double precision extensions can be combined so both are supported in the same core. The fast and compact variants relate to the speed and the number of gates/area; I think they share the same opcode space.

I think right now it is more important to focus on getting most packages to build; after that I will look into the best way to make a toolchain + libraries tailored to the exact core configuration: the FPU is not the only thing that is configurable; you can have a variable set of registers, different types of multipliers, etc, etc.

If I were to add this configurability somewhere, do you think that CTNG would be the right place, or Buildroot?

Thanks,

Mischa

#6 lore raw

v2 cover Upgrade ARC port to new toolchain

In reply to Mischa Jonker
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Mischa" == Mischa Jonker <[email protected]> writes:

Mischa> These three patches upgrade the ARC toolchain to GCC 4.8 and Mischa> Binutils 2.23.2. This fixes multiple issues (including most Mischa> autobuilder failures from the past couple of weeks).

Mischa> v2:

 Mischa>   * Remove gcc 4.4.7 patch
 Mischa>   * Fix whitespace in fix_branch_out_of_range.patch
 Mischa>   * Remove binutils 2.19-arc dependencies (not required anymore)
 Mischa>   * Fix gcc 4.8-arc dependencies (host-flex, host-bison still required :-( )

Committed series, thanks.

Signature · 1 line
Bye, Peter Korsgaard