aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2002-11-29 19:15:16 +0000
committerAndrew Cagney <cagney@redhat.com>2002-11-29 19:15:16 +0000
commit6e7f8b9cbab2b8bc4517ece86ae0c7f4f7d7599a (patch)
treed289e7c47a3b1c9bc5837d95146dc7d0a917b9b3 /gdb/frame.c
parent805e2818d6d8eab9ceaf1754eda3ed59404ae39d (diff)
downloadgdb-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.c60
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. */