* Fixes for chill PR 15681
[external/binutils.git] / gdb / stabsread.c
1 /* Support routines for decoding "stabs" debugging information format.
2    Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
3              Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 /* Support routines for reading and decoding debugging information in
22    the "stabs" format.  This format is used with many systems that use
23    the a.out object file format, as well as some systems that use
24    COFF or ELF where the stabs data is placed in a special section.
25    Avoid placing any object file format specific code in this file. */
26
27 #include "defs.h"
28 #include "gdb_string.h"
29 #include "bfd.h"
30 #include "obstack.h"
31 #include "symtab.h"
32 #include "gdbtypes.h"
33 #include "expression.h"
34 #include "symfile.h"
35 #include "objfiles.h"
36 #include "aout/stab_gnu.h"      /* We always use GNU stabs, not native */
37 #include "libaout.h"
38 #include "aout/aout64.h"
39 #include "gdb-stabs.h"
40 #include "buildsym.h"
41 #include "complaints.h"
42 #include "demangle.h"
43 #include "language.h"
44
45 #include <ctype.h>
46
47 /* Ask stabsread.h to define the vars it normally declares `extern'.  */
48 #define EXTERN  /**/
49 #include "stabsread.h"          /* Our own declarations */
50 #undef  EXTERN
51
52 /* The routines that read and process a complete stabs for a C struct or 
53    C++ class pass lists of data member fields and lists of member function
54    fields in an instance of a field_info structure, as defined below.
55    This is part of some reorganization of low level C++ support and is
56    expected to eventually go away... (FIXME) */
57
58 struct field_info
59 {
60   struct nextfield
61     {
62       struct nextfield *next;
63
64       /* This is the raw visibility from the stab.  It is not checked
65          for being one of the visibilities we recognize, so code which
66          examines this field better be able to deal.  */
67       int visibility;
68
69       struct field field;
70     } *list;
71   struct next_fnfieldlist
72     {
73       struct next_fnfieldlist *next;
74       struct fn_fieldlist fn_fieldlist;
75     } *fnlist;
76 };
77
78 static void
79 read_one_struct_field PARAMS ((struct field_info *, char **, char *,
80                                struct type *, struct objfile *));
81
82 static char * 
83 get_substring PARAMS ((char **, int));
84
85 static struct type *
86 dbx_alloc_type PARAMS ((int [2], struct objfile *));
87
88 static long read_huge_number PARAMS ((char **, int, int *));
89
90 static struct type *error_type PARAMS ((char **, struct objfile *));
91
92 static void
93 patch_block_stabs PARAMS ((struct pending *, struct pending_stabs *,
94                            struct objfile *));
95
96 static void
97 fix_common_block PARAMS ((struct symbol *, int));
98
99 static int
100 read_type_number PARAMS ((char **, int *));
101
102 static struct type *
103 read_range_type PARAMS ((char **, int [2], struct objfile *));
104
105 static struct type *
106 read_sun_builtin_type PARAMS ((char **, int [2], struct objfile *));
107
108 static struct type *
109 read_sun_floating_type PARAMS ((char **, int [2], struct objfile *));
110
111 static struct type *
112 read_enum_type PARAMS ((char **, struct type *, struct objfile *));
113
114 static struct type *
115 rs6000_builtin_type PARAMS ((int));
116
117 static int
118 read_member_functions PARAMS ((struct field_info *, char **, struct type *,
119                                struct objfile *));
120
121 static int
122 read_struct_fields PARAMS ((struct field_info *, char **, struct type *,
123                             struct objfile *));
124
125 static int
126 read_baseclasses PARAMS ((struct field_info *, char **, struct type *,
127                           struct objfile *));
128
129 static int
130 read_tilde_fields PARAMS ((struct field_info *, char **, struct type *,
131                            struct objfile *));
132
133 static int
134 attach_fn_fields_to_type PARAMS ((struct field_info *, struct type *));
135
136 static int
137 attach_fields_to_type PARAMS ((struct field_info *, struct type *,
138                                struct objfile *));
139
140 static struct type *
141 read_struct_type PARAMS ((char **, struct type *, struct objfile *));
142
143 static struct type *
144 read_array_type PARAMS ((char **, struct type *, struct objfile *));
145
146 static struct type **
147 read_args PARAMS ((char **, int, struct objfile *));
148
149 static int
150 read_cpp_abbrev PARAMS ((struct field_info *, char **, struct type *,
151                          struct objfile *));
152
153 /* new functions added for cfront support */
154
155 static int
156 copy_cfront_struct_fields PARAMS ((struct field_info *, struct type *,
157                                    struct objfile *));
158
159 static char *
160 get_cfront_method_physname PARAMS ((char *));
161
162 static int
163 read_cfront_baseclasses PARAMS ((struct field_info *, char **, 
164                                  struct type *, struct objfile *));
165
166 static int
167 read_cfront_static_fields PARAMS ((struct field_info *, char**,
168                                    struct type *, struct objfile *));
169 static int
170 read_cfront_member_functions PARAMS ((struct field_info *, char **, 
171                                       struct type *, struct objfile *));
172
173 /* end new functions added for cfront support */
174
175 static void 
176 add_live_range PARAMS ((struct objfile *, struct symbol *, 
177                         CORE_ADDR, CORE_ADDR));
178
179 static void 
180 resolve_live_range PARAMS ((struct objfile *, struct symbol *, char *));
181
182 static int 
183 process_reference PARAMS ((char **string));
184
185 static CORE_ADDR 
186 ref_search_value PARAMS ((int refnum));
187
188 static void 
189 ref_init PARAMS ((void));
190
191 static int
192 resolve_symbol_reference PARAMS ((struct objfile *, struct symbol *, char *));
193
194 static const char vptr_name[] = { '_','v','p','t','r',CPLUS_MARKER,'\0' };
195 static const char vb_name[] =   { '_','v','b',CPLUS_MARKER,'\0' };
196
197 /* Define this as 1 if a pcc declaration of a char or short argument
198    gives the correct address.  Otherwise assume pcc gives the
199    address of the corresponding int, which is not the same on a
200    big-endian machine.  */
201
202 #ifndef BELIEVE_PCC_PROMOTION
203 #define BELIEVE_PCC_PROMOTION 0
204 #endif
205
206 struct complaint invalid_cpp_abbrev_complaint =
207   {"invalid C++ abbreviation `%s'", 0, 0};
208
209 struct complaint invalid_cpp_type_complaint =
210   {"C++ abbreviated type name unknown at symtab pos %d", 0, 0};
211
212 struct complaint member_fn_complaint =
213   {"member function type missing, got '%c'", 0, 0};
214
215 struct complaint const_vol_complaint =
216   {"const/volatile indicator missing, got '%c'", 0, 0};
217
218 struct complaint error_type_complaint =
219   {"debug info mismatch between compiler and debugger", 0, 0};
220
221 struct complaint invalid_member_complaint =
222   {"invalid (minimal) member type data format at symtab pos %d.", 0, 0};
223
224 struct complaint range_type_base_complaint =
225   {"base type %d of range type is not defined", 0, 0};
226
227 struct complaint reg_value_complaint =
228   {"register number %d too large (max %d) in symbol %s", 0, 0};
229
230 struct complaint vtbl_notfound_complaint =
231   {"virtual function table pointer not found when defining class `%s'", 0, 0};
232
233 struct complaint unrecognized_cplus_name_complaint =
234   {"Unknown C++ symbol name `%s'", 0, 0};
235
236 struct complaint rs6000_builtin_complaint =
237   {"Unknown builtin type %d", 0, 0};
238
239 struct complaint unresolved_sym_chain_complaint =
240   {"%s: common block `%s' from global_sym_chain unresolved", 0, 0};
241
242 struct complaint stabs_general_complaint =
243   {"%s", 0, 0};
244
245 /* Make a list of forward references which haven't been defined.  */
246
247 static struct type **undef_types;
248 static int undef_types_allocated;
249 static int undef_types_length;
250 static struct symbol *current_symbol = NULL;
251
252 /* Check for and handle cretinous stabs symbol name continuation!  */
253 #define STABS_CONTINUE(pp,objfile)                              \
254   do {                                                  \
255     if (**(pp) == '\\' || (**(pp) == '?' && (*(pp))[1] == '\0')) \
256       *(pp) = next_symbol_text (objfile);       \
257   } while (0)
258 \f
259 /* FIXME: These probably should be our own types (like rs6000_builtin_type
260    has its own types) rather than builtin_type_*.  */
261 static struct type **os9k_type_vector[] = {
262         0,
263         &builtin_type_int,
264         &builtin_type_char,
265         &builtin_type_long,
266         &builtin_type_short,
267         &builtin_type_unsigned_char,
268         &builtin_type_unsigned_short,
269         &builtin_type_unsigned_long,
270         &builtin_type_unsigned_int,
271         &builtin_type_float,
272         &builtin_type_double,
273         &builtin_type_void,
274         &builtin_type_long_double
275 };
276
277 static void os9k_init_type_vector PARAMS ((struct type **));
278
279 static void
280 os9k_init_type_vector(tv)
281     struct type **tv;
282 {
283   int i;
284   for (i=0; i<sizeof(os9k_type_vector)/sizeof(struct type **); i++)
285     tv[i] = (os9k_type_vector[i] == 0 ? 0 : *(os9k_type_vector[i]));
286 }
287
288 /* Look up a dbx type-number pair.  Return the address of the slot
289    where the type for that number-pair is stored.
290    The number-pair is in TYPENUMS.
291
292    This can be used for finding the type associated with that pair
293    or for associating a new type with the pair.  */
294
295 struct type **
296 dbx_lookup_type (typenums)
297      int typenums[2];
298 {
299   register int filenum = typenums[0];
300   register int index = typenums[1];
301   unsigned old_len;
302   register int real_filenum;
303   register struct header_file *f;
304   int f_orig_length;
305
306   if (filenum == -1)            /* -1,-1 is for temporary types.  */
307     return 0;
308
309   if (filenum < 0 || filenum >= n_this_object_header_files)
310     {
311       static struct complaint msg = {"\
312 Invalid symbol data: type number (%d,%d) out of range at symtab pos %d.",
313                                 0, 0};
314       complain (&msg, filenum, index, symnum);
315       goto error_return;
316     }
317
318   if (filenum == 0)
319     {
320       if (index < 0)
321         {
322           /* Caller wants address of address of type.  We think
323              that negative (rs6k builtin) types will never appear as
324              "lvalues", (nor should they), so we stuff the real type
325              pointer into a temp, and return its address.  If referenced,
326              this will do the right thing.  */
327           static struct type *temp_type;
328
329           temp_type = rs6000_builtin_type(index);
330           return &temp_type;
331         }
332
333       /* Type is defined outside of header files.
334          Find it in this object file's type vector.  */
335       if (index >= type_vector_length)
336         {
337           old_len = type_vector_length;
338           if (old_len == 0)
339             {
340               type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
341               type_vector = (struct type **)
342                 xmalloc (type_vector_length * sizeof (struct type *));
343             }
344           while (index >= type_vector_length)
345             {
346               type_vector_length *= 2;
347             }
348           type_vector = (struct type **)
349             xrealloc ((char *) type_vector,
350                       (type_vector_length * sizeof (struct type *)));
351           memset (&type_vector[old_len], 0,
352                   (type_vector_length - old_len) * sizeof (struct type *));
353
354           if (os9k_stabs)
355             /* Deal with OS9000 fundamental types.  */
356             os9k_init_type_vector (type_vector);
357         }
358       return (&type_vector[index]);
359     }
360   else
361     {
362       real_filenum = this_object_header_files[filenum];
363
364       if (real_filenum >= N_HEADER_FILES (current_objfile))
365         {
366           struct type *temp_type;
367           struct type **temp_type_p;
368
369           warning ("GDB internal error: bad real_filenum");
370
371         error_return:
372           temp_type = init_type (TYPE_CODE_ERROR, 0, 0, NULL, NULL);
373           temp_type_p = (struct type **) xmalloc (sizeof (struct type *));
374           *temp_type_p = temp_type;
375           return temp_type_p;
376         }
377
378       f = HEADER_FILES (current_objfile) + real_filenum;
379
380       f_orig_length = f->length;
381       if (index >= f_orig_length)
382         {
383           while (index >= f->length)
384             {
385               f->length *= 2;
386             }
387           f->vector = (struct type **)
388             xrealloc ((char *) f->vector, f->length * sizeof (struct type *));
389           memset (&f->vector[f_orig_length], 0,
390                   (f->length - f_orig_length) * sizeof (struct type *));
391         }
392       return (&f->vector[index]);
393     }
394 }
395
396 /* Make sure there is a type allocated for type numbers TYPENUMS
397    and return the type object.
398    This can create an empty (zeroed) type object.
399    TYPENUMS may be (-1, -1) to return a new type object that is not
400    put into the type vector, and so may not be referred to by number. */
401
402 static struct type *
403 dbx_alloc_type (typenums, objfile)
404      int typenums[2];
405      struct objfile *objfile;
406 {
407   register struct type **type_addr;
408
409   if (typenums[0] == -1)
410     {
411       return (alloc_type (objfile));
412     }
413
414   type_addr = dbx_lookup_type (typenums);
415
416   /* If we are referring to a type not known at all yet,
417      allocate an empty type for it.
418      We will fill it in later if we find out how.  */
419   if (*type_addr == 0)
420     {
421       *type_addr = alloc_type (objfile);
422     }
423
424   return (*type_addr);
425 }
426
427 /* for all the stabs in a given stab vector, build appropriate types 
428    and fix their symbols in given symbol vector. */
429
430 static void
431 patch_block_stabs (symbols, stabs, objfile)
432      struct pending *symbols;
433      struct pending_stabs *stabs;
434      struct objfile *objfile;
435 {
436   int ii;
437   char *name;
438   char *pp;
439   struct symbol *sym;
440
441   if (stabs)
442     {
443       
444       /* for all the stab entries, find their corresponding symbols and 
445          patch their types! */
446       
447       for (ii = 0; ii < stabs->count; ++ii)
448         {
449           name = stabs->stab[ii];
450           pp = (char*) strchr (name, ':');
451           while (pp[1] == ':')
452             {
453                pp += 2;
454                pp = (char *)strchr(pp, ':');
455             }
456           sym = find_symbol_in_list (symbols, name, pp-name);
457           if (!sym)
458             {
459               /* FIXME-maybe: it would be nice if we noticed whether
460                  the variable was defined *anywhere*, not just whether
461                  it is defined in this compilation unit.  But neither
462                  xlc or GCC seem to need such a definition, and until
463                  we do psymtabs (so that the minimal symbols from all
464                  compilation units are available now), I'm not sure
465                  how to get the information.  */
466
467               /* On xcoff, if a global is defined and never referenced,
468                  ld will remove it from the executable.  There is then
469                  a N_GSYM stab for it, but no regular (C_EXT) symbol.  */
470               sym = (struct symbol *)
471                 obstack_alloc (&objfile->symbol_obstack,
472                                sizeof (struct symbol));
473
474               memset (sym, 0, sizeof (struct symbol));
475               SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
476               SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
477               SYMBOL_NAME (sym) =
478                 obsavestring (name, pp - name, &objfile->symbol_obstack);
479               pp += 2;
480               if (*(pp-1) == 'F' || *(pp-1) == 'f')
481                 {
482                   /* I don't think the linker does this with functions,
483                      so as far as I know this is never executed.
484                      But it doesn't hurt to check.  */
485                   SYMBOL_TYPE (sym) =
486                     lookup_function_type (read_type (&pp, objfile));
487                 }
488               else
489                 {
490                   SYMBOL_TYPE (sym) = read_type (&pp, objfile);
491                 }
492               add_symbol_to_list (sym, &global_symbols);
493             }
494           else
495             {
496               pp += 2;
497               if (*(pp-1) == 'F' || *(pp-1) == 'f')
498                 {
499                   SYMBOL_TYPE (sym) =
500                     lookup_function_type (read_type (&pp, objfile));
501                 }
502               else
503                 {
504                   SYMBOL_TYPE (sym) = read_type (&pp, objfile);
505                 }
506             }
507         }
508     }
509 }
510
511 \f
512 /* Read a number by which a type is referred to in dbx data,
513    or perhaps read a pair (FILENUM, TYPENUM) in parentheses.
514    Just a single number N is equivalent to (0,N).
515    Return the two numbers by storing them in the vector TYPENUMS.
516    TYPENUMS will then be used as an argument to dbx_lookup_type.
517
518    Returns 0 for success, -1 for error.  */
519
520 static int
521 read_type_number (pp, typenums)
522      register char **pp;
523      register int *typenums;
524 {
525   int nbits;
526   if (**pp == '(')
527     {
528       (*pp)++;
529       typenums[0] = read_huge_number (pp, ',', &nbits);
530       if (nbits != 0) return -1;
531       typenums[1] = read_huge_number (pp, ')', &nbits);
532       if (nbits != 0) return -1;
533     }
534   else
535     {
536       typenums[0] = 0;
537       typenums[1] = read_huge_number (pp, 0, &nbits);
538       if (nbits != 0) return -1;
539     }
540   return 0;
541 }
542
543 \f
544 #if !defined (REG_STRUCT_HAS_ADDR)
545 #define REG_STRUCT_HAS_ADDR(gcc_p,type) 0
546 #endif
547
548 #define VISIBILITY_PRIVATE      '0'     /* Stabs character for private field */
549 #define VISIBILITY_PROTECTED    '1'     /* Stabs character for protected fld */
550 #define VISIBILITY_PUBLIC       '2'     /* Stabs character for public field */
551 #define VISIBILITY_IGNORE       '9'     /* Optimized out or zero length */
552
553 #define CFRONT_VISIBILITY_PRIVATE       '2'     /* Stabs character for private field */
554 #define CFRONT_VISIBILITY_PUBLIC        '1'     /* Stabs character for public field */
555
556 /* This code added to support parsing of ARM/Cfront stabs strings */
557
558 /* Get substring from string up to char c, advance string pointer past
559    suibstring. */
560
561 static char * 
562 get_substring (p, c)
563   char ** p;
564   int c;
565 {
566   char *str;
567   str = *p;
568   *p = strchr (*p, c);
569   if (*p) 
570     {
571       **p = 0;
572       (*p)++;
573     }
574   else 
575     str = 0;
576   return str;
577 }
578
579 /* Physname gets strcat'd onto sname in order to recreate the mangled
580    name (see funtion gdb_mangle_name in gdbtypes.c).  For cfront, make
581    the physname look like that of g++ - take out the initial mangling
582    eg: for sname="a" and fname="foo__1aFPFs_i" return "FPFs_i" */
583
584 static char * 
585 get_cfront_method_physname (fname)
586   char *fname;
587 {
588   int len = 0;
589   /* FIXME would like to make this generic for g++ too, but 
590      that is already handled in read_member_funcctions */
591   char * p = fname;
592
593   /* search ahead to find the start of the mangled suffix */
594   if (*p == '_' && *(p+1)=='_') /* compiler generated; probably a ctor/dtor */
595     p += 2;             
596   while (p && (unsigned) ((p+1) - fname) < strlen (fname) && *(p+1) != '_')
597     p = strchr (p, '_');
598   if (!(p && *p == '_' && *(p+1) == '_')) 
599     error ("Invalid mangled function name %s",fname);
600   p += 2; /* advance past '__' */
601
602   /* struct name length and name of type should come next; advance past it */
603   while (isdigit (*p))
604     {
605       len = len * 10 + (*p - '0');
606       p++;
607     }
608   p += len;
609
610   return p;
611 }
612
613 /* Read base classes within cfront class definition.
614    eg: A:ZcA;1@Bpub v2@Bvirpri;__ct__1AFv func__1AFv *sfunc__1AFv ;as__1A ;;
615              ^^^^^^^^^^^^^^^^^^
616
617        A:ZcA;;foopri__1AFv foopro__1AFv __ct__1AFv __ct__1AFRC1A foopub__1AFv ;;;
618              ^
619    */
620
621 static int
622 read_cfront_baseclasses (fip, pp, type, objfile) 
623   struct field_info *fip;
624   struct objfile *objfile;
625   char ** pp;
626   struct type *type;
627 {
628   static struct complaint msg_unknown = {"\
629          Unsupported token in stabs string %s.\n",
630                   0, 0};
631   static struct complaint msg_notfound = {"\
632                    Unable to find base type for %s.\n",
633                                 0, 0};
634   int bnum = 0;
635   char * p;
636   int i;
637   struct nextfield *new;
638
639   if (**pp == ';')              /* no base classes; return */
640     {
641       ++(*pp);
642       return 1;
643     }
644
645   /* first count base classes so we can allocate space before parsing */
646   for (p = *pp; p && *p && *p != ';'; p++)
647     {
648       if (*p == ' ')
649         bnum++;
650     }
651   bnum++;       /* add one more for last one */
652
653   /* now parse the base classes until we get to the start of the methods 
654      (code extracted and munged from read_baseclasses) */
655   ALLOCATE_CPLUS_STRUCT_TYPE (type);
656   TYPE_N_BASECLASSES(type) = bnum;
657
658   /* allocate space */
659   {
660     int num_bytes = B_BYTES (TYPE_N_BASECLASSES (type));
661     char *pointer;
662
663     pointer = (char *) TYPE_ALLOC (type, num_bytes);
664     TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) pointer;
665   }
666   B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), TYPE_N_BASECLASSES (type));
667
668   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
669     {
670       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
671       make_cleanup (free, new);
672       memset (new, 0, sizeof (struct nextfield));
673       new -> next = fip -> list;
674       fip -> list = new;
675       FIELD_BITSIZE (new->field) = 0; /* this should be an unpacked field! */
676
677       STABS_CONTINUE (pp, objfile);
678
679       /* virtual?  eg: v2@Bvir */
680       if (**pp=='v')
681         {
682           SET_TYPE_FIELD_VIRTUAL (type, i);
683           ++(*pp);
684         }
685
686       /* access?  eg: 2@Bvir */
687         /* Note: protected inheritance not supported in cfront */
688       switch (*(*pp)++)
689         {
690           case CFRONT_VISIBILITY_PRIVATE:
691             new -> visibility = VISIBILITY_PRIVATE;
692             break;
693           case CFRONT_VISIBILITY_PUBLIC:
694             new -> visibility = VISIBILITY_PUBLIC;
695             break;
696           default:
697             /* Bad visibility format.  Complain and treat it as
698                public.  */
699             {
700               static struct complaint msg = {
701                 "Unknown visibility `%c' for baseclass", 0, 0};
702               complain (&msg, new -> visibility);
703               new -> visibility = VISIBILITY_PUBLIC;
704             }
705         }
706
707       /* "@" comes next - eg: @Bvir */
708       if (**pp!='@')
709         {
710           complain (&msg_unknown, *pp);
711           return 1;
712         }
713       ++(*pp);
714
715
716         /* Set the bit offset of the portion of the object corresponding 
717            to this baseclass.  Always zero in the absence of
718            multiple inheritance.  */
719         /* Unable to read bit position from stabs;
720            Assuming no multiple inheritance for now FIXME! */
721         /* We may have read this in the structure definition;
722            now we should fixup the members to be the actual base classes */
723         FIELD_BITPOS (new->field) = 0;
724
725         /* Get the base class name and type */
726           {
727             char * bname;               /* base class name */
728             struct symbol * bsym;       /* base class */
729             char * p1, * p2;
730             p1 = strchr (*pp,' ');
731             p2 = strchr (*pp,';');
732             if (p1<p2)
733               bname = get_substring (pp,' ');
734             else
735               bname = get_substring (pp,';');
736             if (!bname || !*bname)
737               {
738                 complain (&msg_unknown, *pp);
739                 return 1;
740               }
741             /* FIXME! attach base info to type */
742             bsym = lookup_symbol (bname, 0, STRUCT_NAMESPACE, 0, 0); /*demangled_name*/
743             if (bsym) 
744               {
745                 new -> field.type = SYMBOL_TYPE(bsym);
746                 new -> field.name = type_name_no_tag (new -> field.type);
747               }
748             else
749               {
750                 complain (&msg_notfound, *pp);
751                 return 1;
752               }
753           }
754
755       /* If more base classes to parse, loop again.
756          We ate the last ' ' or ';' in get_substring,
757          so on exit we will have skipped the trailing ';' */
758       /* if invalid, return 0; add code to detect  - FIXME! */
759     }
760   return 1;
761 }
762
763 /* read cfront member functions.
764    pp points to string starting with list of functions
765    eg: A:ZcA;1@Bpub v2@Bvirpri;__ct__1AFv func__1AFv *sfunc__1AFv ;as__1A ;;
766                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
767        A:ZcA;;foopri__1AFv foopro__1AFv __ct__1AFv __ct__1AFRC1A foopub__1AFv ;;;
768               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
769 */
770
771 static int
772 read_cfront_member_functions (fip, pp, type, objfile)
773      struct field_info *fip;
774      char **pp;
775      struct type *type;
776      struct objfile *objfile;
777 {
778   /* This code extracted from read_member_functions 
779      so as to do the similar thing for our funcs */
780
781   int nfn_fields = 0;
782   int length = 0;
783   /* Total number of member functions defined in this class.  If the class
784      defines two `f' functions, and one `g' function, then this will have
785      the value 3.  */
786   int total_length = 0;
787   int i;
788   struct next_fnfield
789     {
790       struct next_fnfield *next;
791       struct fn_field fn_field;
792     } *sublist;
793   struct type *look_ahead_type;
794   struct next_fnfieldlist *new_fnlist;
795   struct next_fnfield *new_sublist;
796   char *main_fn_name;
797   char * fname;
798   struct symbol * ref_func = 0;
799       
800   /* Process each list until we find the end of the member functions.
801      eg: p = "__ct__1AFv foo__1AFv ;;;" */
802
803   STABS_CONTINUE (pp, objfile);                 /* handle \\ */
804
805   while (**pp != ';' && (fname = get_substring (pp, ' '), fname)) 
806     {
807       int is_static = 0;
808       int sublist_count = 0;
809       char * pname;
810       if (fname[0] == '*')      /* static member */
811         {
812           is_static=1;
813           sublist_count++;
814           fname++;
815         }
816       ref_func = lookup_symbol (fname, 0, VAR_NAMESPACE, 0, 0); /* demangled name */
817       if (!ref_func) 
818         {
819           static struct complaint msg = {"\
820                 Unable to find function symbol for %s\n",
821                                 0, 0};
822           complain (&msg, fname);
823           continue;
824         }
825       sublist = NULL;
826       look_ahead_type = NULL;
827       length = 0;
828           
829       new_fnlist = (struct next_fnfieldlist *)
830       xmalloc (sizeof (struct next_fnfieldlist));
831       make_cleanup (free, new_fnlist);
832       memset (new_fnlist, 0, sizeof (struct next_fnfieldlist));
833           
834       /* The following is code to work around cfront generated stabs.
835          The stabs contains full mangled name for each field.
836          We try to demangle the name and extract the field name out of it.  */
837       {
838         char *dem, *dem_p, *dem_args;
839         int dem_len;
840         dem = cplus_demangle (fname, DMGL_ANSI | DMGL_PARAMS);
841         if (dem != NULL)
842           {
843             dem_p = strrchr (dem, ':');
844             if (dem_p != 0 && *(dem_p-1) == ':')
845               dem_p++;
846             /* get rid of args */
847             dem_args = strchr (dem_p, '(');
848             if (dem_args == NULL)
849               dem_len = strlen (dem_p);
850             else
851               dem_len = dem_args - dem_p;
852             main_fn_name =
853                    obsavestring (dem_p, dem_len, &objfile -> type_obstack);
854           }
855         else
856           {
857             main_fn_name =
858                    obsavestring (fname, strlen (fname), &objfile -> type_obstack);
859           }
860       } /* end of code for cfront work around */
861
862     new_fnlist -> fn_fieldlist.name = main_fn_name;
863       
864     /*-------------------------------------------------*/
865     /* Set up the sublists
866        Sublists are stuff like args, static, visibility, etc.
867        so in ARM, we have to set that info some other way.
868        Multiple sublists happen if overloading
869        eg: foo::26=##1;:;2A.;
870        In g++, we'd loop here thru all the sublists...  */
871
872     new_sublist =
873         (struct next_fnfield *) xmalloc (sizeof (struct next_fnfield));
874     make_cleanup (free, new_sublist);
875     memset (new_sublist, 0, sizeof (struct next_fnfield));
876           
877     /* eat 1; from :;2A.; */
878     new_sublist -> fn_field.type = SYMBOL_TYPE(ref_func); /* normally takes a read_type */
879     /* Make this type look like a method stub for gdb */
880     TYPE_FLAGS (new_sublist -> fn_field.type) |= TYPE_FLAG_STUB;
881     TYPE_CODE (new_sublist -> fn_field.type) = TYPE_CODE_METHOD;
882
883     /* If this is just a stub, then we don't have the real name here. */
884     if (TYPE_FLAGS (new_sublist -> fn_field.type) & TYPE_FLAG_STUB)
885       {
886         if (!TYPE_DOMAIN_TYPE (new_sublist -> fn_field.type))
887         TYPE_DOMAIN_TYPE (new_sublist -> fn_field.type) = type;
888         new_sublist -> fn_field.is_stub = 1;
889       }
890
891     /* physname used later in mangling; eg PFs_i,5 for foo__1aFPFs_i 
892        physname gets strcat'd in order to recreate the onto mangled name */
893     pname = get_cfront_method_physname (fname);
894     new_sublist -> fn_field.physname = savestring (pname, strlen (pname));
895       
896
897     /* Set this member function's visibility fields. 
898        Unable to distinguish access from stabs definition!
899          Assuming public for now.  FIXME!
900          (for private, set new_sublist->fn_field.is_private = 1,
901          for public, set new_sublist->fn_field.is_protected = 1) */
902        
903     /* Unable to distinguish const/volatile from stabs definition!
904        Assuming normal for now.  FIXME! */
905
906     new_sublist -> fn_field.is_const = 0;
907     new_sublist -> fn_field.is_volatile = 0;    /* volatile not implemented in cfront */
908           
909     /* Set virtual/static function info
910        How to get vtable offsets ? 
911        Assuming normal for now FIXME!! 
912        For vtables, figure out from whence this virtual function came.
913        It may belong to virtual function table of
914        one of its baseclasses.
915          set:
916            new_sublist -> fn_field.voffset = vtable offset,
917            new_sublist -> fn_field.fcontext = look_ahead_type;
918            where look_ahead_type is type of baseclass */
919     if (is_static)
920       new_sublist -> fn_field.voffset = VOFFSET_STATIC;
921     else                                /* normal member function.  */
922       new_sublist -> fn_field.voffset = 0;
923     new_sublist -> fn_field.fcontext = 0;
924  
925
926     /* Prepare new sublist */
927     new_sublist -> next = sublist;
928     sublist = new_sublist;
929     length++;
930
931     /* In g++, we loop thu sublists - now we set from functions. */
932     new_fnlist -> fn_fieldlist.fn_fields = (struct fn_field *)
933          obstack_alloc (&objfile -> type_obstack, 
934                sizeof (struct fn_field) * length);
935     memset (new_fnlist -> fn_fieldlist.fn_fields, 0,
936            sizeof (struct fn_field) * length);
937     for (i = length; (i--, sublist); sublist = sublist -> next)
938       {
939         new_fnlist -> fn_fieldlist.fn_fields[i] = sublist -> fn_field;
940       }
941       
942     new_fnlist -> fn_fieldlist.length = length;
943     new_fnlist -> next = fip -> fnlist;
944     fip -> fnlist = new_fnlist;
945     nfn_fields++;
946     total_length += length;
947     STABS_CONTINUE (pp, objfile); /* handle \\ */
948   } /* end of loop */
949
950   if (nfn_fields)
951     {
952       /* type should already have space */
953       TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
954       TYPE_ALLOC (type, sizeof (struct fn_fieldlist) * nfn_fields);
955       memset (TYPE_FN_FIELDLISTS (type), 0,
956                 sizeof (struct fn_fieldlist) * nfn_fields);
957       TYPE_NFN_FIELDS (type) = nfn_fields;
958       TYPE_NFN_FIELDS_TOTAL (type) = total_length;
959     }
960
961   /* end of scope for reading member func */
962
963   /* eg: ";;" */
964
965   /* Skip trailing ';' and bump count of number of fields seen */
966   if (**pp == ';')
967     (*pp)++;
968   else
969     return 0;
970   return 1;
971 }
972
973 /* This routine fixes up partial cfront types that were created
974    while parsing the stabs.  The main need for this function is
975    to add information such as methods to classes.
976    Examples of "p": "sA;;__ct__1AFv foo__1AFv ;;;" */
977 int
978 resolve_cfront_continuation (objfile, sym, p)
979   struct objfile * objfile;
980   struct symbol * sym;
981   char * p;
982 {
983   struct symbol * ref_sym=0;
984   char * sname;
985   /* snarfed from read_struct_type */
986   struct field_info fi;
987   struct type *type;
988   struct cleanup *back_to;
989
990   /* Need to make sure that fi isn't gunna conflict with struct 
991      in case struct already had some fnfs */
992   fi.list = NULL;
993   fi.fnlist = NULL;       
994   back_to = make_cleanup (null_cleanup, 0);
995
996   /* We only accept structs, classes and unions at the moment. 
997      Other continuation types include t (typedef), r (long dbl), ... 
998      We may want to add support for them as well; 
999      right now they are handled by duplicating the symbol information 
1000      into the type information (see define_symbol) */
1001   if (*p != 's'       /* structs */
1002     && *p != 'c'      /* class */
1003     && *p != 'u')     /* union */
1004     return 0;  /* only handle C++ types */
1005   p++;  
1006
1007   /* Get symbol typs name and validate 
1008      eg: p = "A;;__ct__1AFv foo__1AFv ;;;" */
1009   sname = get_substring (&p, ';');
1010   if (!sname || strcmp (sname, SYMBOL_NAME(sym)))
1011     error ("Internal error: base symbol type name does not match\n");
1012
1013   /* Find symbol's internal gdb reference using demangled_name.
1014      This is the real sym that we want; 
1015      sym was a temp hack to make debugger happy */
1016   ref_sym = lookup_symbol (SYMBOL_NAME(sym), 0, STRUCT_NAMESPACE, 0, 0); 
1017   type = SYMBOL_TYPE(ref_sym);
1018
1019
1020   /* Now read the baseclasses, if any, read the regular C struct or C++
1021      class member fields, attach the fields to the type, read the C++
1022      member functions, attach them to the type, and then read any tilde
1023      field (baseclass specifier for the class holding the main vtable). */
1024
1025   if (!read_cfront_baseclasses (&fi, &p, type, objfile)
1026       /* g++ does this next, but cfront already did this: 
1027             || !read_struct_fields (&fi, &p, type, objfile) */
1028       || !copy_cfront_struct_fields (&fi, type, objfile)
1029       || !read_cfront_member_functions (&fi, &p, type, objfile)
1030       || !read_cfront_static_fields (&fi, &p, type, objfile)
1031       || !attach_fields_to_type (&fi, type, objfile)
1032       || !attach_fn_fields_to_type (&fi, type)
1033       /* g++ does this next, but cfront doesn't seem to have this: 
1034                 || !read_tilde_fields (&fi, &p, type, objfile) */
1035       )
1036     {
1037       type = error_type (&p, objfile);
1038     }
1039
1040   do_cleanups (back_to);
1041   return 0;  
1042 }
1043 /* End of code added to support parsing of ARM/Cfront stabs strings */
1044
1045
1046 /* This routine fixes up symbol references/aliases to point to the original
1047    symbol definition.  */
1048
1049 static int
1050 resolve_symbol_reference (objfile, sym, p)
1051   struct objfile *objfile;
1052   struct symbol *sym;
1053   char *p;
1054 {
1055   int refnum;
1056   struct symbol *ref_sym=0;
1057   struct alias_list *alias;
1058
1059   /* If this is not a symbol reference return now.  */
1060   if (*p != '#')
1061     return 0;  
1062
1063   /* Use "#<num>" as the name; we'll fix the name later.
1064      We stored the original symbol name as "#<id>=<name>"
1065      so we can now search for "#<id>" to resolving the reference.
1066      We'll fix the names later by removing the "#<id>" or "#<id>=" */
1067
1068   /*---------------------------------------------------------*/
1069   /* Get the reference id number, and 
1070      advance p past the names so we can parse the rest. 
1071        eg: id=2 for p : "2=", "2=z:r(0,1)" "2:r(0,1);l(#5,#6),l(#7,#4)" */
1072   /*---------------------------------------------------------*/
1073
1074   /* This gets reference name from string.  sym may not have a name. */
1075
1076   /* Get the reference number associated with the reference id in the
1077      gdb stab string.  From that reference number, get the main/primary
1078      symbol for this alias.  */
1079   refnum = process_reference (&p);
1080   ref_sym = ref_search (refnum);
1081   if (!ref_sym)
1082     error ("error: symbol for reference not found.\n");
1083
1084
1085   /* Parse the stab of the referencing symbol
1086      now that we have the referenced symbol.
1087      Add it as a new symbol and a link back to the referenced symbol.
1088      eg: p : "=", "=z:r(0,1)" ":r(0,1);l(#5,#6),l(#7,#4)" */
1089
1090
1091   /* If the stab symbol table and string contain:
1092          RSYM   0      5      00000000 868    #15=z:r(0,1)
1093          LBRAC  0      0      00000000 899    #5=
1094          SLINE  0      16     00000003 923    #6=
1095      Then the same symbols can be later referenced by:
1096          RSYM   0      5      00000000 927    #15:r(0,1);l(#5,#6)
1097      This is used in live range splitting to:
1098      1) specify that a symbol (#15) is actually just a new storage 
1099         class for a symbol (#15=z) which was previously defined.
1100      2) specify that the beginning and ending ranges for a symbol 
1101         (#15) are the values of the beginning (#5) and ending (#6) 
1102         symbols. */
1103        
1104    /* Read number as reference id.
1105       eg: p : "=", "=z:r(0,1)" ":r(0,1);l(#5,#6),l(#7,#4)" */
1106    /* FIXME! Might I want to use SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
1107       in case of "l(0,0)"? */
1108
1109    /*--------------------------------------------------*/
1110    /* Add this symbol to the reference list.           */
1111    /*--------------------------------------------------*/
1112
1113   alias = (struct alias_list *) obstack_alloc (&objfile->type_obstack,
1114                                                sizeof (struct alias_list));
1115   if (!alias)
1116     error ("Unable to allocate alias list memory");
1117
1118   alias->next = 0;
1119   alias->sym = sym;
1120
1121   if (!SYMBOL_ALIASES (ref_sym))
1122     {
1123       SYMBOL_ALIASES (ref_sym) = alias;
1124     }
1125   else
1126     {
1127       struct alias_list *temp;
1128
1129       /* Get to the end of the list.  */
1130       for (temp = SYMBOL_ALIASES (ref_sym);
1131            temp->next; 
1132            temp = temp->next);
1133         ;
1134       temp->next = alias;
1135     }
1136
1137    /* Want to fix up name so that other functions (eg. valops)
1138       will correctly print the name.
1139       Don't add_symbol_to_list so that lookup_symbol won't find it.
1140       nope... needed for fixups. */
1141    SYMBOL_NAME (sym) = SYMBOL_NAME (ref_sym);
1142
1143   /* Done!  */
1144   return 0;  
1145 }
1146
1147 #define MAX_CHUNK_REFS 100      
1148 #define REF_CHUNK_SIZE \
1149     MAX_CHUNK_REFS * sizeof (struct ref_map_s)
1150 #define REF_MAP_SIZE(ref_chunk) \
1151     ref_chunk * REF_CHUNK_SIZE
1152
1153 /* Structure for storing pointers to reference definitions for fast lookup 
1154    during "process_later". */
1155 static struct ref_map_s
1156 {
1157   char *stabs;
1158   CORE_ADDR value;
1159   struct symbol *sym;
1160 } *ref_map;     
1161
1162 /* Ptr to free cell in chunk's linked list. */
1163 static int ref_count = 0;       
1164
1165 /* Number of chunks malloced. */
1166 static int ref_chunk = 0;
1167
1168 /* Initialize our list of references.
1169    This should be called before any symbol table is read.  */
1170
1171 static void 
1172 ref_init ()
1173 {
1174   ref_count = 0;
1175   ref_chunk = 0;
1176 }
1177
1178 /* Create array of pointers mapping refids to symbols and stab strings.
1179    Add pointers to reference definition symbols and/or their values as we 
1180    find them, using their reference numbers as our index. 
1181    These will be used later when we resolve references. */
1182 void
1183 ref_add (refnum, sym, stabs, value)
1184      int refnum;
1185      struct symbol *sym;
1186      char *stabs;
1187      CORE_ADDR value;
1188 {
1189   if (ref_count == 0)
1190     ref_init ();
1191   if (refnum >= ref_count)
1192     ref_count = refnum + 1;
1193   if (ref_count > ref_chunk * MAX_CHUNK_REFS)
1194     {
1195       int new_slots = ref_count - ref_chunk * MAX_CHUNK_REFS; 
1196       int new_chunks = new_slots / MAX_CHUNK_REFS + 1;
1197       ref_map = (struct ref_map_s *)
1198         xrealloc (ref_map, REF_MAP_SIZE(ref_chunk + new_chunks));
1199       if (!ref_map) 
1200         error ("no more free slots in chain\n");
1201       memset (ref_map + REF_MAP_SIZE(ref_chunk), 0, new_chunks * REF_CHUNK_SIZE);
1202       ref_chunk += new_chunks;
1203     }
1204   ref_map[refnum].stabs = stabs;
1205   ref_map[refnum].sym = sym;
1206   ref_map[refnum].value = value;
1207 }
1208
1209 /* Return defined sym for the reference REFNUM.  */
1210 struct symbol *
1211 ref_search (refnum)
1212      int refnum;
1213 {
1214   if (refnum < 0 || refnum > ref_count)
1215     return 0;
1216   return ref_map[refnum].sym;
1217 }
1218
1219 /* Return value for the reference REFNUM.  */
1220
1221 static CORE_ADDR
1222 ref_search_value (refnum)
1223      int refnum;
1224 {
1225   if (refnum < 0 || refnum > ref_count)
1226     return 0;
1227   return ref_map[refnum].value;
1228 }
1229    
1230 /* Parse a reference id in STRING and return the resulting
1231    reference number.  Move STRING beyond the reference id.  */
1232
1233 static int 
1234 process_reference (string)
1235     char **string;
1236 {
1237   char *p;
1238   int refnum = 0;
1239
1240   if (**string != '#') 
1241     return 0;   
1242      
1243   /* Advance beyond the initial '#'.  */
1244   p = *string + 1;
1245
1246   /* Read number as reference id. */
1247   while (*p && isdigit (*p))
1248     {
1249       refnum = refnum * 10 + *p - '0';
1250       p++;
1251     }
1252   *string = p;
1253   return refnum;
1254 }
1255
1256 /* If STRING defines a reference, store away a pointer to the reference 
1257    definition for later use.  Return the reference number.  */
1258
1259 int
1260 symbol_reference_defined (string)
1261      char **string;
1262 {
1263   char *p = *string;
1264   int refnum = 0;
1265
1266   refnum = process_reference (&p);
1267
1268   /* Defining symbols end in '=' */
1269   if (*p == '=') 
1270     {
1271       /* Symbol is being defined here. */ 
1272       *string = p + 1;
1273       return refnum;
1274     }
1275   else
1276     {
1277       /* Must be a reference.   Either the symbol has already been defined,
1278          or this is a forward reference to it.  */
1279       *string = p;
1280       return -1;
1281     }
1282 }
1283
1284 /* ARGSUSED */
1285 struct symbol *
1286 define_symbol (valu, string, desc, type, objfile)
1287      CORE_ADDR valu;
1288      char *string;
1289      int desc;
1290      int type;
1291      struct objfile *objfile;
1292 {
1293   register struct symbol *sym;
1294   char *p = (char *) strchr (string, ':');
1295   int deftype;
1296   int synonym = 0;
1297   register int i;
1298
1299   /* We would like to eliminate nameless symbols, but keep their types.
1300      E.g. stab entry ":t10=*2" should produce a type 10, which is a pointer
1301      to type 2, but, should not create a symbol to address that type. Since
1302      the symbol will be nameless, there is no way any user can refer to it. */
1303
1304   int nameless;
1305
1306   /* Ignore syms with empty names.  */
1307   if (string[0] == 0)
1308     return 0;
1309
1310   /* Ignore old-style symbols from cc -go  */
1311   if (p == 0)
1312     return 0;
1313
1314   while (p[1] == ':')
1315     {
1316        p += 2;
1317        p = strchr (p, ':');
1318     }
1319
1320   /* If a nameless stab entry, all we need is the type, not the symbol.
1321      e.g. ":t10=*2" or a nameless enum like " :T16=ered:0,green:1,blue:2,;" */
1322   nameless = (p == string || ((string[0] == ' ') && (string[1] == ':')));
1323
1324   current_symbol = sym = (struct symbol *) 
1325     obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
1326   memset (sym, 0, sizeof (struct symbol));
1327
1328   switch (type & N_TYPE)
1329     {
1330     case N_TEXT:
1331       SYMBOL_SECTION(sym) = SECT_OFF_TEXT;
1332       break;
1333     case N_DATA:
1334       SYMBOL_SECTION(sym) = SECT_OFF_DATA;
1335       break;
1336     case N_BSS:
1337       SYMBOL_SECTION(sym) = SECT_OFF_BSS;
1338       break;
1339     }
1340
1341   if (processing_gcc_compilation)
1342     {
1343       /* GCC 2.x puts the line number in desc.  SunOS apparently puts in the
1344          number of bytes occupied by a type or object, which we ignore.  */
1345       SYMBOL_LINE(sym) = desc;
1346     }
1347   else
1348     {
1349       SYMBOL_LINE(sym) = 0;                     /* unknown */
1350     }
1351
1352   if (is_cplus_marker (string[0]))
1353     {
1354       /* Special GNU C++ names.  */
1355       switch (string[1])
1356         {
1357           case 't':
1358             SYMBOL_NAME (sym) = obsavestring ("this", strlen ("this"),
1359                                               &objfile -> symbol_obstack);
1360             break;
1361
1362           case 'v': /* $vtbl_ptr_type */
1363             /* Was: SYMBOL_NAME (sym) = "vptr"; */
1364             goto normal;
1365
1366           case 'e':
1367             SYMBOL_NAME (sym) = obsavestring ("eh_throw", strlen ("eh_throw"),
1368                                               &objfile -> symbol_obstack);
1369             break;
1370
1371           case '_':
1372             /* This was an anonymous type that was never fixed up.  */
1373             goto normal;
1374
1375 #ifdef STATIC_TRANSFORM_NAME
1376           case 'X':
1377             /* SunPRO (3.0 at least) static variable encoding.  */
1378             goto normal;
1379 #endif
1380
1381           default:
1382             complain (&unrecognized_cplus_name_complaint, string);
1383             goto normal;                /* Do *something* with it */
1384         }
1385     }
1386   else if (string[0] == '#')
1387     {
1388       /* Special GNU C extension for referencing symbols.  */
1389       char *s;
1390       int refnum, nlen;
1391
1392       /* If STRING defines a new reference id, then add it to the
1393          reference map.  Else it must be referring to a previously
1394          defined symbol, so add it to the alias list of the previously
1395          defined symbol.  */
1396       s = string;
1397       refnum = symbol_reference_defined (&s);
1398       if (refnum >= 0)
1399           ref_add (refnum, sym, string, SYMBOL_VALUE (sym));
1400       else
1401         resolve_symbol_reference (objfile, sym, string);
1402
1403       /* S..P contains the name of the symbol.  We need to store
1404          the correct name into SYMBOL_NAME.  */
1405       nlen = p - s;
1406       if (refnum >= 0)
1407         {
1408           if (nlen > 0)
1409             {
1410               SYMBOL_NAME (sym) = (char *)
1411                 obstack_alloc (&objfile -> symbol_obstack, nlen);
1412               strncpy (SYMBOL_NAME (sym), s, nlen);
1413               SYMBOL_NAME (sym)[nlen] = '\0';
1414               SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
1415             }
1416           else
1417             /* FIXME! Want SYMBOL_NAME (sym) = 0;
1418                Get error if leave name 0.  So give it something. */
1419             {
1420               nlen = p - string;
1421               SYMBOL_NAME (sym) = (char *)
1422                 obstack_alloc (&objfile -> symbol_obstack, nlen);
1423               strncpy (SYMBOL_NAME (sym), string, nlen);
1424               SYMBOL_NAME (sym)[nlen] = '\0';
1425               SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
1426             }
1427         }
1428       /* Advance STRING beyond the reference id.  */
1429       string = s;
1430     }
1431   else
1432     {
1433     normal:
1434       SYMBOL_LANGUAGE (sym) = current_subfile -> language;
1435       SYMBOL_NAME (sym) = (char *)
1436         obstack_alloc (&objfile -> symbol_obstack, ((p - string) + 1));
1437       /* Open-coded memcpy--saves function call time.  */
1438       /* FIXME:  Does it really?  Try replacing with simple strcpy and
1439          try it on an executable with a large symbol table. */
1440       /* FIXME: considering that gcc can open code memcpy anyway, I
1441          doubt it.  xoxorich. */
1442       {
1443         register char *p1 = string;
1444         register char *p2 = SYMBOL_NAME (sym);
1445         while (p1 != p)
1446           {
1447             *p2++ = *p1++;
1448           }
1449         *p2++ = '\0';
1450       }
1451
1452       /* If this symbol is from a C++ compilation, then attempt to cache the
1453          demangled form for future reference.  This is a typical time versus
1454          space tradeoff, that was decided in favor of time because it sped up
1455          C++ symbol lookups by a factor of about 20. */
1456
1457       SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
1458     }
1459   p++;
1460
1461   /* Determine the type of name being defined.  */
1462 #if 0
1463   /* Getting GDB to correctly skip the symbol on an undefined symbol
1464      descriptor and not ever dump core is a very dodgy proposition if
1465      we do things this way.  I say the acorn RISC machine can just
1466      fix their compiler.  */
1467   /* The Acorn RISC machine's compiler can put out locals that don't
1468      start with "234=" or "(3,4)=", so assume anything other than the
1469      deftypes we know how to handle is a local.  */
1470   if (!strchr ("cfFGpPrStTvVXCR", *p))
1471 #else
1472   if (isdigit (*p) || *p == '(' || *p == '-')
1473 #endif
1474     deftype = 'l';
1475   else
1476     deftype = *p++;
1477
1478   switch (deftype)
1479     {
1480     case 'c':
1481       /* c is a special case, not followed by a type-number.
1482          SYMBOL:c=iVALUE for an integer constant symbol.
1483          SYMBOL:c=rVALUE for a floating constant symbol.
1484          SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
1485          e.g. "b:c=e6,0" for "const b = blob1"
1486          (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;").  */
1487       if (*p != '=')
1488         {
1489           SYMBOL_CLASS (sym) = LOC_CONST;
1490           SYMBOL_TYPE (sym) = error_type (&p, objfile);
1491           SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1492           add_symbol_to_list (sym, &file_symbols);
1493           return sym;
1494         }
1495       ++p;
1496       switch (*p++)
1497         {
1498         case 'r':
1499           {
1500             double d = atof (p);
1501             char *dbl_valu;
1502
1503             /* FIXME-if-picky-about-floating-accuracy: Should be using
1504                target arithmetic to get the value.  real.c in GCC
1505                probably has the necessary code.  */
1506
1507             /* FIXME: lookup_fundamental_type is a hack.  We should be
1508                creating a type especially for the type of float constants.
1509                Problem is, what type should it be?
1510
1511                Also, what should the name of this type be?  Should we
1512                be using 'S' constants (see stabs.texinfo) instead?  */
1513
1514             SYMBOL_TYPE (sym) = lookup_fundamental_type (objfile,
1515                                                          FT_DBL_PREC_FLOAT);
1516             dbl_valu = (char *)
1517               obstack_alloc (&objfile -> symbol_obstack,
1518                              TYPE_LENGTH (SYMBOL_TYPE (sym)));
1519             store_floating (dbl_valu, TYPE_LENGTH (SYMBOL_TYPE (sym)), d);
1520             SYMBOL_VALUE_BYTES (sym) = dbl_valu;
1521             SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
1522           }
1523           break;
1524         case 'i':
1525           {
1526             /* Defining integer constants this way is kind of silly,
1527                since 'e' constants allows the compiler to give not
1528                only the value, but the type as well.  C has at least
1529                int, long, unsigned int, and long long as constant
1530                types; other languages probably should have at least
1531                unsigned as well as signed constants.  */
1532
1533             /* We just need one int constant type for all objfiles.
1534                It doesn't depend on languages or anything (arguably its
1535                name should be a language-specific name for a type of
1536                that size, but I'm inclined to say that if the compiler
1537                wants a nice name for the type, it can use 'e').  */
1538             static struct type *int_const_type;
1539
1540             /* Yes, this is as long as a *host* int.  That is because we
1541                use atoi.  */
1542             if (int_const_type == NULL)
1543               int_const_type =
1544                 init_type (TYPE_CODE_INT,
1545                            sizeof (int) * HOST_CHAR_BIT / TARGET_CHAR_BIT, 0,
1546                            "integer constant",
1547                            (struct objfile *)NULL);
1548             SYMBOL_TYPE (sym) = int_const_type;
1549             SYMBOL_VALUE (sym) = atoi (p);
1550             SYMBOL_CLASS (sym) = LOC_CONST;
1551           }
1552           break;
1553         case 'e':
1554           /* SYMBOL:c=eTYPE,INTVALUE for a constant symbol whose value
1555              can be represented as integral.
1556              e.g. "b:c=e6,0" for "const b = blob1"
1557              (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;").  */
1558           {
1559             SYMBOL_CLASS (sym) = LOC_CONST;
1560             SYMBOL_TYPE (sym) = read_type (&p, objfile);
1561
1562             if (*p != ',')
1563               {
1564                 SYMBOL_TYPE (sym) = error_type (&p, objfile);
1565                 break;
1566               }
1567             ++p;
1568
1569             /* If the value is too big to fit in an int (perhaps because
1570                it is unsigned), or something like that, we silently get
1571                a bogus value.  The type and everything else about it is
1572                correct.  Ideally, we should be using whatever we have
1573                available for parsing unsigned and long long values,
1574                however.  */
1575             SYMBOL_VALUE (sym) = atoi (p);
1576           }
1577           break;
1578         default:
1579           {
1580             SYMBOL_CLASS (sym) = LOC_CONST;
1581             SYMBOL_TYPE (sym) = error_type (&p, objfile);
1582           }
1583         }
1584       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1585       add_symbol_to_list (sym, &file_symbols);
1586       return sym;
1587
1588     case 'C':
1589       /* The name of a caught exception.  */
1590       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1591       SYMBOL_CLASS (sym) = LOC_LABEL;
1592       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1593       SYMBOL_VALUE_ADDRESS (sym) = valu;
1594       add_symbol_to_list (sym, &local_symbols);
1595       break;
1596
1597     case 'f':
1598       /* A static function definition.  */
1599       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1600       SYMBOL_CLASS (sym) = LOC_BLOCK;
1601       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1602       add_symbol_to_list (sym, &file_symbols);
1603       /* fall into process_function_types.  */
1604
1605     process_function_types:
1606       /* Function result types are described as the result type in stabs.
1607          We need to convert this to the function-returning-type-X type
1608          in GDB.  E.g. "int" is converted to "function returning int".  */
1609       if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_FUNC)
1610         SYMBOL_TYPE (sym) = lookup_function_type (SYMBOL_TYPE (sym));
1611
1612       /* All functions in C++ have prototypes.  */
1613       if (SYMBOL_LANGUAGE (sym) == language_cplus)
1614         TYPE_FLAGS (SYMBOL_TYPE (sym)) |= TYPE_FLAG_PROTOTYPED;
1615
1616       /* fall into process_prototype_types */
1617
1618     process_prototype_types:
1619       /* Sun acc puts declared types of arguments here.  */
1620       if (*p == ';')
1621         {
1622           struct type *ftype = SYMBOL_TYPE (sym);
1623           int nsemi = 0;
1624           int nparams = 0;
1625           char *p1 = p;
1626
1627           /* Obtain a worst case guess for the number of arguments
1628              by counting the semicolons.  */
1629           while (*p1)
1630             {
1631               if (*p1++ == ';')
1632                 nsemi++;
1633             }
1634
1635           /* Allocate parameter information fields and fill them in. */
1636           TYPE_FIELDS (ftype) = (struct field *)
1637             TYPE_ALLOC (ftype, nsemi * sizeof (struct field));
1638           while (*p++ == ';')
1639             {
1640               struct type *ptype;
1641
1642               /* A type number of zero indicates the start of varargs.
1643                  FIXME: GDB currently ignores vararg functions.  */
1644               if (p[0] == '0' && p[1] == '\0')
1645                 break;
1646               ptype = read_type (&p, objfile);
1647
1648               /* The Sun compilers mark integer arguments, which should
1649                  be promoted to the width of the calling conventions, with
1650                  a type which references itself. This type is turned into
1651                  a TYPE_CODE_VOID type by read_type, and we have to turn
1652                  it back into builtin_type_int here.
1653                  FIXME: Do we need a new builtin_type_promoted_int_arg ?  */
1654               if (TYPE_CODE (ptype) == TYPE_CODE_VOID)
1655                 ptype = builtin_type_int;
1656               TYPE_FIELD_TYPE (ftype, nparams++) = ptype;
1657             }
1658           TYPE_NFIELDS (ftype) = nparams;
1659           TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED;
1660         }
1661       break;
1662
1663     case 'F':
1664       /* A global function definition.  */
1665       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1666       SYMBOL_CLASS (sym) = LOC_BLOCK;
1667       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1668       add_symbol_to_list (sym, &global_symbols);
1669       goto process_function_types;
1670
1671     case 'G':
1672       /* For a class G (global) symbol, it appears that the
1673          value is not correct.  It is necessary to search for the
1674          corresponding linker definition to find the value.
1675          These definitions appear at the end of the namelist.  */
1676       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1677       SYMBOL_CLASS (sym) = LOC_STATIC;
1678       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1679       /* Don't add symbol references to global_sym_chain.
1680          Symbol references don't have valid names and wont't match up with
1681          minimal symbols when the global_sym_chain is relocated.
1682          We'll fixup symbol references when we fixup the defining symbol.  */
1683       if (SYMBOL_NAME (sym) && SYMBOL_NAME (sym)[0] != '#')
1684         {
1685           i = hashname (SYMBOL_NAME (sym));
1686           SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
1687           global_sym_chain[i] = sym;
1688         }
1689       add_symbol_to_list (sym, &global_symbols);
1690       break;
1691
1692       /* This case is faked by a conditional above,
1693          when there is no code letter in the dbx data.
1694          Dbx data never actually contains 'l'.  */
1695     case 's':
1696     case 'l':
1697       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1698       SYMBOL_CLASS (sym) = LOC_LOCAL;
1699       SYMBOL_VALUE (sym) = valu;
1700       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1701       add_symbol_to_list (sym, &local_symbols);
1702       break;
1703
1704     case 'p':
1705       if (*p == 'F')
1706         /* pF is a two-letter code that means a function parameter in Fortran.
1707            The type-number specifies the type of the return value.
1708            Translate it into a pointer-to-function type.  */
1709         {
1710           p++;
1711           SYMBOL_TYPE (sym)
1712             = lookup_pointer_type
1713               (lookup_function_type (read_type (&p, objfile)));
1714         }
1715       else
1716         SYMBOL_TYPE (sym) = read_type (&p, objfile);
1717
1718       /* Normally this is a parameter, a LOC_ARG.  On the i960, it
1719          can also be a LOC_LOCAL_ARG depending on symbol type.  */
1720 #ifndef DBX_PARM_SYMBOL_CLASS
1721 #define DBX_PARM_SYMBOL_CLASS(type)     LOC_ARG
1722 #endif
1723
1724       SYMBOL_CLASS (sym) = DBX_PARM_SYMBOL_CLASS (type);
1725       SYMBOL_VALUE (sym) = valu;
1726       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1727       add_symbol_to_list (sym, &local_symbols);
1728
1729       if (TARGET_BYTE_ORDER != BIG_ENDIAN)
1730         {
1731           /* On little-endian machines, this crud is never necessary,
1732              and, if the extra bytes contain garbage, is harmful.  */
1733           break;
1734         }
1735
1736       /* If it's gcc-compiled, if it says `short', believe it.  */
1737       if (processing_gcc_compilation || BELIEVE_PCC_PROMOTION)
1738         break;
1739
1740 #if !BELIEVE_PCC_PROMOTION
1741       {
1742         /* This is the signed type which arguments get promoted to.  */
1743         static struct type *pcc_promotion_type;
1744         /* This is the unsigned type which arguments get promoted to.  */
1745         static struct type *pcc_unsigned_promotion_type;
1746
1747         /* Call it "int" because this is mainly C lossage.  */
1748         if (pcc_promotion_type == NULL)
1749           pcc_promotion_type =
1750             init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
1751                        0, "int", NULL);
1752
1753         if (pcc_unsigned_promotion_type == NULL)
1754           pcc_unsigned_promotion_type =
1755             init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
1756                        TYPE_FLAG_UNSIGNED, "unsigned int", NULL);
1757
1758 #if defined(BELIEVE_PCC_PROMOTION_TYPE)
1759         /* This macro is defined on machines (e.g. sparc) where
1760            we should believe the type of a PCC 'short' argument,
1761            but shouldn't believe the address (the address is
1762            the address of the corresponding int).
1763            
1764            My guess is that this correction, as opposed to changing
1765            the parameter to an 'int' (as done below, for PCC
1766            on most machines), is the right thing to do
1767            on all machines, but I don't want to risk breaking
1768            something that already works.  On most PCC machines,
1769            the sparc problem doesn't come up because the calling
1770            function has to zero the top bytes (not knowing whether
1771            the called function wants an int or a short), so there
1772            is little practical difference between an int and a short
1773            (except perhaps what happens when the GDB user types
1774            "print short_arg = 0x10000;"). 
1775            
1776            Hacked for SunOS 4.1 by gnu@cygnus.com.  In 4.1, the compiler
1777            actually produces the correct address (we don't need to fix it
1778            up).  I made this code adapt so that it will offset the symbol
1779            if it was pointing at an int-aligned location and not
1780            otherwise.  This way you can use the same gdb for 4.0.x and
1781            4.1 systems.
1782            
1783            If the parameter is shorter than an int, and is integral
1784            (e.g. char, short, or unsigned equivalent), and is claimed to
1785            be passed on an integer boundary, don't believe it!  Offset the
1786            parameter's address to the tail-end of that integer.  */
1787         
1788         if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type)
1789             && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT
1790             && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (pcc_promotion_type))
1791           {
1792             SYMBOL_VALUE (sym) += TYPE_LENGTH (pcc_promotion_type)
1793               - TYPE_LENGTH (SYMBOL_TYPE (sym));
1794           }
1795         break;
1796         
1797 #else /* no BELIEVE_PCC_PROMOTION_TYPE.  */
1798
1799         /* If PCC says a parameter is a short or a char,
1800            it is really an int.  */
1801         if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type)
1802             && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT)
1803           {
1804             SYMBOL_TYPE (sym) =
1805               TYPE_UNSIGNED (SYMBOL_TYPE (sym))
1806                 ? pcc_unsigned_promotion_type
1807                 : pcc_promotion_type;
1808           }
1809         break;
1810
1811 #endif /* no BELIEVE_PCC_PROMOTION_TYPE.  */
1812       }
1813 #endif /* !BELIEVE_PCC_PROMOTION.  */
1814
1815     case 'P':
1816       /* acc seems to use P to declare the prototypes of functions that
1817          are referenced by this file.  gdb is not prepared to deal
1818          with this extra information.  FIXME, it ought to.  */
1819       if (type == N_FUN)
1820         {
1821           SYMBOL_TYPE (sym) = read_type (&p, objfile);
1822           goto process_prototype_types;
1823         }
1824       /*FALLTHROUGH*/
1825
1826     case 'R':
1827       /* Parameter which is in a register.  */
1828       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1829       SYMBOL_CLASS (sym) = LOC_REGPARM;
1830       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
1831       if (SYMBOL_VALUE (sym) >= NUM_REGS)
1832         {
1833           complain (&reg_value_complaint, SYMBOL_VALUE (sym), NUM_REGS,
1834                     SYMBOL_SOURCE_NAME (sym));
1835           SYMBOL_VALUE (sym) = SP_REGNUM;  /* Known safe, though useless */
1836         }
1837       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1838       add_symbol_to_list (sym, &local_symbols);
1839       break;
1840
1841     case 'r':
1842       /* Register variable (either global or local).  */
1843       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1844       SYMBOL_CLASS (sym) = LOC_REGISTER;
1845       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
1846       if (SYMBOL_VALUE (sym) >= NUM_REGS)
1847         {
1848           complain (&reg_value_complaint, SYMBOL_VALUE (sym), NUM_REGS,
1849                     SYMBOL_SOURCE_NAME (sym));
1850           SYMBOL_VALUE (sym) = SP_REGNUM;  /* Known safe, though useless */
1851         }
1852       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1853       if (within_function)
1854         {
1855           /* Sun cc uses a pair of symbols, one 'p' and one 'r' with the same
1856              name to represent an argument passed in a register.
1857              GCC uses 'P' for the same case.  So if we find such a symbol pair
1858              we combine it into one 'P' symbol.  For Sun cc we need to do this
1859              regardless of REG_STRUCT_HAS_ADDR, because the compiler puts out
1860              the 'p' symbol even if it never saves the argument onto the stack.
1861
1862              On most machines, we want to preserve both symbols, so that
1863              we can still get information about what is going on with the
1864              stack (VAX for computing args_printed, using stack slots instead
1865              of saved registers in backtraces, etc.).
1866
1867              Note that this code illegally combines
1868                main(argc) struct foo argc; { register struct foo argc; }
1869              but this case is considered pathological and causes a warning
1870              from a decent compiler.  */
1871
1872           if (local_symbols
1873               && local_symbols->nsyms > 0
1874 #ifndef USE_REGISTER_NOT_ARG
1875               && REG_STRUCT_HAS_ADDR (processing_gcc_compilation,
1876                                       SYMBOL_TYPE (sym))
1877               && (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
1878                   || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION
1879                   || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_SET
1880                   || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_BITSTRING)
1881 #endif
1882               )
1883             {
1884               struct symbol *prev_sym;
1885               prev_sym = local_symbols->symbol[local_symbols->nsyms - 1];
1886               if ((SYMBOL_CLASS (prev_sym) == LOC_REF_ARG
1887                    || SYMBOL_CLASS (prev_sym) == LOC_ARG)
1888                   && STREQ (SYMBOL_NAME (prev_sym), SYMBOL_NAME(sym)))
1889                 {
1890                   SYMBOL_CLASS (prev_sym) = LOC_REGPARM;
1891                   /* Use the type from the LOC_REGISTER; that is the type
1892                      that is actually in that register.  */
1893                   SYMBOL_TYPE (prev_sym) = SYMBOL_TYPE (sym);
1894                   SYMBOL_VALUE (prev_sym) = SYMBOL_VALUE (sym);
1895                   sym = prev_sym;
1896                   break;
1897                 }
1898             }
1899           add_symbol_to_list (sym, &local_symbols);
1900         }
1901       else
1902         add_symbol_to_list (sym, &file_symbols);
1903       break;
1904
1905     case 'S':
1906       /* Static symbol at top level of file */
1907       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1908       SYMBOL_CLASS (sym) = LOC_STATIC;
1909       SYMBOL_VALUE_ADDRESS (sym) = valu;
1910 #ifdef STATIC_TRANSFORM_NAME
1911       if (IS_STATIC_TRANSFORM_NAME (SYMBOL_NAME (sym)))
1912       {
1913         struct minimal_symbol *msym;
1914         msym = lookup_minimal_symbol (SYMBOL_NAME (sym), NULL, objfile);
1915         if (msym != NULL)
1916           {
1917             SYMBOL_NAME (sym) = STATIC_TRANSFORM_NAME (SYMBOL_NAME (sym));
1918             SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym);
1919           }
1920       }
1921 #endif
1922       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1923       add_symbol_to_list (sym, &file_symbols);
1924       break;
1925
1926     case 't':
1927       SYMBOL_TYPE (sym) = read_type (&p, objfile);
1928
1929       /* For a nameless type, we don't want a create a symbol, thus we
1930          did not use `sym'. Return without further processing. */
1931       if (nameless) return NULL;
1932
1933       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1934       SYMBOL_VALUE (sym) = valu;
1935       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1936       /* C++ vagaries: we may have a type which is derived from
1937          a base type which did not have its name defined when the
1938          derived class was output.  We fill in the derived class's
1939          base part member's name here in that case.  */
1940       if (TYPE_NAME (SYMBOL_TYPE (sym)) != NULL)
1941         if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
1942              || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION)
1943             && TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)))
1944           {
1945             int j;
1946             for (j = TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)) - 1; j >= 0; j--)
1947               if (TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) == 0)
1948                 TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) =
1949                   type_name_no_tag (TYPE_BASECLASS (SYMBOL_TYPE (sym), j));
1950           }
1951
1952       if (TYPE_NAME (SYMBOL_TYPE (sym)) == NULL)
1953         {
1954           /* gcc-2.6 or later (when using -fvtable-thunks)
1955              emits a unique named type for a vtable entry.
1956              Some gdb code depends on that specific name. */
1957           extern const char vtbl_ptr_name[];
1958
1959           if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
1960                && strcmp (SYMBOL_NAME (sym), vtbl_ptr_name))
1961               || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC)
1962             {
1963               /* If we are giving a name to a type such as "pointer to
1964                  foo" or "function returning foo", we better not set
1965                  the TYPE_NAME.  If the program contains "typedef char
1966                  *caddr_t;", we don't want all variables of type char
1967                  * to print as caddr_t.  This is not just a
1968                  consequence of GDB's type management; PCC and GCC (at
1969                  least through version 2.4) both output variables of
1970                  either type char * or caddr_t with the type number
1971                  defined in the 't' symbol for caddr_t.  If a future
1972                  compiler cleans this up it GDB is not ready for it
1973                  yet, but if it becomes ready we somehow need to
1974                  disable this check (without breaking the PCC/GCC2.4
1975                  case).
1976
1977                  Sigh.
1978
1979                  Fortunately, this check seems not to be necessary
1980                  for anything except pointers or functions.  */
1981             }
1982           else
1983             TYPE_NAME (SYMBOL_TYPE (sym)) = SYMBOL_NAME (sym);
1984         }
1985
1986       add_symbol_to_list (sym, &file_symbols);
1987       break;
1988
1989     case 'T':
1990       /* Struct, union, or enum tag.  For GNU C++, this can be be followed
1991          by 't' which means we are typedef'ing it as well.  */
1992       synonym = *p == 't';
1993
1994       if (synonym)
1995         p++;
1996       /* The semantics of C++ state that "struct foo { ... }" also defines 
1997          a typedef for "foo".  Unfortunately, cfront never makes the typedef
1998          when translating C++ into C.  We make the typedef here so that
1999          "ptype foo" works as expected for cfront translated code.  */
2000       else if (current_subfile->language == language_cplus)
2001         synonym = 1;
2002
2003       SYMBOL_TYPE (sym) = read_type (&p, objfile);
2004
2005       /* For a nameless type, we don't want a create a symbol, thus we
2006          did not use `sym'. Return without further processing. */
2007       if (nameless) return NULL;
2008
2009       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2010       SYMBOL_VALUE (sym) = valu;
2011       SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
2012       if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
2013         TYPE_TAG_NAME (SYMBOL_TYPE (sym))
2014           = obconcat (&objfile -> type_obstack, "", "", SYMBOL_NAME (sym));
2015       add_symbol_to_list (sym, &file_symbols);
2016
2017       if (synonym)
2018         {
2019           /* Clone the sym and then modify it. */
2020           register struct symbol *typedef_sym = (struct symbol *)
2021             obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
2022           *typedef_sym = *sym;
2023           SYMBOL_CLASS (typedef_sym) = LOC_TYPEDEF;
2024           SYMBOL_VALUE (typedef_sym) = valu;
2025           SYMBOL_NAMESPACE (typedef_sym) = VAR_NAMESPACE;
2026           if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
2027             TYPE_NAME (SYMBOL_TYPE (sym))
2028               = obconcat (&objfile -> type_obstack, "", "", SYMBOL_NAME (sym));
2029           add_symbol_to_list (typedef_sym, &file_symbols);
2030         }
2031       break;
2032
2033     case 'V':
2034       /* Static symbol of local scope */
2035       SYMBOL_TYPE (sym) = read_type (&p, objfile);
2036       SYMBOL_CLASS (sym) = LOC_STATIC;
2037       SYMBOL_VALUE_ADDRESS (sym) = valu;
2038 #ifdef STATIC_TRANSFORM_NAME
2039       if (IS_STATIC_TRANSFORM_NAME (SYMBOL_NAME (sym)))
2040       {
2041         struct minimal_symbol *msym;
2042         msym = lookup_minimal_symbol (SYMBOL_NAME (sym), NULL, objfile);
2043         if (msym != NULL)
2044           {
2045             SYMBOL_NAME (sym) = STATIC_TRANSFORM_NAME (SYMBOL_NAME (sym));
2046             SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym);
2047           }
2048       }
2049 #endif
2050       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2051       if (os9k_stabs)
2052         add_symbol_to_list (sym, &global_symbols);
2053       else
2054         add_symbol_to_list (sym, &local_symbols);
2055       break;
2056
2057     case 'v':
2058       /* Reference parameter */
2059       SYMBOL_TYPE (sym) = read_type (&p, objfile);
2060       SYMBOL_CLASS (sym) = LOC_REF_ARG;
2061       SYMBOL_VALUE (sym) = valu;
2062       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2063       add_symbol_to_list (sym, &local_symbols);
2064       break;
2065
2066     case 'a':
2067       /* Reference parameter which is in a register.  */
2068       SYMBOL_TYPE (sym) = read_type (&p, objfile);
2069       SYMBOL_CLASS (sym) = LOC_REGPARM_ADDR;
2070       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
2071       if (SYMBOL_VALUE (sym) >= NUM_REGS)
2072         {
2073           complain (&reg_value_complaint, SYMBOL_VALUE (sym), NUM_REGS,
2074                     SYMBOL_SOURCE_NAME (sym));
2075           SYMBOL_VALUE (sym) = SP_REGNUM;  /* Known safe, though useless */
2076         }
2077       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2078       add_symbol_to_list (sym, &local_symbols);
2079       break;
2080
2081     case 'X':
2082       /* This is used by Sun FORTRAN for "function result value".
2083          Sun claims ("dbx and dbxtool interfaces", 2nd ed)
2084          that Pascal uses it too, but when I tried it Pascal used
2085          "x:3" (local symbol) instead.  */
2086       SYMBOL_TYPE (sym) = read_type (&p, objfile);
2087       SYMBOL_CLASS (sym) = LOC_LOCAL;
2088       SYMBOL_VALUE (sym) = valu;
2089       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2090       add_symbol_to_list (sym, &local_symbols);
2091       break;
2092
2093     /* New code added to support cfront stabs strings.
2094        Note: case 'P' already handled above */
2095     case 'Z':
2096       /* Cfront type continuation coming up!
2097          Find the original definition and add to it.
2098          We'll have to do this for the typedef too,
2099          since we cloned the symbol to define a type in read_type.
2100          Stabs info examples:
2101                  __1C :Ztl 
2102                  foo__1CFv :ZtF (first def foo__1CFv:F(0,3);(0,24))
2103                  C:ZsC;;__ct__1CFv func1__1CFv func2__1CFv ... ;;;
2104                  where C is the name of the class.
2105          Unfortunately, we can't lookup the original symbol yet 'cuz 
2106          we haven't finished reading all the symbols.
2107          Instead, we save it for processing later */
2108       process_later (sym, p, resolve_cfront_continuation);
2109       SYMBOL_TYPE (sym) = error_type (&p, objfile); /* FIXME! change later */ 
2110       SYMBOL_CLASS (sym) = LOC_CONST; 
2111       SYMBOL_VALUE (sym) = 0; 
2112       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2113       /* Don't add to list - we'll delete it later when 
2114          we add the continuation to the real sym */
2115       return sym;
2116       /* End of new code added to support cfront stabs strings */
2117
2118     default:
2119       SYMBOL_TYPE (sym) = error_type (&p, objfile);
2120       SYMBOL_CLASS (sym) = LOC_CONST;
2121       SYMBOL_VALUE (sym) = 0;
2122       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2123       add_symbol_to_list (sym, &file_symbols);
2124       break;
2125     }
2126
2127   /* When passing structures to a function, some systems sometimes pass
2128      the address in a register, not the structure itself. */
2129
2130   if (REG_STRUCT_HAS_ADDR (processing_gcc_compilation, SYMBOL_TYPE (sym))
2131       && (SYMBOL_CLASS (sym) == LOC_REGPARM || SYMBOL_CLASS (sym) == LOC_ARG))
2132     {
2133       struct type *symbol_type = check_typedef (SYMBOL_TYPE (sym));
2134
2135       if ((TYPE_CODE (symbol_type) == TYPE_CODE_STRUCT)
2136           || (TYPE_CODE (symbol_type) == TYPE_CODE_UNION)
2137           || (TYPE_CODE (symbol_type) == TYPE_CODE_BITSTRING)
2138           || (TYPE_CODE (symbol_type) == TYPE_CODE_SET))
2139         {
2140           /* If REG_STRUCT_HAS_ADDR yields non-zero we have to convert
2141              LOC_REGPARM to LOC_REGPARM_ADDR for structures and unions. */
2142           if (SYMBOL_CLASS (sym) == LOC_REGPARM)
2143             SYMBOL_CLASS (sym) = LOC_REGPARM_ADDR;
2144           /* Likewise for converting LOC_ARG to LOC_REF_ARG (for the 7th
2145              and subsequent arguments on the sparc, for example).  */
2146           else if (SYMBOL_CLASS (sym) == LOC_ARG)
2147             SYMBOL_CLASS (sym) = LOC_REF_ARG;
2148         }
2149     }
2150
2151   /* Is there more to parse?  For example LRS/alias information?  */
2152   while (*p && *p == ';')
2153     {
2154       p++;
2155       if (*p && *p == 'l')
2156         {
2157           /* GNU extensions for live range splitting may be appended to 
2158              the end of the stab string.  eg. "l(#1,#2);l(#3,#5)" */
2159
2160           /* Resolve the live range and add it to SYM's live range list.  */
2161           resolve_live_range (objfile, sym, p);
2162
2163           /* Find end of live range info. */
2164           p = strchr (p, ')');
2165           if (!*p || *p != ')')
2166             error ("Internal error: live range format not recognized.\n");
2167           p++;
2168        }
2169     }
2170   return sym;
2171 }
2172
2173 /* Add the live range found in P to the symbol SYM in objfile OBJFILE.  */
2174
2175 static void 
2176 resolve_live_range (objfile, sym, p)
2177   struct objfile * objfile;
2178   struct symbol *sym;
2179   char *p;
2180 {
2181   int refnum;
2182   CORE_ADDR start, end;
2183
2184   /* Sanity check the beginning of the stabs string.  */
2185   if (!*p || *p != 'l')
2186     error ("Internal error: live range string.\n");
2187   p++;
2188
2189   if (!*p || *p != '(')
2190     error ("Internal error: live range string.\n");
2191   p++;
2192         
2193   /* Get starting value of range and advance P past the reference id.
2194
2195      ?!? In theory, the process_reference should never fail, but we should
2196      catch that case just in case the compiler scrogged the stabs.  */
2197   refnum = process_reference (&p);
2198   start = ref_search_value (refnum);
2199   if (!start)
2200     error ("Internal error: live range symbol not found.\n");
2201
2202   if (!*p || *p != ',')
2203     error ("Internal error: live range string.\n");
2204   p++;
2205
2206   /* Get ending value of range and advance P past the reference id.
2207
2208      ?!? In theory, the process_reference should never fail, but we should
2209      catch that case just in case the compiler scrogged the stabs.  */
2210   refnum = process_reference (&p);
2211   end = ref_search_value (refnum);
2212   if (!end)
2213     error ("Internal error: live range symbol not found.\n");
2214
2215   if (!*p || *p != ')')
2216     error ("Internal error: live range string.\n");
2217
2218   /* Now that we know the bounds of the range, add it to the
2219      symbol.  */
2220   add_live_range (objfile, sym, start, end);
2221 }
2222
2223 /* Add a new live range defined by START and END to the symbol SYM
2224    in objfile OBJFILE.  */
2225
2226 static void
2227 add_live_range (objfile, sym, start, end)
2228   struct objfile *objfile;
2229   struct symbol *sym;
2230   CORE_ADDR start, end;
2231 {
2232   struct range_list *r, *rs;
2233
2234   if (start >= end)
2235     error ("Internal error: end of live range follows start.\n");
2236
2237   /* Alloc new live range structure. */
2238   r = (struct range_list *)
2239                 obstack_alloc (&objfile->type_obstack, 
2240                                 sizeof (struct range_list));
2241   r->start = start;
2242   r->end = end;
2243   r->next = 0;
2244
2245   /* Append this range to the symbol's range list. */
2246   if (!SYMBOL_RANGES (sym))
2247     {
2248       SYMBOL_RANGES (sym) = r;
2249     }
2250   else
2251     {
2252       /* Get the last range for the symbol. */
2253       for (rs = SYMBOL_RANGES (sym); rs->next; rs = rs->next)
2254         ;
2255       rs->next = r;
2256     }
2257 }
2258
2259 \f
2260 /* Skip rest of this symbol and return an error type.
2261
2262    General notes on error recovery:  error_type always skips to the
2263    end of the symbol (modulo cretinous dbx symbol name continuation).
2264    Thus code like this:
2265
2266    if (*(*pp)++ != ';')
2267      return error_type (pp, objfile);
2268
2269    is wrong because if *pp starts out pointing at '\0' (typically as the
2270    result of an earlier error), it will be incremented to point to the
2271    start of the next symbol, which might produce strange results, at least
2272    if you run off the end of the string table.  Instead use
2273
2274    if (**pp != ';')
2275      return error_type (pp, objfile);
2276    ++*pp;
2277
2278    or
2279
2280    if (**pp != ';')
2281      foo = error_type (pp, objfile);
2282    else
2283      ++*pp;
2284
2285    And in case it isn't obvious, the point of all this hair is so the compiler
2286    can define new types and new syntaxes, and old versions of the
2287    debugger will be able to read the new symbol tables.  */
2288
2289 static struct type *
2290 error_type (pp, objfile)
2291      char **pp;
2292      struct objfile *objfile;
2293 {
2294   complain (&error_type_complaint);
2295   while (1)
2296     {
2297       /* Skip to end of symbol.  */
2298       while (**pp != '\0')
2299         {
2300           (*pp)++;
2301         }
2302
2303       /* Check for and handle cretinous dbx symbol name continuation!  */
2304       if ((*pp)[-1] == '\\' || (*pp)[-1] == '?')
2305         {
2306           *pp = next_symbol_text (objfile);
2307         }
2308       else
2309         {
2310           break;
2311         }
2312     }
2313   return (builtin_type_error);
2314 }
2315
2316 \f
2317 /* Read type information or a type definition; return the type.  Even
2318    though this routine accepts either type information or a type
2319    definition, the distinction is relevant--some parts of stabsread.c
2320    assume that type information starts with a digit, '-', or '(' in
2321    deciding whether to call read_type.  */
2322
2323 struct type *
2324 read_type (pp, objfile)
2325      register char **pp;
2326      struct objfile *objfile;
2327 {
2328   register struct type *type = 0;
2329   struct type *type1;
2330   int typenums[2];
2331   char type_descriptor;
2332
2333   /* Size in bits of type if specified by a type attribute, or -1 if
2334      there is no size attribute.  */
2335   int type_size = -1;
2336
2337   /* Used to distinguish string and bitstring from char-array and set. */
2338   int is_string = 0;
2339
2340   /* Read type number if present.  The type number may be omitted.
2341      for instance in a two-dimensional array declared with type
2342      "ar1;1;10;ar1;1;10;4".  */
2343   if ((**pp >= '0' && **pp <= '9')
2344       || **pp == '('
2345       || **pp == '-')
2346     {
2347       if (read_type_number (pp, typenums) != 0)
2348         return error_type (pp, objfile);
2349       
2350       /* Type is not being defined here.  Either it already exists,
2351          or this is a forward reference to it.  dbx_alloc_type handles
2352          both cases.  */
2353       if (**pp != '=')
2354         return dbx_alloc_type (typenums, objfile);
2355
2356       /* Type is being defined here.  */
2357       /* Skip the '='.
2358          Also skip the type descriptor - we get it below with (*pp)[-1].  */
2359       (*pp)+=2;
2360     }
2361   else
2362     {
2363       /* 'typenums=' not present, type is anonymous.  Read and return
2364          the definition, but don't put it in the type vector.  */
2365       typenums[0] = typenums[1] = -1;
2366       (*pp)++;
2367     }
2368
2369  again:
2370   type_descriptor = (*pp)[-1];
2371   switch (type_descriptor)
2372     {
2373     case 'x':
2374       {
2375         enum type_code code;
2376
2377         /* Used to index through file_symbols.  */
2378         struct pending *ppt;
2379         int i;
2380         
2381         /* Name including "struct", etc.  */
2382         char *type_name;
2383         
2384         {
2385           char *from, *to, *p, *q1, *q2;
2386           
2387           /* Set the type code according to the following letter.  */
2388           switch ((*pp)[0])
2389             {
2390             case 's':
2391               code = TYPE_CODE_STRUCT;
2392               break;
2393             case 'u':
2394               code = TYPE_CODE_UNION;
2395               break;
2396             case 'e':
2397               code = TYPE_CODE_ENUM;
2398               break;
2399             default:
2400               {
2401                 /* Complain and keep going, so compilers can invent new
2402                    cross-reference types.  */
2403                 static struct complaint msg =
2404                   {"Unrecognized cross-reference type `%c'", 0, 0};
2405                 complain (&msg, (*pp)[0]);
2406                 code = TYPE_CODE_STRUCT;
2407                 break;
2408               }
2409             }
2410            
2411           q1 = strchr (*pp, '<');
2412           p = strchr (*pp, ':');
2413           if (p == NULL)
2414             return error_type (pp, objfile);
2415           if (q1 && p > q1 && p[1] == ':')
2416             {
2417               int nesting_level = 0;
2418               for (q2 = q1; *q2; q2++)
2419                 {
2420                   if (*q2 == '<')
2421                     nesting_level++;
2422                   else if (*q2 == '>')
2423                     nesting_level--;
2424                   else if (*q2 == ':' && nesting_level == 0)
2425                     break;
2426                 }
2427               p = q2;
2428               if (*p != ':')
2429                 return error_type (pp, objfile);
2430             }
2431           to = type_name = 
2432                 (char *)obstack_alloc (&objfile->type_obstack, p - *pp + 1);
2433         
2434           /* Copy the name.  */
2435           from = *pp + 1;
2436           while (from < p) 
2437             *to++ = *from++;
2438           *to = '\0';
2439           
2440           /* Set the pointer ahead of the name which we just read, and
2441              the colon.  */
2442           *pp = from + 1;
2443         }
2444
2445         /* Now check to see whether the type has already been
2446            declared.  This was written for arrays of cross-referenced
2447            types before we had TYPE_CODE_TARGET_STUBBED, so I'm pretty
2448            sure it is not necessary anymore.  But it might be a good
2449            idea, to save a little memory.  */
2450
2451         for (ppt = file_symbols; ppt; ppt = ppt->next)
2452           for (i = 0; i < ppt->nsyms; i++)
2453             {
2454               struct symbol *sym = ppt->symbol[i];
2455
2456               if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
2457                   && SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE
2458                   && (TYPE_CODE (SYMBOL_TYPE (sym)) == code)
2459                   && STREQ (SYMBOL_NAME (sym), type_name))
2460                 {
2461                   obstack_free (&objfile -> type_obstack, type_name);
2462                   type = SYMBOL_TYPE (sym);
2463                   return type;
2464                 }
2465             }
2466
2467         /* Didn't find the type to which this refers, so we must
2468            be dealing with a forward reference.  Allocate a type
2469            structure for it, and keep track of it so we can
2470            fill in the rest of the fields when we get the full
2471            type.  */
2472         type = dbx_alloc_type (typenums, objfile);
2473         TYPE_CODE (type) = code;
2474         TYPE_TAG_NAME (type) = type_name;
2475         INIT_CPLUS_SPECIFIC(type);
2476         TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
2477
2478         add_undefined_type (type);
2479         return type;
2480       }
2481
2482     case '-':                           /* RS/6000 built-in type */
2483     case '0':
2484     case '1':
2485     case '2':
2486     case '3':
2487     case '4':
2488     case '5':
2489     case '6':
2490     case '7':
2491     case '8':
2492     case '9':
2493     case '(':
2494       (*pp)--;
2495
2496       /* We deal with something like t(1,2)=(3,4)=... which
2497          the Lucid compiler and recent gcc versions (post 2.7.3) use. */
2498
2499       /* Allocate and enter the typedef type first.
2500          This handles recursive types. */
2501       type = dbx_alloc_type (typenums, objfile);
2502       TYPE_CODE (type) = TYPE_CODE_TYPEDEF;
2503       { struct type *xtype = read_type (pp, objfile);
2504         if (type == xtype)
2505           {
2506             /* It's being defined as itself.  That means it is "void".  */
2507             TYPE_CODE (type) = TYPE_CODE_VOID;
2508             TYPE_LENGTH (type) = 1;
2509           }
2510         else if (type_size >= 0 || is_string)
2511           {
2512             *type = *xtype;
2513             TYPE_NAME (type) = NULL;
2514             TYPE_TAG_NAME (type) = NULL;
2515           }
2516         else
2517           {
2518             TYPE_FLAGS (type) |= TYPE_FLAG_TARGET_STUB;
2519             TYPE_TARGET_TYPE (type) = xtype;
2520           }
2521       }
2522       break;
2523
2524     /* In the following types, we must be sure to overwrite any existing
2525        type that the typenums refer to, rather than allocating a new one
2526        and making the typenums point to the new one.  This is because there
2527        may already be pointers to the existing type (if it had been
2528        forward-referenced), and we must change it to a pointer, function,
2529        reference, or whatever, *in-place*.  */
2530
2531     case '*':
2532       type1 = read_type (pp, objfile);
2533       type = make_pointer_type (type1, dbx_lookup_type (typenums));
2534       break;
2535
2536     case '&':                           /* Reference to another type */
2537       type1 = read_type (pp, objfile);
2538       type = make_reference_type (type1, dbx_lookup_type (typenums));
2539       break;
2540
2541     case 'f':                           /* Function returning another type */
2542       if (os9k_stabs && **pp == '(')
2543         {
2544           /* Function prototype; parse it.
2545              We must conditionalize this on os9k_stabs because otherwise
2546              it could be confused with a Sun-style (1,3) typenumber
2547              (I think).  */
2548           struct type *t;
2549           ++*pp;
2550           while (**pp != ')')
2551             {
2552               t = read_type (pp, objfile);
2553               if (**pp == ',') ++*pp;
2554             }
2555         }
2556       type1 = read_type (pp, objfile);
2557       type = make_function_type (type1, dbx_lookup_type (typenums));
2558       break;
2559
2560     case 'k':                      /* Const qualifier on some type (Sun) */
2561     case 'c':                      /* Const qualifier on some type (OS9000) */
2562       /* Because 'c' means other things to AIX and 'k' is perfectly good,
2563          only accept 'c' in the os9k_stabs case.  */
2564       if (type_descriptor == 'c' && !os9k_stabs)
2565         return error_type (pp, objfile);
2566       type = read_type (pp, objfile);
2567       /* FIXME! For now, we ignore const and volatile qualifiers.  */
2568       break;
2569
2570     case 'B':                        /* Volatile qual on some type (Sun) */
2571     case 'i':                        /* Volatile qual on some type (OS9000) */
2572       /* Because 'i' means other things to AIX and 'B' is perfectly good,
2573          only accept 'i' in the os9k_stabs case.  */
2574       if (type_descriptor == 'i' && !os9k_stabs)
2575         return error_type (pp, objfile);
2576       type = read_type (pp, objfile);
2577       /* FIXME! For now, we ignore const and volatile qualifiers.  */
2578       break;
2579
2580     case '@':
2581       if (isdigit (**pp) || **pp ==  '(' || **pp == '-')
2582         { /* Member (class & variable) type */
2583           /* FIXME -- we should be doing smash_to_XXX types here.  */
2584
2585           struct type *domain = read_type (pp, objfile);
2586           struct type *memtype;
2587
2588           if (**pp != ',')
2589             /* Invalid member type data format.  */
2590             return error_type (pp, objfile);
2591           ++*pp;
2592
2593           memtype = read_type (pp, objfile);
2594           type = dbx_alloc_type (typenums, objfile);
2595           smash_to_member_type (type, domain, memtype);
2596         }
2597       else /* type attribute */
2598         {
2599           char *attr = *pp;
2600           /* Skip to the semicolon.  */
2601           while (**pp != ';' && **pp != '\0')
2602             ++(*pp);
2603           if (**pp == '\0')
2604             return error_type (pp, objfile);
2605           else
2606             ++*pp;  /* Skip the semicolon.  */
2607
2608           switch (*attr)
2609             {
2610             case 's':
2611               type_size = atoi (attr + 1);
2612               if (type_size <= 0)
2613                 type_size = -1;
2614               break;
2615
2616             case 'S':
2617               is_string = 1;
2618               break;
2619
2620             default:
2621               /* Ignore unrecognized type attributes, so future compilers
2622                  can invent new ones.  */
2623               break;
2624             }
2625           ++*pp;
2626           goto again;
2627         }
2628       break;
2629
2630     case '#':                           /* Method (class & fn) type */
2631       if ((*pp)[0] == '#')
2632         {
2633           /* We'll get the parameter types from the name.  */
2634           struct type *return_type;
2635
2636           (*pp)++;
2637           return_type = read_type (pp, objfile);
2638           if (*(*pp)++ != ';')
2639             complain (&invalid_member_complaint, symnum);
2640           type = allocate_stub_method (return_type);
2641           if (typenums[0] != -1)
2642             *dbx_lookup_type (typenums) = type;
2643         }
2644       else
2645         {
2646           struct type *domain = read_type (pp, objfile);
2647           struct type *return_type;
2648           struct type **args;
2649
2650           if (**pp != ',')
2651             /* Invalid member type data format.  */
2652             return error_type (pp, objfile);
2653           else
2654             ++(*pp);
2655
2656           return_type = read_type (pp, objfile);
2657           args = read_args (pp, ';', objfile);
2658           type = dbx_alloc_type (typenums, objfile);
2659           smash_to_method_type (type, domain, return_type, args);
2660         }
2661       break;
2662
2663     case 'r':                           /* Range type */
2664       type = read_range_type (pp, typenums, objfile);
2665       if (typenums[0] != -1)
2666         *dbx_lookup_type (typenums) = type;
2667       break;
2668
2669     case 'b':
2670       if (os9k_stabs)
2671         /* Const and volatile qualified type.  */
2672         type = read_type (pp, objfile);
2673       else
2674         {
2675           /* Sun ACC builtin int type */
2676           type = read_sun_builtin_type (pp, typenums, objfile);
2677           if (typenums[0] != -1)
2678             *dbx_lookup_type (typenums) = type;
2679         }
2680       break;
2681
2682     case 'R':                           /* Sun ACC builtin float type */
2683       type = read_sun_floating_type (pp, typenums, objfile);
2684       if (typenums[0] != -1)
2685         *dbx_lookup_type (typenums) = type;
2686       break;
2687     
2688     case 'e':                           /* Enumeration type */
2689       type = dbx_alloc_type (typenums, objfile);
2690       type = read_enum_type (pp, type, objfile);
2691       if (typenums[0] != -1)
2692         *dbx_lookup_type (typenums) = type;
2693       break;
2694
2695     case 's':                           /* Struct type */
2696     case 'u':                           /* Union type */
2697       type = dbx_alloc_type (typenums, objfile);
2698       switch (type_descriptor)
2699         {
2700           case 's':
2701             TYPE_CODE (type) = TYPE_CODE_STRUCT;
2702             break;
2703           case 'u':
2704             TYPE_CODE (type) = TYPE_CODE_UNION;
2705             break;
2706         }
2707       type = read_struct_type (pp, type, objfile);
2708       break;
2709
2710     case 'a':                           /* Array type */
2711       if (**pp != 'r')
2712         return error_type (pp, objfile);
2713       ++*pp;
2714       
2715       type = dbx_alloc_type (typenums, objfile);
2716       type = read_array_type (pp, type, objfile);
2717       if (is_string)
2718         TYPE_CODE (type) = TYPE_CODE_STRING;
2719       break;
2720
2721     case 'S':
2722       type1 = read_type (pp, objfile);
2723       type = create_set_type ((struct type*) NULL, type1);
2724       if (is_string)
2725         TYPE_CODE (type) = TYPE_CODE_BITSTRING;
2726       if (typenums[0] != -1)
2727         *dbx_lookup_type (typenums) = type;
2728       break;
2729
2730     default:
2731       --*pp;                    /* Go back to the symbol in error */
2732                                 /* Particularly important if it was \0! */
2733       return error_type (pp, objfile);
2734     }
2735
2736   if (type == 0)
2737     {
2738       warning ("GDB internal error, type is NULL in stabsread.c\n");
2739       return error_type (pp, objfile);
2740     }
2741
2742   /* Size specified in a type attribute overrides any other size.  */
2743   if (type_size != -1)
2744     TYPE_LENGTH (type) = (type_size + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT;
2745
2746   return type;
2747 }
2748 \f
2749 /* RS/6000 xlc/dbx combination uses a set of builtin types, starting from -1.
2750    Return the proper type node for a given builtin type number. */
2751
2752 static struct type *
2753 rs6000_builtin_type (typenum)
2754      int typenum;
2755 {
2756   /* We recognize types numbered from -NUMBER_RECOGNIZED to -1.  */
2757 #define NUMBER_RECOGNIZED 34
2758   /* This includes an empty slot for type number -0.  */
2759   static struct type *negative_types[NUMBER_RECOGNIZED + 1];
2760   struct type *rettype = NULL;
2761
2762   if (typenum >= 0 || typenum < -NUMBER_RECOGNIZED)
2763     {
2764       complain (&rs6000_builtin_complaint, typenum);
2765       return builtin_type_error;
2766     }
2767   if (negative_types[-typenum] != NULL)
2768     return negative_types[-typenum];
2769
2770 #if TARGET_CHAR_BIT != 8
2771   #error This code wrong for TARGET_CHAR_BIT not 8
2772   /* These definitions all assume that TARGET_CHAR_BIT is 8.  I think
2773      that if that ever becomes not true, the correct fix will be to
2774      make the size in the struct type to be in bits, not in units of
2775      TARGET_CHAR_BIT.  */
2776 #endif
2777
2778   switch (-typenum)
2779     {
2780     case 1:
2781       /* The size of this and all the other types are fixed, defined
2782          by the debugging format.  If there is a type called "int" which
2783          is other than 32 bits, then it should use a new negative type
2784          number (or avoid negative type numbers for that case).
2785          See stabs.texinfo.  */
2786       rettype = init_type (TYPE_CODE_INT, 4, 0, "int", NULL);
2787       break;
2788     case 2:
2789       rettype = init_type (TYPE_CODE_INT, 1, 0, "char", NULL);
2790       break;
2791     case 3:
2792       rettype = init_type (TYPE_CODE_INT, 2, 0, "short", NULL);
2793       break;
2794     case 4:
2795       rettype = init_type (TYPE_CODE_INT, 4, 0, "long", NULL);
2796       break;
2797     case 5:
2798       rettype = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED,
2799                            "unsigned char", NULL);
2800       break;
2801     case 6:
2802       rettype = init_type (TYPE_CODE_INT, 1, 0, "signed char", NULL);
2803       break;
2804     case 7:
2805       rettype = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED,
2806                            "unsigned short", NULL);
2807       break;
2808     case 8:
2809       rettype = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
2810                            "unsigned int", NULL);
2811       break;
2812     case 9:
2813       rettype = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
2814                            "unsigned", NULL);
2815     case 10:
2816       rettype = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
2817                            "unsigned long", NULL);
2818       break;
2819     case 11:
2820       rettype = init_type (TYPE_CODE_VOID, 1, 0, "void", NULL);
2821       break;
2822     case 12:
2823       /* IEEE single precision (32 bit).  */
2824       rettype = init_type (TYPE_CODE_FLT, 4, 0, "float", NULL);
2825       break;
2826     case 13:
2827       /* IEEE double precision (64 bit).  */
2828       rettype = init_type (TYPE_CODE_FLT, 8, 0, "double", NULL);
2829       break;
2830     case 14:
2831       /* This is an IEEE double on the RS/6000, and different machines with
2832          different sizes for "long double" should use different negative
2833          type numbers.  See stabs.texinfo.  */
2834       rettype = init_type (TYPE_CODE_FLT, 8, 0, "long double", NULL);
2835       break;
2836     case 15:
2837       rettype = init_type (TYPE_CODE_INT, 4, 0, "integer", NULL);
2838       break;
2839     case 16:
2840       rettype = init_type (TYPE_CODE_BOOL, 4, TYPE_FLAG_UNSIGNED,
2841                            "boolean", NULL);
2842       break;
2843     case 17:
2844       rettype = init_type (TYPE_CODE_FLT, 4, 0, "short real", NULL);
2845       break;
2846     case 18:
2847       rettype = init_type (TYPE_CODE_FLT, 8, 0, "real", NULL);
2848       break;
2849     case 19:
2850       rettype = init_type (TYPE_CODE_ERROR, 0, 0, "stringptr", NULL);
2851       break;
2852     case 20:
2853       rettype = init_type (TYPE_CODE_CHAR, 1, TYPE_FLAG_UNSIGNED,
2854                            "character", NULL);
2855       break;
2856     case 21:
2857       rettype = init_type (TYPE_CODE_BOOL, 1, TYPE_FLAG_UNSIGNED,
2858                            "logical*1", NULL);
2859       break;
2860     case 22:
2861       rettype = init_type (TYPE_CODE_BOOL, 2, TYPE_FLAG_UNSIGNED,
2862                            "logical*2", NULL);
2863       break;
2864     case 23:
2865       rettype = init_type (TYPE_CODE_BOOL, 4, TYPE_FLAG_UNSIGNED,
2866                            "logical*4", NULL);
2867       break;
2868     case 24:
2869       rettype = init_type (TYPE_CODE_BOOL, 4, TYPE_FLAG_UNSIGNED,
2870                            "logical", NULL);
2871       break;
2872     case 25:
2873       /* Complex type consisting of two IEEE single precision values.  */
2874       rettype = init_type (TYPE_CODE_ERROR, 8, 0, "complex", NULL);
2875       break;
2876     case 26:
2877       /* Complex type consisting of two IEEE double precision values.  */
2878       rettype = init_type (TYPE_CODE_ERROR, 16, 0, "double complex", NULL);
2879       break;
2880     case 27:
2881       rettype = init_type (TYPE_CODE_INT, 1, 0, "integer*1", NULL);
2882       break;
2883     case 28:
2884       rettype = init_type (TYPE_CODE_INT, 2, 0, "integer*2", NULL);
2885       break;
2886     case 29:
2887       rettype = init_type (TYPE_CODE_INT, 4, 0, "integer*4", NULL);
2888       break;
2889     case 30:
2890       rettype = init_type (TYPE_CODE_CHAR, 2, 0, "wchar", NULL);
2891       break;
2892     case 31:
2893       rettype = init_type (TYPE_CODE_INT, 8, 0, "long long", NULL);
2894       break;
2895     case 32:
2896       rettype = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
2897                            "unsigned long long", NULL);
2898       break;
2899     case 33:
2900       rettype = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
2901                            "logical*8", NULL);
2902       break;
2903     case 34:
2904       rettype = init_type (TYPE_CODE_INT, 8, 0, "integer*8", NULL);
2905       break;
2906     }
2907   negative_types[-typenum] = rettype;
2908   return rettype;
2909 }
2910 \f
2911 /* This page contains subroutines of read_type.  */
2912
2913 /* Read member function stabs info for C++ classes.  The form of each member
2914    function data is:
2915
2916         NAME :: TYPENUM[=type definition] ARGS : PHYSNAME ;
2917
2918    An example with two member functions is:
2919
2920         afunc1::20=##15;:i;2A.;afunc2::20:i;2A.;
2921
2922    For the case of overloaded operators, the format is op$::*.funcs, where
2923    $ is the CPLUS_MARKER (usually '$'), `*' holds the place for an operator
2924    name (such as `+=') and `.' marks the end of the operator name.
2925
2926    Returns 1 for success, 0 for failure.  */
2927
2928 static int
2929 read_member_functions (fip, pp, type, objfile)
2930      struct field_info *fip;
2931      char **pp;
2932      struct type *type;
2933      struct objfile *objfile;
2934 {
2935   int nfn_fields = 0;
2936   int length = 0;
2937   /* Total number of member functions defined in this class.  If the class
2938      defines two `f' functions, and one `g' function, then this will have
2939      the value 3.  */
2940   int total_length = 0;
2941   int i;
2942   struct next_fnfield
2943     {
2944       struct next_fnfield *next;
2945       struct fn_field fn_field;
2946     } *sublist;
2947   struct type *look_ahead_type;
2948   struct next_fnfieldlist *new_fnlist;
2949   struct next_fnfield *new_sublist;
2950   char *main_fn_name;
2951   register char *p;
2952       
2953   /* Process each list until we find something that is not a member function
2954      or find the end of the functions. */
2955
2956   while (**pp != ';')
2957     {
2958       /* We should be positioned at the start of the function name.
2959          Scan forward to find the first ':' and if it is not the
2960          first of a "::" delimiter, then this is not a member function. */
2961       p = *pp;
2962       while (*p != ':')
2963         {
2964           p++;
2965         }
2966       if (p[1] != ':')
2967         {
2968           break;
2969         }
2970
2971       sublist = NULL;
2972       look_ahead_type = NULL;
2973       length = 0;
2974       
2975       new_fnlist = (struct next_fnfieldlist *)
2976         xmalloc (sizeof (struct next_fnfieldlist));
2977       make_cleanup (free, new_fnlist);
2978       memset (new_fnlist, 0, sizeof (struct next_fnfieldlist));
2979       
2980       if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && is_cplus_marker ((*pp)[2]))
2981         {
2982           /* This is a completely wierd case.  In order to stuff in the
2983              names that might contain colons (the usual name delimiter),
2984              Mike Tiemann defined a different name format which is
2985              signalled if the identifier is "op$".  In that case, the
2986              format is "op$::XXXX." where XXXX is the name.  This is
2987              used for names like "+" or "=".  YUUUUUUUK!  FIXME!  */
2988           /* This lets the user type "break operator+".
2989              We could just put in "+" as the name, but that wouldn't
2990              work for "*".  */
2991           static char opname[32] = {'o', 'p', CPLUS_MARKER};
2992           char *o = opname + 3;
2993           
2994           /* Skip past '::'.  */
2995           *pp = p + 2;
2996
2997           STABS_CONTINUE (pp, objfile);
2998           p = *pp;
2999           while (*p != '.')
3000             {
3001               *o++ = *p++;
3002             }
3003           main_fn_name = savestring (opname, o - opname);
3004           /* Skip past '.'  */
3005           *pp = p + 1;
3006         }
3007       else
3008         {
3009           main_fn_name = savestring (*pp, p - *pp);
3010           /* Skip past '::'.  */
3011           *pp = p + 2;
3012         }
3013       new_fnlist -> fn_fieldlist.name = main_fn_name;
3014       
3015       do
3016         {
3017           new_sublist =
3018             (struct next_fnfield *) xmalloc (sizeof (struct next_fnfield));
3019           make_cleanup (free, new_sublist);
3020           memset (new_sublist, 0, sizeof (struct next_fnfield));
3021           
3022           /* Check for and handle cretinous dbx symbol name continuation!  */
3023           if (look_ahead_type == NULL)
3024             {
3025               /* Normal case. */
3026               STABS_CONTINUE (pp, objfile);
3027               
3028               new_sublist -> fn_field.type = read_type (pp, objfile);
3029               if (**pp != ':')
3030                 {
3031                   /* Invalid symtab info for member function.  */
3032                   return 0;
3033                 }
3034             }
3035           else
3036             {
3037               /* g++ version 1 kludge */
3038               new_sublist -> fn_field.type = look_ahead_type;
3039               look_ahead_type = NULL;
3040             }
3041           
3042           (*pp)++;
3043           p = *pp;
3044           while (*p != ';')
3045             {
3046               p++;
3047             }
3048           
3049           /* If this is just a stub, then we don't have the real name here. */
3050
3051           if (TYPE_FLAGS (new_sublist -> fn_field.type) & TYPE_FLAG_STUB)
3052             {
3053               if (!TYPE_DOMAIN_TYPE (new_sublist -> fn_field.type))
3054                 TYPE_DOMAIN_TYPE (new_sublist -> fn_field.type) = type;
3055               new_sublist -> fn_field.is_stub = 1;
3056             }
3057           new_sublist -> fn_field.physname = savestring (*pp, p - *pp);
3058           *pp = p + 1;
3059           
3060           /* Set this member function's visibility fields.  */
3061           switch (*(*pp)++)
3062             {
3063               case VISIBILITY_PRIVATE:
3064                 new_sublist -> fn_field.is_private = 1;
3065                 break;
3066               case VISIBILITY_PROTECTED:
3067                 new_sublist -> fn_field.is_protected = 1;
3068                 break;
3069             }
3070           
3071           STABS_CONTINUE (pp, objfile);
3072           switch (**pp)
3073             {
3074               case 'A': /* Normal functions. */
3075                 new_sublist -> fn_field.is_const = 0;
3076                 new_sublist -> fn_field.is_volatile = 0;
3077                 (*pp)++;
3078                 break;
3079               case 'B': /* `const' member functions. */
3080                 new_sublist -> fn_field.is_const = 1;
3081                 new_sublist -> fn_field.is_volatile = 0;
3082                 (*pp)++;
3083                 break;
3084               case 'C': /* `volatile' member function. */
3085                 new_sublist -> fn_field.is_const = 0;
3086                 new_sublist -> fn_field.is_volatile = 1;
3087                 (*pp)++;
3088                 break;
3089               case 'D': /* `const volatile' member function. */
3090                 new_sublist -> fn_field.is_const = 1;
3091                 new_sublist -> fn_field.is_volatile = 1;
3092                 (*pp)++;
3093                 break;
3094               case '*': /* File compiled with g++ version 1 -- no info */
3095               case '?':
3096               case '.':
3097                 break;
3098               default:
3099                 complain (&const_vol_complaint, **pp);
3100                 break;
3101             }
3102           
3103           switch (*(*pp)++)
3104             {
3105               case '*':
3106               {
3107                 int nbits;
3108                 /* virtual member function, followed by index.
3109                    The sign bit is set to distinguish pointers-to-methods
3110                    from virtual function indicies.  Since the array is
3111                    in words, the quantity must be shifted left by 1
3112                    on 16 bit machine, and by 2 on 32 bit machine, forcing
3113                    the sign bit out, and usable as a valid index into
3114                    the array.  Remove the sign bit here.  */
3115                 new_sublist -> fn_field.voffset =
3116                   (0x7fffffff & read_huge_number (pp, ';', &nbits)) + 2;
3117                 if (nbits != 0)
3118                   return 0;
3119               
3120                 STABS_CONTINUE (pp, objfile);
3121                 if (**pp == ';' || **pp == '\0')
3122                   {
3123                     /* Must be g++ version 1.  */
3124                     new_sublist -> fn_field.fcontext = 0;
3125                   }
3126                 else
3127                   {
3128                     /* Figure out from whence this virtual function came.
3129                        It may belong to virtual function table of
3130                        one of its baseclasses.  */
3131                     look_ahead_type = read_type (pp, objfile);
3132                     if (**pp == ':')
3133                       {
3134                         /* g++ version 1 overloaded methods. */
3135                       }
3136                     else
3137                       {
3138                         new_sublist -> fn_field.fcontext = look_ahead_type;
3139                         if (**pp != ';')
3140                           {
3141                             return 0;
3142                           }
3143                         else
3144                           {
3145                             ++*pp;
3146                           }
3147                         look_ahead_type = NULL;
3148                       }
3149                   }
3150                 break;
3151               }
3152               case '?':
3153                 /* static member function.  */
3154                 new_sublist -> fn_field.voffset = VOFFSET_STATIC;
3155                 if (strncmp (new_sublist -> fn_field.physname,
3156                              main_fn_name, strlen (main_fn_name)))
3157                   {
3158                     new_sublist -> fn_field.is_stub = 1;
3159                   }
3160                 break;
3161               
3162               default:
3163                 /* error */
3164                 complain (&member_fn_complaint, (*pp)[-1]);
3165                 /* Fall through into normal member function.  */
3166               
3167               case '.':
3168                 /* normal member function.  */
3169                 new_sublist -> fn_field.voffset = 0;
3170                 new_sublist -> fn_field.fcontext = 0;
3171                 break;
3172             }
3173           
3174           new_sublist -> next = sublist;
3175           sublist = new_sublist;
3176           length++;
3177           STABS_CONTINUE (pp, objfile);
3178         }
3179       while (**pp != ';' && **pp != '\0');
3180       
3181       (*pp)++;
3182       
3183       new_fnlist -> fn_fieldlist.fn_fields = (struct fn_field *)
3184         obstack_alloc (&objfile -> type_obstack, 
3185                        sizeof (struct fn_field) * length);
3186       memset (new_fnlist -> fn_fieldlist.fn_fields, 0,
3187               sizeof (struct fn_field) * length);
3188       for (i = length; (i--, sublist); sublist = sublist -> next)
3189         {
3190           new_fnlist -> fn_fieldlist.fn_fields[i] = sublist -> fn_field;
3191         }
3192       
3193       new_fnlist -> fn_fieldlist.length = length;
3194       new_fnlist -> next = fip -> fnlist;
3195       fip -> fnlist = new_fnlist;
3196       nfn_fields++;
3197       total_length += length;
3198       STABS_CONTINUE (pp, objfile);
3199     }
3200
3201   if (nfn_fields)
3202     {
3203       ALLOCATE_CPLUS_STRUCT_TYPE (type);
3204       TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
3205         TYPE_ALLOC (type, sizeof (struct fn_fieldlist) * nfn_fields);
3206       memset (TYPE_FN_FIELDLISTS (type), 0,
3207               sizeof (struct fn_fieldlist) * nfn_fields);
3208       TYPE_NFN_FIELDS (type) = nfn_fields;
3209       TYPE_NFN_FIELDS_TOTAL (type) = total_length;
3210     }
3211
3212   return 1;
3213 }
3214
3215 /* Special GNU C++ name.
3216
3217    Returns 1 for success, 0 for failure.  "failure" means that we can't
3218    keep parsing and it's time for error_type().  */
3219
3220 static int
3221 read_cpp_abbrev (fip, pp, type, objfile)
3222      struct field_info *fip;
3223      char **pp;
3224      struct type *type;
3225      struct objfile *objfile;
3226 {
3227   register char *p;
3228   char *name;
3229   char cpp_abbrev;
3230   struct type *context;
3231
3232   p = *pp;
3233   if (*++p == 'v')
3234     {
3235       name = NULL;
3236       cpp_abbrev = *++p;
3237
3238       *pp = p + 1;
3239
3240       /* At this point, *pp points to something like "22:23=*22...",
3241          where the type number before the ':' is the "context" and
3242          everything after is a regular type definition.  Lookup the
3243          type, find it's name, and construct the field name. */
3244
3245       context = read_type (pp, objfile);
3246
3247       switch (cpp_abbrev)
3248         {
3249           case 'f':             /* $vf -- a virtual function table pointer */
3250             fip->list->field.name =
3251               obconcat (&objfile->type_obstack, vptr_name, "", "");
3252             break;
3253
3254           case 'b':             /* $vb -- a virtual bsomethingorother */
3255             name = type_name_no_tag (context);
3256             if (name == NULL)
3257               {
3258                 complain (&invalid_cpp_type_complaint, symnum);
3259                 name = "FOO";
3260               }
3261             fip->list->field.name =
3262               obconcat (&objfile->type_obstack, vb_name, name, "");
3263             break;
3264
3265           default:
3266             complain (&invalid_cpp_abbrev_complaint, *pp);
3267             fip->list->field.name =
3268               obconcat (&objfile->type_obstack,
3269                         "INVALID_CPLUSPLUS_ABBREV", "", "");
3270             break;
3271         }
3272
3273       /* At this point, *pp points to the ':'.  Skip it and read the
3274          field type. */
3275
3276       p = ++(*pp);
3277       if (p[-1] != ':')
3278         {
3279           complain (&invalid_cpp_abbrev_complaint, *pp);
3280           return 0;
3281         }
3282       fip->list->field.type = read_type (pp, objfile);
3283       if (**pp == ',')
3284         (*pp)++;                        /* Skip the comma.  */
3285       else
3286         return 0;
3287
3288       {
3289         int nbits;
3290         FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ';', &nbits);
3291         if (nbits != 0)
3292           return 0;
3293       }
3294       /* This field is unpacked.  */
3295       FIELD_BITSIZE (fip->list->field) = 0;
3296       fip->list->visibility = VISIBILITY_PRIVATE;
3297     }
3298   else
3299     {
3300       complain (&invalid_cpp_abbrev_complaint, *pp);
3301       /* We have no idea what syntax an unrecognized abbrev would have, so
3302          better return 0.  If we returned 1, we would need to at least advance
3303          *pp to avoid an infinite loop.  */
3304       return 0;
3305     }
3306   return 1;
3307 }
3308
3309 static void
3310 read_one_struct_field (fip, pp, p, type, objfile)
3311      struct field_info *fip;
3312      char **pp;
3313      char *p;
3314      struct type *type;
3315      struct objfile *objfile;
3316 {
3317   /* The following is code to work around cfront generated stabs.
3318      The stabs contains full mangled name for each field.
3319      We try to demangle the name and extract the field name out of it.
3320   */
3321   if (ARM_DEMANGLING && current_subfile->language == language_cplus)
3322     {
3323       char save_p;
3324       char *dem, *dem_p;
3325       save_p = *p;
3326       *p = '\0';
3327       dem = cplus_demangle (*pp, DMGL_ANSI | DMGL_PARAMS);
3328       if (dem != NULL)
3329         {
3330           dem_p = strrchr (dem, ':');
3331           if (dem_p != 0 && *(dem_p-1)==':')
3332             dem_p++;
3333           FIELD_NAME (fip->list->field) =
3334             obsavestring (dem_p, strlen (dem_p), &objfile -> type_obstack);
3335         }
3336       else
3337         {
3338           FIELD_NAME (fip->list->field) =
3339             obsavestring (*pp, p - *pp, &objfile -> type_obstack);
3340         }
3341       *p = save_p;
3342     }
3343   /* end of code for cfront work around */
3344
3345   else
3346     fip -> list -> field.name =
3347     obsavestring (*pp, p - *pp, &objfile -> type_obstack);
3348   *pp = p + 1;
3349
3350   /* This means we have a visibility for a field coming. */
3351   if (**pp == '/')
3352     {
3353       (*pp)++;
3354       fip -> list -> visibility = *(*pp)++;
3355     }
3356   else
3357     {
3358       /* normal dbx-style format, no explicit visibility */
3359       fip -> list -> visibility = VISIBILITY_PUBLIC;
3360     }
3361
3362   fip -> list -> field.type = read_type (pp, objfile);
3363   if (**pp == ':')
3364     {
3365       p = ++(*pp);
3366 #if 0
3367       /* Possible future hook for nested types. */
3368       if (**pp == '!')
3369         {
3370           fip -> list -> field.bitpos = (long)-2; /* nested type */
3371           p = ++(*pp);
3372         }
3373       else ...;
3374 #endif
3375       while (*p != ';') 
3376         {
3377           p++;
3378         }
3379       /* Static class member.  */
3380       SET_FIELD_PHYSNAME (fip->list->field, savestring (*pp, p - *pp));
3381       *pp = p + 1;
3382       return;
3383     }
3384   else if (**pp != ',')
3385     {
3386       /* Bad structure-type format.  */
3387       complain (&stabs_general_complaint, "bad structure-type format");
3388       return;
3389     }
3390
3391   (*pp)++;                      /* Skip the comma.  */
3392
3393   {
3394     int nbits;
3395     FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ',', &nbits);
3396     if (nbits != 0)
3397       {
3398         complain (&stabs_general_complaint, "bad structure-type format");
3399         return;
3400       }
3401     FIELD_BITSIZE (fip->list->field) = read_huge_number (pp, ';', &nbits);
3402     if (nbits != 0)
3403       {
3404         complain (&stabs_general_complaint, "bad structure-type format");
3405         return;
3406       }
3407   }
3408
3409   if (FIELD_BITPOS (fip->list->field) == 0
3410       && FIELD_BITSIZE (fip->list->field) == 0)
3411     {
3412       /* This can happen in two cases: (1) at least for gcc 2.4.5 or so,
3413          it is a field which has been optimized out.  The correct stab for
3414          this case is to use VISIBILITY_IGNORE, but that is a recent
3415          invention.  (2) It is a 0-size array.  For example
3416          union { int num; char str[0]; } foo.  Printing "<no value>" for
3417          str in "p foo" is OK, since foo.str (and thus foo.str[3])
3418          will continue to work, and a 0-size array as a whole doesn't
3419          have any contents to print.
3420
3421          I suspect this probably could also happen with gcc -gstabs (not
3422          -gstabs+) for static fields, and perhaps other C++ extensions.
3423          Hopefully few people use -gstabs with gdb, since it is intended
3424          for dbx compatibility.  */
3425
3426       /* Ignore this field.  */
3427       fip -> list-> visibility = VISIBILITY_IGNORE;
3428     }
3429   else
3430     {
3431       /* Detect an unpacked field and mark it as such.
3432          dbx gives a bit size for all fields.
3433          Note that forward refs cannot be packed,
3434          and treat enums as if they had the width of ints.  */
3435
3436       if (TYPE_CODE (FIELD_TYPE (fip->list->field)) != TYPE_CODE_INT
3437           && TYPE_CODE (FIELD_TYPE (fip->list->field)) != TYPE_CODE_RANGE
3438           && TYPE_CODE (FIELD_TYPE (fip->list->field)) != TYPE_CODE_BOOL
3439           && TYPE_CODE (FIELD_TYPE (fip->list->field)) != TYPE_CODE_ENUM)
3440         {
3441           FIELD_BITSIZE (fip->list->field) = 0;
3442         }
3443       if ((FIELD_BITSIZE (fip->list->field) 
3444            == TARGET_CHAR_BIT * TYPE_LENGTH (FIELD_TYPE (fip->list->field))
3445            || (TYPE_CODE (FIELD_TYPE (fip->list->field)) == TYPE_CODE_ENUM
3446                && FIELD_BITSIZE (fip->list->field) == TARGET_INT_BIT )
3447            )
3448           &&
3449           FIELD_BITPOS (fip->list->field) % 8 == 0)
3450         {
3451           FIELD_BITSIZE (fip->list->field) = 0;
3452         }
3453     }
3454 }
3455
3456
3457 /* Read struct or class data fields.  They have the form:
3458
3459         NAME : [VISIBILITY] TYPENUM , BITPOS , BITSIZE ;
3460
3461    At the end, we see a semicolon instead of a field.
3462
3463    In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for
3464    a static field.
3465
3466    The optional VISIBILITY is one of:
3467
3468         '/0'    (VISIBILITY_PRIVATE)
3469         '/1'    (VISIBILITY_PROTECTED)
3470         '/2'    (VISIBILITY_PUBLIC)
3471         '/9'    (VISIBILITY_IGNORE)
3472
3473    or nothing, for C style fields with public visibility.
3474
3475    Returns 1 for success, 0 for failure.  */
3476
3477 static int
3478 read_struct_fields (fip, pp, type, objfile)
3479      struct field_info *fip;
3480      char **pp;
3481      struct type *type;
3482      struct objfile *objfile;
3483 {
3484   register char *p;
3485   struct nextfield *new;
3486
3487   /* We better set p right now, in case there are no fields at all...    */
3488
3489   p = *pp;
3490
3491   /* Read each data member type until we find the terminating ';' at the end of
3492      the data member list, or break for some other reason such as finding the
3493      start of the member function list. */
3494
3495   while (**pp != ';')
3496     {
3497       if (os9k_stabs && **pp == ',') break;
3498       STABS_CONTINUE (pp, objfile);
3499       /* Get space to record the next field's data.  */
3500       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
3501       make_cleanup (free, new);
3502       memset (new, 0, sizeof (struct nextfield));
3503       new -> next = fip -> list;
3504       fip -> list = new;
3505
3506       /* Get the field name.  */
3507       p = *pp;
3508
3509       /* If is starts with CPLUS_MARKER it is a special abbreviation,
3510          unless the CPLUS_MARKER is followed by an underscore, in
3511          which case it is just the name of an anonymous type, which we
3512          should handle like any other type name.  */
3513
3514       if (is_cplus_marker (p[0]) && p[1] != '_')
3515         {
3516           if (!read_cpp_abbrev (fip, pp, type, objfile))
3517             return 0;
3518           continue;
3519         }
3520
3521       /* Look for the ':' that separates the field name from the field
3522          values.  Data members are delimited by a single ':', while member
3523          functions are delimited by a pair of ':'s.  When we hit the member
3524          functions (if any), terminate scan loop and return. */
3525
3526       while (*p != ':' && *p != '\0') 
3527         {
3528           p++;
3529         }
3530       if (*p == '\0')
3531         return 0;
3532
3533       /* Check to see if we have hit the member functions yet.  */
3534       if (p[1] == ':')
3535         {
3536           break;
3537         }
3538       read_one_struct_field (fip, pp, p, type, objfile);
3539     }
3540   if (p[0] == ':' && p[1] == ':')
3541     {
3542       /* chill the list of fields: the last entry (at the head) is a
3543          partially constructed entry which we now scrub. */
3544       fip -> list = fip -> list -> next;
3545     }
3546   return 1;
3547 }
3548
3549 /* The stabs for C++ derived classes contain baseclass information which
3550    is marked by a '!' character after the total size.  This function is
3551    called when we encounter the baseclass marker, and slurps up all the
3552    baseclass information.
3553
3554    Immediately following the '!' marker is the number of base classes that
3555    the class is derived from, followed by information for each base class.
3556    For each base class, there are two visibility specifiers, a bit offset
3557    to the base class information within the derived class, a reference to
3558    the type for the base class, and a terminating semicolon.
3559
3560    A typical example, with two base classes, would be "!2,020,19;0264,21;".
3561                                                        ^^ ^ ^ ^  ^ ^  ^
3562         Baseclass information marker __________________|| | | |  | |  |
3563         Number of baseclasses __________________________| | | |  | |  |
3564         Visibility specifiers (2) ________________________| | |  | |  |
3565         Offset in bits from start of class _________________| |  | |  |
3566         Type number for base class ___________________________|  | |  |
3567         Visibility specifiers (2) _______________________________| |  |
3568         Offset in bits from start of class ________________________|  |
3569         Type number of base class ____________________________________|
3570
3571   Return 1 for success, 0 for (error-type-inducing) failure.  */
3572
3573 static int
3574 read_baseclasses (fip, pp, type, objfile)
3575      struct field_info *fip;
3576      char **pp;
3577      struct type *type;
3578      struct objfile *objfile;
3579 {
3580   int i;
3581   struct nextfield *new;
3582
3583   if (**pp != '!')
3584     {
3585       return 1;
3586     }
3587   else
3588     {
3589       /* Skip the '!' baseclass information marker. */
3590       (*pp)++;
3591     }
3592
3593   ALLOCATE_CPLUS_STRUCT_TYPE (type);
3594   {
3595     int nbits;
3596     TYPE_N_BASECLASSES (type) = read_huge_number (pp, ',', &nbits);
3597     if (nbits != 0)
3598       return 0;
3599   }
3600
3601 #if 0
3602   /* Some stupid compilers have trouble with the following, so break
3603      it up into simpler expressions.  */
3604   TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *)
3605     TYPE_ALLOC (type, B_BYTES (TYPE_N_BASECLASSES (type)));
3606 #else
3607   {
3608     int num_bytes = B_BYTES (TYPE_N_BASECLASSES (type));
3609     char *pointer;
3610
3611     pointer = (char *) TYPE_ALLOC (type, num_bytes);
3612     TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) pointer;
3613   }
3614 #endif /* 0 */
3615
3616   B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), TYPE_N_BASECLASSES (type));
3617
3618   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
3619     {
3620       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
3621       make_cleanup (free, new);
3622       memset (new, 0, sizeof (struct nextfield));
3623       new -> next = fip -> list;
3624       fip -> list = new;
3625       FIELD_BITSIZE (new->field) = 0;   /* this should be an unpacked field! */
3626
3627       STABS_CONTINUE (pp, objfile);
3628       switch (**pp)
3629         {
3630           case '0':
3631             /* Nothing to do. */
3632             break;
3633           case '1':
3634             SET_TYPE_FIELD_VIRTUAL (type, i);
3635             break;
3636           default:
3637             /* Unknown character.  Complain and treat it as non-virtual.  */
3638             {
3639               static struct complaint msg = {
3640                 "Unknown virtual character `%c' for baseclass", 0, 0};
3641               complain (&msg, **pp);
3642             }
3643         }
3644       ++(*pp);
3645
3646       new -> visibility = *(*pp)++;
3647       switch (new -> visibility)
3648         {
3649           case VISIBILITY_PRIVATE:
3650           case VISIBILITY_PROTECTED:
3651           case VISIBILITY_PUBLIC:
3652             break;
3653           default:
3654             /* Bad visibility format.  Complain and treat it as
3655                public.  */
3656             {
3657               static struct complaint msg = {
3658                 "Unknown visibility `%c' for baseclass", 0, 0};
3659               complain (&msg, new -> visibility);
3660               new -> visibility = VISIBILITY_PUBLIC;
3661             }
3662         }
3663
3664       {
3665         int nbits;
3666         
3667         /* The remaining value is the bit offset of the portion of the object
3668            corresponding to this baseclass.  Always zero in the absence of
3669            multiple inheritance.  */
3670
3671         FIELD_BITPOS (new->field) = read_huge_number (pp, ',', &nbits);
3672         if (nbits != 0)
3673           return 0;
3674       }
3675
3676       /* The last piece of baseclass information is the type of the
3677          base class.  Read it, and remember it's type name as this
3678          field's name. */
3679
3680       new -> field.type = read_type (pp, objfile);
3681       new -> field.name = type_name_no_tag (new -> field.type);
3682
3683       /* skip trailing ';' and bump count of number of fields seen */
3684       if (**pp == ';')
3685         (*pp)++;
3686       else
3687         return 0;
3688     }
3689   return 1;
3690 }
3691
3692 /* The tail end of stabs for C++ classes that contain a virtual function
3693    pointer contains a tilde, a %, and a type number.
3694    The type number refers to the base class (possibly this class itself) which
3695    contains the vtable pointer for the current class.
3696
3697    This function is called when we have parsed all the method declarations,
3698    so we can look for the vptr base class info.  */
3699
3700 static int
3701 read_tilde_fields (fip, pp, type, objfile)
3702      struct field_info *fip;
3703      char **pp;
3704      struct type *type;
3705      struct objfile *objfile;
3706 {
3707   register char *p;
3708
3709   STABS_CONTINUE (pp, objfile);
3710
3711   /* If we are positioned at a ';', then skip it. */
3712   if (**pp == ';')
3713     {
3714       (*pp)++;
3715     }
3716
3717   if (**pp == '~')
3718     {
3719       (*pp)++;
3720
3721       if (**pp == '=' || **pp == '+' || **pp == '-')
3722         {
3723           /* Obsolete flags that used to indicate the presence
3724              of constructors and/or destructors. */
3725           (*pp)++;
3726         }
3727
3728       /* Read either a '%' or the final ';'.  */
3729       if (*(*pp)++ == '%')
3730         {
3731           /* The next number is the type number of the base class
3732              (possibly our own class) which supplies the vtable for
3733              this class.  Parse it out, and search that class to find
3734              its vtable pointer, and install those into TYPE_VPTR_BASETYPE
3735              and TYPE_VPTR_FIELDNO.  */
3736
3737           struct type *t;
3738           int i;
3739
3740           t = read_type (pp, objfile);
3741           p = (*pp)++;
3742           while (*p != '\0' && *p != ';')
3743             {
3744               p++;
3745             }
3746           if (*p == '\0')
3747             {
3748               /* Premature end of symbol.  */
3749               return 0;
3750             }
3751           
3752           TYPE_VPTR_BASETYPE (type) = t;
3753           if (type == t)                /* Our own class provides vtbl ptr */
3754             {
3755               for (i = TYPE_NFIELDS (t) - 1;
3756                    i >= TYPE_N_BASECLASSES (t);
3757                    --i)
3758                 {
3759                   if (! strncmp (TYPE_FIELD_NAME (t, i), vptr_name, 
3760                                  sizeof (vptr_name) - 1))
3761                     {
3762                       TYPE_VPTR_FIELDNO (type) = i;
3763                       goto gotit;
3764                     }
3765                 }
3766               /* Virtual function table field not found.  */
3767               complain (&vtbl_notfound_complaint, TYPE_NAME (type));
3768               return 0;
3769             }
3770           else
3771             {
3772               TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t);
3773             }
3774
3775     gotit:
3776           *pp = p + 1;
3777         }
3778     }
3779   return 1;
3780 }
3781
3782 static int
3783 attach_fn_fields_to_type (fip, type)
3784      struct field_info *fip;
3785      register struct type *type;
3786 {
3787   register int n;
3788
3789   for (n = TYPE_NFN_FIELDS (type);
3790        fip -> fnlist != NULL;
3791        fip -> fnlist = fip -> fnlist -> next)
3792     {
3793       --n;                      /* Circumvent Sun3 compiler bug */
3794       TYPE_FN_FIELDLISTS (type)[n] = fip -> fnlist -> fn_fieldlist;
3795     }
3796   return 1;
3797 }
3798
3799 /* read cfront class static data.
3800    pp points to string starting with the list of static data
3801    eg: A:ZcA;1@Bpub v2@Bvirpri;__ct__1AFv func__1AFv *sfunc__1AFv ;as__1A ;;
3802                                                                    ^^^^^^^^
3803
3804        A:ZcA;;foopri__1AFv foopro__1AFv __ct__1AFv __ct__1AFRC1A foopub__1AFv ;;;
3805                                                                                ^
3806    */
3807
3808 static int
3809 read_cfront_static_fields (fip, pp, type, objfile)
3810      struct field_info *fip;
3811      char **pp;
3812      struct type *type;
3813      struct objfile *objfile;
3814 {
3815   struct nextfield * new;
3816   struct type *stype;
3817   char * sname;
3818   struct symbol * ref_static=0;
3819       
3820   if (**pp==';')                /* no static data; return */
3821     {
3822       ++(*pp);
3823       return 1;
3824     }
3825
3826   /* Process each field in the list until we find the terminating ";" */
3827
3828   /* eg: p = "as__1A ;;;" */
3829   STABS_CONTINUE (pp, objfile);                 /* handle \\ */
3830   while (**pp!=';' && (sname = get_substring (pp, ' '), sname)) 
3831     {
3832       ref_static = lookup_symbol (sname, 0, VAR_NAMESPACE, 0, 0); /*demangled_name*/
3833       if (!ref_static) 
3834         {
3835           static struct complaint msg = {"\
3836                 Unable to find symbol for static data field %s\n",
3837                                 0, 0};
3838           complain (&msg, sname);
3839           continue;
3840         }
3841       stype = SYMBOL_TYPE(ref_static);
3842
3843       /* allocate a new fip */
3844       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
3845       make_cleanup (free, new);
3846       memset (new, 0, sizeof (struct nextfield));
3847       new -> next = fip -> list;
3848       fip -> list = new;
3849
3850       /* set visibility */
3851       /* FIXME! no way to tell visibility from stabs??? */
3852       new -> visibility = VISIBILITY_PUBLIC;
3853
3854       /* set field info into fip */
3855       fip -> list -> field.type = stype; 
3856
3857       /* set bitpos & bitsize */
3858       SET_FIELD_PHYSNAME (fip->list->field, savestring (sname, strlen (sname)));
3859
3860       /* set name field */
3861       /* The following is code to work around cfront generated stabs.
3862          The stabs contains full mangled name for each field.
3863          We try to demangle the name and extract the field name out of it.
3864       */
3865       if (ARM_DEMANGLING)
3866         {
3867           char *dem, *dem_p;
3868           dem = cplus_demangle (sname, DMGL_ANSI | DMGL_PARAMS);
3869           if (dem != NULL)
3870             {
3871               dem_p = strrchr (dem, ':');
3872               if (dem_p != 0 && *(dem_p-1)==':')
3873                 dem_p++;
3874               fip->list->field.name =
3875                 obsavestring (dem_p, strlen (dem_p), &objfile -> type_obstack);
3876             }
3877           else
3878             {
3879               fip->list->field.name =
3880                 obsavestring (sname, strlen (sname), &objfile -> type_obstack); 
3881             }
3882         } /* end of code for cfront work around */ 
3883     } /* loop again for next static field */
3884   return 1;
3885 }
3886
3887 /* Copy structure fields to fip so attach_fields_to_type will work.
3888    type has already been created with the initial instance data fields.
3889    Now we want to be able to add the other members to the class,
3890    so we want to add them back to the fip and reattach them again
3891    once we have collected all the class members. */
3892
3893 static int
3894 copy_cfront_struct_fields (fip, type, objfile)
3895      struct field_info *fip;
3896      struct type *type;
3897      struct objfile *objfile;
3898 {
3899   int nfields = TYPE_NFIELDS(type);
3900   int i;
3901   struct nextfield * new;
3902
3903   /* Copy the fields into the list of fips and reset the types 
3904      to remove the old fields */
3905
3906   for (i=0; i<nfields; i++)
3907     {
3908       /* allocate a new fip */
3909       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
3910       make_cleanup (free, new);
3911       memset (new, 0, sizeof (struct nextfield));
3912       new -> next = fip -> list;
3913       fip -> list = new;
3914
3915       /* copy field info into fip */
3916       new -> field = TYPE_FIELD (type, i);
3917       /* set visibility */
3918       if (TYPE_FIELD_PROTECTED (type, i))
3919         new -> visibility = VISIBILITY_PROTECTED;
3920       else if (TYPE_FIELD_PRIVATE (type, i))
3921          new -> visibility = VISIBILITY_PRIVATE;
3922       else
3923          new -> visibility = VISIBILITY_PUBLIC;
3924     }
3925   /* Now delete the fields from the type since we will be 
3926      allocing new space once we get the rest of the fields 
3927      in attach_fields_to_type.
3928      The pointer TYPE_FIELDS(type) is left dangling but should 
3929      be freed later by objstack_free */
3930   TYPE_FIELDS (type)=0;
3931   TYPE_NFIELDS (type) = 0;
3932
3933   return 1;
3934 }
3935
3936 /* Create the vector of fields, and record how big it is.
3937    We need this info to record proper virtual function table information
3938    for this class's virtual functions.  */
3939
3940 static int
3941 attach_fields_to_type (fip, type, objfile)
3942      struct field_info *fip;
3943      register struct type *type;
3944      struct objfile *objfile;
3945 {
3946   register int nfields = 0;
3947   register int non_public_fields = 0;
3948   register struct nextfield *scan;
3949
3950   /* Count up the number of fields that we have, as well as taking note of
3951      whether or not there are any non-public fields, which requires us to
3952      allocate and build the private_field_bits and protected_field_bits
3953      bitfields. */
3954
3955   for (scan = fip -> list; scan != NULL; scan = scan -> next)
3956     {
3957       nfields++;
3958       if (scan -> visibility != VISIBILITY_PUBLIC)
3959         {
3960           non_public_fields++;
3961         }
3962     }
3963
3964   /* Now we know how many fields there are, and whether or not there are any
3965      non-public fields.  Record the field count, allocate space for the
3966      array of fields, and create blank visibility bitfields if necessary. */
3967
3968   TYPE_NFIELDS (type) = nfields;
3969   TYPE_FIELDS (type) = (struct field *)
3970     TYPE_ALLOC (type, sizeof (struct field) * nfields);
3971   memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
3972
3973   if (non_public_fields)
3974     {
3975       ALLOCATE_CPLUS_STRUCT_TYPE (type);
3976
3977       TYPE_FIELD_PRIVATE_BITS (type) =
3978         (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
3979       B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
3980
3981       TYPE_FIELD_PROTECTED_BITS (type) =
3982         (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
3983       B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
3984
3985       TYPE_FIELD_IGNORE_BITS (type) =
3986         (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
3987       B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
3988     }
3989
3990   /* Copy the saved-up fields into the field vector.  Start from the head
3991      of the list, adding to the tail of the field array, so that they end
3992      up in the same order in the array in which they were added to the list. */
3993
3994   while (nfields-- > 0)
3995     {
3996       TYPE_FIELD (type, nfields) = fip -> list -> field;
3997       switch (fip -> list -> visibility)
3998         {
3999           case VISIBILITY_PRIVATE:
4000             SET_TYPE_FIELD_PRIVATE (type, nfields);
4001             break;
4002
4003           case VISIBILITY_PROTECTED:
4004             SET_TYPE_FIELD_PROTECTED (type, nfields);
4005             break;
4006
4007           case VISIBILITY_IGNORE:
4008             SET_TYPE_FIELD_IGNORE (type, nfields);
4009             break;
4010
4011           case VISIBILITY_PUBLIC:
4012             break;
4013
4014           default:
4015             /* Unknown visibility.  Complain and treat it as public.  */
4016             {
4017               static struct complaint msg = {
4018                 "Unknown visibility `%c' for field", 0, 0};
4019               complain (&msg, fip -> list -> visibility);
4020             }
4021             break;
4022         }
4023       fip -> list = fip -> list -> next;
4024     }
4025   return 1;
4026 }
4027
4028 /* Read the description of a structure (or union type) and return an object
4029    describing the type.
4030
4031    PP points to a character pointer that points to the next unconsumed token
4032    in the the stabs string.  For example, given stabs "A:T4=s4a:1,0,32;;",
4033    *PP will point to "4a:1,0,32;;".
4034
4035    TYPE points to an incomplete type that needs to be filled in.
4036
4037    OBJFILE points to the current objfile from which the stabs information is
4038    being read.  (Note that it is redundant in that TYPE also contains a pointer
4039    to this same objfile, so it might be a good idea to eliminate it.  FIXME). 
4040    */
4041
4042 static struct type *
4043 read_struct_type (pp, type, objfile)
4044      char **pp;
4045      struct type *type;
4046      struct objfile *objfile;
4047 {
4048   struct cleanup *back_to;
4049   struct field_info fi;
4050
4051   fi.list = NULL;
4052   fi.fnlist = NULL;
4053
4054   back_to = make_cleanup (null_cleanup, 0);
4055
4056   INIT_CPLUS_SPECIFIC (type);
4057   TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
4058
4059   /* First comes the total size in bytes.  */
4060
4061   {
4062     int nbits;
4063     TYPE_LENGTH (type) = read_huge_number (pp, 0, &nbits);
4064     if (nbits != 0)
4065       return error_type (pp, objfile);
4066   }
4067
4068   /* Now read the baseclasses, if any, read the regular C struct or C++
4069      class member fields, attach the fields to the type, read the C++
4070      member functions, attach them to the type, and then read any tilde
4071      field (baseclass specifier for the class holding the main vtable). */
4072
4073   if (!read_baseclasses (&fi, pp, type, objfile)
4074       || !read_struct_fields (&fi, pp, type, objfile)
4075       || !attach_fields_to_type (&fi, type, objfile)
4076       || !read_member_functions (&fi, pp, type, objfile)
4077       || !attach_fn_fields_to_type (&fi, type)
4078       || !read_tilde_fields (&fi, pp, type, objfile))
4079     {
4080       type = error_type (pp, objfile);
4081     }
4082
4083   do_cleanups (back_to);
4084   return (type);
4085 }
4086
4087 /* Read a definition of an array type,
4088    and create and return a suitable type object.
4089    Also creates a range type which represents the bounds of that
4090    array.  */
4091
4092 static struct type *
4093 read_array_type (pp, type, objfile)
4094      register char **pp;
4095      register struct type *type;
4096      struct objfile *objfile;
4097 {
4098   struct type *index_type, *element_type, *range_type;
4099   int lower, upper;
4100   int adjustable = 0;
4101   int nbits;
4102
4103   /* Format of an array type:
4104      "ar<index type>;lower;upper;<array_contents_type>".
4105      OS9000: "arlower,upper;<array_contents_type>".
4106
4107      Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
4108      for these, produce a type like float[][].  */
4109
4110   if (os9k_stabs)
4111     index_type = builtin_type_int;
4112   else
4113     {
4114       index_type = read_type (pp, objfile);
4115       if (**pp != ';')
4116         /* Improper format of array type decl.  */
4117         return error_type (pp, objfile);
4118       ++*pp;
4119     }
4120
4121   if (!(**pp >= '0' && **pp <= '9') && **pp != '-')
4122     {
4123       (*pp)++;
4124       adjustable = 1;
4125     }
4126   lower = read_huge_number (pp, os9k_stabs ? ',' : ';', &nbits);
4127   if (nbits != 0)
4128     return error_type (pp, objfile);
4129
4130   if (!(**pp >= '0' && **pp <= '9') && **pp != '-')
4131     {
4132       (*pp)++;
4133       adjustable = 1;
4134     }
4135   upper = read_huge_number (pp, ';', &nbits);
4136   if (nbits != 0)
4137     return error_type (pp, objfile);
4138   
4139   element_type = read_type (pp, objfile);
4140
4141   if (adjustable)
4142     {
4143       lower = 0;
4144       upper = -1;
4145     }
4146
4147   range_type =
4148     create_range_type ((struct type *) NULL, index_type, lower, upper);
4149   type = create_array_type (type, element_type, range_type);
4150
4151   return type;
4152 }
4153
4154
4155 /* Read a definition of an enumeration type,
4156    and create and return a suitable type object.
4157    Also defines the symbols that represent the values of the type.  */
4158
4159 static struct type *
4160 read_enum_type (pp, type, objfile)
4161      register char **pp;
4162      register struct type *type;
4163      struct objfile *objfile;
4164 {
4165   register char *p;
4166   char *name;
4167   register long n;
4168   register struct symbol *sym;
4169   int nsyms = 0;
4170   struct pending **symlist;
4171   struct pending *osyms, *syms;
4172   int o_nsyms;
4173   int nbits;
4174   int unsigned_enum = 1;
4175
4176 #if 0
4177   /* FIXME!  The stabs produced by Sun CC merrily define things that ought
4178      to be file-scope, between N_FN entries, using N_LSYM.  What's a mother
4179      to do?  For now, force all enum values to file scope.  */
4180   if (within_function)
4181     symlist = &local_symbols;
4182   else
4183 #endif
4184     symlist = &file_symbols;
4185   osyms = *symlist;
4186   o_nsyms = osyms ? osyms->nsyms : 0;
4187
4188   if (os9k_stabs)
4189     {
4190       /* Size.  Perhaps this does not have to be conditionalized on
4191          os9k_stabs (assuming the name of an enum constant can't start
4192          with a digit).  */
4193       read_huge_number (pp, 0, &nbits);
4194       if (nbits != 0)
4195         return error_type (pp, objfile);
4196     }
4197
4198   /* The aix4 compiler emits an extra field before the enum members;
4199      my guess is it's a type of some sort.  Just ignore it.  */
4200   if (**pp == '-')
4201     {
4202       /* Skip over the type.  */
4203       while (**pp != ':')
4204         (*pp)++;
4205
4206       /* Skip over the colon.  */
4207       (*pp)++;
4208     }
4209
4210   /* Read the value-names and their values.
4211      The input syntax is NAME:VALUE,NAME:VALUE, and so on.
4212      A semicolon or comma instead of a NAME means the end.  */
4213   while (**pp && **pp != ';' && **pp != ',')
4214     {
4215       STABS_CONTINUE (pp, objfile);
4216       p = *pp;
4217       while (*p != ':') p++;
4218       name = obsavestring (*pp, p - *pp, &objfile -> symbol_obstack);
4219       *pp = p + 1;
4220       n = read_huge_number (pp, ',', &nbits);
4221       if (nbits != 0)
4222         return error_type (pp, objfile);
4223
4224       sym = (struct symbol *)
4225         obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
4226       memset (sym, 0, sizeof (struct symbol));
4227       SYMBOL_NAME (sym) = name;
4228       SYMBOL_LANGUAGE (sym) = current_subfile -> language;
4229       SYMBOL_CLASS (sym) = LOC_CONST;
4230       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4231       SYMBOL_VALUE (sym) = n;
4232       if (n < 0)
4233         unsigned_enum = 0;
4234       add_symbol_to_list (sym, symlist);
4235       nsyms++;
4236     }
4237
4238   if (**pp == ';')
4239     (*pp)++;                    /* Skip the semicolon.  */
4240
4241   /* Now fill in the fields of the type-structure.  */
4242
4243   TYPE_LENGTH (type) = TARGET_INT_BIT / HOST_CHAR_BIT;
4244   TYPE_CODE (type) = TYPE_CODE_ENUM;
4245   TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
4246   if (unsigned_enum)
4247     TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
4248   TYPE_NFIELDS (type) = nsyms;
4249   TYPE_FIELDS (type) = (struct field *)
4250     TYPE_ALLOC (type, sizeof (struct field) * nsyms);
4251   memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nsyms);
4252
4253   /* Find the symbols for the values and put them into the type.
4254      The symbols can be found in the symlist that we put them on
4255      to cause them to be defined.  osyms contains the old value
4256      of that symlist; everything up to there was defined by us.  */
4257   /* Note that we preserve the order of the enum constants, so
4258      that in something like "enum {FOO, LAST_THING=FOO}" we print
4259      FOO, not LAST_THING.  */
4260
4261   for (syms = *symlist, n = nsyms - 1; syms; syms = syms->next)
4262     {
4263       int last = syms == osyms ? o_nsyms : 0;
4264       int j = syms->nsyms;
4265       for (; --j >= last; --n)
4266         {
4267           struct symbol *xsym = syms->symbol[j];
4268           SYMBOL_TYPE (xsym) = type;
4269           TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
4270           TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
4271           TYPE_FIELD_BITSIZE (type, n) = 0;
4272         }
4273       if (syms == osyms)
4274         break;
4275     }
4276
4277   return type;
4278 }
4279
4280 /* Sun's ACC uses a somewhat saner method for specifying the builtin
4281    typedefs in every file (for int, long, etc):
4282
4283         type = b <signed> <width>; <offset>; <nbits>
4284         signed = u or s.  Possible c in addition to u or s (for char?).
4285         offset = offset from high order bit to start bit of type.
4286         width is # bytes in object of this type, nbits is # bits in type.
4287
4288    The width/offset stuff appears to be for small objects stored in
4289    larger ones (e.g. `shorts' in `int' registers).  We ignore it for now,
4290    FIXME.  */
4291
4292 static struct type *
4293 read_sun_builtin_type (pp, typenums, objfile)
4294      char **pp;
4295      int typenums[2];
4296      struct objfile *objfile;
4297 {
4298   int type_bits;
4299   int nbits;
4300   int signed_type;
4301
4302   switch (**pp)
4303     {
4304       case 's':
4305         signed_type = 1;
4306         break;
4307       case 'u':
4308         signed_type = 0;
4309         break;
4310       default:
4311         return error_type (pp, objfile);
4312     }
4313   (*pp)++;
4314
4315   /* For some odd reason, all forms of char put a c here.  This is strange
4316      because no other type has this honor.  We can safely ignore this because
4317      we actually determine 'char'acterness by the number of bits specified in
4318      the descriptor.  */
4319
4320   if (**pp == 'c')
4321     (*pp)++;
4322
4323   /* The first number appears to be the number of bytes occupied
4324      by this type, except that unsigned short is 4 instead of 2.
4325      Since this information is redundant with the third number,
4326      we will ignore it.  */
4327   read_huge_number (pp, ';', &nbits);
4328   if (nbits != 0)
4329     return error_type (pp, objfile);
4330
4331   /* The second number is always 0, so ignore it too. */
4332   read_huge_number (pp, ';', &nbits);
4333   if (nbits != 0)
4334     return error_type (pp, objfile);
4335
4336   /* The third number is the number of bits for this type. */
4337   type_bits = read_huge_number (pp, 0, &nbits);
4338   if (nbits != 0)
4339     return error_type (pp, objfile);
4340   /* The type *should* end with a semicolon.  If it are embedded
4341      in a larger type the semicolon may be the only way to know where
4342      the type ends.  If this type is at the end of the stabstring we
4343      can deal with the omitted semicolon (but we don't have to like
4344      it).  Don't bother to complain(), Sun's compiler omits the semicolon
4345      for "void".  */
4346   if (**pp == ';')
4347     ++(*pp);
4348
4349   if (type_bits == 0)
4350     return init_type (TYPE_CODE_VOID, 1,
4351                       signed_type ? 0 : TYPE_FLAG_UNSIGNED, (char *)NULL,
4352                       objfile);
4353   else
4354     return init_type (TYPE_CODE_INT,
4355                       type_bits / TARGET_CHAR_BIT,
4356                       signed_type ? 0 : TYPE_FLAG_UNSIGNED, (char *)NULL,
4357                       objfile);
4358 }
4359
4360 static struct type *
4361 read_sun_floating_type (pp, typenums, objfile)
4362      char **pp;
4363      int typenums[2];
4364      struct objfile *objfile;
4365 {
4366   int nbits;
4367   int details;
4368   int nbytes;
4369
4370   /* The first number has more details about the type, for example
4371      FN_COMPLEX.  */
4372   details = read_huge_number (pp, ';', &nbits);
4373   if (nbits != 0)
4374     return error_type (pp, objfile);
4375
4376   /* The second number is the number of bytes occupied by this type */
4377   nbytes = read_huge_number (pp, ';', &nbits);
4378   if (nbits != 0)
4379     return error_type (pp, objfile);
4380
4381   if (details == NF_COMPLEX || details == NF_COMPLEX16
4382       || details == NF_COMPLEX32)
4383     /* This is a type we can't handle, but we do know the size.
4384        We also will be able to give it a name.  */
4385     return init_type (TYPE_CODE_ERROR, nbytes, 0, NULL, objfile);
4386
4387   return init_type (TYPE_CODE_FLT, nbytes, 0, NULL, objfile);
4388 }
4389
4390 /* Read a number from the string pointed to by *PP.
4391    The value of *PP is advanced over the number.
4392    If END is nonzero, the character that ends the
4393    number must match END, or an error happens;
4394    and that character is skipped if it does match.
4395    If END is zero, *PP is left pointing to that character.
4396
4397    If the number fits in a long, set *BITS to 0 and return the value.
4398    If not, set *BITS to be the number of bits in the number and return 0.
4399
4400    If encounter garbage, set *BITS to -1 and return 0.  */
4401
4402 static long
4403 read_huge_number (pp, end, bits)
4404      char **pp;
4405      int end;
4406      int *bits;
4407 {
4408   char *p = *pp;
4409   int sign = 1;
4410   long n = 0;
4411   int radix = 10;
4412   char overflow = 0;
4413   int nbits = 0;
4414   int c;
4415   long upper_limit;
4416   
4417   if (*p == '-')
4418     {
4419       sign = -1;
4420       p++;
4421     }
4422
4423   /* Leading zero means octal.  GCC uses this to output values larger
4424      than an int (because that would be hard in decimal).  */
4425   if (*p == '0')
4426     {
4427       radix = 8;
4428       p++;
4429     }
4430
4431   if (os9k_stabs)
4432     upper_limit = ULONG_MAX / radix;
4433   else
4434     upper_limit = LONG_MAX / radix;
4435
4436   while ((c = *p++) >= '0' && c < ('0' + radix))
4437     {
4438       if (n <= upper_limit)
4439         {
4440           n *= radix;
4441           n += c - '0';         /* FIXME this overflows anyway */
4442         }
4443       else
4444         overflow = 1;
4445       
4446       /* This depends on large values being output in octal, which is
4447          what GCC does. */
4448       if (radix == 8)
4449         {
4450           if (nbits == 0)
4451             {
4452               if (c == '0')
4453                 /* Ignore leading zeroes.  */
4454                 ;
4455               else if (c == '1')
4456                 nbits = 1;
4457               else if (c == '2' || c == '3')
4458                 nbits = 2;
4459               else
4460                 nbits = 3;
4461             }
4462           else
4463             nbits += 3;
4464         }
4465     }
4466   if (end)
4467     {
4468       if (c && c != end)
4469         {
4470           if (bits != NULL)
4471             *bits = -1;
4472           return 0;
4473         }
4474     }
4475   else
4476     --p;
4477
4478   *pp = p;
4479   if (overflow)
4480     {
4481       if (nbits == 0)
4482         {
4483           /* Large decimal constants are an error (because it is hard to
4484              count how many bits are in them).  */
4485           if (bits != NULL)
4486             *bits = -1;
4487           return 0;
4488         }
4489       
4490       /* -0x7f is the same as 0x80.  So deal with it by adding one to
4491          the number of bits.  */
4492       if (sign == -1)
4493         ++nbits;
4494       if (bits)
4495         *bits = nbits;
4496     }
4497   else
4498     {
4499       if (bits)
4500         *bits = 0;
4501       return n * sign;
4502     }
4503   /* It's *BITS which has the interesting information.  */
4504   return 0;
4505 }
4506
4507 static struct type *
4508 read_range_type (pp, typenums, objfile)
4509      char **pp;
4510      int typenums[2];
4511      struct objfile *objfile;
4512 {
4513   char *orig_pp = *pp;
4514   int rangenums[2];
4515   long n2, n3;
4516   int n2bits, n3bits;
4517   int self_subrange;
4518   struct type *result_type;
4519   struct type *index_type = NULL;
4520
4521   /* First comes a type we are a subrange of.
4522      In C it is usually 0, 1 or the type being defined.  */
4523   if (read_type_number (pp, rangenums) != 0)
4524     return error_type (pp, objfile);
4525   self_subrange = (rangenums[0] == typenums[0] &&
4526                    rangenums[1] == typenums[1]);
4527
4528   if (**pp == '=')
4529     {
4530       *pp = orig_pp;
4531       index_type = read_type (pp, objfile);
4532     }
4533
4534   /* A semicolon should now follow; skip it.  */
4535   if (**pp == ';')
4536     (*pp)++;
4537
4538   /* The remaining two operands are usually lower and upper bounds
4539      of the range.  But in some special cases they mean something else.  */
4540   n2 = read_huge_number (pp, ';', &n2bits);
4541   n3 = read_huge_number (pp, ';', &n3bits);
4542
4543   if (n2bits == -1 || n3bits == -1)
4544     return error_type (pp, objfile);
4545
4546   if (index_type)
4547     goto handle_true_range;
4548
4549   /* If limits are huge, must be large integral type.  */
4550   if (n2bits != 0 || n3bits != 0)
4551     {
4552       char got_signed = 0;
4553       char got_unsigned = 0;
4554       /* Number of bits in the type.  */
4555       int nbits = 0;
4556
4557       /* Range from 0 to <large number> is an unsigned large integral type.  */
4558       if ((n2bits == 0 && n2 == 0) && n3bits != 0)
4559         {
4560           got_unsigned = 1;
4561           nbits = n3bits;
4562         }
4563       /* Range from <large number> to <large number>-1 is a large signed
4564          integral type.  Take care of the case where <large number> doesn't
4565          fit in a long but <large number>-1 does.  */
4566       else if ((n2bits != 0 && n3bits != 0 && n2bits == n3bits + 1)
4567                || (n2bits != 0 && n3bits == 0
4568                    && (n2bits == sizeof (long) * HOST_CHAR_BIT)
4569                    && n3 == LONG_MAX))
4570         {
4571           got_signed = 1;
4572           nbits = n2bits;
4573         }
4574
4575       if (got_signed || got_unsigned)
4576         {
4577           return init_type (TYPE_CODE_INT, nbits / TARGET_CHAR_BIT,
4578                             got_unsigned ? TYPE_FLAG_UNSIGNED : 0, NULL,
4579                             objfile);
4580         }
4581       else
4582         return error_type (pp, objfile);
4583     }
4584
4585   /* A type defined as a subrange of itself, with bounds both 0, is void.  */
4586   if (self_subrange && n2 == 0 && n3 == 0)
4587     return init_type (TYPE_CODE_VOID, 1, 0, NULL, objfile);
4588
4589   /* If n3 is zero and n2 is positive, we want a floating type,
4590      and n2 is the width in bytes.
4591
4592      Fortran programs appear to use this for complex types also,
4593      and they give no way to distinguish between double and single-complex!
4594
4595      GDB does not have complex types.
4596
4597      Just return the complex as a float of that size.  It won't work right
4598      for the complex values, but at least it makes the file loadable.  */
4599
4600   if (n3 == 0 && n2 > 0)
4601     {
4602       return init_type (TYPE_CODE_FLT, n2, 0, NULL, objfile);
4603     }
4604
4605   /* If the upper bound is -1, it must really be an unsigned int.  */
4606
4607   else if (n2 == 0 && n3 == -1)
4608     {
4609       /* It is unsigned int or unsigned long.  */
4610       /* GCC 2.3.3 uses this for long long too, but that is just a GDB 3.5
4611          compatibility hack.  */
4612       return init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
4613                         TYPE_FLAG_UNSIGNED, NULL, objfile);
4614     }
4615
4616   /* Special case: char is defined (Who knows why) as a subrange of
4617      itself with range 0-127.  */
4618   else if (self_subrange && n2 == 0 && n3 == 127)
4619     return init_type (TYPE_CODE_INT, 1, 0, NULL, objfile);
4620
4621   else if (current_symbol && SYMBOL_LANGUAGE (current_symbol) == language_chill
4622            && !self_subrange)
4623     goto handle_true_range;
4624
4625   /* We used to do this only for subrange of self or subrange of int.  */
4626   else if (n2 == 0)
4627     {
4628       if (n3 < 0)
4629         /* n3 actually gives the size.  */
4630         return init_type (TYPE_CODE_INT, - n3, TYPE_FLAG_UNSIGNED,
4631                           NULL, objfile);
4632       if (n3 == 0xff)
4633         return init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED, NULL, objfile);
4634       if (n3 == 0xffff)
4635         return init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED, NULL, objfile);
4636
4637       /* -1 is used for the upper bound of (4 byte) "unsigned int" and
4638          "unsigned long", and we already checked for that,
4639          so don't need to test for it here.  */
4640     }
4641   /* I think this is for Convex "long long".  Since I don't know whether
4642      Convex sets self_subrange, I also accept that particular size regardless
4643      of self_subrange.  */
4644   else if (n3 == 0 && n2 < 0
4645            && (self_subrange
4646                || n2 == - TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT))
4647     return init_type (TYPE_CODE_INT, - n2, 0, NULL, objfile);
4648   else if (n2 == -n3 -1)
4649     {
4650       if (n3 == 0x7f)
4651         return init_type (TYPE_CODE_INT, 1, 0, NULL, objfile);
4652       if (n3 == 0x7fff)
4653         return init_type (TYPE_CODE_INT, 2, 0, NULL, objfile);
4654       if (n3 == 0x7fffffff)
4655         return init_type (TYPE_CODE_INT, 4, 0, NULL, objfile);
4656     }
4657
4658   /* We have a real range type on our hands.  Allocate space and
4659      return a real pointer.  */
4660  handle_true_range:
4661
4662   if (self_subrange)
4663     index_type = builtin_type_int;
4664   else
4665     index_type = *dbx_lookup_type (rangenums);
4666   if (index_type == NULL)
4667     {
4668       /* Does this actually ever happen?  Is that why we are worrying
4669          about dealing with it rather than just calling error_type?  */
4670
4671       static struct type *range_type_index;
4672
4673       complain (&range_type_base_complaint, rangenums[1]);
4674       if (range_type_index == NULL)
4675         range_type_index =
4676           init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
4677                      0, "range type index type", NULL);
4678       index_type = range_type_index;
4679     }
4680
4681   result_type = create_range_type ((struct type *) NULL, index_type, n2, n3);
4682   return (result_type);
4683 }
4684
4685 /* Read in an argument list.  This is a list of types, separated by commas
4686    and terminated with END.  Return the list of types read in, or (struct type
4687    **)-1 if there is an error.  */
4688
4689 static struct type **
4690 read_args (pp, end, objfile)
4691      char **pp;
4692      int end;
4693      struct objfile *objfile;
4694 {
4695   /* FIXME!  Remove this arbitrary limit!  */
4696   struct type *types[1024], **rval; /* allow for fns of 1023 parameters */
4697   int n = 0;
4698
4699   while (**pp != end)
4700     {
4701       if (**pp != ',')
4702         /* Invalid argument list: no ','.  */
4703         return (struct type **)-1;
4704       (*pp)++;
4705       STABS_CONTINUE (pp, objfile);
4706       types[n++] = read_type (pp, objfile);
4707     }
4708   (*pp)++;                      /* get past `end' (the ':' character) */
4709
4710   if (n == 1)
4711     {
4712       rval = (struct type **) xmalloc (2 * sizeof (struct type *));
4713     }
4714   else if (TYPE_CODE (types[n-1]) != TYPE_CODE_VOID)
4715     {
4716       rval = (struct type **) xmalloc ((n + 1) * sizeof (struct type *));
4717       memset (rval + n, 0, sizeof (struct type *));
4718     }
4719   else
4720     {
4721       rval = (struct type **) xmalloc (n * sizeof (struct type *));
4722     }
4723   memcpy (rval, types, n * sizeof (struct type *));
4724   return rval;
4725 }
4726 \f
4727 /* Common block handling.  */
4728
4729 /* List of symbols declared since the last BCOMM.  This list is a tail
4730    of local_symbols.  When ECOMM is seen, the symbols on the list
4731    are noted so their proper addresses can be filled in later,
4732    using the common block base address gotten from the assembler
4733    stabs.  */
4734
4735 static struct pending *common_block;
4736 static int common_block_i;
4737
4738 /* Name of the current common block.  We get it from the BCOMM instead of the
4739    ECOMM to match IBM documentation (even though IBM puts the name both places
4740    like everyone else).  */
4741 static char *common_block_name;
4742
4743 /* Process a N_BCOMM symbol.  The storage for NAME is not guaranteed
4744    to remain after this function returns.  */
4745
4746 void
4747 common_block_start (name, objfile)
4748      char *name;
4749      struct objfile *objfile;
4750 {
4751   if (common_block_name != NULL)
4752     {
4753       static struct complaint msg = {
4754         "Invalid symbol data: common block within common block",
4755         0, 0};
4756       complain (&msg);
4757     }
4758   common_block = local_symbols;
4759   common_block_i = local_symbols ? local_symbols->nsyms : 0;
4760   common_block_name = obsavestring (name, strlen (name),
4761                                     &objfile -> symbol_obstack);
4762 }
4763
4764 /* Process a N_ECOMM symbol.  */
4765
4766 void
4767 common_block_end (objfile)
4768      struct objfile *objfile;
4769 {
4770   /* Symbols declared since the BCOMM are to have the common block
4771      start address added in when we know it.  common_block and
4772      common_block_i point to the first symbol after the BCOMM in
4773      the local_symbols list; copy the list and hang it off the
4774      symbol for the common block name for later fixup.  */
4775   int i;
4776   struct symbol *sym;
4777   struct pending *new = 0;
4778   struct pending *next;
4779   int j;
4780
4781   if (common_block_name == NULL)
4782     {
4783       static struct complaint msg = {"ECOMM symbol unmatched by BCOMM", 0, 0};
4784       complain (&msg);
4785       return;
4786     }
4787
4788   sym = (struct symbol *) 
4789     obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
4790   memset (sym, 0, sizeof (struct symbol));
4791   /* Note: common_block_name already saved on symbol_obstack */
4792   SYMBOL_NAME (sym) = common_block_name;
4793   SYMBOL_CLASS (sym) = LOC_BLOCK;
4794
4795   /* Now we copy all the symbols which have been defined since the BCOMM.  */
4796
4797   /* Copy all the struct pendings before common_block.  */
4798   for (next = local_symbols;
4799        next != NULL && next != common_block;
4800        next = next->next)
4801     {
4802       for (j = 0; j < next->nsyms; j++)
4803         add_symbol_to_list (next->symbol[j], &new);
4804     }
4805
4806   /* Copy however much of COMMON_BLOCK we need.  If COMMON_BLOCK is
4807      NULL, it means copy all the local symbols (which we already did
4808      above).  */
4809
4810   if (common_block != NULL)
4811     for (j = common_block_i; j < common_block->nsyms; j++)
4812       add_symbol_to_list (common_block->symbol[j], &new);
4813
4814   SYMBOL_TYPE (sym) = (struct type *) new;
4815
4816   /* Should we be putting local_symbols back to what it was?
4817      Does it matter?  */
4818
4819   i = hashname (SYMBOL_NAME (sym));
4820   SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
4821   global_sym_chain[i] = sym;
4822   common_block_name = NULL;
4823 }
4824
4825 /* Add a common block's start address to the offset of each symbol
4826    declared to be in it (by being between a BCOMM/ECOMM pair that uses
4827    the common block name).  */
4828
4829 static void
4830 fix_common_block (sym, valu)
4831     struct symbol *sym;
4832     int valu;
4833 {
4834   struct pending *next = (struct pending *) SYMBOL_TYPE (sym);
4835   for ( ; next; next = next->next)
4836     {
4837       register int j;
4838       for (j = next->nsyms - 1; j >= 0; j--)
4839         SYMBOL_VALUE_ADDRESS (next->symbol[j]) += valu;
4840     }
4841 }
4842
4843
4844 \f
4845 /* What about types defined as forward references inside of a small lexical
4846    scope?  */
4847 /* Add a type to the list of undefined types to be checked through
4848    once this file has been read in.  */
4849
4850 void
4851 add_undefined_type (type)
4852      struct type *type;
4853 {
4854   if (undef_types_length == undef_types_allocated)
4855     {
4856       undef_types_allocated *= 2;
4857       undef_types = (struct type **)
4858         xrealloc ((char *) undef_types,
4859                   undef_types_allocated * sizeof (struct type *));
4860     }
4861   undef_types[undef_types_length++] = type;
4862 }
4863
4864 /* Go through each undefined type, see if it's still undefined, and fix it
4865    up if possible.  We have two kinds of undefined types:
4866
4867    TYPE_CODE_ARRAY:  Array whose target type wasn't defined yet.
4868                         Fix:  update array length using the element bounds
4869                         and the target type's length.
4870    TYPE_CODE_STRUCT, TYPE_CODE_UNION:  Structure whose fields were not
4871                         yet defined at the time a pointer to it was made.
4872                         Fix:  Do a full lookup on the struct/union tag.  */
4873 void
4874 cleanup_undefined_types ()
4875 {
4876   struct type **type;
4877
4878   for (type = undef_types; type < undef_types + undef_types_length; type++)
4879     {
4880       switch (TYPE_CODE (*type))
4881         {
4882
4883           case TYPE_CODE_STRUCT:
4884           case TYPE_CODE_UNION:
4885           case TYPE_CODE_ENUM:
4886           {
4887             /* Check if it has been defined since.  Need to do this here
4888                as well as in check_typedef to deal with the (legitimate in
4889                C though not C++) case of several types with the same name
4890                in different source files.  */
4891             if (TYPE_FLAGS (*type) & TYPE_FLAG_STUB)
4892               {
4893                 struct pending *ppt;
4894                 int i;
4895                 /* Name of the type, without "struct" or "union" */
4896                 char *typename = TYPE_TAG_NAME (*type);
4897
4898                 if (typename == NULL)
4899                   {
4900                     static struct complaint msg = {"need a type name", 0, 0};
4901                     complain (&msg);
4902                     break;
4903                   }
4904                 for (ppt = file_symbols; ppt; ppt = ppt->next)
4905                   {
4906                     for (i = 0; i < ppt->nsyms; i++)
4907                       {
4908                         struct symbol *sym = ppt->symbol[i];
4909                         
4910                         if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
4911                             && SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE
4912                             && (TYPE_CODE (SYMBOL_TYPE (sym)) ==
4913                                 TYPE_CODE (*type))
4914                             && STREQ (SYMBOL_NAME (sym), typename))
4915                           {
4916                             memcpy (*type, SYMBOL_TYPE (sym),
4917                                     sizeof (struct type));
4918                           }
4919                       }
4920                   }
4921               }
4922           }
4923           break;
4924
4925         default:
4926           {
4927             static struct complaint msg = {"\
4928 GDB internal error.  cleanup_undefined_types with bad type %d.", 0, 0};
4929             complain (&msg, TYPE_CODE (*type));
4930           }
4931           break;
4932         }
4933     }
4934
4935   undef_types_length = 0;
4936 }
4937
4938 /* Scan through all of the global symbols defined in the object file,
4939    assigning values to the debugging symbols that need to be assigned
4940    to.  Get these symbols from the minimal symbol table.  */
4941
4942 void
4943 scan_file_globals (objfile)
4944      struct objfile *objfile;
4945 {
4946   int hash;
4947   struct minimal_symbol *msymbol;
4948   struct symbol *sym, *prev, *rsym;
4949   struct objfile *resolve_objfile;
4950
4951   /* SVR4 based linkers copy referenced global symbols from shared
4952      libraries to the main executable.
4953      If we are scanning the symbols for a shared library, try to resolve
4954      them from the minimal symbols of the main executable first.  */
4955
4956   if (symfile_objfile && objfile != symfile_objfile)
4957     resolve_objfile = symfile_objfile;
4958   else
4959     resolve_objfile = objfile;
4960
4961   while (1)
4962     {
4963       /* Avoid expensive loop through all minimal symbols if there are
4964          no unresolved symbols.  */
4965       for (hash = 0; hash < HASHSIZE; hash++)
4966         {
4967           if (global_sym_chain[hash])
4968             break;
4969         }
4970       if (hash >= HASHSIZE)
4971         return;
4972
4973       for (msymbol = resolve_objfile -> msymbols;
4974            msymbol && SYMBOL_NAME (msymbol) != NULL;
4975            msymbol++)
4976         {
4977           QUIT;
4978
4979           /* Skip static symbols.  */
4980           switch (MSYMBOL_TYPE (msymbol))
4981             {
4982             case mst_file_text:
4983             case mst_file_data:
4984             case mst_file_bss:
4985               continue;
4986             default:
4987               break;
4988             }
4989
4990           prev = NULL;
4991
4992           /* Get the hash index and check all the symbols
4993              under that hash index. */
4994
4995           hash = hashname (SYMBOL_NAME (msymbol));
4996
4997           for (sym = global_sym_chain[hash]; sym;)
4998             {
4999               if (SYMBOL_NAME (msymbol)[0] == SYMBOL_NAME (sym)[0] &&
5000                   STREQ(SYMBOL_NAME (msymbol) + 1, SYMBOL_NAME (sym) + 1))
5001                 {
5002
5003                   struct alias_list *aliases;
5004
5005                   /* Splice this symbol out of the hash chain and
5006                      assign the value we have to it. */
5007                   if (prev)
5008                     {
5009                       SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
5010                     }
5011                   else
5012                     {
5013                       global_sym_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
5014                     }
5015                   
5016                   /* Check to see whether we need to fix up a common block.  */
5017                   /* Note: this code might be executed several times for
5018                      the same symbol if there are multiple references.  */
5019
5020                   /* If symbol has aliases, do minimal symbol fixups for each.
5021                      These live aliases/references weren't added to 
5022                      global_sym_chain hash but may also need to be fixed up. */
5023                   /* FIXME: Maybe should have added aliases to the global chain,                     resolved symbol name, then treated aliases as normal 
5024                      symbols?  Still, we wouldn't want to add_to_list. */
5025                   /* Now do the same for each alias of this symbol */
5026                   rsym = sym;
5027                   aliases = SYMBOL_ALIASES (sym);
5028                   while (rsym)
5029                     {
5030                       if (SYMBOL_CLASS (rsym) == LOC_BLOCK)
5031                         {
5032                           fix_common_block (rsym,
5033                                             SYMBOL_VALUE_ADDRESS (msymbol));
5034                         }
5035                       else
5036                         {
5037                           SYMBOL_VALUE_ADDRESS (rsym)
5038                             = SYMBOL_VALUE_ADDRESS (msymbol);
5039                         }
5040                       SYMBOL_SECTION (rsym) = SYMBOL_SECTION (msymbol);
5041                       if (aliases)
5042                         {
5043                           rsym = aliases->sym;
5044                           aliases = aliases->next;
5045                         }
5046                       else
5047                         rsym = NULL;
5048                     }
5049
5050                   
5051                   if (prev)
5052                     {
5053                       sym = SYMBOL_VALUE_CHAIN (prev);
5054                     }
5055                   else
5056                     {
5057                       sym = global_sym_chain[hash];
5058                     }
5059                 }
5060               else
5061                 {
5062                   prev = sym;
5063                   sym = SYMBOL_VALUE_CHAIN (sym);
5064                 }
5065             }
5066         }
5067       if (resolve_objfile == objfile)
5068         break;
5069       resolve_objfile = objfile;
5070     }
5071
5072   /* Change the storage class of any remaining unresolved globals to
5073      LOC_UNRESOLVED and remove them from the chain.  */
5074   for (hash = 0; hash < HASHSIZE; hash++)
5075     {
5076       sym = global_sym_chain[hash];
5077       while (sym)
5078         {
5079           prev = sym;
5080           sym = SYMBOL_VALUE_CHAIN (sym);
5081
5082           /* Change the symbol address from the misleading chain value
5083              to address zero.  */
5084           SYMBOL_VALUE_ADDRESS (prev) = 0;
5085
5086           /* Complain about unresolved common block symbols.  */
5087           if (SYMBOL_CLASS (prev) == LOC_STATIC)
5088             SYMBOL_CLASS (prev) = LOC_UNRESOLVED;
5089           else
5090             complain (&unresolved_sym_chain_complaint,
5091                       objfile -> name, SYMBOL_NAME (prev));
5092         }
5093     }
5094   memset (global_sym_chain, 0, sizeof (global_sym_chain));
5095 }
5096
5097 /* Initialize anything that needs initializing when starting to read
5098    a fresh piece of a symbol file, e.g. reading in the stuff corresponding
5099    to a psymtab.  */
5100
5101 void
5102 stabsread_init ()
5103 {
5104 }
5105
5106 /* Initialize anything that needs initializing when a completely new
5107    symbol file is specified (not just adding some symbols from another
5108    file, e.g. a shared library).  */
5109
5110 void
5111 stabsread_new_init ()
5112 {
5113   /* Empty the hash table of global syms looking for values.  */
5114   memset (global_sym_chain, 0, sizeof (global_sym_chain));
5115 }
5116
5117 /* Initialize anything that needs initializing at the same time as
5118    start_symtab() is called. */
5119
5120 void start_stabs ()
5121 {
5122   global_stabs = NULL;          /* AIX COFF */
5123   /* Leave FILENUM of 0 free for builtin types and this file's types.  */
5124   n_this_object_header_files = 1;
5125   type_vector_length = 0;
5126   type_vector = (struct type **) 0;
5127
5128   /* FIXME: If common_block_name is not already NULL, we should complain().  */
5129   common_block_name = NULL;
5130
5131   os9k_stabs = 0;
5132 }
5133
5134 /* Call after end_symtab() */
5135
5136 void end_stabs ()
5137 {
5138   if (type_vector)
5139     {
5140       free ((char *) type_vector);
5141     }
5142   type_vector = 0;
5143   type_vector_length = 0;
5144   previous_stab_code = 0;
5145 }
5146
5147 void
5148 finish_global_stabs (objfile)
5149      struct objfile *objfile;
5150 {
5151   if (global_stabs)
5152     {
5153       patch_block_stabs (global_symbols, global_stabs, objfile);
5154       free ((PTR) global_stabs);
5155       global_stabs = NULL;
5156     }
5157 }
5158
5159 /* Initializer for this module */
5160
5161 void
5162 _initialize_stabsread ()
5163 {
5164   undef_types_allocated = 20;
5165   undef_types_length = 0;
5166   undef_types = (struct type **)
5167     xmalloc (undef_types_allocated * sizeof (struct type *));
5168 }