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);