diff options
6 files changed, 178 insertions, 12 deletions
diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc index 72c08d14..18bf0740 100644 --- a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc +++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9.inc @@ -1,8 +1,8 @@ require recipes-devtools/gcc/gcc-4.9.inc PV = "linaro-${BASEPV}" -MMYY = "14.06" -RELEASE = "20${MMYY}-1" +MMYY = "14.07" +RELEASE = "20${MMYY}" PR = "r${RELEASE}" BINV = "4.9.1" @@ -52,12 +52,14 @@ SRC_URI = "https://releases.linaro.org/${MMYY}/components/toolchain/gcc-linaro/$ file://0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch \ file://0050-Revert-Use-dbx_reg_number-for-spanning-registers.patch \ file://0051-eabispe.patch \ + file://0052-Fix-GCC-targeting-E500-SPE-errors-with-the-_Decimal64-type.patch;apply=no \ + file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \ file://AArch64-Define-BE-loader-name-default-be.patch \ file://use-lib-for-aarch64.patch \ " -SRC_URI[md5sum] = "d2a0e0a7ed23edba0c506899d2e26e29" -SRC_URI[sha256sum] = "eacd202da0fcdef391479ef8a4e5961e803b07369ae9ce59202f045719341492" +SRC_URI[md5sum] = "95fbe1f1933aa157ec9e083419b8dd88" +SRC_URI[sha256sum] = "d5d11b7356fd351532396c81e1d7a390842806b31ef288a6ac13c53a45a0c62d" S = "${TMPDIR}/work-shared/gcc-${PV}-${PR}/gcc-${PV}-${RELEASE}" B = "${WORKDIR}/gcc-${PV}-${RELEASE}/build.${HOST_SYS}.${TARGET_SYS}" diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0047-repomembug.patch b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0047-repomembug.patch index 868a4f3a..9afd55cb 100644 --- a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0047-repomembug.patch +++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0047-repomembug.patch @@ -31,7 +31,7 @@ RP 2013/10/9 [YOCTO #5133] -Upstream-State: Pending +Upstream-Status: Pending Index: gcc-4.8.1/gcc/toplev.c =================================================================== diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0052-Fix-GCC-targeting-E500-SPE-errors-with-the-_Decimal64-type.patch b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0052-Fix-GCC-targeting-E500-SPE-errors-with-the-_Decimal64-type.patch new file mode 100644 index 00000000..b4be18e2 --- /dev/null +++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0052-Fix-GCC-targeting-E500-SPE-errors-with-the-_Decimal64-type.patch @@ -0,0 +1,98 @@ +From e44a6d438db4848c2a555be773568a3cf7994206 Mon Sep 17 00:00:00 2001 +From: Alexandru-Cezar Sardan <alexandru.sardan-KZfg59tc24xl57MIdRCFDg@public.gmane.org> +Date: Mon, 26 May 2014 12:11:13 +0300 +Subject: [PATCH] Fix E500 with SPE errors with the _Decimal64 type + +[gcc] +2014-04-21 Michael Meissner <meissner-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> + + PR target/60735 + * config/rs6000/rs6000.md (mov<mode>_softfloat32, FMOVE64 case): + If mode is DDmode and TARGET_E500_DOUBLE allow move. + + * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print some + more debug information for E500 if -mdebug=reg. + +[gcc/testsuite] +2014-04-21 Michael Meissner <meissner-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> + + PR target/60735 + * gcc.target/powerpc/pr60735.c: New test. Insure _Decimal64 does + not cause errors if -mspe. + +Upstream status: Accepted + +This solves upstream bug 60735 +(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60735). + +Patch taken from https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=209664 +--- + gcc/config/rs6000/rs6000.c | 18 ++++++++++++++++++ + gcc/config/rs6000/rs6000.md | 3 ++- + gcc/testsuite/gcc.target/powerpc/pr60735.c | 11 +++++++++++ + 3 files changed, 31 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/gcc.target/powerpc/pr60735.c + +diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c +index 494efc5..6dcf440 100644 +--- a/gcc/config/rs6000/rs6000.c ++++ b/gcc/config/rs6000/rs6000.c +@@ -2283,6 +2283,24 @@ rs6000_debug_reg_global (void) + if (rs6000_float_gprs) + fprintf (stderr, DEBUG_FMT_S, "float_gprs", "true"); + ++ fprintf (stderr, DEBUG_FMT_S, "fprs", ++ (TARGET_FPRS ? "true" : "false")); ++ ++ fprintf (stderr, DEBUG_FMT_S, "single_float", ++ (TARGET_SINGLE_FLOAT ? "true" : "false")); ++ ++ fprintf (stderr, DEBUG_FMT_S, "double_float", ++ (TARGET_DOUBLE_FLOAT ? "true" : "false")); ++ ++ fprintf (stderr, DEBUG_FMT_S, "soft_float", ++ (TARGET_SOFT_FLOAT ? "true" : "false")); ++ ++ fprintf (stderr, DEBUG_FMT_S, "e500_single", ++ (TARGET_E500_SINGLE ? "true" : "false")); ++ ++ fprintf (stderr, DEBUG_FMT_S, "e500_double", ++ (TARGET_E500_DOUBLE ? "true" : "false")); ++ + if (TARGET_LINK_STACK) + fprintf (stderr, DEBUG_FMT_S, "link_stack", "true"); + +diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md +index 64c9e7c..9cefe15 100644 +--- a/gcc/config/rs6000/rs6000.md ++++ b/gcc/config/rs6000/rs6000.md +@@ -9395,7 +9395,8 @@ + (match_operand:FMOVE64 1 "input_operand" "r,Y,r,G,H,F"))] + "! TARGET_POWERPC64 + && ((TARGET_FPRS && TARGET_SINGLE_FLOAT) +- || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE) ++ || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE ++ || (<MODE>mode == DDmode && TARGET_E500_DOUBLE)) + && (gpc_reg_operand (operands[0], <MODE>mode) + || gpc_reg_operand (operands[1], <MODE>mode))" + "#" +diff --git a/gcc/testsuite/gcc.target/powerpc/pr60735.c b/gcc/testsuite/gcc.target/powerpc/pr60735.c +new file mode 100644 +index 0000000..9bac30b +--- /dev/null ++++ b/gcc/testsuite/gcc.target/powerpc/pr60735.c +@@ -0,0 +1,11 @@ ++/* { dg-do compile } */ ++/* { dg-options "-mcpu=8548 -mspe -mabi=spe -O2" } */ ++/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } { "*" } { "" } } */ ++ ++/* In PR60735, the type _Decimal64 generated an insn not found message. */ ++ ++void ++pr60735 (_Decimal64 *p, _Decimal64 *q) ++{ ++ *p = *q; ++} +-- +1.7.9.5 + diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch new file mode 100644 index 00000000..23b445c9 --- /dev/null +++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch @@ -0,0 +1,66 @@ +From a22a222c8f9299f6c07a0274388ade7d4ab8c28d Mon Sep 17 00:00:00 2001 +From: Paul Gortmaker <paul.gortmaker@windriver.com> +Date: Fri, 20 Jun 2014 16:41:08 -0400 +Subject: [PATCH] gcc: fix segfault from calling free on non-malloc'd area + +We see the following on a 32bit gcc installed on 64 bit host: + + Reading symbols from ./i586-pokymllib32-linux-gcc...done. + (gdb) run + Starting program: x86-pokymllib32-linux/lib32-gcc/4.9.0-r0/image/usr/bin/i586-pokymllib32-linux-gcc + + Program received signal SIGSEGV, Segmentation fault. + 0xf7e957e0 in free () from /lib/i386-linux-gnu/libc.so.6 + (gdb) bt + #0 0xf7e957e0 in free () from /lib/i386-linux-gnu/libc.so.6 + #1 0x0804b73c in set_multilib_dir () at gcc-4.9.0/gcc/gcc.c:7827 + #2 main (argc=1, argv=0xffffd504) at gcc-4.9.0/gcc/gcc.c:6688 + (gdb) + +The problem arises because we conditionally assign the pointer we +eventually free, and the conditional may assign the pointer to the +non-malloc'd internal string "." which fails when we free it here: + + if (multilib_dir == NULL && multilib_os_dir != NULL + && strcmp (multilib_os_dir, ".") == 0) + { + free (CONST_CAST (char *, multilib_os_dir)); + ... + +As suggested by Jakub, ensure the "." case is also malloc'd via +xstrdup() and hence the pointer for the "." case can be freed. + +Cc: Jakub Jelinek <jakub@redhat.com> +Cc: Jeff Law <law@redhat.com> +Cc: Matthias Klose <doko@ubuntu.com> +CC: Tobias Burnus <burnus@net-b.de> +Upstream-Status: Accepted [ https://gcc.gnu.org/ml/gcc-patches/2014-06/msg02069.html ] +Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> + +diff --git a/gcc/gcc.c b/gcc/gcc.c +index 9ac18e60d801..168acf7eb0c9 100644 +--- a/gcc/gcc.c ++++ b/gcc/gcc.c +@@ -7790,10 +7790,15 @@ set_multilib_dir (void) + q2++; + if (*q2 == ':') + ml_end = q2; +- new_multilib_os_dir = XNEWVEC (char, ml_end - q); +- memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1); +- new_multilib_os_dir[ml_end - q - 1] = '\0'; +- multilib_os_dir = *new_multilib_os_dir ? new_multilib_os_dir : "."; ++ if (ml_end - q == 1) ++ multilib_os_dir = xstrdup ("."); ++ else ++ { ++ new_multilib_os_dir = XNEWVEC (char, ml_end - q); ++ memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1); ++ new_multilib_os_dir[ml_end - q - 1] = '\0'; ++ multilib_os_dir = new_multilib_os_dir; ++ } + + if (q2 < end && *q2 == ':') + { +-- +1.9.2 + diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/AArch64-Define-BE-loader-name-default-be.patch b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/AArch64-Define-BE-loader-name-default-be.patch index eb8ff014..87552415 100644 --- a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/AArch64-Define-BE-loader-name-default-be.patch +++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/AArch64-Define-BE-loader-name-default-be.patch @@ -6,7 +6,7 @@ Index: gcc-linaro-4.8-2014.03/gcc/config/aarch64/aarch64-linux.h #ifndef GCC_AARCH64_LINUX_H #define GCC_AARCH64_LINUX_H --#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1" +-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" - #define CPP_SPEC "%{pthread:-D_REENTRANT}" @@ -21,9 +21,9 @@ Index: gcc-linaro-4.8-2014.03/gcc/config/aarch64/aarch64-linux.h + -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \ + -X \ + %{mbig-endian:-EB} %{mlittle-endian:-EL} \ -+ -maarch64linux%{!mlittle-endian:b}" ++ -maarch64linux%{mabi=ilp32:32}%{!mlittle-endian:b}" +#else -+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1" ++#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" + #define LINUX_TARGET_LINK_SPEC "%{h*} \ %{static:-Bstatic} \ @@ -31,7 +31,7 @@ Index: gcc-linaro-4.8-2014.03/gcc/config/aarch64/aarch64-linux.h @@ -34,6 +47,7 @@ -X \ %{mbig-endian:-EB} %{mlittle-endian:-EL} \ - -maarch64linux%{mbig-endian:b}" + -maarch64linux%{mabi=ilp32:32}%{mbig-endian:b}" +#endif #define LINK_SPEC LINUX_TARGET_LINK_SPEC diff --git a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/use-lib-for-aarch64.patch b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/use-lib-for-aarch64.patch index e91ebd88..62bb110f 100644 --- a/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/use-lib-for-aarch64.patch +++ b/meta-linaro-toolchain/recipes-devtools/gcc/gcc-linaro-4.9/use-lib-for-aarch64.patch @@ -6,8 +6,8 @@ index 147452b..1930046 100644 LIB1ASMFUNCS = _aarch64_sync_cache_range AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be) --MULTILIB_OSDIRNAMES = .=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) -+MULTILIB_OSDIRNAMES = .=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) +-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) ++MULTILIB_OSDIRNAMES = mabi.lp64=../lib$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu) MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu) - # Disable the multilib for linux-gnu targets for the time being; focus + MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32 |