diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a4857b87b3..71c6d19d76 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2012-02-29 Jan Kratochvil + + * arm-linux-tdep.c (arm_linux_copy_svc): Reset stale FRAME. + * breakpoint.c (until_break_command): Likewise. + * elfread.c (elf_gnu_ifunc_resolver_stop): Likewise. + * infcall.c (call_function_by_hand): Likewise. + * infcmd.c (finish_forward): Likewise. + * infrun.c (insert_exception_resume_breakpoint): Likewise. + 2012-02-28 Joel Brobecker From Tristan Gingold . diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index ac4860c3db..e41205be70 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -937,6 +937,9 @@ arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs, = set_momentary_breakpoint (gdbarch, sal, get_frame_id (frame), bp_step_resume); + /* set_momentary_breakpoint invalidates FRAME. */ + frame = NULL; + /* We need to make sure we actually insert the momentary breakpoint set above. */ insert_breakpoints (); diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index db05b9798c..311c451019 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -10478,6 +10478,9 @@ until_break_command (char *arg, int from_tty, int anywhere) make_cleanup (delete_longjmp_breakpoint_cleanup, &thread); } + /* set_momentary_breakpoint could invalidate FRAME. */ + frame = NULL; + if (anywhere) /* If the user told us to continue until a specified location, we don't specify a frame at which we need to stop. */ diff --git a/gdb/elfread.c b/gdb/elfread.c index f8ed10efd0..9f8a7e8bf0 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -995,6 +995,9 @@ elf_gnu_ifunc_resolver_stop (struct breakpoint *b) prev_frame_id, bp_gnu_ifunc_resolver_return); + /* set_momentary_breakpoint invalidates PREV_FRAME. */ + prev_frame = NULL; + /* Add new b_return to the ring list b->related_breakpoint. */ gdb_assert (b_return->related_breakpoint == b_return); b_return->related_breakpoint = b->related_breakpoint; diff --git a/gdb/infcall.c b/gdb/infcall.c index 9af56ba4b9..6c250e3c0c 100644 --- a/gdb/infcall.c +++ b/gdb/infcall.c @@ -783,6 +783,10 @@ call_function_by_hand (struct value *function, int nargs, struct value **args) PUSH_DUMMY_CALL, saved as the dummy-frame TOS, and used by dummy_id to form the frame ID's stack address. */ bpt = set_momentary_breakpoint (gdbarch, sal, dummy_id, bp_call_dummy); + + /* set_momentary_breakpoint invalidates FRAME. */ + frame = NULL; + bpt->disposition = disp_del; } diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 8dfa4fdf94..06def78e80 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -1652,6 +1652,9 @@ finish_forward (struct symbol *function, struct frame_info *frame) get_stack_frame_id (frame), bp_finish); + /* set_momentary_breakpoint invalidates FRAME. */ + frame = NULL; + old_chain = make_cleanup_delete_breakpoint (breakpoint); set_longjmp_breakpoint (tp, frame_id); diff --git a/gdb/infrun.c b/gdb/infrun.c index 89f9362bec..81d1e5cf52 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -5520,6 +5520,10 @@ insert_exception_resume_breakpoint (struct thread_info *tp, bp = set_momentary_breakpoint_at_pc (get_frame_arch (frame), handler, bp_exception_resume); + + /* set_momentary_breakpoint_at_pc invalidates FRAME. */ + frame = NULL; + bp->thread = tp->num; inferior_thread ()->control.exception_resume_breakpoint = bp; }