This is the mail archive of the gdb@sources.redhat.com 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]

Re: [PATCH] Debugging Vector Types



On Apr 22, 2005, at 5:14 PM, Geoffrey Keating wrote:


Devang Patel <dpatel@apple.com> writes:

GCC encodes Vector Types as an array of N elements (at least, in
STABS format). This means, GDB is not able to distinguish it from a
normal Array. And these may lead to confusing output from GDB. One of
our user reported that for

     vector unsigned char a = (vector unsigned char)  (
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 );

gdb prints

     (gdb) print a
     $1 = "\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020"

If following is used

     vector unsigned char a = (vector unsigned char)  (
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p' );

then gdb prints

     (gdb) print a
     $1 = "abcdefghijklmnop"

but, it's not vector!

If GCC provides GDB some kind of hints then GDB may be able to
display something meaningful. This patch attaches "attribute vector"
to the stabs string used to represent vector types. I am told that
GDB ignores attributes that it does not recognize. So we can update
GCC independently. I tested small test cases and our darwin GDB does
not get offended by this additional attribute.

         * dbxout.c (dbxout_type): Emit attribute vector.
         * config/darwin.h (DBX_USE_VECTOR_ATTRIBUTE): Define.
         * doc/tm.texi (DBX_USE_VECTOR_ATTRIBUTE): Document.

* gcc.dg/stabs-attrib-vect.c: New test.

Bootstrapped and tested on powerpc-darwin.
OK  for mainline ?

- I don't think this should be Darwin-specific. Shouldn't everyone have it?
It's not like it can break Solaris dbx or something, unless people are
using vector types, in which case IMO they should just use GDB.

I was just playing safe.


- You need to update stabs.texi, which I think lives in GDB.  (It's
  the only stabs documentation we have, so keeping it up-to-date is
  important!)

The doc version I have already lists it as an extension.


---
There is an AIX extension for type attributes. Following the `=' are any number of type attributes. Each one starts with `@' and ends with `;'. Debuggers, including AIX's dbx and GDB 4.10, skip any type attributes they do not recognize. GDB 4.9 and other versions of dbx may not do this. Because of a conflict with C++ (see section GNU C++ Stabs), new attributes should not be defined which begin with a digit, `(', or `-'; GDB may be unable to distinguish those from the C++ type descriptor `@'. The attributes are:

aboundary
boundary is an integer specifying the alignment. I assume it applies to all variables of this type.
pinteger
Pointer class (for checking). Not sure what this means, or how integer is interpreted.
P
Indicate this is a packed type, meaning that structure fields or array elements are placed more closely in memory, to save memory at the expense of speed.
ssize
Size in bits of a variable of this type. This is fully supported by GDB 4.11 and later.
S
Indicate that this type is a string instead of an array of characters, or a bitstring instead of a set. It doesn't change the layout of the data being represented, but does enable the debugger to know which type it is.
V
Indicate that this type is a vector instead of an array. The only major difference between vectors and arrays is that vectors are passed by value instead of by reference (vector coprocessor extension).

---


Other than that the patch seems reasonable enough to me.

The GDB people may have some more comments, so I've CCed them.

GDB people: As I understand the patch, what it does is add '@V;' to
the end to the stab for the type, so it looks like "vi:(0,16)=@V;".

- Devang


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