From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1740 invoked by alias); 6 May 2002 23:44:07 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 1731 invoked from network); 6 May 2002 23:44:04 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 6 May 2002 23:44:04 -0000 Received: from reddwarf.sfbay.redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id QAA24826; Mon, 6 May 2002 16:44:01 -0700 (PDT) Received: (from msnyder@localhost) by reddwarf.sfbay.redhat.com (8.11.2/8.11.2) id g46NV4k26237; Mon, 6 May 2002 16:31:04 -0700 Date: Mon, 06 May 2002 16:44:00 -0000 From: Michael Snyder Message-Id: <200205062331.g46NV4k26237@reddwarf.sfbay.redhat.com> To: gdb-patches@sources.redhat.com Subject: [RFA] Add vector type flag to stabsread.c Cc: jimb@redhat.com X-SW-Source: 2002-05/txt/msg00136.txt.bz2 This patch does to stabs what Elena has recently done for dwarf -- add an attribute extension that allows an array type to be tagged as a vector. Knowing that it is a vector, GDB can then modify the way the object is passed as a function argument. The syntax for stabs will be to add the string "@V;" in front of the "ar" declaration. The "@" attribute extension already exists in stabs -- we're just adding a new instance of it. The GCC patch for this extension should be coming out today. 2002-05-06 Michael Snyder * stabsread.c (read_type): Add recognition for new attribute: "@V;" means that an array type is actually a vector. This is analogous to the vector flag that's been added to dwarf2. Index: stabsread.c =================================================================== RCS file: /cvs/src/src/gdb/stabsread.c,v retrieving revision 1.32 diff -p -r1.32 stabsread.c *** stabsread.c 4 May 2002 00:21:09 -0000 1.32 --- stabsread.c 6 May 2002 23:39:00 -0000 *************** define_symbol (CORE_ADDR valu, char *str *** 1904,1909 **** --- 1904,1910 ---- break; case 't': + /* Typedef */ SYMBOL_TYPE (sym) = read_type (&p, objfile); /* For a nameless type, we don't want a create a symbol, thus we *************** read_type (register char **pp, struct ob *** 2359,2364 **** --- 2360,2368 ---- /* Used to distinguish string and bitstring from char-array and set. */ int is_string = 0; + /* Used to distinguish vector from array. */ + int is_vector = 0; + /* Read type number if present. The type number may be omitted. for instance in a two-dimensional array declared with type "ar1;1;10;ar1;1;10;4". */ *************** again: *** 2574,2580 **** forward-referenced), and we must change it to a pointer, function, reference, or whatever, *in-place*. */ ! case '*': type1 = read_type (pp, objfile); type = make_pointer_type (type1, dbx_lookup_type (typenums)); break; --- 2578,2584 ---- forward-referenced), and we must change it to a pointer, function, reference, or whatever, *in-place*. */ ! case '*': /* Pointer to another type */ type1 = read_type (pp, objfile); type = make_pointer_type (type1, dbx_lookup_type (typenums)); break; *************** again: *** 2732,2747 **** switch (*attr) { ! case 's': type_size = atoi (attr + 1); if (type_size <= 0) type_size = -1; break; ! case 'S': is_string = 1; break; default: /* Ignore unrecognized type attributes, so future compilers can invent new ones. */ --- 2736,2757 ---- switch (*attr) { ! case 's': /* Size attribute */ type_size = atoi (attr + 1); if (type_size <= 0) type_size = -1; break; ! case 'S': /* String attribute */ ! /* FIXME: check to see if following type is array? */ is_string = 1; break; + case 'V': /* Vector attribute */ + /* FIXME: check to see if following type is array? */ + is_vector = 1; + break; + default: /* Ignore unrecognized type attributes, so future compilers can invent new ones. */ *************** again: *** 2844,2852 **** type = read_array_type (pp, type, objfile); if (is_string) TYPE_CODE (type) = TYPE_CODE_STRING; break; ! case 'S': type1 = read_type (pp, objfile); type = create_set_type ((struct type *) NULL, type1); if (is_string) --- 2854,2864 ---- type = read_array_type (pp, type, objfile); if (is_string) TYPE_CODE (type) = TYPE_CODE_STRING; + if (is_vector) + TYPE_FLAGS (type) |= TYPE_FLAG_VECTOR; break; ! case 'S': /* Set or bitstring type */ type1 = read_type (pp, objfile); type = create_set_type ((struct type *) NULL, type1); if (is_string)