gcc: backport patch for gcc bug 61144
authorSaul Wold <sgw@linux.intel.com>
Sat, 11 Oct 2014 06:46:16 +0000 (23:46 -0700)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 11 Oct 2014 07:11:03 +0000 (08:11 +0100)
This fixes gcc bug 6144, which in my case exhibited itself as a kernel
module that failed to load. This was because static platform_data
structures were being corrupted with the optimiser being set to any
value other than -O0.

Originally-submitted-by: Peter Urbanec <openembedded-devel@urbanec.net>
(From OE-Core rev: 365221f7285c0e392f573deaab3b1e00b12bc293)

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/gcc/gcc-4.9.inc
meta/recipes-devtools/gcc/gcc-4.9/0056-top-level-reorder_gcc-bug-61144.patch [new file with mode: 0644]

index 25778bd..9a66cd2 100644 (file)
@@ -70,6 +70,7 @@ SRC_URI = "\
     file://0053-gcc-fix-segfault-from-calling-free-on-non-malloc-d-a.patch \
     file://0054-gcc-Makefile.in-fix-parallel-building-failure.patch \
     file://0055-PR-rtl-optimization-61801.patch \
+    file://0056-top-level-reorder_gcc-bug-61144.patch \
 "
 SRC_URI[md5sum] = "fddf71348546af523353bd43d34919c1"
 SRC_URI[sha256sum] = "d334781a124ada6f38e63b545e2a3b8c2183049515a1abab6d513f109f1d717e"
diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0056-top-level-reorder_gcc-bug-61144.patch b/meta/recipes-devtools/gcc/gcc-4.9/0056-top-level-reorder_gcc-bug-61144.patch
new file mode 100644 (file)
index 0000000..f448932
--- /dev/null
@@ -0,0 +1,31 @@
+
+Upstream-Status: Backport
+
+Originally-submitted-by: Peter Urbanec <openembedded-devel@urbanec.net>
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+--- /dev/null
++++ b/meta/recipes-devtools/gcc/gcc-4.9/0056-top-level-reorder_gcc-bug-61144.patch
+@@ -0,0 +1,21 @@
++--- a/gcc/varpool.c    2014/10/05 02:50:01     215895
+++++ b/gcc/varpool.c    2014/10/05 04:52:19     215896
++@@ -329,8 +329,16 @@
++
++   /* Variables declared 'const' without an initializer
++      have zero as the initializer if they may not be
++-     overridden at link or run time.  */
++-  if (!DECL_INITIAL (real_decl)
+++     overridden at link or run time.
+++
+++     It is actually requirement for C++ compiler to optimize const variables
+++     consistently. As a GNU extension, do not enfore this rule for user defined
+++     weak variables, so we support interposition on:
+++     static const int dummy = 0;
+++     extern const int foo __attribute__((__weak__, __alias__("dummy")));
+++   */
+++  if ((!DECL_INITIAL (real_decl)
+++       || (DECL_WEAK (decl) && !DECL_COMDAT (decl)))
++       && (DECL_EXTERNAL (decl) || decl_replaceable_p (decl)))
++     return error_mark_node;
++ 
+