------- 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