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]

[RFC] Change how value is shown for varobjs of type vector.


Consider:

> cat vec.c 
char vector __attribute__ ((vector_size (8))) = { 0, 0, 0, 0, 0, 0, 0, 0 };

int
main ()
{
  /* Nothing.  */
}
> gcc -g -o vec.x vec.c
> gdb vec.x
(gdb) start
(gdb) interpreter-exec mi2 "-var-create vector * vector"
^done,name="vector",numchild="8",value="[8]",type="char [8]",has_more="0"

## END ##

I have a patch (below) that changes the value field from the current "[8]" to "{ 0, 0, 0, 0, 0, 0, 0, 0 }".  The varobj still has 8 children, and the top level varobj is still not editable, you have to edit through the children.

This better suits my local usage where vectors are generally used with just a small number of entries, each vector type has a total size of one 64-bit register, the frontend used to view this MI data is just passing the value field through, and my users wanted to visualise the set of values in a single field.

I've not finished the patch yet with changelog or tests because I wasn't sure if this change was going to be acceptable, so I'm looking for some feedback please.  One possibility would be to make this behaviour switchable, if it can't be the default.

Thanks,

Andrew


diff --git a/gdb/varobj.c b/gdb/varobj.c
index 6699699..c72716b 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -3119,10 +3119,13 @@ default_value_is_changeable_p (struct varobj *var)
     {
     case TYPE_CODE_STRUCT:
     case TYPE_CODE_UNION:
-    case TYPE_CODE_ARRAY:
       r = 0;
       break;
 
+    case TYPE_CODE_ARRAY:
+      r = TYPE_VECTOR (type);
+      break;
+
     default:
       r = 1;
     }
@@ -3507,12 +3510,16 @@ c_value_of_variable (struct varobj *var, enum varobj_display_formats format)
 
     case TYPE_CODE_ARRAY:
       {
-	char *number;
+	if (!TYPE_VECTOR (type))
+	  {
+	    char *number;
 
-	number = xstrprintf ("[%d]", var->num_children);
-	return (number);
+	    number = xstrprintf ("[%d]", var->num_children);
+	    return (number);
+	    /* break; */
+	  }
       }
-      /* break; */
+      /* fall through  */
 
     default:
       {





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