* frame.c (deprecated_safe_get_selected_frame): New function.
authorDaniel Jacobowitz <drow@false.org>
Mon, 8 Sep 2003 18:56:03 +0000 (18:56 +0000)
committerDaniel Jacobowitz <drow@false.org>
Mon, 8 Sep 2003 18:56:03 +0000 (18:56 +0000)
* frame.h (deprecated_safe_get_selected_frame): Add prototype.
* findvar.c (read_var_value): Call it.

gdb/ChangeLog
gdb/findvar.c
gdb/frame.c
gdb/frame.h

index c284f9c..75c9e68 100644 (file)
@@ -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.
index 7b6191c..a64ddfb 100644 (file)
@@ -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))
     {
index efcee75..31cb6c5 100644 (file)
@@ -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
index 8851b3a..afbde74 100644 (file)
@@ -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.  */