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. (From OE-Core master rev: 3004eb3b7ee5fd8dfe9c4e5749b4e125d0bd4b59) (From OE-Core rev: acef5185492287b9569f7fbbc3e9570d688e9c9f) Signed-off-by: Holger Hans Peter Freyther <holger@moiji-mobile.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
1a4fd0dd66
commit
97c9163d97
|
@ -78,6 +78,7 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
|
|||
file://0046-libatomic-deptracking.patch \
|
||||
file://0047-repomembug.patch \
|
||||
file://0048-PR57532.patch \
|
||||
file://0048-PR58854_fix_arm_apcs_epilogue.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "3b2386c114cd74185aa3754b58a79304"
|
||||
SRC_URI[sha256sum] = "545b44be3ad9f2c4e90e6880f5c9d4f0a8f0e5f67e1ffb0d45da9fa01bb05813"
|
||||
|
|
|
@ -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,
|
Loading…
Reference in New Issue