diff options
author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2014-01-31 10:45:17 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-01-31 15:43:42 +0000 |
commit | 3004eb3b7ee5fd8dfe9c4e5749b4e125d0bd4b59 (patch) | |
tree | 9697097b588fa2abd7caec837d28f35b39d2f513 | |
parent | 7994b2870dac8fd5f6db6d47043378534b644515 (diff) | |
download | openembedded-core-3004eb3b7ee5fd8dfe9c4e5749b4e125d0bd4b59.tar.gz openembedded-core-3004eb3b7ee5fd8dfe9c4e5749b4e125d0bd4b59.tar.bz2 openembedded-core-3004eb3b7ee5fd8dfe9c4e5749b4e125d0bd4b59.zip |
gcc: Include patch scheduled for GCC 4.8.3 to fix epilogue on ARM
GCC 4.8.0, 4.8.1 and 4.8.2 can generate broken epilogues for the
ABI used by the kernel. Apply the patch that is included for GCC
4.8.3 from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854.
The issue was found on Yocto/Dora and the patch should be backported
to this branch. A kernel built with Dora's GCC 4.8.1 misbehaved on:
while true;
do
(for i in `seq 1 100`;
do
echo "Log message... $RANDOM";
done) | logger;
done
busybox's syslogd would from time to read a huge negative value and
then exit, strace would get stuck waiting on a syscall. After this
patch it appears to work better.
Signed-off-by: Holger Hans Peter Freyther <holger@moiji-mobile.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.8.inc | 1 | ||||
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.8/0048-PR58854_fix_arm_apcs_epilogue.patch | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.8.inc b/meta/recipes-devtools/gcc/gcc-4.8.inc index a140573d71..fdd0c12ae0 100644 --- a/meta/recipes-devtools/gcc/gcc-4.8.inc +++ b/meta/recipes-devtools/gcc/gcc-4.8.inc @@ -68,6 +68,7 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ file://0045-gcc-4.8-PR57717-PowerPC-E500v2.patch \ file://0046-libatomic-deptracking.patch \ file://0047-repomembug.patch \ + file://0048-PR58854_fix_arm_apcs_epilogue.patch \ " SRC_URI[md5sum] = "a3d7d63b9cb6b6ea049469a0c4a43c9d" SRC_URI[sha256sum] = "09dc2276c73424bbbfda1dbddc62bbbf900c9f185acf7f3e1d773ce2d7e3cdc8" diff --git a/meta/recipes-devtools/gcc/gcc-4.8/0048-PR58854_fix_arm_apcs_epilogue.patch b/meta/recipes-devtools/gcc/gcc-4.8/0048-PR58854_fix_arm_apcs_epilogue.patch new file mode 100644 index 0000000000..0ef245a17f --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.8/0048-PR58854_fix_arm_apcs_epilogue.patch @@ -0,0 +1,23 @@ +Backport fix for PR target/58854 + +2013-11-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + Backported from mainline + 2013-10-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> + + PR target/58854 + * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage + + +Upstream-Status: Backport + +--- gcc-4_8-branch/gcc/config/arm/arm.c 2013/11/11 08:00:45 204664 ++++ gcc-4_8-branch/gcc/config/arm/arm.c 2013/11/11 09:38:14 204665 +@@ -23555,6 +23555,7 @@ + num_regs = bit_count (saved_regs_mask); + if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca) + { ++ emit_insn (gen_blockage ()); + /* Unwind the stack to just below the saved registers. */ + emit_insn (gen_addsi3 (stack_pointer_rtx, + hard_frame_pointer_rtx, |