aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@vmware.com>2009-06-18 23:41:27 +0000
committerMichael Snyder <msnyder@vmware.com>2009-06-18 23:41:27 +0000
commit31410e843b46ef8df6b73f3b19cab434ef157680 (patch)
treee6f95e1dadcb71a089f0f7183c8490ba43c5ea89
parent20764115b017633eed88557e285959cda7126994 (diff)
downloadgdb-31410e843b46ef8df6b73f3b19cab434ef157680.zip
gdb-31410e843b46ef8df6b73f3b19cab434ef157680.tar.gz
gdb-31410e843b46ef8df6b73f3b19cab434ef157680.tar.bz2
2009-06-18 Hui Zhu <teawater@gmail.com>
Michael Snyder <msnyder@vmware.com> * infrun.c (handle_inferior_event): Improve reverse stepping through function epilogue.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/infrun.c12
2 files changed, 16 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 352deeb..0d5e763 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-18 Hui Zhu <teawater@gmail.com>
+ Michael Snyder <msnyder@vmware.com>
+
+ * infrun.c (handle_inferior_event): Improve reverse stepping
+ through function epilogue.
+
2009-06-18 Paul Pluzhnikov <ppluzhnikov@google.com>
* dwarf2-frame.c (struct comp_unit): Use bfd_size_type for
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 3eaf89e..7488912 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -3630,9 +3630,17 @@ infrun: not switching back to stepped thread, it has vanished\n");
Note that step_range_end is the address of the first instruction
beyond the step range, and NOT the address of the last instruction
- within it! */
+ within it!
+
+ Note also that during reverse execution, we may be stepping
+ through a function epilogue and therefore must detect when
+ the current-frame changes in the middle of a line. */
+
if (stop_pc >= ecs->event_thread->step_range_start
- && stop_pc < ecs->event_thread->step_range_end)
+ && stop_pc < ecs->event_thread->step_range_end
+ && (execution_direction != EXEC_REVERSE
+ || frame_id_eq (get_frame_id (get_current_frame ()),
+ ecs->event_thread->step_frame_id)))
{
if (debug_infrun)
fprintf_unfiltered (gdb_stdlog, "infrun: stepping inside range [0x%s-0x%s]\n",