------- Comment #15 from jason at gcc dot gnu dot org 2006-09-08 07:14 ------- The bug is in expand_builtin_setjmp_receiver:
/* Now put in the code to restore the frame pointer, and argument pointer, if needed. */ [...] emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx); This is wrong for PPC, and indeed any target with non-zero STARTING_FRAME_OFFSET. A casual glance at the virtual register elimination code in function.c makes it clear that these two are not always equal. We could fix this by changing it to emit_move_insn (virtual_stack_vars_rtx, plus_constant (hard_frame_pointer_rtx, STARTING_FRAME_OFFSET)); but is there any reason not to just do emit_move_insn (frame_pointer_rtx, hard_frame_pointer_rtx); ? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28493