Comments
Patch
===================================================================
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-Os -fno-omit-frame-pointer" } */
+
+struct _Unwind_Context { void *ra; };
+
+long uw_install_context_1 (struct _Unwind_Context *, struct _Unwind_Context *);
+
+void _Unwind_RaiseException(void)
+{
+ struct _Unwind_Context this_context, cur_context;
+ long offset = uw_install_context_1 (&this_context, &cur_context);
+ void *handler = __builtin_frob_return_addr ((&cur_context)->ra);
+
+ __builtin_eh_return (offset, handler);
+}
+
===================================================================
@@ -10118,6 +10118,7 @@ ix86_expand_epilogue (int style)
}
}
m->fs.sp_offset = UNITS_PER_WORD;
+ m->fs.sp_valid = true;
}
}
else
Hello! Currently, the attached testcase fails with: pr45206.c: In function ‘_Unwind_RaiseException’: pr45206.c:12:1: internal compiler error: in ix86_expand_epilogue, at config/i386/i386.c:10206 Please submit a full bug report, The problem is, that after stack pointer fixup code for eh_return epilogue was emitted, we forgot to mark SP as valid. 2010-09-07 Uros Bizjak <ubizjak@gmail.com> PR target/45206 * config/i386/i386.c (ix86_expand_epilogue): Mark SP as valid after eh_return fixup sequence. testsuite/ChangeLog: 2010-09-07 Uros Bizjak <ubizjak@gmail.com> PR target/45206 * gcc.target/i386/pr45206.c: New test. Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}. Additionally, patched gcc generates exactly the same code as gcc-4.4.4 for attached testcase. OK for mainline? Uros.