]> code.ossystems Code Review - openembedded-core.git/commitdiff
gcc-4.6: Add fix for relocation problem and ccache
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 13 Apr 2012 13:13:48 +0000 (14:13 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 13 Apr 2012 13:26:39 +0000 (14:26 +0100)
If the toolchain is reused from sstate and ccache is installed, build failures
were occuring due to gcc trying to access the original sysroot rather than the
new one, particularly if the old sysroot existed but was not readable by the
current user.

This turns out of the an issue inside gcc to do with preservation of the sysroot
option. See the gcc patch for more details. It only triggers when preprocessed
sources are used which happens when ccache is used.

The same issue occurs with c++ and c++-cpp-output so the same fix is applied there.

[YOCTO #2074]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/recipes-devtools/gcc/gcc-4.6.inc
meta/recipes-devtools/gcc/gcc-4.6/cpp-honour-sysroot.patch [new file with mode: 0644]

index d40a53412e65f45cad2f36df8d8de8ee37819576..020e21b071448d27db6cc82d6b66d16178b78134 100644 (file)
@@ -1,6 +1,6 @@
 require gcc-common.inc
 
-PR = "r24"
+PR = "r25"
 
 # Third digit in PV should be incremented after a minor release
 # happens from this branch on gcc e.g. currently its 4.6.0
@@ -73,6 +73,7 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH};proto=http \
           file://gcc-arm-set-cost.patch \
           file://GPLUSPLUS_INCLUDE_DIR_with_sysroot.patch \
           file://fortran-cross-compile-hack.patch \
+          file://cpp-honour-sysroot.patch \
          "
 
 SRC_URI_append_sh3  = " file://sh3-installfix-fixheaders.patch "
diff --git a/meta/recipes-devtools/gcc/gcc-4.6/cpp-honour-sysroot.patch b/meta/recipes-devtools/gcc/gcc-4.6/cpp-honour-sysroot.patch
new file mode 100644 (file)
index 0000000..7310677
--- /dev/null
@@ -0,0 +1,40 @@
+Currently, if the gcc toolchain is relocated and installed from sstate, then you try and compile
+preprocessed source (.i or .ii files), the compiler will try and access the builtin sysroot location 
+rather than the --sysroot option specified on the commandline. If access to that directory is 
+permission denied (unreadable), gcc will error.
+
+This happens when ccache is in use due to the fact it uses preprocessed source files.
+
+The fix below adds %I to the cpp-output spec macro so the default substitutions for -iprefix, 
+-isystem, -isysroot happen and the correct sysroot is used.
+
+[YOCTO #2074]
+
+Upstream-Status: Pending
+
+RP 2012/04/13
+
+Index: gcc-4_6-branch/gcc/gcc.c
+===================================================================
+--- gcc-4_6-branch.orig/gcc/gcc.c      2012-04-13 12:24:37.939671140 +0000
++++ gcc-4_6-branch/gcc/gcc.c   2012-04-13 12:24:54.439670688 +0000
+@@ -953,7 +953,7 @@
+                     %W{o*:--output-pch=%*}}%V}}}}}}", 0, 0, 0},
+   {".i", "@cpp-output", 0, 0, 0},
+   {"@cpp-output",
+-   "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
++   "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %I %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},
+   {".s", "@assembler", 0, 0, 0},
+   {"@assembler",
+    "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 0, 0},
+Index: gcc-4_6-branch/gcc/cp/lang-specs.h
+===================================================================
+--- gcc-4_6-branch.orig/gcc/cp/lang-specs.h    2012-04-13 12:25:01.019670594 +0000
++++ gcc-4_6-branch/gcc/cp/lang-specs.h 2012-04-13 12:25:07.567670180 +0000
+@@ -64,5 +64,5 @@
+   {".ii", "@c++-cpp-output", 0, 0, 0},
+   {"@c++-cpp-output",
+    "%{!M:%{!MM:%{!E:\
+-    cc1plus -fpreprocessed %i %(cc1_options) %2\
++    cc1plus -fpreprocessed %i %I %(cc1_options) %2\
+     %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},