This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

-var-update @


I've checked it the attached patch which allows one to issue

	-var-update @

and have all @-varobjs (or floating varobjs, as Nick suggested to name them),
updated. I believe this is the only reasonable way to make @ varobjs, which
are not bound to thread/frame/block to adequately work in MT program. Otherwise,
if frontend switches thread or frame and wishes to update floating varobjs,
it should either to "-var-update *", which is extra work, or update varobjs
one-by-one, which is also not very nice.

- Volodya

2008-03-26  Vladimir Prus  <vladimir@codesourcery.com>

	* varobj.h (varobj_floating_p): Declare.
	* varobj.c (varobj_floating_p): New.
	* mi/mi-cmd-var.c (mi_cmd_var_update): When passed
	'@' as the name, update all floating varobjs.

Index: varobj.c
===================================================================
RCS file: /cvs/src/src/gdb/varobj.c,v
retrieving revision 1.107
diff -u -p -r1.107 varobj.c
--- varobj.c	26 Mar 2008 14:11:18 -0000	1.107
+++ varobj.c	26 Mar 2008 14:48:37 -0000
@@ -1868,6 +1868,15 @@ varobj_value_is_changeable_p (struct var
   return r;
 }
 
+/* Return 1 if that varobj is floating, that is is always evaluated in the
+   selected frame, and not bound to thread/frame.  Such variable objects
+   are created using '@' as frame specifier to -var-create.  */
+int
+varobj_floating_p (struct varobj *var)
+{
+  return var->root->floating;
+}
+
 /* Given the value and the type of a variable object,
    adjust the value and type to those necessary
    for getting children of the variable object.
Index: varobj.h
===================================================================
RCS file: /cvs/src/src/gdb/varobj.h,v
retrieving revision 1.16
diff -u -p -r1.16 varobj.h
--- varobj.h	24 Mar 2008 17:33:30 -0000	1.16
+++ varobj.h	26 Mar 2008 14:48:37 -0000
@@ -124,4 +124,6 @@ extern void varobj_invalidate (void);
 
 extern int varobj_editable_p (struct varobj *var);
 
+extern int varobj_floating_p (struct varobj *var);
+
 #endif /* VAROBJ_H */
Index: mi/mi-cmd-var.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmd-var.c,v
retrieving revision 1.46
diff -u -p -r1.46 mi-cmd-var.c
--- mi/mi-cmd-var.c	24 Mar 2008 17:33:30 -0000	1.46
+++ mi/mi-cmd-var.c	26 Mar 2008 14:48:39 -0000
@@ -558,7 +558,7 @@ mi_cmd_var_update (char *command, char *
   /* Check if the parameter is a "*" which means that we want
      to update all variables */
 
-  if ((*name == '*') && (*(name + 1) == '\0'))
+  if ((*name == '*' || *name == '@') && (*(name + 1) == '\0'))
     {
       nv = varobj_list (&rootlist);
       cleanup = make_cleanup (xfree, rootlist);
@@ -574,7 +574,8 @@ mi_cmd_var_update (char *command, char *
       cr = rootlist;
       while (*cr != NULL)
 	{
-	  varobj_update_one (*cr, print_values, 0 /* implicit */);
+	  if (*name == '*' || varobj_floating_p (*cr))
+	    varobj_update_one (*cr, print_values, 0 /* implicit */);
 	  cr++;
 	}
       do_cleanups (cleanup);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]