From 5aff1820c54433dfc94825ea82faf77745ad5a8b Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 1 Aug 2013 15:07:55 -0700 Subject: gcc-4.8: Fix meta-fsl-arm iperf build issue This should fix the problem seen where gcc ICE was happening when compiling iperf with older 2.6.x kernel Test this patch by reverting below commit in meta-fsl-arm commit daf582c93a7283fb0af3b25fe2ada48f4c9985c4 Author: Otavio Salvador Date: Tue Jul 2 11:52:51 2013 -0300 perf: Disable FPU tune for i.MX5 SoCs to workaround GCC ICE (From OE-Core rev: 8ab1d16b6c6d946b625b6872e5d0f155206f4bad) Signed-off-by: Khem Raj CC: Otavio Salvador Signed-off-by: Saul Wold Signed-off-by: Richard Purdie --- meta/recipes-devtools/gcc/gcc-4.8.inc | 1 + .../gcc/gcc-4.8/0042-pr57748.patch | 78 ++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 meta/recipes-devtools/gcc/gcc-4.8/0042-pr57748.patch (limited to 'meta/recipes-devtools/gcc') diff --git a/meta/recipes-devtools/gcc/gcc-4.8.inc b/meta/recipes-devtools/gcc/gcc-4.8.inc index 42355f2..9d92eda 100644 --- a/meta/recipes-devtools/gcc/gcc-4.8.inc +++ b/meta/recipes-devtools/gcc/gcc-4.8.inc @@ -71,6 +71,7 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://0039-gcc-4.8-PR57717.patch \ file://0040-fix-g++-sysroot.patch \ file://0041-libtool-avoid-libdir.patch \ + file://0042-pr57748.patch \ " SRC_URI[md5sum] = "3b2386c114cd74185aa3754b58a79304" SRC_URI[sha256sum] = "545b44be3ad9f2c4e90e6880f5c9d4f0a8f0e5f67e1ffb0d45da9fa01bb05813" diff --git a/meta/recipes-devtools/gcc/gcc-4.8/0042-pr57748.patch b/meta/recipes-devtools/gcc/gcc-4.8/0042-pr57748.patch new file mode 100644 index 0000000..5356f72 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.8/0042-pr57748.patch @@ -0,0 +1,78 @@ +Upstream-Status: Backport +Signed-off-by: Khem Raj + +2013-08-01 Martin Jambor + + PR middle-end/57748 + * stor-layout.c (compute_record_mode): Treat zero-sized array fields + like incomplete types. + +testsuite/ + * gcc.dg/torture/pr57748.c: New test. + + +Index: gcc-4.8.1/gcc/stor-layout.c +=================================================================== +--- gcc-4.8.1.orig/gcc/stor-layout.c 2013-04-28 10:29:18.000000000 -0700 ++++ gcc-4.8.1/gcc/stor-layout.c 2013-08-01 15:02:08.018006125 -0700 +@@ -1618,7 +1618,9 @@ + && integer_zerop (TYPE_SIZE (TREE_TYPE (field))))) + || ! host_integerp (bit_position (field), 1) + || DECL_SIZE (field) == 0 +- || ! host_integerp (DECL_SIZE (field), 1)) ++ || ! host_integerp (DECL_SIZE (field), 1) ++ || (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE ++ && tree_low_cst (DECL_SIZE (field), 1) == 0)) + return; + + /* If this field is the whole struct, remember its mode so +Index: gcc-4.8.1/gcc/testsuite/gcc.dg/torture/pr57748.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ gcc-4.8.1/gcc/testsuite/gcc.dg/torture/pr57748.c 2013-08-01 15:02:08.062006126 -0700 +@@ -0,0 +1,45 @@ ++/* PR middle-end/57748 */ ++/* { dg-do run } */ ++ ++#include ++ ++extern void abort (void); ++ ++typedef long long V ++ __attribute__ ((vector_size (2 * sizeof (long long)), may_alias)); ++ ++typedef struct S { V a; V b[0]; } P __attribute__((aligned (1))); ++ ++struct __attribute__((packed)) T { char c; P s; }; ++ ++void __attribute__((noinline, noclone)) ++check (struct T *t) ++{ ++ if (t->s.b[0][0] != 3 || t->s.b[0][1] != 4) ++ abort (); ++} ++ ++int __attribute__((noinline, noclone)) ++get_i (void) ++{ ++ return 0; ++} ++ ++void __attribute__((noinline, noclone)) ++foo (P *p) ++{ ++ V a = { 3, 4 }; ++ int i = get_i(); ++ p->b[i] = a; ++} ++ ++int ++main () ++{ ++ struct T *t = (struct T *) malloc (128); ++ ++ foo (&t->s); ++ check (t); ++ ++ return 0; ++} -- cgit v1.1