------- Comment #1 from kkojima at gcc dot gnu dot org 2008-05-11 00:10 ------- Kenny made me notice that julian proposed a patch for ARM which had similar failures for foward-1.m. Although it turned out that the cause of failure on SH is different from that on ARM, his analysis helps to see what is going on here.
I've confirmed that foward-1.m fails on trunk for sh-elf even with -O0 -fomit-frame-pointer. sh-elf compiler generates a wrong frame info for libobjc/sendmsg.c:__objc_word_forward for non fpu arches. In problematic case, __objc_word_forward was compiled like as: __objc_word_forward: .LFB2: mov.l r7,@-r15 mov.l r6,@-r15 mov.l r14,@-r15 .LCFI0: sts.l pr,@-r15 and there are no frame info for first 2 instructions. It results a bad stack pointer value after unwinding when -fomit-frame-pointer is specified. I'm testing the attached patch. diff -uprN ORIG/trunk/gcc/config/sh/sh.c LOCAL/trunk/gcc/config/sh/sh.c --- ORIG/trunk/gcc/config/sh/sh.c 2008-04-27 13:53:04.000000000 +0900 +++ LOCAL/trunk/gcc/config/sh/sh.c 2008-05-10 14:27:53.000000000 +0900 @@ -6320,7 +6320,6 @@ sh_expand_prologue (void) )) break; insn = push (rn); - RTX_FRAME_RELATED_P (insn) = 0; } } } -- kkojima at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kkojima at gcc dot gnu dot | |org Status|UNCONFIRMED |NEW Component|rtl-optimization |target Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2008-05-11 00:10:23 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24713