aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2003-09-08 18:56:03 +0000
committerDaniel Jacobowitz <drow@false.org>2003-09-08 18:56:03 +0000
commit7dd889867037abfa8f239f9f65f9606294e0be8d (patch)
tree26f82f5b8170f23254243c62fcc2c7e9df1a913e
parenta6fc177898b33d6eb3154e93ace5d24272a9eb70 (diff)
downloadgdb-7dd889867037abfa8f239f9f65f9606294e0be8d.zip
gdb-7dd889867037abfa8f239f9f65f9606294e0be8d.tar.gz
gdb-7dd889867037abfa8f239f9f65f9606294e0be8d.tar.bz2
* frame.c (deprecated_safe_get_selected_frame): New function.
* frame.h (deprecated_safe_get_selected_frame): Add prototype. * findvar.c (read_var_value): Call it.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/findvar.c5
-rw-r--r--gdb/frame.c12
-rw-r--r--gdb/frame.h13
4 files changed, 35 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c284f9c..75c9e68 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2003-09-08 Daniel Jacobowitz <drow@mvista.com>
+
+ * frame.c (deprecated_safe_get_selected_frame): New function.
+ * frame.h (deprecated_safe_get_selected_frame): Add prototype.
+ * findvar.c (read_var_value): Call it.
+
2003-09-08 Corinna Vinschen <vinschen@redhat.com>
* Makefile.in (ALLDEPFILES): Add sh64-tdep.c.
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 7b6191c..a64ddfb 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -404,8 +404,11 @@ read_var_value (register struct symbol *var, struct frame_info *frame)
len = TYPE_LENGTH (type);
+
+ /* FIXME drow/2003-09-06: this call to the selected frame should be
+ pushed upwards to the callers. */
if (frame == NULL)
- frame = deprecated_selected_frame;
+ frame = deprecated_safe_get_selected_frame ();
switch (SYMBOL_CLASS (var))
{
diff --git a/gdb/frame.c b/gdb/frame.c
index efcee75..31cb6c5 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -917,6 +917,18 @@ get_selected_frame (void)
return deprecated_selected_frame;
}
+/* This is a variant of get_selected_frame which can be called when
+ the inferior does not have a frame; in that case it will return
+ NULL instead of calling error (). */
+
+struct frame_info *
+deprecated_safe_get_selected_frame (void)
+{
+ if (!target_has_registers || !target_has_stack || !target_has_memory)
+ return NULL;
+ return get_selected_frame ();
+}
+
/* Select frame FI (or NULL - to invalidate the current frame). */
void
diff --git a/gdb/frame.h b/gdb/frame.h
index 8851b3a..afbde74 100644
--- a/gdb/frame.h
+++ b/gdb/frame.h
@@ -639,6 +639,19 @@ extern void return_command (char *, int);
extern struct frame_info *deprecated_selected_frame;
+/* NOTE: drow/2003-09-06:
+
+ This function is "a step sideways" for uses of deprecated_selected_frame.
+ They should be fixed as above, but meanwhile, we needed a solution for
+ cases where functions are called with a NULL frame meaning either "the
+ program is not running" or "use the selected frame". Lazy building of
+ deprecated_selected_frame confuses the situation, because now
+ deprecated_selected_frame can be NULL even when the inferior is running.
+
+ This function calls get_selected_frame if the inferior should have a
+ frame, or returns NULL otherwise. */
+
+extern struct frame_info *deprecated_safe_get_selected_frame (void);
/* Create a frame using the specified BASE and PC. */