diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a49628d5641..c5235bf37ff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-10-25 Kai Tietz + + * config/i386/i386.c (ix86_frame_pointer_required): Require + frame-pointer, if setjmp is used for 32-bit ms-abi. + 2011-10-24 Michael Meissner * builtins.c (set_builtin_user_assembler_name): Remove extra diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ef1bbd317ce..e336d5abcd5 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8390,6 +8390,10 @@ ix86_frame_pointer_required (void) if (SUBTARGET_FRAME_POINTER_REQUIRED) return true; + /* For older 32-bit runtimes setjmp requires valid frame-pointer. */ + if (TARGET_32BIT_MS_ABI && cfun->calls_setjmp) + return true; + /* In ix86_option_override_internal, TARGET_OMIT_LEAF_FRAME_POINTER turns off the frame pointer by default. Turn it back on now if we've not got a leaf function. */