From 4b7703adccf176d99bc0ee97efd40ee149762162 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Sat, 9 Jan 2010 04:36:00 +0000 Subject: [PATCH] GDB crash while stepping into function. * infrun.c (handle_inferior_event): Refetch the current frame after handling what.main_action, in case that pointer became dangling. --- gdb/ChangeLog | 7 +++++++ gdb/infrun.c | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0a5b4b51c7..108476c759 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2010-01-09 Joel Brobecker + + GDB crash while stepping into function. + * infrun.c (handle_inferior_event): Refetch the current frame + after handling what.main_action, in case that pointer became + dangling. + 2010-01-09 Joel Brobecker Fix build failure of solaris-hosted cross debuggers. diff --git a/gdb/infrun.c b/gdb/infrun.c index 3d6812d2e3..426b8167e6 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -4066,6 +4066,11 @@ infrun: not switching back to stepped thread, it has vanished\n"); return; } + /* Re-fetch current thread's frame in case the code above caused + the frame cache to be re-initialized, making our FRAME variable + a dangling pointer. */ + frame = get_current_frame (); + /* If stepping through a line, keep going if still within it. Note that step_range_end is the address of the first instruction -- 2.34.1