summaryrefslogtreecommitdiff
path: root/misc/buildroot/toolchain/gcc
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2013-12-26 13:24:06 -0600
committerGregory Nutt <gnutt@nuttx.org>2013-12-26 13:24:06 -0600
commit349f642f056d059b72dbfa3cba3763964b15d876 (patch)
treea3f309e659b0a3754499e71ff558aee3c2ecb10f /misc/buildroot/toolchain/gcc
parent528a08e265854a95976a5d77e91bdb934482a278 (diff)
downloadnuttx-349f642f056d059b72dbfa3cba3763964b15d876.tar.gz
nuttx-349f642f056d059b72dbfa3cba3763964b15d876.tar.bz2
nuttx-349f642f056d059b72dbfa3cba3763964b15d876.zip
Add GCc 4.8.2 support for buildroot
Diffstat (limited to 'misc/buildroot/toolchain/gcc')
-rw-r--r--misc/buildroot/toolchain/gcc/4.8.2/305-libmudflap-susv3-legacy.patch49
-rw-r--r--misc/buildroot/toolchain/gcc/4.8.2/810-arm-softfloat-libgcc.patch30
-rw-r--r--misc/buildroot/toolchain/gcc/4.8.2/830-arm_unbreak_armv4t.patch13
-rw-r--r--misc/buildroot/toolchain/gcc/4.8.2/840-PR57717.patch23
-rw-r--r--misc/buildroot/toolchain/gcc/4.8.2/841-PR57717-E500v2.patch21
-rw-r--r--misc/buildroot/toolchain/gcc/4.8.2/powerpc-link-with-math-lib.patch.conditional122
-rw-r--r--misc/buildroot/toolchain/gcc/Config.in24
7 files changed, 273 insertions, 9 deletions
diff --git a/misc/buildroot/toolchain/gcc/4.8.2/305-libmudflap-susv3-legacy.patch b/misc/buildroot/toolchain/gcc/4.8.2/305-libmudflap-susv3-legacy.patch
new file mode 100644
index 000000000..35d5f5020
--- /dev/null
+++ b/misc/buildroot/toolchain/gcc/4.8.2/305-libmudflap-susv3-legacy.patch
@@ -0,0 +1,49 @@
+Index: gcc-4.8.0/libmudflap/mf-hooks2.c
+===================================================================
+--- gcc-4.8.0.orig/libmudflap/mf-hooks2.c 2013-02-03 18:48:05.000000000 +0100
++++ gcc-4.8.0/libmudflap/mf-hooks2.c 2013-03-23 17:39:43.000000000 +0100
+@@ -424,7 +424,7 @@
+ {
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s, n, __MF_CHECK_WRITE, "bzero region");
+- bzero (s, n);
++ memset (s, 0, n);
+ }
+
+
+@@ -434,7 +434,7 @@
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(src, n, __MF_CHECK_READ, "bcopy src");
+ MF_VALIDATE_EXTENT(dest, n, __MF_CHECK_WRITE, "bcopy dest");
+- bcopy (src, dest, n);
++ memmove (dest, src, n);
+ }
+
+
+@@ -444,7 +444,7 @@
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s1, n, __MF_CHECK_READ, "bcmp 1st arg");
+ MF_VALIDATE_EXTENT(s2, n, __MF_CHECK_READ, "bcmp 2nd arg");
+- return bcmp (s1, s2, n);
++ return n == 0 ? 0 : memcmp (s1, s2, n);
+ }
+
+
+@@ -453,7 +453,7 @@
+ size_t n = strlen (s);
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "index region");
+- return index (s, c);
++ return strchr (s, c);
+ }
+
+
+@@ -462,7 +462,7 @@
+ size_t n = strlen (s);
+ TRACE ("%s\n", __PRETTY_FUNCTION__);
+ MF_VALIDATE_EXTENT(s, CLAMPADD(n, 1), __MF_CHECK_READ, "rindex region");
+- return rindex (s, c);
++ return strrchr (s, c);
+ }
+
+ /* XXX: stpcpy, memccpy */
diff --git a/misc/buildroot/toolchain/gcc/4.8.2/810-arm-softfloat-libgcc.patch b/misc/buildroot/toolchain/gcc/4.8.2/810-arm-softfloat-libgcc.patch
new file mode 100644
index 000000000..c8cb377d5
--- /dev/null
+++ b/misc/buildroot/toolchain/gcc/4.8.2/810-arm-softfloat-libgcc.patch
@@ -0,0 +1,30 @@
+Index: gcc-4.8.0/gcc/config/arm/linux-elf.h
+===================================================================
+--- gcc-4.8.0.orig/gcc/config/arm/linux-elf.h 2013-01-10 21:38:27.000000000 +0100
++++ gcc-4.8.0/gcc/config/arm/linux-elf.h 2013-03-23 17:40:00.000000000 +0100
+@@ -55,7 +55,7 @@
+ %{shared:-lc} \
+ %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
+
+-#define LIBGCC_SPEC "%{mfloat-abi=soft*:-lfloat} -lgcc"
++#define LIBGCC_SPEC "-lgcc"
+
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
+
+Index: gcc-4.8.0/libgcc/config/arm/t-linux
+===================================================================
+--- gcc-4.8.0.orig/libgcc/config/arm/t-linux 2012-03-22 16:14:46.000000000 +0100
++++ gcc-4.8.0/libgcc/config/arm/t-linux 2013-03-23 17:40:54.000000000 +0100
+@@ -1,6 +1,11 @@
+ LIB1ASMSRC = arm/lib1funcs.S
+ LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \
+- _ctzsi2 _arm_addsubdf3 _arm_addsubsf3
++ _ctzsi2 _arm_addsubdf3 _arm_addsubsf3 \
++ _arm_addsubdf3 _arm_addsubsf3 \
++ _arm_negdf2 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
++ _arm_fixdfsi _arm_fixunsdfsi _arm_truncdfsf2 \
++ _arm_negsf2 _arm_muldivsf3 _arm_cmpsf2 _arm_unordsf2 \
++ _arm_fixsfsi _arm_fixunssfsi
+
+ # Just for these, we omit the frame pointer since it makes such a big
+ # difference.
diff --git a/misc/buildroot/toolchain/gcc/4.8.2/830-arm_unbreak_armv4t.patch b/misc/buildroot/toolchain/gcc/4.8.2/830-arm_unbreak_armv4t.patch
new file mode 100644
index 000000000..37f8f2a54
--- /dev/null
+++ b/misc/buildroot/toolchain/gcc/4.8.2/830-arm_unbreak_armv4t.patch
@@ -0,0 +1,13 @@
+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/misc/buildroot/toolchain/gcc/4.8.2/840-PR57717.patch b/misc/buildroot/toolchain/gcc/4.8.2/840-PR57717.patch
new file mode 100644
index 000000000..f983f70d0
--- /dev/null
+++ b/misc/buildroot/toolchain/gcc/4.8.2/840-PR57717.patch
@@ -0,0 +1,23 @@
+This backports fix from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57717
+
+Upstream-Status: Backport
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: gcc-4.8.1/gcc/config/rs6000/rs6000.c
+===================================================================
+--- gcc-4.8.1.orig/gcc/config/rs6000/rs6000.c 2013-05-09 18:54:06.000000000 -0700
++++ gcc-4.8.1/gcc/config/rs6000/rs6000.c 2013-06-27 08:22:40.459021366 -0700
+@@ -5431,11 +5431,12 @@
+
+ case TFmode:
+ case TDmode:
+- case TImode:
+ if (TARGET_E500_DOUBLE)
+ return (SPE_CONST_OFFSET_OK (offset)
+ && SPE_CONST_OFFSET_OK (offset + 8));
++ /* Fall through. */
+
++ case TImode:
+ extra = 8;
+ if (!worst_case)
+ break;
diff --git a/misc/buildroot/toolchain/gcc/4.8.2/841-PR57717-E500v2.patch b/misc/buildroot/toolchain/gcc/4.8.2/841-PR57717-E500v2.patch
new file mode 100644
index 000000000..96fa1da07
--- /dev/null
+++ b/misc/buildroot/toolchain/gcc/4.8.2/841-PR57717-E500v2.patch
@@ -0,0 +1,21 @@
+This backports fix from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57717
+
+Upstream-Status: Backport
+Signed-off-by: Julian Brown <Julian_Brown@mentor.com>
+
+fix for PR57717 (PowerPC E500v2)
+http://gcc.gnu.org/ml/gcc-patches/2013-08/msg00668.html
+
+--- a/gcc/config/rs6000/rs6000.c 2013-05-09 20:54:06.000000000 -0500
++++ b/gcc/config/rs6000/rs6000.c 2013-08-28 01:25:24.865218744 -0500
+@@ -6337,9 +6337,7 @@
+ && GET_CODE (XEXP (x, 1)) == CONST_INT
+ && reg_offset_p
+ && !SPE_VECTOR_MODE (mode)
+- && !(TARGET_E500_DOUBLE && (mode == DFmode || mode == TFmode
+- || mode == DDmode || mode == TDmode
+- || mode == DImode))
++ && !(TARGET_E500_DOUBLE && GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+ && VECTOR_MEM_NONE_P (mode))
+ {
+ HOST_WIDE_INT val = INTVAL (XEXP (x, 1));
diff --git a/misc/buildroot/toolchain/gcc/4.8.2/powerpc-link-with-math-lib.patch.conditional b/misc/buildroot/toolchain/gcc/4.8.2/powerpc-link-with-math-lib.patch.conditional
new file mode 100644
index 000000000..b7094fe65
--- /dev/null
+++ b/misc/buildroot/toolchain/gcc/4.8.2/powerpc-link-with-math-lib.patch.conditional
@@ -0,0 +1,122 @@
+http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00269.html
+
+On glibc the libc.so carries a copy of the math function copysignl() but
+on uClibc math functions like copysignl() live in libm. Since libgcc_s
+contains unresolved symbols, any attempt to link against libgcc_s
+without explicitely specifying -lm fails, resulting in a broken
+bootstrap of the compiler.
+
+Forward port to gcc 4.5.1 by Gustavo Zacarias <gustavo@zacarias.com.ar>
+
+---
+ libgcc/Makefile.in | 4 +++-
+ libgcc/configure | 32 ++++++++++++++++++++++++++++++++
+ libgcc/configure.ac | 21 +++++++++++++++++++++
+ 3 files changed, 56 insertions(+), 1 deletion(-)
+
+Index: gcc-4.8.0/libgcc/Makefile.in
+===================================================================
+--- gcc-4.8.0.orig/libgcc/Makefile.in 2013-02-04 20:06:20.000000000 +0100
++++ gcc-4.8.0/libgcc/Makefile.in 2013-03-24 09:12:43.000000000 +0100
+@@ -41,6 +41,7 @@
+ decimal_float = @decimal_float@
+ enable_decimal_float = @enable_decimal_float@
+ fixed_point = @fixed_point@
++LIBGCC_LIBM = @LIBGCC_LIBM@
+
+ host_noncanonical = @host_noncanonical@
+ target_noncanonical = @target_noncanonical@
+@@ -927,9 +928,10 @@
+ @multilib_dir@,$(MULTIDIR),$(subst \
+ @shlib_objs@,$(objects) libgcc.a,$(subst \
+ @shlib_base_name@,libgcc_s,$(subst \
++ @libgcc_libm@,$(LIBGCC_LIBM),$(subst \
+ @shlib_map_file@,$(mapfile),$(subst \
+ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
+- @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
++ @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))))
+
+ libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
+ # @multilib_flags@ is still needed because this may use
+Index: gcc-4.8.0/libgcc/configure
+===================================================================
+--- gcc-4.8.0.orig/libgcc/configure 2012-11-05 00:08:42.000000000 +0100
++++ gcc-4.8.0/libgcc/configure 2013-03-24 09:12:43.000000000 +0100
+@@ -564,6 +564,7 @@
+ tmake_file
+ sfp_machine_header
+ set_use_emutls
++LIBGCC_LIBM
+ set_have_cc_tls
+ vis_hide
+ fixed_point
+@@ -4481,6 +4482,37 @@
+ fi
+ fi
+
++# On powerpc libgcc_s references copysignl which is a libm function but
++# glibc apparently also provides it via libc as opposed to uClibc where
++# it lives in libm.
++echo "$as_me:$LINENO: checking for library containing copysignl" >&5
++echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6
++if test "${libgcc_cv_copysignl_lib+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++
++ echo '#include <features.h>' > conftest.c
++ echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
++ libgcc_cv_copysignl_lib="-lc"
++ if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }
++ then
++ libgcc_cv_copysignl_lib="-lm"
++ fi
++ rm -f conftest.*
++
++fi
++echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5
++echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6
++
++case /${libgcc_cv_copysignl_lib}/ in
++ /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
++ *) LIBGCC_LIBM= ;;
++esac
+
+ # Conditionalize the makefile for this target machine.
+ tmake_file_=
+Index: gcc-4.8.0/libgcc/configure.ac
+===================================================================
+--- gcc-4.8.0.orig/libgcc/configure.ac 2012-10-15 15:10:30.000000000 +0200
++++ gcc-4.8.0/libgcc/configure.ac 2013-03-24 09:12:43.000000000 +0100
+@@ -326,6 +326,27 @@
+ fi
+ AC_SUBST(set_have_cc_tls)
+
++# On powerpc libgcc_s references copysignl which is a libm function but
++# glibc apparently also provides it via libc as opposed to uClibc where
++# it lives in libm.
++AC_CACHE_CHECK
++ libgcc_cv_copysignl_lib,
++ echo '#include <features.h>' > conftest.c
++ echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
++ libgcc_cv_copysignl_lib="-lc"
++ if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD)
++ then
++ libgcc_cv_copysignl_lib="-lm"
++ fi
++ rm -f conftest.*
++ ])
++
++case /${libgcc_cv_copysignl_lib}/ in
++ /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
++ *) LIBGCC_LIBM= ;;
++esac
++AC_SUBST(LIBGCC_LIBM)
++
+ # See if we have emulated thread-local storage.
+ GCC_CHECK_EMUTLS
+ set_use_emutls=
diff --git a/misc/buildroot/toolchain/gcc/Config.in b/misc/buildroot/toolchain/gcc/Config.in
index f7f9bfd28..3a8f61592 100644
--- a/misc/buildroot/toolchain/gcc/Config.in
+++ b/misc/buildroot/toolchain/gcc/Config.in
@@ -3,31 +3,31 @@
comment "GCC Options"
config BR2_PACKAGE_GCC
- bool "Build GCC cross-compiler"
- default n
- help
- Build the GCC cross-compiler for the target architecture.
+ bool "Build GCC cross-compiler"
+ default n
+ help
+ Build the GCC cross-compiler for the target architecture.
choice
prompt "GCC compiler Version"
- default BR2_GCC_VERSION_4_3_3 if BR2_cortex_a5 || BR2_cortex_a8 || BR2_cortex_m3 || BR2_cortex_m0
- default BR2_GCC_VERSION_4_2_4 if !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_m3 && !BR2_cortex_m0 && !BR2_m9s12x
+ default BR2_GCC_VERSION_4_3_3 if BR2_GCC_CORTEX
+ default BR2_GCC_VERSION_4_2_4 if !BR2_avr32 && !BR2_GCC_CORTEX && !BR2_m9s12x
default BR2_GCC_VERSION_3_4_6 if BR2_avr32
default BR2_GCC_VERSION_3_3_6 if BR2_m9s12x
depends on BR2_PACKAGE_GCC
help
- Select the version of gcc you wish to use.
+ Select the version of gcc you wish to use.
config BR2_GCC_VERSION_3_3_6
depends on BR2_m9s12x
bool "gcc 3.3.6"
config BR2_GCC_VERSION_3_4_6
- depends on !BR2_m32c && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_m3 && !BR2_cortex_m0 && !BR2_m9s12x
+ depends on !BR2_m32c && !BR2_GCC_CORTEX
bool "gcc 3.4.6"
config BR2_GCC_VERSION_4_2_4
- depends on !BR2_avr32 && !BR2_nios2 && !BR2_cortex_a5 && !BR2_cortex_a8 && !BR2_cortex_m3 && !BR2_cortex_m0 && !BR2_m9s12x
+ depends on !BR2_avr32 && !BR2_nios2 && !BR2_GCC_CORTEX && !BR2_m9s12x
select BR2_GCC_SUPPORTS_SYSROOT
bool "gcc 4.2.4"
@@ -46,6 +46,11 @@ choice
select BR2_GCC_SUPPORTS_SYSROOT
bool "gcc 4.6.3"
+ config BR2_GCC_VERSION_4_8_2
+ depends on !BR2_avr32 && !BR2_nios2 && !BR2_m9s12x
+ select BR2_GCC_SUPPORTS_SYSROOT
+ bool "gcc 4.8.2"
+
endchoice
config BR2_GCC_SUPPORTS_SYSROOT
@@ -60,6 +65,7 @@ config BR2_GCC_VERSION
default "4.3.3" if BR2_GCC_VERSION_4_3_3
default "4.5.2" if BR2_GCC_VERSION_4_5_2
default "4.6.3" if BR2_GCC_VERSION_4_6_3
+ default "4.8.2" if BR2_GCC_VERSION_4_8_2
config BR2_GCC_USE_SJLJ_EXCEPTIONS
bool "Enable setjmp/longjmp exceptions?"