This is the mail archive of the gdb-patches@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] Add support for dwarf2 vectors





Committed.

Elena

Elena Zannoni writes:

 > 
 > This is anohter bit of the support for AltiVec on PowerPC.
 > 
 > This introduces support for the new gcc debug info introduced by Jason Merrill:
 > http://gcc.gnu.org/ml/gcc-patches/2002-04/msg01428.html
 > 
 > It is a bit hard to test, not having the corresponding simulator
 > changes in the tree yet. It can be done on native G4 machines, though.
 > 
 > I'll follow up with powerpc ABI updates that actually use this stuff.
 > 
 > Elena
 > 
 > Note: this is dependent on a patch for /include/elf/dwarf2.h that I
 > just posted to the binutils list, otherwise gdb won't build.
 > 
 > 2002-04-24  Elena Zannoni  <ezannoni@redhat.com>
 > 
 >         * gdbtypes.h (TYPE_FLAG_VECTOR, TYPE_VECTOR): Define.
 >         * gdbtypes.c (recursive_dump_type): Output the vector flag.
 >         * dwarf2read.c (dwarf_attr_name): Handle new attribute for
 >         vectors.
 >         (read_array_type): Record the fact that this array type is really a
 >         vector (i.e. are passed in by value).
 > 
 > 
 > Index: dwarf2read.c
 > ===================================================================
 > RCS file: /cvs/uberbaum/gdb/dwarf2read.c,v
 > retrieving revision 1.52
 > diff -u -p -r1.52 dwarf2read.c
 > --- dwarf2read.c	4 Apr 2002 22:26:43 -0000	1.52
 > +++ dwarf2read.c	24 Apr 2002 21:40:25 -0000
 > @@ -2662,6 +2662,16 @@ read_array_type (struct die_info *die, s
 >    while (ndim-- > 0)
 >      type = create_array_type (NULL, type, range_types[ndim]);
 >  
 > +  /* Understand Dwarf2 support for vector types (like they occur on
 > +     the PowerPC w/ AltiVec).  Gcc just adds another attribute to the
 > +     array type.  This is not part of the Dwarf2/3 standard yet, but a
 > +     custom vendor extension.  The main difference between a regular
 > +     array and the vector variant is that vectors are passed by value
 > +     to functions.  */
 > +  attr = dwarf_attr (die, DW_AT_GNU_vector);
 > +  if (attr)
 > +    TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR;
 > +
 >    do_cleanups (back_to);
 >  
 >    /* Install the type in the die. */
 > @@ -5267,6 +5277,8 @@ dwarf_attr_name (register unsigned attr)
 >        return "DW_AT_body_begin";
 >      case DW_AT_body_end:
 >        return "DW_AT_body_end";
 > +    case DW_AT_GNU_vector:
 > +      return "DW_AT_GNU_vector";
 >      default:
 >        return "DW_AT_<unknown>";
 >      }
 > 
 > Index: gdbtypes.h
 > ===================================================================
 > RCS file: /cvs/uberbaum/gdb/gdbtypes.h,v
 > retrieving revision 1.27
 > diff -u -p -r1.27 gdbtypes.h
 > --- gdbtypes.h	23 Mar 2002 01:24:54 -0000	1.27
 > +++ gdbtypes.h	24 Apr 2002 21:42:08 -0000
 > @@ -248,6 +248,13 @@ enum type_code
 >  #define TYPE_FLAG_VARARGS	(1 << 11)
 >  #define TYPE_VARARGS(t)		((t)->flags & TYPE_FLAG_VARARGS)
 >  
 > +/* Identify a vector type.  Gcc is handling this by adding an extra
 > +   attribute to the array type.  We slurp that in as a new flag of a
 > +   type.  This is used only in dwarf2read.c.  */
 > +#define TYPE_FLAG_VECTOR	(1 << 12)
 > +#define TYPE_VECTOR(t)		((t)->flags & TYPE_FLAG_VECTOR)
 > +
 > +
 >  struct type
 >    {
 >  
 > Index: gdbtypes.c
 > ===================================================================
 > RCS file: /cvs/uberbaum/gdb/gdbtypes.c,v
 > retrieving revision 1.43
 > diff -u -p -r1.43 gdbtypes.c
 > --- gdbtypes.c	20 Apr 2002 01:09:28 -0000	1.43
 > +++ gdbtypes.c	24 Apr 2002 21:42:31 -0000
 > @@ -3031,6 +3031,13 @@ recursive_dump_type (struct type *type, 
 >      {
 >        puts_filtered (" TYPE_FLAG_VARARGS");
 >      }
 > +  /* This is used for things like AltiVec registers on ppc.  Gcc emits
 > +     an attribute for the array type, which tells whether or not we
 > +     have a vector, instead of a regular array.  */
 > +  if (TYPE_VECTOR (type))
 > +    {
 > +      puts_filtered (" TYPE_FLAG_VECTOR");
 > +    }
 >    puts_filtered ("\n");
 >    printfi_filtered (spaces, "nfields %d ", TYPE_NFIELDS (type));
 >    gdb_print_host_address (TYPE_FIELDS (type), gdb_stdout);


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