diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/breakpoint.c | 26 | ||||
-rw-r--r-- | gdb/thread.c | 32 |
3 files changed, 27 insertions, 37 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 35833c6..bc5fa13 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2004-05-01 Andrew Cagney <cagney@redhat.com> + * breakpoint.c (insert_bp_location): Use get_frame_id, and + frame_find_by_id instead of frame_relative_level. + (do_enable_breakpoint): Ditto. + * thread.c: Update copyright. + (info_threads_command): Ditto, simplify. + * frame.c (deprecated_generic_get_saved_register): Delete function, moved to "xstormy16-tdep.c". * xstormy16-tdep.c (xstormy16_get_saved_register): Inline diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 1633395..0fd4d23 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -910,18 +910,17 @@ insert_bp_location (struct bp_location *bpt, must watch. As soon as a many-to-one mapping is available I'll convert this. */ - struct frame_info *saved_frame; - int saved_level, within_current_scope; + int within_current_scope; struct value *mark = value_mark (); struct value *v; + struct frame_id saved_frame_id; - /* Save the current frame and level so we can restore it after + /* Save the current frame's ID so we can restore it after evaluating the watchpoint expression on its own frame. */ /* FIXME drow/2003-09-09: It would be nice if evaluate_expression took a frame parameter, so that we didn't have to change the selected frame. */ - saved_frame = deprecated_selected_frame; - saved_level = frame_relative_level (deprecated_selected_frame); + saved_frame_id = get_frame_id (deprecated_selected_frame); /* Determine if the watchpoint is within scope. */ if (bpt->owner->exp_valid_block == NULL) @@ -1018,10 +1017,8 @@ insert_bp_location (struct bp_location *bpt, bpt->owner->disposition = disp_del_at_next_stop; } - /* Restore the frame and level. */ - if (saved_frame != deprecated_selected_frame - || saved_level != frame_relative_level (deprecated_selected_frame)) - select_frame (saved_frame); + /* Restore the selected frame. */ + select_frame (frame_find_by_id (saved_frame_id)); return val; } @@ -7564,8 +7561,6 @@ disable_command (char *args, int from_tty) static void do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition) { - struct frame_info *save_selected_frame = NULL; - int save_selected_frame_level = -1; int target_resources_ok, other_type_used; struct value *mark; @@ -7612,6 +7607,9 @@ do_enable_breakpoint (struct breakpoint *bpt, enum bpdisp disposition) bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint) { + struct frame_id saved_frame_id; + + saved_frame_id = get_frame_id (get_selected_frame ()); if (bpt->exp_valid_block != NULL) { struct frame_info *fr = @@ -7624,9 +7622,6 @@ is valid is not currently in scope.\n", bpt->number); bpt->enable_state = bp_disabled; return; } - - save_selected_frame = deprecated_selected_frame; - save_selected_frame_level = frame_relative_level (deprecated_selected_frame); select_frame (fr); } @@ -7661,8 +7656,7 @@ have been allocated for other watchpoints.\n", bpt->number); } } - if (save_selected_frame_level >= 0) - select_frame (save_selected_frame); + select_frame (frame_find_by_id (saved_frame_id)); value_free_to_mark (mark); } } diff --git a/gdb/thread.c b/gdb/thread.c index b8a7f8b..35ba2b1 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -1,7 +1,7 @@ /* Multi-process/thread control for GDB, the GNU debugger. Copyright 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Contributed by Lynx Real-Time Systems, Inc. Los Gatos, CA. @@ -417,15 +417,9 @@ info_threads_command (char *arg, int from_tty) struct thread_info *tp; ptid_t current_ptid; struct frame_info *cur_frame; - int saved_frame_level = frame_relative_level (get_selected_frame ()); - int counter; + struct frame_id saved_frame_id = get_frame_id (get_selected_frame ()); char *extra_info; - /* Check that there really is a frame. This happens when a simulator - is connected but not loaded or running, for instance. */ - if (legacy_frame_p (current_gdbarch) && saved_frame_level < 0) - error ("No frame."); - prune_threads (); target_find_new_threads (); current_ptid = inferior_ptid; @@ -453,27 +447,23 @@ info_threads_command (char *arg, int from_tty) switch_to_thread (current_ptid); - /* Code below copied from "up_silently_base" in "stack.c". - * It restores the frame set by the user before the "info threads" - * command. We have finished the info-threads display by switching - * back to the current thread. That switch has put us at the top - * of the stack (leaf frame). - */ - counter = saved_frame_level; - cur_frame = find_relative_frame (get_selected_frame (), &counter); - if (counter != 0) + /* Restores the frame set by the user before the "info threads" + command. We have finished the info-threads display by switching + back to the current thread. That switch has put us at the top of + the stack (leaf frame). */ + cur_frame = frame_find_by_id (saved_frame_id); + if (cur_frame == NULL) { - /* Ooops, can't restore, tell user where we are. */ + /* Ooops, can't restore, tell user where we are. */ warning ("Couldn't restore frame in current thread, at frame 0"); print_stack_frame (get_selected_frame (), 0, LOCATION); } else { select_frame (cur_frame); + /* re-show current frame. */ + show_stack_frame (cur_frame); } - - /* re-show current frame. */ - show_stack_frame (cur_frame); } /* Switch from one thread to another. */ |