diff options
author | Andrew Cagney <cagney@redhat.com> | 2002-11-29 19:15:16 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2002-11-29 19:15:16 +0000 |
commit | 6e7f8b9cbab2b8bc4517ece86ae0c7f4f7d7599a (patch) | |
tree | d289e7c47a3b1c9bc5837d95146dc7d0a917b9b3 /gdb/frame.c | |
parent | 805e2818d6d8eab9ceaf1754eda3ed59404ae39d (diff) | |
download | gdb-6e7f8b9cbab2b8bc4517ece86ae0c7f4f7d7599a.zip gdb-6e7f8b9cbab2b8bc4517ece86ae0c7f4f7d7599a.tar.gz gdb-6e7f8b9cbab2b8bc4517ece86ae0c7f4f7d7599a.tar.bz2 |
2002-11-29 Andrew Cagney <ac131313@redhat.com>
* stack.c (selected_frame, select_frame): Move from here ...
* frame.c (selected_frame, select_frame): ... to here. Include
"language.h".
* Makefile.in (frame.o): Update dependencies.
* frame.c (get_selected_frame): New function.
* frame.h (get_selected_frame): Declare.
(deprecated_selected_frame): Rename selected_frame.
* ada-lang.c, ada-tasks.c, breakpoint.c, corelow.c: Update.
* eval.c, f-valprint.c, findvar.c, frame.c, frame.h: Update.
* h8300-tdep.c, h8500-tdep.c, hppa-tdep.c, infcmd.c: Update.
* inflow.c, infrun.c, macroscope.c, mips-tdep.c: Update.
* mn10300-tdep.c, ocd.c, regcache.h, remote-e7000.c: Update.
* remote-mips.c, remote-rdp.c, sh-tdep.c, sparc-tdep.c: Update.
* stack.c, thread.c, tracepoint.c, valops.c, varobj.c: Update.
* z8k-tdep.c, cli/cli-cmds.c: Update.
Index: mi/ChangeLog
2002-11-29 Andrew Cagney <ac131313@redhat.com>
* mi/mi-cmd-stack.c, mi/mi-main.c: Update to use
deprecated_selected_frame.
Index: tui/ChangeLog
2002-11-29 Andrew Cagney <ac131313@redhat.com>
* tui/tui-hooks.c: Update to use deprecated_selected_frame.
* tui/tui.c, tui/tuiDisassem.c, tui/tuiRegs.c: Ditto.
* tui/tuiSource.c, tui/tuiSourceWin.c, tui/tuiWin.c: Ditto.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r-- | gdb/frame.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gdb/frame.c b/gdb/frame.c index 1918114..1ece65b 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -33,6 +33,7 @@ #include "dummy-frame.h" #include "gdbcore.h" #include "annotate.h" +#include "language.h" /* Return a frame uniq ID that can be used to, later re-find the frame. */ @@ -442,6 +443,65 @@ set_current_frame (struct frame_info *frame) current_frame = frame; } +/* The "selected" stack frame is used by default for local and arg + access. May be zero, for no selected frame. */ + +struct frame_info *deprecated_selected_frame; + +/* Return the selected frame. Always non-null (unless there isn't an + inferior sufficient for creating a frame) in which case an error is + thrown. */ + +struct frame_info * +get_selected_frame (void) +{ + if (deprecated_selected_frame == NULL) + /* Hey! Don't trust this. It should really be re-finding the + last selected frame of the currently selected thread. This, + though, is better than nothing. */ + select_frame (get_current_frame ()); + /* There is always a frame. */ + gdb_assert (deprecated_selected_frame != NULL); + return deprecated_selected_frame; +} + +/* Select frame FI (or NULL - to invalidate the current frame). */ + +void +select_frame (struct frame_info *fi) +{ + register struct symtab *s; + + deprecated_selected_frame = fi; + /* NOTE: cagney/2002-05-04: FI can be NULL. This occures when the + frame is being invalidated. */ + if (selected_frame_level_changed_hook) + selected_frame_level_changed_hook (frame_relative_level (fi)); + + /* FIXME: kseitz/2002-08-28: It would be nice to call + selected_frame_level_changed_event right here, but due to limitations + in the current interfaces, we would end up flooding UIs with events + because select_frame is used extensively internally. + + Once we have frame-parameterized frame (and frame-related) commands, + the event notification can be moved here, since this function will only + be called when the users selected frame is being changed. */ + + /* Ensure that symbols for this frame are read in. Also, determine the + source language of this frame, and switch to it if desired. */ + if (fi) + { + s = find_pc_symtab (fi->pc); + if (s + && s->language != current_language->la_language + && s->language != language_unknown + && language_mode == language_mode_auto) + { + set_language (s->language); + } + } +} + /* Return the register saved in the simplistic ``saved_regs'' cache. If the value isn't here AND a value is needed, try the next inner most frame. */ |