]> Git Repo - binutils.git/blob - gdb/stabsread.c
* gcc.patch: Update for a different GCC (G++) bug.
[binutils.git] / gdb / stabsread.c
1 /* Support routines for decoding "stabs" debugging information format.
2    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
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., 675 Mass Ave, Cambridge, MA 02139, 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 "bfd.h"
29 #include "obstack.h"
30 #include "symtab.h"
31 #include "gdbtypes.h"
32 #include "symfile.h"
33 #include "objfiles.h"
34 #include "aout/stab_gnu.h"      /* We always use GNU stabs, not native */
35 #include "buildsym.h"
36 #include "complaints.h"
37 #include "demangle.h"
38
39 /* Ask stabsread.h to define the vars it normally declares `extern'.  */
40 #define EXTERN  /**/
41 #include "stabsread.h"          /* Our own declarations */
42 #undef  EXTERN
43
44 /* The routines that read and process a complete stabs for a C struct or 
45    C++ class pass lists of data member fields and lists of member function
46    fields in an instance of a field_info structure, as defined below.
47    This is part of some reorganization of low level C++ support and is
48    expected to eventually go away... (FIXME) */
49
50 struct field_info
51 {
52   struct nextfield
53     {
54       struct nextfield *next;
55       int visibility;
56       struct field field;
57     } *list;
58   struct next_fnfieldlist
59     {
60       struct next_fnfieldlist *next;
61       struct fn_fieldlist fn_fieldlist;
62     } *fnlist;
63 };
64
65 static struct type *
66 dbx_alloc_type PARAMS ((int [2], struct objfile *));
67
68 static void
69 read_huge_number PARAMS ((char **, int, long *, int *));
70
71 static void
72 patch_block_stabs PARAMS ((struct pending *, struct pending_stabs *,
73                            struct objfile *));
74
75 static void
76 fix_common_block PARAMS ((struct symbol *, int));
77
78 static struct type *
79 read_range_type PARAMS ((char **, int [2], struct objfile *));
80
81 static struct type *
82 read_sun_builtin_type PARAMS ((char **, int [2], struct objfile *));
83
84 static struct type *
85 read_sun_floating_type PARAMS ((char **, int [2], struct objfile *));
86
87 static struct type *
88 read_enum_type PARAMS ((char **, struct type *, struct objfile *));
89
90 static struct type *
91 rs6000_builtin_type PARAMS ((int));
92
93 static int
94 read_member_functions PARAMS ((struct field_info *, char **, struct type *,
95                                struct objfile *));
96
97 static int
98 read_struct_fields PARAMS ((struct field_info *, char **, struct type *,
99                             struct objfile *));
100
101 static int
102 read_baseclasses PARAMS ((struct field_info *, char **, struct type *,
103                           struct objfile *));
104
105 static int
106 read_tilde_fields PARAMS ((struct field_info *, char **, struct type *,
107                            struct objfile *));
108
109 static int
110 attach_fn_fields_to_type PARAMS ((struct field_info *, struct type *));
111
112 static int
113 attach_fields_to_type PARAMS ((struct field_info *, struct type *,
114                                struct objfile *));
115
116 static struct type *
117 read_struct_type PARAMS ((char **, struct type *, struct objfile *));
118
119 static struct type *
120 read_array_type PARAMS ((char **, struct type *, struct objfile *));
121
122 static struct type **
123 read_args PARAMS ((char **, int, struct objfile *));
124
125 static void
126 read_cpp_abbrev PARAMS ((struct field_info *, char **, struct type *,
127                          struct objfile *));
128
129 static const char vptr_name[] = { '_','v','p','t','r',CPLUS_MARKER,'\0' };
130 static const char vb_name[] =   { '_','v','b',CPLUS_MARKER,'\0' };
131
132 /* Define this as 1 if a pcc declaration of a char or short argument
133    gives the correct address.  Otherwise assume pcc gives the
134    address of the corresponding int, which is not the same on a
135    big-endian machine.  */
136
137 #ifndef BELIEVE_PCC_PROMOTION
138 #define BELIEVE_PCC_PROMOTION 0
139 #endif
140
141 /* During some calls to read_type (and thus to read_range_type), this
142    contains the name of the type being defined.  Range types are only
143    used in C as basic types.  We use the name to distinguish the otherwise
144    identical basic types "int" and "long" and their unsigned versions.
145    FIXME, this should disappear with better type management.  */
146
147 static char *long_kludge_name;
148
149 #if 0
150 struct complaint dbx_class_complaint =
151 {
152   "encountered DBX-style class variable debugging information.\n\
153 You seem to have compiled your program with \
154 \"g++ -g0\" instead of \"g++ -g\".\n\
155 Therefore GDB will not know about your class variables", 0, 0
156 };
157 #endif
158
159 struct complaint invalid_cpp_abbrev_complaint =
160   {"invalid C++ abbreviation `%s'", 0, 0};
161
162 struct complaint invalid_cpp_type_complaint =
163   {"C++ abbreviated type name unknown at symtab pos %d", 0, 0};
164
165 struct complaint member_fn_complaint =
166   {"member function type missing, got '%c'", 0, 0};
167
168 struct complaint const_vol_complaint =
169   {"const/volatile indicator missing, got '%c'", 0, 0};
170
171 struct complaint error_type_complaint =
172   {"debug info mismatch between compiler and debugger", 0, 0};
173
174 struct complaint invalid_member_complaint =
175   {"invalid (minimal) member type data format at symtab pos %d.", 0, 0};
176
177 struct complaint range_type_base_complaint =
178   {"base type %d of range type is not defined", 0, 0};
179
180 struct complaint reg_value_complaint =
181   {"register number too large in symbol %s", 0, 0};
182
183 struct complaint vtbl_notfound_complaint =
184   {"virtual function table pointer not found when defining class `%s'", 0, 0};
185
186 struct complaint unrecognized_cplus_name_complaint =
187   {"Unknown C++ symbol name `%s'", 0, 0};
188
189 struct complaint rs6000_builtin_complaint =
190   {"Unknown builtin type %d", 0, 0};
191
192 struct complaint stabs_general_complaint =
193   {"%s", 0, 0};
194
195 /* Make a list of forward references which haven't been defined.  */
196
197 static struct type **undef_types;
198 static int undef_types_allocated;
199 static int undef_types_length;
200
201 /* Check for and handle cretinous stabs symbol name continuation!  */
202 #define STABS_CONTINUE(pp)                              \
203   do {                                                  \
204     if (**(pp) == '\\') *(pp) = next_symbol_text ();    \
205   } while (0)
206
207 \f
208 int
209 hashname (name)
210      char *name;
211 {
212   register char *p = name;
213   register int total = p[0];
214   register int c;
215
216   c = p[1];
217   total += c << 2;
218   if (c)
219     {
220       c = p[2];
221       total += c << 4;
222       if (c)
223         {
224           total += p[3] << 6;
225         }
226     }
227
228   /* Ensure result is positive.  */
229   if (total < 0)
230     {
231       total += (1000 << 6);
232     }
233   return (total % HASHSIZE);
234 }
235
236 \f
237 /* Look up a dbx type-number pair.  Return the address of the slot
238    where the type for that number-pair is stored.
239    The number-pair is in TYPENUMS.
240
241    This can be used for finding the type associated with that pair
242    or for associating a new type with the pair.  */
243
244 struct type **
245 dbx_lookup_type (typenums)
246      int typenums[2];
247 {
248   register int filenum = typenums[0];
249   register int index = typenums[1];
250   unsigned old_len;
251   register int real_filenum;
252   register struct header_file *f;
253   int f_orig_length;
254
255   if (filenum == -1)            /* -1,-1 is for temporary types.  */
256     return 0;
257
258   if (filenum < 0 || filenum >= n_this_object_header_files)
259     error ("Invalid symbol data: type number (%d,%d) out of range at symtab pos %d.",
260            filenum, index, symnum);
261
262   if (filenum == 0)
263     {
264       if (index < 0)
265         {
266           /* Caller wants address of address of type.  We think
267              that negative (rs6k builtin) types will never appear as
268              "lvalues", (nor should they), so we stuff the real type
269              pointer into a temp, and return its address.  If referenced,
270              this will do the right thing.  */
271           static struct type *temp_type;
272
273           temp_type = rs6000_builtin_type(index);
274           return &temp_type;
275         }
276
277       /* Type is defined outside of header files.
278          Find it in this object file's type vector.  */
279       if (index >= type_vector_length)
280         {
281           old_len = type_vector_length;
282           if (old_len == 0)
283             {
284               type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
285               type_vector = (struct type **)
286                 malloc (type_vector_length * sizeof (struct type *));
287             }
288           while (index >= type_vector_length)
289             {
290               type_vector_length *= 2;
291             }
292           type_vector = (struct type **)
293             xrealloc ((char *) type_vector,
294                       (type_vector_length * sizeof (struct type *)));
295           memset (&type_vector[old_len], 0,
296                   (type_vector_length - old_len) * sizeof (struct type *));
297         }
298       return (&type_vector[index]);
299     }
300   else
301     {
302       real_filenum = this_object_header_files[filenum];
303
304       if (real_filenum >= n_header_files)
305         {
306           abort ();
307         }
308
309       f = &header_files[real_filenum];
310
311       f_orig_length = f->length;
312       if (index >= f_orig_length)
313         {
314           while (index >= f->length)
315             {
316               f->length *= 2;
317             }
318           f->vector = (struct type **)
319             xrealloc ((char *) f->vector, f->length * sizeof (struct type *));
320           memset (&f->vector[f_orig_length], 0,
321                   (f->length - f_orig_length) * sizeof (struct type *));
322         }
323       return (&f->vector[index]);
324     }
325 }
326
327 /* Make sure there is a type allocated for type numbers TYPENUMS
328    and return the type object.
329    This can create an empty (zeroed) type object.
330    TYPENUMS may be (-1, -1) to return a new type object that is not
331    put into the type vector, and so may not be referred to by number. */
332
333 static struct type *
334 dbx_alloc_type (typenums, objfile)
335      int typenums[2];
336      struct objfile *objfile;
337 {
338   register struct type **type_addr;
339
340   if (typenums[0] == -1)
341     {
342       return (alloc_type (objfile));
343     }
344
345   type_addr = dbx_lookup_type (typenums);
346
347   /* If we are referring to a type not known at all yet,
348      allocate an empty type for it.
349      We will fill it in later if we find out how.  */
350   if (*type_addr == 0)
351     {
352       *type_addr = alloc_type (objfile);
353     }
354
355   return (*type_addr);
356 }
357
358 /* for all the stabs in a given stab vector, build appropriate types 
359    and fix their symbols in given symbol vector. */
360
361 static void
362 patch_block_stabs (symbols, stabs, objfile)
363      struct pending *symbols;
364      struct pending_stabs *stabs;
365      struct objfile *objfile;
366 {
367   int ii;
368   char *name;
369   char *pp;
370   struct symbol *sym;
371
372   if (stabs)
373     {
374       
375       /* for all the stab entries, find their corresponding symbols and 
376          patch their types! */
377       
378       for (ii = 0; ii < stabs->count; ++ii)
379         {
380           name = stabs->stab[ii];
381           pp = (char*) strchr (name, ':');
382           sym = find_symbol_in_list (symbols, name, pp-name);
383           if (!sym)
384             {
385 #ifndef IBM6000_TARGET
386               printf ("ERROR! stab symbol not found!\n");       /* FIXME */
387 #endif
388             }
389           else
390             {
391               pp += 2;
392               if (*(pp-1) == 'F' || *(pp-1) == 'f')
393                 {
394                   SYMBOL_TYPE (sym) =
395                     lookup_function_type (read_type (&pp, objfile));
396                 }
397               else
398                 {
399                   SYMBOL_TYPE (sym) = read_type (&pp, objfile);
400                 }
401             }
402         }
403     }
404 }
405
406 \f
407 /* Read a number by which a type is referred to in dbx data,
408    or perhaps read a pair (FILENUM, TYPENUM) in parentheses.
409    Just a single number N is equivalent to (0,N).
410    Return the two numbers by storing them in the vector TYPENUMS.
411    TYPENUMS will then be used as an argument to dbx_lookup_type.  */
412
413 void
414 read_type_number (pp, typenums)
415      register char **pp;
416      register int *typenums;
417 {
418   if (**pp == '(')
419     {
420       (*pp)++;
421       typenums[0] = read_number (pp, ',');
422       typenums[1] = read_number (pp, ')');
423     }
424   else
425     {
426       typenums[0] = 0;
427       typenums[1] = read_number (pp, 0);
428     }
429 }
430
431 \f
432 /* To handle GNU C++ typename abbreviation, we need to be able to
433    fill in a type's name as soon as space for that type is allocated.
434    `type_synonym_name' is the name of the type being allocated.
435    It is cleared as soon as it is used (lest all allocated types
436    get this name).  */
437
438 static char *type_synonym_name;
439
440 /* ARGSUSED */
441 struct symbol *
442 define_symbol (valu, string, desc, type, objfile)
443      unsigned int valu;
444      char *string;
445      int desc;
446      int type;
447      struct objfile *objfile;
448 {
449   register struct symbol *sym;
450   char *p = (char *) strchr (string, ':');
451   int deftype;
452   int synonym = 0;
453   register int i;
454   struct type *temptype;
455
456   /* We would like to eliminate nameless symbols, but keep their types.
457      E.g. stab entry ":t10=*2" should produce a type 10, which is a pointer
458      to type 2, but, should not create a symbol to address that type. Since
459      the symbol will be nameless, there is no way any user can refer to it. */
460
461   int nameless;
462
463   /* Ignore syms with empty names.  */
464   if (string[0] == 0)
465     return 0;
466
467   /* Ignore old-style symbols from cc -go  */
468   if (p == 0)
469     return 0;
470
471   /* If a nameless stab entry, all we need is the type, not the symbol.
472      e.g. ":t10=*2" or a nameless enum like " :T16=ered:0,green:1,blue:2,;" */
473   nameless = (p == string || ((string[0] == ' ') && (string[1] == ':')));
474
475   sym = (struct symbol *) 
476     obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
477   memset (sym, 0, sizeof (struct symbol));
478
479   if (processing_gcc_compilation)
480     {
481       /* GCC 2.x puts the line number in desc.  SunOS apparently puts in the
482          number of bytes occupied by a type or object, which we ignore.  */
483       SYMBOL_LINE(sym) = desc;
484     }
485   else
486     {
487       SYMBOL_LINE(sym) = 0;                     /* unknown */
488     }
489
490   if (string[0] == CPLUS_MARKER)
491     {
492       /* Special GNU C++ names.  */
493       switch (string[1])
494         {
495           case 't':
496             SYMBOL_NAME (sym) = obsavestring ("this", strlen ("this"),
497                                               &objfile -> symbol_obstack);
498             break;
499
500           case 'v': /* $vtbl_ptr_type */
501             /* Was: SYMBOL_NAME (sym) = "vptr"; */
502             goto normal;
503
504           case 'e':
505             SYMBOL_NAME (sym) = obsavestring ("eh_throw", strlen ("eh_throw"),
506                                               &objfile -> symbol_obstack);
507             break;
508
509           case '_':
510             /* This was an anonymous type that was never fixed up.  */
511             goto normal;
512
513           default:
514             complain (unrecognized_cplus_name_complaint, string);
515             goto normal;                /* Do *something* with it */
516         }
517     }
518   else
519     {
520     normal:
521       SYMBOL_LANGUAGE (sym) = current_subfile -> language;
522       SYMBOL_NAME (sym) = (char *)
523         obstack_alloc (&objfile -> symbol_obstack, ((p - string) + 1));
524       /* Open-coded bcopy--saves function call time.  */
525       /* FIXME:  Does it really?  Try replacing with simple strcpy and
526          try it on an executable with a large symbol table. */
527       {
528         register char *p1 = string;
529         register char *p2 = SYMBOL_NAME (sym);
530         while (p1 != p)
531           {
532             *p2++ = *p1++;
533           }
534         *p2++ = '\0';
535       }
536
537       /* If this symbol is from a C++ compilation, then attempt to cache the
538          demangled form for future reference.  This is a typical time versus
539          space tradeoff, that was decided in favor of time because it sped up
540          C++ symbol lookups by a factor of about 20. */
541
542       SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
543     }
544   p++;
545
546   /* Determine the type of name being defined.  */
547   /* The Acorn RISC machine's compiler can put out locals that don't
548      start with "234=" or "(3,4)=", so assume anything other than the
549      deftypes we know how to handle is a local.  */
550   if (!strchr ("cfFGpPrStTvVXCR", *p))
551     deftype = 'l';
552   else
553     deftype = *p++;
554
555   /* c is a special case, not followed by a type-number.
556      SYMBOL:c=iVALUE for an integer constant symbol.
557      SYMBOL:c=rVALUE for a floating constant symbol.
558      SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
559         e.g. "b:c=e6,0" for "const b = blob1"
560         (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;").  */
561   if (deftype == 'c')
562     {
563       if (*p++ != '=')
564         error ("Invalid symbol data at symtab pos %d.", symnum);
565       switch (*p++)
566         {
567         case 'r':
568           {
569             double d = atof (p);
570             char *dbl_valu;
571
572             SYMBOL_TYPE (sym) = lookup_fundamental_type (objfile,
573                                                          FT_DBL_PREC_FLOAT);
574             dbl_valu = (char *)
575               obstack_alloc (&objfile -> symbol_obstack, sizeof (double));
576             memcpy (dbl_valu, &d, sizeof (double));
577             SWAP_TARGET_AND_HOST (dbl_valu, sizeof (double));
578             SYMBOL_VALUE_BYTES (sym) = dbl_valu;
579             SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
580           }
581           break;
582         case 'i':
583           {
584             SYMBOL_TYPE (sym) = lookup_fundamental_type (objfile,
585                                                          FT_INTEGER);
586             SYMBOL_VALUE (sym) = atoi (p);
587             SYMBOL_CLASS (sym) = LOC_CONST;
588           }
589           break;
590         case 'e':
591           /* SYMBOL:c=eTYPE,INTVALUE for an enum constant symbol.
592              e.g. "b:c=e6,0" for "const b = blob1"
593              (where type 6 is defined by "blobs:t6=eblob1:0,blob2:1,;").  */
594           {
595             int typenums[2];
596             
597             read_type_number (&p, typenums);
598             if (*p++ != ',')
599               error ("Invalid symbol data: no comma in enum const symbol");
600             
601             SYMBOL_TYPE (sym) = *dbx_lookup_type (typenums);
602             SYMBOL_VALUE (sym) = atoi (p);
603             SYMBOL_CLASS (sym) = LOC_CONST;
604           }
605           break;
606         default:
607           error ("Invalid symbol data at symtab pos %d.", symnum);
608         }
609       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
610       add_symbol_to_list (sym, &file_symbols);
611       return sym;
612     }
613
614   /* Now usually comes a number that says which data type,
615      and possibly more stuff to define the type
616      (all of which is handled by read_type)  */
617
618   if (deftype == 'p' && *p == 'F')
619     /* pF is a two-letter code that means a function parameter in Fortran.
620        The type-number specifies the type of the return value.
621        Translate it into a pointer-to-function type.  */
622     {
623       p++;
624       SYMBOL_TYPE (sym)
625         = lookup_pointer_type (lookup_function_type (read_type (&p, objfile)));
626     }
627   else
628     {
629       /* The symbol class letter is followed by a type (typically the
630          type of the symbol, or its return-type, or etc).  Read it.  */
631
632       synonym = *p == 't';
633
634       if (synonym)
635         {
636           p++;
637           type_synonym_name = obsavestring (SYMBOL_NAME (sym),
638                                             strlen (SYMBOL_NAME (sym)),
639                                             &objfile -> symbol_obstack);
640         }
641
642       /* Here we save the name of the symbol for read_range_type, which
643          ends up reading in the basic types.  In stabs, unfortunately there
644          is no distinction between "int" and "long" types except their
645          names.  Until we work out a saner type policy (eliminating most
646          builtin types and using the names specified in the files), we
647          save away the name so that far away from here in read_range_type,
648          we can examine it to decide between "int" and "long".  FIXME.  */
649       long_kludge_name = SYMBOL_NAME (sym);
650
651       SYMBOL_TYPE (sym) = read_type (&p, objfile);
652     }
653
654   switch (deftype)
655     {
656     case 'C':
657       /* The name of a caught exception.  */
658       SYMBOL_CLASS (sym) = LOC_LABEL;
659       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
660       SYMBOL_VALUE_ADDRESS (sym) = valu;
661       add_symbol_to_list (sym, &local_symbols);
662       break;
663
664     case 'f':
665       /* A static function definition.  */
666       SYMBOL_CLASS (sym) = LOC_BLOCK;
667       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
668       add_symbol_to_list (sym, &file_symbols);
669       /* fall into process_function_types.  */
670
671     process_function_types:
672       /* Function result types are described as the result type in stabs.
673          We need to convert this to the function-returning-type-X type
674          in GDB.  E.g. "int" is converted to "function returning int".  */
675       if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_FUNC)
676         {
677 #if 0
678           /* This code doesn't work -- it needs to realloc and can't.  */
679           /* Attempt to set up to record a function prototype... */
680           struct type *new = alloc_type (objfile);
681
682           /* Generate a template for the type of this function.  The 
683              types of the arguments will be added as we read the symbol 
684              table. */
685           *new = *lookup_function_type (SYMBOL_TYPE(sym));
686           SYMBOL_TYPE(sym) = new;
687           TYPE_OBJFILE (new) = objfile;
688           in_function_type = new;
689 #else
690           SYMBOL_TYPE (sym) = lookup_function_type (SYMBOL_TYPE (sym));
691 #endif
692         }
693       /* fall into process_prototype_types */
694
695     process_prototype_types:
696       /* Sun acc puts declared types of arguments here.  We don't care
697          about their actual types (FIXME -- we should remember the whole
698          function prototype), but the list may define some new types
699          that we have to remember, so we must scan it now.  */
700       while (*p == ';') {
701         p++;
702         read_type (&p, objfile);
703       }
704       break;
705
706     case 'F':
707       /* A global function definition.  */
708       SYMBOL_CLASS (sym) = LOC_BLOCK;
709       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
710       add_symbol_to_list (sym, &global_symbols);
711       goto process_function_types;
712
713     case 'G':
714       /* For a class G (global) symbol, it appears that the
715          value is not correct.  It is necessary to search for the
716          corresponding linker definition to find the value.
717          These definitions appear at the end of the namelist.  */
718       i = hashname (SYMBOL_NAME (sym));
719       SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
720       global_sym_chain[i] = sym;
721       SYMBOL_CLASS (sym) = LOC_STATIC;
722       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
723       add_symbol_to_list (sym, &global_symbols);
724       break;
725
726       /* This case is faked by a conditional above,
727          when there is no code letter in the dbx data.
728          Dbx data never actually contains 'l'.  */
729     case 'l':
730       SYMBOL_CLASS (sym) = LOC_LOCAL;
731       SYMBOL_VALUE (sym) = valu;
732       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
733       add_symbol_to_list (sym, &local_symbols);
734       break;
735
736     case 'p':
737       /* Normally this is a parameter, a LOC_ARG.  On the i960, it
738          can also be a LOC_LOCAL_ARG depending on symbol type.  */
739 #ifndef DBX_PARM_SYMBOL_CLASS
740 #define DBX_PARM_SYMBOL_CLASS(type)     LOC_ARG
741 #endif
742       SYMBOL_CLASS (sym) = DBX_PARM_SYMBOL_CLASS (type);
743       SYMBOL_VALUE (sym) = valu;
744       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
745 #if 0
746       /* This doesn't work yet.  */
747       add_param_to_type (&in_function_type, sym);
748 #endif
749       add_symbol_to_list (sym, &local_symbols);
750
751       /* If it's gcc-compiled, if it says `short', believe it.  */
752       if (processing_gcc_compilation || BELIEVE_PCC_PROMOTION)
753         break;
754
755 #if defined(BELIEVE_PCC_PROMOTION_TYPE)
756       /* This macro is defined on machines (e.g. sparc) where
757          we should believe the type of a PCC 'short' argument,
758          but shouldn't believe the address (the address is
759          the address of the corresponding int).  Note that
760          this is only different from the BELIEVE_PCC_PROMOTION
761          case on big-endian machines.
762
763          My guess is that this correction, as opposed to changing
764          the parameter to an 'int' (as done below, for PCC
765          on most machines), is the right thing to do
766          on all machines, but I don't want to risk breaking
767          something that already works.  On most PCC machines,
768          the sparc problem doesn't come up because the calling
769          function has to zero the top bytes (not knowing whether
770          the called function wants an int or a short), so there
771          is no practical difference between an int and a short
772          (except perhaps what happens when the GDB user types
773          "print short_arg = 0x10000;"). 
774
775          Hacked for SunOS 4.1 by [email protected].  In 4.1, the compiler
776          actually produces the correct address (we don't need to fix it
777          up).  I made this code adapt so that it will offset the symbol
778          if it was pointing at an int-aligned location and not
779          otherwise.  This way you can use the same gdb for 4.0.x and
780          4.1 systems.
781
782         If the parameter is shorter than an int, and is integral
783         (e.g. char, short, or unsigned equivalent), and is claimed to
784         be passed on an integer boundary, don't believe it!  Offset the
785         parameter's address to the tail-end of that integer.  */
786
787       temptype = lookup_fundamental_type (objfile, FT_INTEGER);
788       if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (temptype)
789           && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT
790           && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (temptype))
791         {
792           SYMBOL_VALUE (sym) += TYPE_LENGTH (temptype)
793                               - TYPE_LENGTH (SYMBOL_TYPE (sym));
794         }
795       break;
796
797 #else /* no BELIEVE_PCC_PROMOTION_TYPE.  */
798
799       /* If PCC says a parameter is a short or a char,
800          it is really an int.  */
801       temptype = lookup_fundamental_type (objfile, FT_INTEGER);
802       if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (temptype)
803           && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT)
804         {
805           SYMBOL_TYPE (sym) = TYPE_UNSIGNED (SYMBOL_TYPE (sym))
806             ? lookup_fundamental_type (objfile, FT_UNSIGNED_INTEGER)
807               : temptype;
808       }
809       break;
810
811 #endif /* no BELIEVE_PCC_PROMOTION_TYPE.  */
812
813     case 'P':
814       /* acc seems to use P to delare the prototypes of functions that
815          are referenced by this file.  gdb is not prepared to deal
816          with this extra information.  FIXME, it ought to.  */
817       if (type == N_FUN)
818         goto process_prototype_types;
819
820       /* Parameter which is in a register.  */
821       SYMBOL_CLASS (sym) = LOC_REGPARM;
822       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
823       if (SYMBOL_VALUE (sym) >= NUM_REGS)
824         {
825           complain (&reg_value_complaint, SYMBOL_SOURCE_NAME (sym));
826           SYMBOL_VALUE (sym) = SP_REGNUM;  /* Known safe, though useless */
827         }
828       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
829       add_symbol_to_list (sym, &local_symbols);
830       break;
831
832     case 'R':
833     case 'r':
834       /* Register variable (either global or local).  */
835       SYMBOL_CLASS (sym) = LOC_REGISTER;
836       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
837       if (SYMBOL_VALUE (sym) >= NUM_REGS)
838         {
839           complain (&reg_value_complaint, SYMBOL_SOURCE_NAME (sym));
840           SYMBOL_VALUE (sym) = SP_REGNUM;  /* Known safe, though useless */
841         }
842       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
843       if (within_function)
844         add_symbol_to_list (sym, &local_symbols);
845       else
846         add_symbol_to_list (sym, &file_symbols);
847       break;
848
849     case 'S':
850       /* Static symbol at top level of file */
851       SYMBOL_CLASS (sym) = LOC_STATIC;
852       SYMBOL_VALUE_ADDRESS (sym) = valu;
853       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
854       add_symbol_to_list (sym, &file_symbols);
855       break;
856
857     case 't':
858       /* For a nameless type, we don't want a create a symbol, thus we
859          did not use `sym'. Return without further processing. */
860       if (nameless) return NULL;
861
862       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
863       SYMBOL_VALUE (sym) = valu;
864       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
865       /* C++ vagaries: we may have a type which is derived from
866         a base type which did not have its name defined when the
867         derived class was output.  We fill in the derived class's
868         base part member's name here in that case.  */
869       if (TYPE_NAME (SYMBOL_TYPE (sym)) != NULL)
870         if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
871                  || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_UNION)
872                 && TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)))
873          {
874            int j;
875            for (j = TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)) - 1; j >= 0; j--)
876              if (TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) == 0)
877                TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) =
878                  type_name_no_tag (TYPE_BASECLASS (SYMBOL_TYPE (sym), j));
879          }
880
881       add_symbol_to_list (sym, &file_symbols);
882       break;
883
884     case 'T':
885       /* For a nameless type, we don't want a create a symbol, thus we
886          did not use `sym'. Return without further processing. */
887       if (nameless) return NULL;
888
889       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
890       SYMBOL_VALUE (sym) = valu;
891       SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
892       if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
893         TYPE_NAME (SYMBOL_TYPE (sym))
894           = obconcat (&objfile -> type_obstack, "",
895                       (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_ENUM
896                        ? "enum "
897                        : (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
898                           ? "struct " : "union ")),
899                       SYMBOL_NAME (sym));
900       add_symbol_to_list (sym, &file_symbols);
901
902       if (synonym)
903         {
904           /* Clone the sym and then modify it. */
905           register struct symbol *typedef_sym = (struct symbol *)
906             obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
907           *typedef_sym = *sym;
908           SYMBOL_CLASS (typedef_sym) = LOC_TYPEDEF;
909           SYMBOL_VALUE (typedef_sym) = valu;
910           SYMBOL_NAMESPACE (typedef_sym) = VAR_NAMESPACE;
911           add_symbol_to_list (typedef_sym, &file_symbols);
912         }
913       break;
914
915     case 'V':
916       /* Static symbol of local scope */
917       SYMBOL_CLASS (sym) = LOC_STATIC;
918       SYMBOL_VALUE_ADDRESS (sym) = valu;
919       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
920       add_symbol_to_list (sym, &local_symbols);
921       break;
922
923     case 'v':
924       /* Reference parameter */
925       SYMBOL_CLASS (sym) = LOC_REF_ARG;
926       SYMBOL_VALUE (sym) = valu;
927       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
928       add_symbol_to_list (sym, &local_symbols);
929       break;
930
931     case 'X':
932       /* This is used by Sun FORTRAN for "function result value".
933          Sun claims ("dbx and dbxtool interfaces", 2nd ed)
934          that Pascal uses it too, but when I tried it Pascal used
935          "x:3" (local symbol) instead.  */
936       SYMBOL_CLASS (sym) = LOC_LOCAL;
937       SYMBOL_VALUE (sym) = valu;
938       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
939       add_symbol_to_list (sym, &local_symbols);
940       break;
941
942     default:
943       error ("Invalid symbol data: unknown symbol-type code `%c' at symtab pos %d.", deftype, symnum);
944     }
945   return sym;
946 }
947
948 \f
949 /* Skip rest of this symbol and return an error type.
950
951    General notes on error recovery:  error_type always skips to the
952    end of the symbol (modulo cretinous dbx symbol name continuation).
953    Thus code like this:
954
955    if (*(*pp)++ != ';')
956      return error_type (pp);
957
958    is wrong because if *pp starts out pointing at '\0' (typically as the
959    result of an earlier error), it will be incremented to point to the
960    start of the next symbol, which might produce strange results, at least
961    if you run off the end of the string table.  Instead use
962
963    if (**pp != ';')
964      return error_type (pp);
965    ++*pp;
966
967    or
968
969    if (**pp != ';')
970      foo = error_type (pp);
971    else
972      ++*pp;
973
974    And in case it isn't obvious, the point of all this hair is so the compiler
975    can define new types and new syntaxes, and old versions of the
976    debugger will be able to read the new symbol tables.  */
977
978 struct type *
979 error_type (pp)
980      char **pp;
981 {
982   complain (&error_type_complaint);
983   while (1)
984     {
985       /* Skip to end of symbol.  */
986       while (**pp != '\0')
987         {
988           (*pp)++;
989         }
990
991       /* Check for and handle cretinous dbx symbol name continuation!  */
992       if ((*pp)[-1] == '\\')
993         {
994           *pp = next_symbol_text ();
995         }
996       else
997         {
998           break;
999         }
1000     }
1001   return (builtin_type_error);
1002 }
1003
1004 \f
1005 /* Read a dbx type reference or definition;
1006    return the type that is meant.
1007    This can be just a number, in which case it references
1008    a type already defined and placed in type_vector.
1009    Or the number can be followed by an =, in which case
1010    it means to define a new type according to the text that
1011    follows the =.  */
1012
1013 struct type *
1014 read_type (pp, objfile)
1015      register char **pp;
1016      struct objfile *objfile;
1017 {
1018   register struct type *type = 0;
1019   struct type *type1;
1020   int typenums[2];
1021   int xtypenums[2];
1022   char type_descriptor;
1023
1024   /* Read type number if present.  The type number may be omitted.
1025      for instance in a two-dimensional array declared with type
1026      "ar1;1;10;ar1;1;10;4".  */
1027   if ((**pp >= '0' && **pp <= '9')
1028       || **pp == '(')
1029     {
1030       read_type_number (pp, typenums);
1031       
1032       /* Type is not being defined here.  Either it already exists,
1033          or this is a forward reference to it.  dbx_alloc_type handles
1034          both cases.  */
1035       if (**pp != '=')
1036         return dbx_alloc_type (typenums, objfile);
1037
1038       /* Type is being defined here.  */
1039 #if 0 /* Callers aren't prepared for a NULL result!  FIXME -- metin!  */
1040       {
1041         struct type *tt;
1042
1043         /* if such a type already exists, this is an unnecessary duplication
1044            of the stab string, which is common in (RS/6000) xlc generated
1045            objects.  In that case, simply return NULL and let the caller take
1046            care of it. */
1047
1048         tt = *dbx_lookup_type (typenums);
1049         if (tt && tt->length && tt->code)
1050           return NULL;
1051       }
1052 #endif
1053
1054       *pp += 2;
1055     }
1056   else
1057     {
1058       /* 'typenums=' not present, type is anonymous.  Read and return
1059          the definition, but don't put it in the type vector.  */
1060       typenums[0] = typenums[1] = -1;
1061       (*pp)++;
1062     }
1063
1064   type_descriptor = (*pp)[-1];
1065   switch (type_descriptor)
1066     {
1067     case 'x':
1068       {
1069         enum type_code code;
1070
1071         /* Used to index through file_symbols.  */
1072         struct pending *ppt;
1073         int i;
1074         
1075         /* Name including "struct", etc.  */
1076         char *type_name;
1077         
1078         /* Name without "struct", etc.  */
1079         char *type_name_only;
1080
1081         {
1082           char *prefix;
1083           char *from, *to;
1084           
1085           /* Set the type code according to the following letter.  */
1086           switch ((*pp)[0])
1087             {
1088             case 's':
1089               code = TYPE_CODE_STRUCT;
1090               prefix = "struct ";
1091               break;
1092             case 'u':
1093               code = TYPE_CODE_UNION;
1094               prefix = "union ";
1095               break;
1096             case 'e':
1097               code = TYPE_CODE_ENUM;
1098               prefix = "enum ";
1099               break;
1100             default:
1101               return error_type (pp);
1102             }
1103           
1104           to = type_name = (char *)
1105             obstack_alloc (&objfile -> type_obstack,
1106                            (strlen (prefix) +
1107                             ((char *) strchr (*pp, ':') - (*pp)) + 1));
1108         
1109           /* Copy the prefix.  */
1110           from = prefix;
1111           while ((*to++ = *from++) != '\0')
1112             ;
1113           to--; 
1114         
1115           type_name_only = to;
1116
1117           /* Copy the name.  */
1118           from = *pp + 1;
1119           while ((*to++ = *from++) != ':')
1120             ;
1121           *--to = '\0';
1122           
1123           /* Set the pointer ahead of the name which we just read.  */
1124           *pp = from;
1125         
1126 #if 0
1127           /* The following hack is clearly wrong, because it doesn't
1128              check whether we are in a baseclass.  I tried to reproduce
1129              the case that it is trying to fix, but I couldn't get
1130              g++ to put out a cross reference to a basetype.  Perhaps
1131              it doesn't do it anymore.  */
1132           /* Note: for C++, the cross reference may be to a base type which
1133              has not yet been seen.  In this case, we skip to the comma,
1134              which will mark the end of the base class name.  (The ':'
1135              at the end of the base class name will be skipped as well.)
1136              But sometimes (ie. when the cross ref is the last thing on
1137              the line) there will be no ','.  */
1138           from = (char *) strchr (*pp, ',');
1139           if (from)
1140             *pp = from;
1141 #endif /* 0 */
1142         }
1143
1144         /* Now check to see whether the type has already been declared.  */
1145         /* This is necessary at least in the case where the
1146            program says something like
1147              struct foo bar[5];
1148            The compiler puts out a cross-reference; we better find
1149            set the length of the structure correctly so we can
1150            set the length of the array.  */
1151         for (ppt = file_symbols; ppt; ppt = ppt->next)
1152           for (i = 0; i < ppt->nsyms; i++)
1153             {
1154               struct symbol *sym = ppt->symbol[i];
1155
1156               if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
1157                   && SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE
1158                   && (TYPE_CODE (SYMBOL_TYPE (sym)) == code)
1159                   && STREQ (SYMBOL_NAME (sym), type_name_only))
1160                 {
1161                   obstack_free (&objfile -> type_obstack, type_name);
1162                   type = SYMBOL_TYPE (sym);
1163                   return type;
1164                 }
1165             }
1166         
1167         /* Didn't find the type to which this refers, so we must
1168            be dealing with a forward reference.  Allocate a type
1169            structure for it, and keep track of it so we can
1170            fill in the rest of the fields when we get the full
1171            type.  */
1172         type = dbx_alloc_type (typenums, objfile);
1173         TYPE_CODE (type) = code;
1174         TYPE_NAME (type) = type_name;
1175         INIT_CPLUS_SPECIFIC(type);
1176         TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
1177
1178         add_undefined_type (type);
1179         return type;
1180       }
1181
1182     case '-':                           /* RS/6000 built-in type */
1183     case '0':
1184     case '1':
1185     case '2':
1186     case '3':
1187     case '4':
1188     case '5':
1189     case '6':
1190     case '7':
1191     case '8':
1192     case '9':
1193     case '(':
1194       (*pp)--;
1195       read_type_number (pp, xtypenums);
1196       type = *dbx_lookup_type (xtypenums);
1197       if (type == 0)
1198         type = lookup_fundamental_type (objfile, FT_VOID);
1199       if (typenums[0] != -1)
1200         *dbx_lookup_type (typenums) = type;
1201       break;
1202
1203     /* In the following types, we must be sure to overwrite any existing
1204        type that the typenums refer to, rather than allocating a new one
1205        and making the typenums point to the new one.  This is because there
1206        may already be pointers to the existing type (if it had been
1207        forward-referenced), and we must change it to a pointer, function,
1208        reference, or whatever, *in-place*.  */
1209
1210     case '*':
1211       type1 = read_type (pp, objfile);
1212       type = make_pointer_type (type1, dbx_lookup_type (typenums));
1213       break;
1214
1215     case '&':                           /* Reference to another type */
1216       type1 = read_type (pp, objfile);
1217       type = make_reference_type (type1, dbx_lookup_type (typenums));
1218       break;
1219
1220     case 'f':                           /* Function returning another type */
1221       type1 = read_type (pp, objfile);
1222       type = make_function_type (type1, dbx_lookup_type (typenums));
1223       break;
1224
1225     case 'k':                           /* Const qualifier on some type (Sun) */
1226       type = read_type (pp, objfile);
1227       /* FIXME! For now, we ignore const and volatile qualifiers.  */
1228       break;
1229
1230     case 'B':                           /* Volatile qual on some type (Sun) */
1231       type = read_type (pp, objfile);
1232       /* FIXME! For now, we ignore const and volatile qualifiers.  */
1233       break;
1234
1235 /* FIXME -- we should be doing smash_to_XXX types here.  */
1236     case '@':                           /* Member (class & variable) type */
1237       {
1238         struct type *domain = read_type (pp, objfile);
1239         struct type *memtype;
1240
1241         if (**pp != ',')
1242           /* Invalid member type data format.  */
1243           return error_type (pp);
1244         ++*pp;
1245
1246         memtype = read_type (pp, objfile);
1247         type = dbx_alloc_type (typenums, objfile);
1248         smash_to_member_type (type, domain, memtype);
1249       }
1250       break;
1251
1252     case '#':                           /* Method (class & fn) type */
1253       if ((*pp)[0] == '#')
1254         {
1255           /* We'll get the parameter types from the name.  */
1256           struct type *return_type;
1257
1258           (*pp)++;
1259           return_type = read_type (pp, objfile);
1260           if (*(*pp)++ != ';')
1261             complain (&invalid_member_complaint, symnum);
1262           type = allocate_stub_method (return_type);
1263           if (typenums[0] != -1)
1264             *dbx_lookup_type (typenums) = type;
1265         }
1266       else
1267         {
1268           struct type *domain = read_type (pp, objfile);
1269           struct type *return_type;
1270           struct type **args;
1271
1272           if (*(*pp)++ != ',')
1273             error ("invalid member type data format, at symtab pos %d.",
1274                    symnum);
1275
1276           return_type = read_type (pp, objfile);
1277           args = read_args (pp, ';', objfile);
1278           type = dbx_alloc_type (typenums, objfile);
1279           smash_to_method_type (type, domain, return_type, args);
1280         }
1281       break;
1282
1283     case 'r':                           /* Range type */
1284       type = read_range_type (pp, typenums, objfile);
1285       if (typenums[0] != -1)
1286         *dbx_lookup_type (typenums) = type;
1287       break;
1288
1289     case 'b':                           /* Sun ACC builtin int type */
1290       type = read_sun_builtin_type (pp, typenums, objfile);
1291       if (typenums[0] != -1)
1292         *dbx_lookup_type (typenums) = type;
1293       break;
1294
1295     case 'R':                           /* Sun ACC builtin float type */
1296       type = read_sun_floating_type (pp, typenums, objfile);
1297       if (typenums[0] != -1)
1298         *dbx_lookup_type (typenums) = type;
1299       break;
1300     
1301     case 'e':                           /* Enumeration type */
1302       type = dbx_alloc_type (typenums, objfile);
1303       type = read_enum_type (pp, type, objfile);
1304       *dbx_lookup_type (typenums) = type;
1305       break;
1306
1307     case 's':                           /* Struct type */
1308     case 'u':                           /* Union type */
1309       type = dbx_alloc_type (typenums, objfile);
1310       if (!TYPE_NAME (type))
1311         {
1312           TYPE_NAME (type) = type_synonym_name;
1313         }
1314       type_synonym_name = NULL;
1315       switch (type_descriptor)
1316         {
1317           case 's':
1318             TYPE_CODE (type) = TYPE_CODE_STRUCT;
1319             break;
1320           case 'u':
1321             TYPE_CODE (type) = TYPE_CODE_UNION;
1322             break;
1323         }
1324       type = read_struct_type (pp, type, objfile);
1325       break;
1326
1327     case 'a':                           /* Array type */
1328       if (**pp != 'r')
1329         return error_type (pp);
1330       ++*pp;
1331       
1332       type = dbx_alloc_type (typenums, objfile);
1333       type = read_array_type (pp, type, objfile);
1334       break;
1335
1336     default:
1337       --*pp;                    /* Go back to the symbol in error */
1338                                 /* Particularly important if it was \0! */
1339       return error_type (pp);
1340     }
1341
1342   if (type == 0)
1343     abort ();
1344
1345   return type;
1346 }
1347 \f
1348 /* RS/6000 xlc/dbx combination uses a set of builtin types, starting from -1.
1349    Return the proper type node for a given builtin type number. */
1350
1351 static struct type *
1352 rs6000_builtin_type (typenum)
1353   int typenum;
1354 {
1355   /* default types are defined in dbxstclass.h. */
1356   switch (-typenum) {
1357   case 1: 
1358     return lookup_fundamental_type (current_objfile, FT_INTEGER);
1359   case 2: 
1360     return lookup_fundamental_type (current_objfile, FT_CHAR);
1361   case 3: 
1362     return lookup_fundamental_type (current_objfile, FT_SHORT);
1363   case 4: 
1364     return lookup_fundamental_type (current_objfile, FT_LONG);
1365   case 5: 
1366     return lookup_fundamental_type (current_objfile, FT_UNSIGNED_CHAR);
1367   case 6: 
1368     return lookup_fundamental_type (current_objfile, FT_SIGNED_CHAR);
1369   case 7: 
1370     return lookup_fundamental_type (current_objfile, FT_UNSIGNED_SHORT);
1371   case 8: 
1372     return lookup_fundamental_type (current_objfile, FT_UNSIGNED_INTEGER);
1373   case 9: 
1374     return lookup_fundamental_type (current_objfile, FT_UNSIGNED_INTEGER);
1375   case 10: 
1376     return lookup_fundamental_type (current_objfile, FT_UNSIGNED_LONG);
1377   case 11: 
1378     return lookup_fundamental_type (current_objfile, FT_VOID);
1379   case 12: 
1380     return lookup_fundamental_type (current_objfile, FT_FLOAT);
1381   case 13: 
1382     return lookup_fundamental_type (current_objfile, FT_DBL_PREC_FLOAT);
1383   case 14: 
1384     return lookup_fundamental_type (current_objfile, FT_EXT_PREC_FLOAT);
1385   case 15: 
1386     /* requires a builtin `integer' */
1387     return lookup_fundamental_type (current_objfile, FT_INTEGER);
1388   case 16: 
1389     return lookup_fundamental_type (current_objfile, FT_BOOLEAN);
1390   case 17: 
1391     /* requires builtin `short real' */
1392     return lookup_fundamental_type (current_objfile, FT_FLOAT);
1393   case 18: 
1394     /* requires builtin `real' */
1395     return lookup_fundamental_type (current_objfile, FT_FLOAT);
1396   default:
1397     complain (rs6000_builtin_complaint, typenum);
1398     return NULL;
1399   }
1400 }
1401 \f
1402 /* This page contains subroutines of read_type.  */
1403
1404 #define VISIBILITY_PRIVATE      '0'     /* Stabs character for private field */
1405 #define VISIBILITY_PROTECTED    '1'     /* Stabs character for protected fld */
1406 #define VISIBILITY_PUBLIC       '2'     /* Stabs character for public field */
1407
1408 /* Read member function stabs info for C++ classes.  The form of each member
1409    function data is:
1410
1411         NAME :: TYPENUM[=type definition] ARGS : PHYSNAME ;
1412
1413    An example with two member functions is:
1414
1415         afunc1::20=##15;:i;2A.;afunc2::20:i;2A.;
1416
1417    For the case of overloaded operators, the format is op$::*.funcs, where
1418    $ is the CPLUS_MARKER (usually '$'), `*' holds the place for an operator
1419    name (such as `+=') and `.' marks the end of the operator name.  */
1420
1421 static int
1422 read_member_functions (fip, pp, type, objfile)
1423      struct field_info *fip;
1424      char **pp;
1425      struct type *type;
1426      struct objfile *objfile;
1427 {
1428   int nfn_fields = 0;
1429   int length = 0;
1430   /* Total number of member functions defined in this class.  If the class
1431      defines two `f' functions, and one `g' function, then this will have
1432      the value 3.  */
1433   int total_length = 0;
1434   int i;
1435   struct next_fnfield
1436     {
1437       struct next_fnfield *next;
1438       struct fn_field fn_field;
1439     } *sublist;
1440   struct type *look_ahead_type;
1441   struct next_fnfieldlist *new_fnlist;
1442   struct next_fnfield *new_sublist;
1443   char *main_fn_name;
1444   register char *p;
1445       
1446   /* Process each list until we find something that is not a member function
1447      or find the end of the functions. */
1448
1449   while (**pp != ';')
1450     {
1451       /* We should be positioned at the start of the function name.
1452          Scan forward to find the first ':' and if it is not the
1453          first of a "::" delimiter, then this is not a member function. */
1454       p = *pp;
1455       while (*p != ':')
1456         {
1457           p++;
1458         }
1459       if (p[1] != ':')
1460         {
1461           break;
1462         }
1463
1464       sublist = NULL;
1465       look_ahead_type = NULL;
1466       length = 0;
1467       
1468       new_fnlist = (struct next_fnfieldlist *)
1469         xmalloc (sizeof (struct next_fnfieldlist));
1470       make_cleanup (free, new_fnlist);
1471       memset (new_fnlist, 0, sizeof (struct next_fnfieldlist));
1472       
1473       if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && (*pp)[2] == CPLUS_MARKER)
1474         {
1475           /* This is a completely wierd case.  In order to stuff in the
1476              names that might contain colons (the usual name delimiter),
1477              Mike Tiemann defined a different name format which is
1478              signalled if the identifier is "op$".  In that case, the
1479              format is "op$::XXXX." where XXXX is the name.  This is
1480              used for names like "+" or "=".  YUUUUUUUK!  FIXME!  */
1481           /* This lets the user type "break operator+".
1482              We could just put in "+" as the name, but that wouldn't
1483              work for "*".  */
1484           static char opname[32] = {'o', 'p', CPLUS_MARKER};
1485           char *o = opname + 3;
1486           
1487           /* Skip past '::'.  */
1488           *pp = p + 2;
1489
1490           STABS_CONTINUE (pp);
1491           p = *pp;
1492           while (*p != '.')
1493             {
1494               *o++ = *p++;
1495             }
1496           main_fn_name = savestring (opname, o - opname);
1497           /* Skip past '.'  */
1498           *pp = p + 1;
1499         }
1500       else
1501         {
1502           main_fn_name = savestring (*pp, p - *pp);
1503           /* Skip past '::'.  */
1504           *pp = p + 2;
1505         }
1506       new_fnlist -> fn_fieldlist.name = main_fn_name;
1507       
1508       do
1509         {
1510           new_sublist =
1511             (struct next_fnfield *) xmalloc (sizeof (struct next_fnfield));
1512           make_cleanup (free, new_sublist);
1513           memset (new_sublist, 0, sizeof (struct next_fnfield));
1514           
1515           /* Check for and handle cretinous dbx symbol name continuation!  */
1516           if (look_ahead_type == NULL)
1517             {
1518               /* Normal case. */
1519               STABS_CONTINUE (pp);
1520               
1521               new_sublist -> fn_field.type = read_type (pp, objfile);
1522               if (**pp != ':')
1523                 {
1524                   /* Invalid symtab info for member function.  */
1525                   return 0;
1526                 }
1527             }
1528           else
1529             {
1530               /* g++ version 1 kludge */
1531               new_sublist -> fn_field.type = look_ahead_type;
1532               look_ahead_type = NULL;
1533             }
1534           
1535           (*pp)++;
1536           p = *pp;
1537           while (*p != ';')
1538             {
1539               p++;
1540             }
1541           
1542           /* If this is just a stub, then we don't have the real name here. */
1543
1544           if (TYPE_FLAGS (new_sublist -> fn_field.type) & TYPE_FLAG_STUB)
1545             {
1546               new_sublist -> fn_field.is_stub = 1;
1547             }
1548           new_sublist -> fn_field.physname = savestring (*pp, p - *pp);
1549           *pp = p + 1;
1550           
1551           /* Set this member function's visibility fields.  */
1552           switch (*(*pp)++)
1553             {
1554               case VISIBILITY_PRIVATE:
1555                 new_sublist -> fn_field.is_private = 1;
1556                 break;
1557               case VISIBILITY_PROTECTED:
1558                 new_sublist -> fn_field.is_protected = 1;
1559                 break;
1560             }
1561           
1562           STABS_CONTINUE (pp);
1563           switch (**pp)
1564             {
1565               case 'A': /* Normal functions. */
1566                 new_sublist -> fn_field.is_const = 0;
1567                 new_sublist -> fn_field.is_volatile = 0;
1568                 (*pp)++;
1569                 break;
1570               case 'B': /* `const' member functions. */
1571                 new_sublist -> fn_field.is_const = 1;
1572                 new_sublist -> fn_field.is_volatile = 0;
1573                 (*pp)++;
1574                 break;
1575               case 'C': /* `volatile' member function. */
1576                 new_sublist -> fn_field.is_const = 0;
1577                 new_sublist -> fn_field.is_volatile = 1;
1578                 (*pp)++;
1579                 break;
1580               case 'D': /* `const volatile' member function. */
1581                 new_sublist -> fn_field.is_const = 1;
1582                 new_sublist -> fn_field.is_volatile = 1;
1583                 (*pp)++;
1584                 break;
1585               case '*': /* File compiled with g++ version 1 -- no info */
1586               case '?':
1587               case '.':
1588                 break;
1589               default:
1590                 complain (&const_vol_complaint, **pp);
1591                 break;
1592             }
1593           
1594           switch (*(*pp)++)
1595             {
1596               case '*':
1597                 /* virtual member function, followed by index.
1598                    The sign bit is set to distinguish pointers-to-methods
1599                    from virtual function indicies.  Since the array is
1600                    in words, the quantity must be shifted left by 1
1601                    on 16 bit machine, and by 2 on 32 bit machine, forcing
1602                    the sign bit out, and usable as a valid index into
1603                    the array.  Remove the sign bit here.  */
1604                 new_sublist -> fn_field.voffset =
1605                   (0x7fffffff & read_number (pp, ';')) + 2;
1606               
1607                 STABS_CONTINUE (pp);
1608                 if (**pp == ';' || **pp == '\0')
1609                   {
1610                     /* Must be g++ version 1.  */
1611                     new_sublist -> fn_field.fcontext = 0;
1612                   }
1613                 else
1614                   {
1615                     /* Figure out from whence this virtual function came.
1616                        It may belong to virtual function table of
1617                        one of its baseclasses.  */
1618                     look_ahead_type = read_type (pp, objfile);
1619                     if (**pp == ':')
1620                       {
1621                         /* g++ version 1 overloaded methods. */
1622                       }
1623                     else
1624                       {
1625                         new_sublist -> fn_field.fcontext = look_ahead_type;
1626                         if (**pp != ';')
1627                           {
1628                             return 0;
1629                           }
1630                         else
1631                           {
1632                             ++*pp;
1633                           }
1634                         look_ahead_type = NULL;
1635                       }
1636                   }
1637                 break;
1638               
1639               case '?':
1640                 /* static member function.  */
1641                 new_sublist -> fn_field.voffset = VOFFSET_STATIC;
1642                 if (strncmp (new_sublist -> fn_field.physname,
1643                              main_fn_name, strlen (main_fn_name)))
1644                   {
1645                     new_sublist -> fn_field.is_stub = 1;
1646                   }
1647                 break;
1648               
1649               default:
1650                 /* error */
1651                 complain (&member_fn_complaint, (*pp)[-1]);
1652                 /* Fall through into normal member function.  */
1653               
1654               case '.':
1655                 /* normal member function.  */
1656                 new_sublist -> fn_field.voffset = 0;
1657                 new_sublist -> fn_field.fcontext = 0;
1658                 break;
1659             }
1660           
1661           new_sublist -> next = sublist;
1662           sublist = new_sublist;
1663           length++;
1664           STABS_CONTINUE (pp);
1665         }
1666       while (**pp != ';' && **pp != '\0');
1667       
1668       (*pp)++;
1669       
1670       new_fnlist -> fn_fieldlist.fn_fields = (struct fn_field *)
1671         obstack_alloc (&objfile -> type_obstack, 
1672                        sizeof (struct fn_field) * length);
1673       memset (new_fnlist -> fn_fieldlist.fn_fields, 0,
1674               sizeof (struct fn_field) * length);
1675       for (i = length; (i--, sublist); sublist = sublist -> next)
1676         {
1677           new_fnlist -> fn_fieldlist.fn_fields[i] = sublist -> fn_field;
1678         }
1679       
1680       new_fnlist -> fn_fieldlist.length = length;
1681       new_fnlist -> next = fip -> fnlist;
1682       fip -> fnlist = new_fnlist;
1683       nfn_fields++;
1684       total_length += length;
1685       STABS_CONTINUE (pp);
1686     }
1687
1688   if (nfn_fields)
1689     {
1690       ALLOCATE_CPLUS_STRUCT_TYPE (type);
1691       TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
1692         TYPE_ALLOC (type, sizeof (struct fn_fieldlist) * nfn_fields);
1693       memset (TYPE_FN_FIELDLISTS (type), 0,
1694               sizeof (struct fn_fieldlist) * nfn_fields);
1695       TYPE_NFN_FIELDS (type) = nfn_fields;
1696       TYPE_NFN_FIELDS_TOTAL (type) = total_length;
1697     }
1698
1699   return 1;
1700 }
1701
1702 /* Special GNU C++ name.
1703    FIXME:  Still need to properly handle parse error conditions. */
1704
1705 static void
1706 read_cpp_abbrev (fip, pp, type, objfile)
1707      struct field_info *fip;
1708      char **pp;
1709      struct type *type;
1710      struct objfile *objfile;
1711 {
1712   register char *p;
1713   const char *prefix;
1714   char *name;
1715   char cpp_abbrev;
1716   struct type *context;
1717
1718   p = *pp;
1719   if (*++p == 'v')
1720     {
1721       name = NULL;
1722       cpp_abbrev = *++p;
1723
1724       *pp = p + 1;
1725
1726       /* At this point, *pp points to something like "22:23=*22...",
1727          where the type number before the ':' is the "context" and
1728          everything after is a regular type definition.  Lookup the
1729          type, find it's name, and construct the field name. */
1730
1731       context = read_type (pp, objfile);
1732
1733       switch (cpp_abbrev)
1734         {
1735           case 'f':             /* $vf -- a virtual function table pointer */
1736             fip->list->field.name =
1737               obconcat (&objfile->type_obstack, vptr_name, "", "");
1738             break;
1739
1740           case 'b':             /* $vb -- a virtual bsomethingorother */
1741             name = type_name_no_tag (context);
1742             if (name == NULL)
1743               {
1744                 complain (&invalid_cpp_type_complaint, symnum);
1745                 name = "FOO";
1746               }
1747             fip->list->field.name =
1748               obconcat (&objfile->type_obstack, vb_name, name, "");
1749             break;
1750
1751           default:
1752             complain (&invalid_cpp_abbrev_complaint, *pp);
1753             fip->list->field.name =
1754               obconcat (&objfile->type_obstack,
1755                         "INVALID_CPLUSPLUS_ABBREV", "", "");
1756             break;
1757         }
1758
1759       /* At this point, *pp points to the ':'.  Skip it and read the
1760          field type. */
1761
1762       p = ++(*pp);
1763       if (p[-1] != ':')
1764         {
1765           complain (&invalid_cpp_abbrev_complaint, *pp);
1766         }
1767       fip->list->field.type = read_type (pp, objfile);
1768       (*pp)++;                  /* Skip the comma.  */
1769       fip->list->field.bitpos = read_number (pp, ';');
1770       /* This field is unpacked.  */
1771       fip->list->field.bitsize = 0;
1772       fip->list->visibility = VISIBILITY_PRIVATE;
1773     }
1774   else if (*p == '_')
1775     {
1776       /* GNU C++ anonymous type.  */
1777       complain (&stabs_general_complaint, "g++ anonymous type $_ not handled");
1778     }
1779   else
1780     {
1781       complain (&invalid_cpp_abbrev_complaint, *pp);
1782     }
1783 }
1784
1785 static void
1786 read_one_struct_field (fip, pp, p, type, objfile)
1787      struct field_info *fip;
1788      char **pp;
1789      char *p;
1790      struct type *type;
1791      struct objfile *objfile;
1792 {
1793   fip -> list -> field.name =
1794     obsavestring (*pp, p - *pp, &objfile -> type_obstack);
1795   *pp = p + 1;
1796   
1797   /* This means we have a visibility for a field coming. */
1798   if (**pp == '/')
1799     {
1800       (*pp)++;
1801       fip -> list -> visibility = *(*pp)++;
1802       switch (fip -> list -> visibility)
1803         {
1804           case VISIBILITY_PRIVATE:
1805           case VISIBILITY_PROTECTED:
1806             break;
1807           
1808           case VISIBILITY_PUBLIC:
1809             /* Nothing to do */
1810             break;
1811           
1812           default:
1813             /* Unknown visibility specifier. */
1814             complain (&stabs_general_complaint,
1815                       "unknown visibility specifier");
1816             return;
1817             break;
1818         }
1819     }
1820   else
1821     {
1822       /* normal dbx-style format, no explicit visibility */
1823       fip -> list -> visibility = VISIBILITY_PUBLIC;
1824     }
1825   
1826   fip -> list -> field.type = read_type (pp, objfile);
1827   if (**pp == ':')
1828     {
1829       p = ++(*pp);
1830 #if 0
1831       /* Possible future hook for nested types. */
1832       if (**pp == '!')
1833         {
1834           fip -> list -> field.bitpos = (long)-2; /* nested type */
1835           p = ++(*pp);
1836         }
1837       else
1838 #endif
1839         {
1840           /* Static class member.  */
1841           fip -> list -> field.bitpos = (long) -1;
1842         }
1843       while (*p != ';') 
1844         {
1845           p++;
1846         }
1847       fip -> list -> field.bitsize = (long) savestring (*pp, p - *pp);
1848       *pp = p + 1;
1849       return;
1850     }
1851   else if (**pp != ',')
1852     {
1853       /* Bad structure-type format.  */
1854       complain (&stabs_general_complaint, "bad structure-type format");
1855       return;
1856     }
1857   
1858   (*pp)++;                      /* Skip the comma.  */
1859   fip -> list -> field.bitpos = read_number (pp, ',');
1860   fip -> list -> field.bitsize = read_number (pp, ';');
1861   
1862 #if 0
1863   /* FIXME-tiemann: Can't the compiler put out something which
1864      lets us distinguish these? (or maybe just not put out anything
1865      for the field).  What is the story here?  What does the compiler
1866      really do?  Also, patch gdb.texinfo for this case; I document
1867      it as a possible problem there.  Search for "DBX-style".  */
1868   
1869   /* This is wrong because this is identical to the symbols
1870      produced for GCC 0-size arrays.  For example:
1871      typedef union {
1872      int num;
1873      char str[0];
1874      } foo;
1875      The code which dumped core in such circumstances should be
1876      fixed not to dump core.  */
1877   
1878   /* g++ -g0 can put out bitpos & bitsize zero for a static
1879      field.  This does not give us any way of getting its
1880      class, so we can't know its name.  But we can just
1881      ignore the field so we don't dump core and other nasty
1882      stuff.  */
1883   if (fip -> list -> field.bitpos == 0 && fip -> list -> field.bitsize == 0)
1884     {
1885       complain (&dbx_class_complaint);
1886       /* Ignore this field.  */
1887       fip -> list = fip -> list -> next;
1888     }
1889   else
1890 #endif /* 0 */
1891     {
1892       /* Detect an unpacked field and mark it as such.
1893          dbx gives a bit size for all fields.
1894          Note that forward refs cannot be packed,
1895          and treat enums as if they had the width of ints.  */
1896       
1897       if (TYPE_CODE (fip -> list -> field.type) != TYPE_CODE_INT
1898           && TYPE_CODE (fip -> list -> field.type) != TYPE_CODE_ENUM)
1899         {
1900           fip -> list -> field.bitsize = 0;
1901         }
1902       if ((fip -> list -> field.bitsize 
1903            == 8 * TYPE_LENGTH (fip -> list -> field.type)
1904            || (TYPE_CODE (fip -> list -> field.type) == TYPE_CODE_ENUM
1905                && (fip -> list -> field.bitsize
1906                    == 8 * TYPE_LENGTH (lookup_fundamental_type (objfile, FT_INTEGER)))
1907                )
1908            )
1909           &&
1910           fip -> list -> field.bitpos % 8 == 0)
1911         {
1912           fip -> list -> field.bitsize = 0;
1913         }
1914     }
1915 }
1916
1917
1918 /* Read struct or class data fields.  They have the form:
1919
1920         NAME : [VISIBILITY] TYPENUM , BITPOS , BITSIZE ;
1921
1922    At the end, we see a semicolon instead of a field.
1923
1924    In C++, this may wind up being NAME:?TYPENUM:PHYSNAME; for
1925    a static field.
1926
1927    The optional VISIBILITY is one of:
1928
1929         '/0'    (VISIBILITY_PRIVATE)
1930         '/1'    (VISIBILITY_PROTECTED)
1931         '/2'    (VISIBILITY_PUBLIC)
1932
1933    or nothing, for C style fields with public visibility. */
1934        
1935 static int
1936 read_struct_fields (fip, pp, type, objfile)
1937      struct field_info *fip;
1938      char **pp;
1939      struct type *type;
1940      struct objfile *objfile;
1941 {
1942   register char *p;
1943   struct nextfield *new;
1944
1945   /* We better set p right now, in case there are no fields at all...    */
1946
1947   p = *pp;
1948
1949   /* Read each data member type until we find the terminating ';' at the end of
1950      the data member list, or break for some other reason such as finding the
1951      start of the member function list. */
1952
1953   while (**pp != ';')
1954     {
1955       STABS_CONTINUE (pp);
1956       /* Get space to record the next field's data.  */
1957       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
1958       make_cleanup (free, new);
1959       memset (new, 0, sizeof (struct nextfield));
1960       new -> next = fip -> list;
1961       fip -> list = new;
1962
1963       /* Get the field name.  */
1964       p = *pp;
1965       if (*p == CPLUS_MARKER)
1966         {
1967           read_cpp_abbrev (fip, pp, type, objfile);
1968           continue;
1969         }
1970
1971       /* Look for the ':' that separates the field name from the field
1972          values.  Data members are delimited by a single ':', while member
1973          functions are delimited by a pair of ':'s.  When we hit the member
1974          functions (if any), terminate scan loop and return. */
1975
1976       while (*p != ':') 
1977         {
1978           p++;
1979         }
1980
1981       /* Check to see if we have hit the member functions yet.  */
1982       if (p[1] == ':')
1983         {
1984           break;
1985         }
1986       read_one_struct_field (fip, pp, p, type, objfile);
1987     }
1988   if (p[1] == ':')
1989     {
1990       /* chill the list of fields: the last entry (at the head) is a
1991          partially constructed entry which we now scrub. */
1992       fip -> list = fip -> list -> next;
1993     }
1994   return 1;
1995 }
1996
1997 /* The stabs for C++ derived classes contain baseclass information which
1998    is marked by a '!' character after the total size.  This function is
1999    called when we encounter the baseclass marker, and slurps up all the
2000    baseclass information.
2001
2002    Immediately following the '!' marker is the number of base classes that
2003    the class is derived from, followed by information for each base class.
2004    For each base class, there are two visibility specifiers, a bit offset
2005    to the base class information within the derived class, a reference to
2006    the type for the base class, and a terminating semicolon.
2007
2008    A typical example, with two base classes, would be "!2,020,19;0264,21;".
2009                                                        ^^ ^ ^ ^  ^ ^  ^
2010         Baseclass information marker __________________|| | | |  | |  |
2011         Number of baseclasses __________________________| | | |  | |  |
2012         Visibility specifiers (2) ________________________| | |  | |  |
2013         Offset in bits from start of class _________________| |  | |  |
2014         Type number for base class ___________________________|  | |  |
2015         Visibility specifiers (2) _______________________________| |  |
2016         Offset in bits from start of class ________________________|  |
2017         Type number of base class ____________________________________|
2018  */
2019
2020 static int
2021 read_baseclasses (fip, pp, type, objfile)
2022      struct field_info *fip;
2023      char **pp;
2024      struct type *type;
2025      struct objfile *objfile;
2026 {
2027   int i;
2028   struct nextfield *new;
2029
2030   if (**pp != '!')
2031     {
2032       return 1;
2033     }
2034   else
2035     {
2036       /* Skip the '!' baseclass information marker. */
2037       (*pp)++;
2038     }
2039
2040   ALLOCATE_CPLUS_STRUCT_TYPE (type);
2041   TYPE_N_BASECLASSES (type) = read_number (pp, ',');
2042
2043 #if 0
2044   /* Some stupid compilers have trouble with the following, so break
2045      it up into simpler expressions.  */
2046   TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *)
2047     TYPE_ALLOC (type, B_BYTES (TYPE_N_BASECLASSES (type)));
2048 #else
2049   {
2050     int num_bytes = B_BYTES (TYPE_N_BASECLASSES (type));
2051     char *pointer;
2052
2053     pointer = (char *) TYPE_ALLOC (type, num_bytes);
2054     TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) pointer;
2055   }
2056 #endif /* 0 */
2057
2058   B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), TYPE_N_BASECLASSES (type));
2059
2060   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
2061     {
2062       new = (struct nextfield *) xmalloc (sizeof (struct nextfield));
2063       make_cleanup (free, new);
2064       memset (new, 0, sizeof (struct nextfield));
2065       new -> next = fip -> list;
2066       fip -> list = new;
2067       new -> field.bitsize = 0; /* this should be an unpacked field! */
2068
2069       STABS_CONTINUE (pp);
2070       switch (*(*pp)++)
2071         {
2072           case '0':
2073             /* Nothing to do. */
2074             break;
2075           case '1':
2076             SET_TYPE_FIELD_VIRTUAL (type, i);
2077             break;
2078           default:
2079             /* Bad visibility format.  */
2080             return 0;
2081         }
2082
2083       new -> visibility = *(*pp)++;
2084       switch (new -> visibility)
2085         {
2086           case VISIBILITY_PRIVATE:
2087           case VISIBILITY_PROTECTED:
2088           case VISIBILITY_PUBLIC:
2089             break;
2090           default:
2091             /* Bad visibility format.  */
2092             return 0;
2093         }
2094
2095       /* The remaining value is the bit offset of the portion of the object
2096          corresponding to this baseclass.  Always zero in the absence of
2097          multiple inheritance.  */
2098
2099       new -> field.bitpos = read_number (pp, ',');
2100
2101       /* The last piece of baseclass information is the type of the base
2102          class.  Read it, and remember it's type name as this field's name. */
2103
2104       new -> field.type = read_type (pp, objfile);
2105       new -> field.name = type_name_no_tag (new -> field.type);
2106
2107       /* skip trailing ';' and bump count of number of fields seen */
2108       (*pp)++;
2109     }
2110   return 1;
2111 }
2112
2113 /* The tail end of stabs for C++ classes that contain a virtual function
2114    pointer contains a tilde, a %, and a type number.
2115    The type number refers to the base class (possibly this class itself) which
2116    contains the vtable pointer for the current class.
2117
2118    This function is called when we have parsed all the method declarations,
2119    so we can look for the vptr base class info.  */
2120
2121 static int
2122 read_tilde_fields (fip, pp, type, objfile)
2123      struct field_info *fip;
2124      char **pp;
2125      struct type *type;
2126      struct objfile *objfile;
2127 {
2128   register char *p;
2129
2130   STABS_CONTINUE (pp);
2131
2132   /* If we are positioned at a ';', then skip it. */
2133   if (**pp == ';')
2134     {
2135       (*pp)++;
2136     }
2137
2138   if (**pp == '~')
2139     {
2140       (*pp)++;
2141
2142       if (**pp == '=' || **pp == '+' || **pp == '-')
2143         {
2144           /* Obsolete flags that used to indicate the presence
2145              of constructors and/or destructors. */
2146           (*pp)++;
2147         }
2148
2149       /* Read either a '%' or the final ';'.  */
2150       if (*(*pp)++ == '%')
2151         {
2152           /* The next number is the type number of the base class
2153              (possibly our own class) which supplies the vtable for
2154              this class.  Parse it out, and search that class to find
2155              its vtable pointer, and install those into TYPE_VPTR_BASETYPE
2156              and TYPE_VPTR_FIELDNO.  */
2157
2158           struct type *t;
2159           int i;
2160
2161           t = read_type (pp, objfile);
2162           p = (*pp)++;
2163           while (*p != '\0' && *p != ';')
2164             {
2165               p++;
2166             }
2167           if (*p == '\0')
2168             {
2169               /* Premature end of symbol.  */
2170               return 0;
2171             }
2172           
2173           TYPE_VPTR_BASETYPE (type) = t;
2174           if (type == t)                /* Our own class provides vtbl ptr */
2175             {
2176               for (i = TYPE_NFIELDS (t) - 1;
2177                    i >= TYPE_N_BASECLASSES (t);
2178                    --i)
2179                 {
2180                   if (! strncmp (TYPE_FIELD_NAME (t, i), vptr_name, 
2181                                  sizeof (vptr_name) - 1))
2182                     {
2183                       TYPE_VPTR_FIELDNO (type) = i;
2184                       goto gotit;
2185                     }
2186                 }
2187               /* Virtual function table field not found.  */
2188               complain (vtbl_notfound_complaint, TYPE_NAME (type));
2189               return 0;
2190             }
2191           else
2192             {
2193               TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t);
2194             }
2195
2196     gotit:
2197           *pp = p + 1;
2198         }
2199     }
2200   return 1;
2201 }
2202
2203 static int
2204 attach_fn_fields_to_type (fip, type)
2205      struct field_info *fip;
2206      register struct type *type;
2207 {
2208   register int n;
2209
2210   for (n = 0; n < TYPE_N_BASECLASSES (type); n++)
2211     {
2212       if (TYPE_CODE (TYPE_BASECLASS (type, n)) == TYPE_CODE_UNDEF)
2213         {
2214           /* @@ Memory leak on objfile -> type_obstack?  */
2215           return 0;
2216         }
2217       TYPE_NFN_FIELDS_TOTAL (type) +=
2218         TYPE_NFN_FIELDS_TOTAL (TYPE_BASECLASS (type, n));
2219     }
2220
2221   for (n = TYPE_NFN_FIELDS (type);
2222        fip -> fnlist != NULL;
2223        fip -> fnlist = fip -> fnlist -> next)
2224     {
2225       --n;                      /* Circumvent Sun3 compiler bug */
2226       TYPE_FN_FIELDLISTS (type)[n] = fip -> fnlist -> fn_fieldlist;
2227     }
2228   return 1;
2229 }
2230
2231 /* Create the vector of fields, and record how big it is.
2232    We need this info to record proper virtual function table information
2233    for this class's virtual functions.  */
2234
2235 static int
2236 attach_fields_to_type (fip, type, objfile)
2237      struct field_info *fip;
2238      register struct type *type;
2239      struct objfile *objfile;
2240 {
2241   register int nfields = 0;
2242   register int non_public_fields = 0;
2243   register struct nextfield *scan;
2244
2245   /* Count up the number of fields that we have, as well as taking note of
2246      whether or not there are any non-public fields, which requires us to
2247      allocate and build the private_field_bits and protected_field_bits
2248      bitfields. */
2249
2250   for (scan = fip -> list; scan != NULL; scan = scan -> next)
2251     {
2252       nfields++;
2253       if (scan -> visibility != VISIBILITY_PUBLIC)
2254         {
2255           non_public_fields++;
2256         }
2257     }
2258
2259   /* Now we know how many fields there are, and whether or not there are any
2260      non-public fields.  Record the field count, allocate space for the
2261      array of fields, and create blank visibility bitfields if necessary. */
2262
2263   TYPE_NFIELDS (type) = nfields;
2264   TYPE_FIELDS (type) = (struct field *)
2265     TYPE_ALLOC (type, sizeof (struct field) * nfields);
2266   memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
2267
2268   if (non_public_fields)
2269     {
2270       ALLOCATE_CPLUS_STRUCT_TYPE (type);
2271
2272       TYPE_FIELD_PRIVATE_BITS (type) =
2273         (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
2274       B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
2275
2276       TYPE_FIELD_PROTECTED_BITS (type) =
2277         (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
2278       B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
2279     }
2280
2281   /* Copy the saved-up fields into the field vector.  Start from the head
2282      of the list, adding to the tail of the field array, so that they end
2283      up in the same order in the array in which they were added to the list. */
2284
2285   while (nfields-- > 0)
2286     {
2287       TYPE_FIELD (type, nfields) = fip -> list -> field;
2288       switch (fip -> list -> visibility)
2289         {
2290           case VISIBILITY_PRIVATE:
2291             SET_TYPE_FIELD_PRIVATE (type, nfields);
2292             break;
2293
2294           case VISIBILITY_PROTECTED:
2295             SET_TYPE_FIELD_PROTECTED (type, nfields);
2296             break;
2297
2298           case VISIBILITY_PUBLIC:
2299             break;
2300
2301           default:
2302             /* Should warn about this unknown visibility? */
2303             break;
2304         }
2305       fip -> list = fip -> list -> next;
2306     }
2307   return 1;
2308 }
2309
2310 /* Read the description of a structure (or union type) and return an object
2311    describing the type.
2312
2313    PP points to a character pointer that points to the next unconsumed token
2314    in the the stabs string.  For example, given stabs "A:T4=s4a:1,0,32;;",
2315    *PP will point to "4a:1,0,32;;".
2316
2317    TYPE points to an incomplete type that needs to be filled in.
2318
2319    OBJFILE points to the current objfile from which the stabs information is
2320    being read.  (Note that it is redundant in that TYPE also contains a pointer
2321    to this same objfile, so it might be a good idea to eliminate it.  FIXME). 
2322    */
2323
2324 static struct type *
2325 read_struct_type (pp, type, objfile)
2326      char **pp;
2327      struct type *type;
2328      struct objfile *objfile;
2329 {
2330   struct cleanup *back_to;
2331   struct field_info fi;
2332
2333   fi.list = NULL;
2334   fi.fnlist = NULL;
2335
2336   back_to = make_cleanup (null_cleanup, 0);
2337
2338   INIT_CPLUS_SPECIFIC (type);
2339   TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
2340
2341   /* First comes the total size in bytes.  */
2342
2343   TYPE_LENGTH (type) = read_number (pp, 0);
2344
2345   /* Now read the baseclasses, if any, read the regular C struct or C++
2346      class member fields, attach the fields to the type, read the C++
2347      member functions, attach them to the type, and then read any tilde
2348      field (baseclass specifier for the class holding the main vtable). */
2349
2350   if (!read_baseclasses (&fi, pp, type, objfile))
2351     {
2352       do_cleanups (back_to);
2353       return (error_type (pp));
2354     }
2355   if (!read_struct_fields (&fi, pp, type, objfile))
2356     {
2357       do_cleanups (back_to);
2358       return (error_type (pp));
2359     }
2360   if (!attach_fields_to_type (&fi, type, objfile))
2361     {
2362       do_cleanups (back_to);
2363       return (error_type (pp));
2364     }
2365   if (!read_member_functions (&fi, pp, type, objfile))
2366     {
2367       do_cleanups (back_to);
2368       return (error_type (pp));
2369     }
2370   if (!attach_fn_fields_to_type (&fi, type))
2371     {
2372       do_cleanups (back_to);
2373       return (error_type (pp));
2374     }
2375   if (!read_tilde_fields (&fi, pp, type, objfile))
2376     {
2377       do_cleanups (back_to);
2378       return (error_type (pp));
2379     }
2380
2381   do_cleanups (back_to);
2382   return (type);
2383 }
2384
2385 /* Read a definition of an array type,
2386    and create and return a suitable type object.
2387    Also creates a range type which represents the bounds of that
2388    array.  */
2389
2390 static struct type *
2391 read_array_type (pp, type, objfile)
2392      register char **pp;
2393      register struct type *type;
2394      struct objfile *objfile;
2395 {
2396   struct type *index_type, *element_type, *range_type;
2397   int lower, upper;
2398   int adjustable = 0;
2399
2400   /* Format of an array type:
2401      "ar<index type>;lower;upper;<array_contents_type>".  Put code in
2402      to handle this.
2403
2404      Fortran adjustable arrays use Adigits or Tdigits for lower or upper;
2405      for these, produce a type like float[][].  */
2406
2407   index_type = read_type (pp, objfile);
2408   if (**pp != ';')
2409     /* Improper format of array type decl.  */
2410     return error_type (pp);
2411   ++*pp;
2412
2413   if (!(**pp >= '0' && **pp <= '9'))
2414     {
2415       (*pp)++;
2416       adjustable = 1;
2417     }
2418   lower = read_number (pp, ';');
2419
2420   if (!(**pp >= '0' && **pp <= '9'))
2421     {
2422       (*pp)++;
2423       adjustable = 1;
2424     }
2425   upper = read_number (pp, ';');
2426   
2427   element_type = read_type (pp, objfile);
2428
2429   if (adjustable)
2430     {
2431       lower = 0;
2432       upper = -1;
2433     }
2434
2435   range_type =
2436     create_range_type ((struct type *) NULL, index_type, lower, upper);
2437   type = create_array_type (type, element_type, range_type);
2438
2439   /* If we have an array whose element type is not yet known, but whose
2440      bounds *are* known, record it to be adjusted at the end of the file.  */
2441
2442   if (TYPE_LENGTH (element_type) == 0 && !adjustable)
2443     {
2444       add_undefined_type (type);
2445     }
2446
2447   return type;
2448 }
2449
2450
2451 /* Read a definition of an enumeration type,
2452    and create and return a suitable type object.
2453    Also defines the symbols that represent the values of the type.  */
2454
2455 static struct type *
2456 read_enum_type (pp, type, objfile)
2457      register char **pp;
2458      register struct type *type;
2459      struct objfile *objfile;
2460 {
2461   register char *p;
2462   char *name;
2463   register long n;
2464   register struct symbol *sym;
2465   int nsyms = 0;
2466   struct pending **symlist;
2467   struct pending *osyms, *syms;
2468   int o_nsyms;
2469
2470 #if 0
2471   /* FIXME!  The stabs produced by Sun CC merrily define things that ought
2472      to be file-scope, between N_FN entries, using N_LSYM.  What's a mother
2473      to do?  For now, force all enum values to file scope.  */
2474   if (within_function)
2475     symlist = &local_symbols;
2476   else
2477 #endif
2478     symlist = &file_symbols;
2479   osyms = *symlist;
2480   o_nsyms = osyms ? osyms->nsyms : 0;
2481
2482   /* Read the value-names and their values.
2483      The input syntax is NAME:VALUE,NAME:VALUE, and so on.
2484      A semicolon or comma instead of a NAME means the end.  */
2485   while (**pp && **pp != ';' && **pp != ',')
2486     {
2487       STABS_CONTINUE (pp);
2488       p = *pp;
2489       while (*p != ':') p++;
2490       name = obsavestring (*pp, p - *pp, &objfile -> symbol_obstack);
2491       *pp = p + 1;
2492       n = read_number (pp, ',');
2493
2494       sym = (struct symbol *)
2495         obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
2496       memset (sym, 0, sizeof (struct symbol));
2497       SYMBOL_NAME (sym) = name;
2498       SYMBOL_LANGUAGE (sym) = current_subfile -> language;
2499       SYMBOL_CLASS (sym) = LOC_CONST;
2500       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2501       SYMBOL_VALUE (sym) = n;
2502       add_symbol_to_list (sym, symlist);
2503       nsyms++;
2504     }
2505
2506   if (**pp == ';')
2507     (*pp)++;                    /* Skip the semicolon.  */
2508
2509   /* Now fill in the fields of the type-structure.  */
2510
2511   TYPE_LENGTH (type) = sizeof (int);
2512   TYPE_CODE (type) = TYPE_CODE_ENUM;
2513   TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
2514   TYPE_NFIELDS (type) = nsyms;
2515   TYPE_FIELDS (type) = (struct field *)
2516     TYPE_ALLOC (type, sizeof (struct field) * nsyms);
2517   memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nsyms);
2518
2519   /* Find the symbols for the values and put them into the type.
2520      The symbols can be found in the symlist that we put them on
2521      to cause them to be defined.  osyms contains the old value
2522      of that symlist; everything up to there was defined by us.  */
2523   /* Note that we preserve the order of the enum constants, so
2524      that in something like "enum {FOO, LAST_THING=FOO}" we print
2525      FOO, not LAST_THING.  */
2526
2527   for (syms = *symlist, n = 0; syms; syms = syms->next)
2528     {
2529       int j = 0;
2530       if (syms == osyms)
2531         j = o_nsyms;
2532       for (; j < syms->nsyms; j++,n++)
2533         {
2534           struct symbol *xsym = syms->symbol[j];
2535           SYMBOL_TYPE (xsym) = type;
2536           TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
2537           TYPE_FIELD_VALUE (type, n) = 0;
2538           TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
2539           TYPE_FIELD_BITSIZE (type, n) = 0;
2540         }
2541       if (syms == osyms)
2542         break;
2543     }
2544
2545 #if 0
2546   /* This screws up perfectly good C programs with enums.  FIXME.  */
2547   /* Is this Modula-2's BOOLEAN type?  Flag it as such if so. */
2548   if(TYPE_NFIELDS(type) == 2 &&
2549      ((STREQ(TYPE_FIELD_NAME(type,0),"TRUE") &&
2550        STREQ(TYPE_FIELD_NAME(type,1),"FALSE")) ||
2551       (STREQ(TYPE_FIELD_NAME(type,1),"TRUE") &&
2552        STREQ(TYPE_FIELD_NAME(type,0),"FALSE"))))
2553      TYPE_CODE(type) = TYPE_CODE_BOOL;
2554 #endif
2555
2556   return type;
2557 }
2558
2559 /* Sun's ACC uses a somewhat saner method for specifying the builtin
2560    typedefs in every file (for int, long, etc):
2561
2562         type = b <signed> <width>; <offset>; <nbits>
2563         signed = u or s.  Possible c in addition to u or s (for char?).
2564         offset = offset from high order bit to start bit of type.
2565         width is # bytes in object of this type, nbits is # bits in type.
2566
2567    The width/offset stuff appears to be for small objects stored in
2568    larger ones (e.g. `shorts' in `int' registers).  We ignore it for now,
2569    FIXME.  */
2570
2571 static struct type *
2572 read_sun_builtin_type (pp, typenums, objfile)
2573      char **pp;
2574      int typenums[2];
2575      struct objfile *objfile;
2576 {
2577   int nbits;
2578   int signed_type;
2579
2580   switch (**pp)
2581     {
2582       case 's':
2583         signed_type = 1;
2584         break;
2585       case 'u':
2586         signed_type = 0;
2587         break;
2588       default:
2589         return error_type (pp);
2590     }
2591   (*pp)++;
2592
2593   /* For some odd reason, all forms of char put a c here.  This is strange
2594      because no other type has this honor.  We can safely ignore this because
2595      we actually determine 'char'acterness by the number of bits specified in
2596      the descriptor.  */
2597
2598   if (**pp == 'c')
2599     (*pp)++;
2600
2601   /* The first number appears to be the number of bytes occupied
2602      by this type, except that unsigned short is 4 instead of 2.
2603      Since this information is redundant with the third number,
2604      we will ignore it.  */
2605   read_number (pp, ';');
2606
2607   /* The second number is always 0, so ignore it too. */
2608   read_number (pp, ';');
2609
2610   /* The third number is the number of bits for this type. */
2611   nbits = read_number (pp, 0);
2612
2613   /* FIXME.  Here we should just be able to make a type of the right
2614      number of bits and signedness.  FIXME.  */
2615
2616   if (nbits == TARGET_LONG_LONG_BIT)
2617     return (lookup_fundamental_type (objfile,
2618                  signed_type? FT_LONG_LONG: FT_UNSIGNED_LONG_LONG));
2619   
2620   if (nbits == TARGET_INT_BIT)
2621     {
2622       /* FIXME -- the only way to distinguish `int' from `long'
2623          is to look at its name!  */
2624       if (signed_type)
2625         {
2626           if (long_kludge_name && long_kludge_name[0] == 'l' /* long */)
2627             return lookup_fundamental_type (objfile, FT_LONG);
2628           else
2629             return lookup_fundamental_type (objfile, FT_INTEGER);
2630         }
2631       else
2632         {
2633           if (long_kludge_name
2634               && ((long_kludge_name[0] == 'u' /* unsigned */ &&
2635                    long_kludge_name[9] == 'l' /* long */)
2636                   || (long_kludge_name[0] == 'l' /* long unsigned */)))
2637             return lookup_fundamental_type (objfile, FT_UNSIGNED_LONG);
2638           else
2639             return lookup_fundamental_type (objfile, FT_UNSIGNED_INTEGER);
2640         }
2641     }
2642     
2643   if (nbits == TARGET_SHORT_BIT)
2644     return (lookup_fundamental_type (objfile,
2645                  signed_type? FT_SHORT: FT_UNSIGNED_SHORT));
2646   
2647   if (nbits == TARGET_CHAR_BIT)
2648     return (lookup_fundamental_type (objfile,
2649                  signed_type? FT_CHAR: FT_UNSIGNED_CHAR));
2650   
2651   if (nbits == 0)
2652     return lookup_fundamental_type (objfile, FT_VOID);
2653   
2654   return error_type (pp);
2655 }
2656
2657 static struct type *
2658 read_sun_floating_type (pp, typenums, objfile)
2659      char **pp;
2660      int typenums[2];
2661      struct objfile *objfile;
2662 {
2663   int nbytes;
2664
2665   /* The first number has more details about the type, for example
2666      FN_COMPLEX.  See the sun stab.h.  */
2667   read_number (pp, ';');
2668
2669   /* The second number is the number of bytes occupied by this type */
2670   nbytes = read_number (pp, ';');
2671
2672   if (**pp != 0)
2673     return error_type (pp);
2674
2675   if (nbytes == TARGET_FLOAT_BIT / TARGET_CHAR_BIT)
2676     return lookup_fundamental_type (objfile, FT_FLOAT);
2677
2678   if (nbytes == TARGET_DOUBLE_BIT / TARGET_CHAR_BIT)
2679     return lookup_fundamental_type (objfile, FT_DBL_PREC_FLOAT);
2680
2681   if (nbytes == TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT)
2682     return lookup_fundamental_type (objfile, FT_EXT_PREC_FLOAT);
2683
2684   return error_type (pp);
2685 }
2686
2687 /* Read a number from the string pointed to by *PP.
2688    The value of *PP is advanced over the number.
2689    If END is nonzero, the character that ends the
2690    number must match END, or an error happens;
2691    and that character is skipped if it does match.
2692    If END is zero, *PP is left pointing to that character.
2693
2694    If the number fits in a long, set *VALUE and set *BITS to 0.
2695    If not, set *BITS to be the number of bits in the number.
2696
2697    If encounter garbage, set *BITS to -1.  */
2698
2699 static void
2700 read_huge_number (pp, end, valu, bits)
2701      char **pp;
2702      int end;
2703      long *valu;
2704      int *bits;
2705 {
2706   char *p = *pp;
2707   int sign = 1;
2708   long n = 0;
2709   int radix = 10;
2710   char overflow = 0;
2711   int nbits = 0;
2712   int c;
2713   long upper_limit;
2714   
2715   if (*p == '-')
2716     {
2717       sign = -1;
2718       p++;
2719     }
2720
2721   /* Leading zero means octal.  GCC uses this to output values larger
2722      than an int (because that would be hard in decimal).  */
2723   if (*p == '0')
2724     {
2725       radix = 8;
2726       p++;
2727     }
2728
2729   upper_limit = LONG_MAX / radix;
2730   while ((c = *p++) >= '0' && c <= ('0' + radix))
2731     {
2732       if (n <= upper_limit)
2733         {
2734           n *= radix;
2735           n += c - '0';         /* FIXME this overflows anyway */
2736         }
2737       else
2738         overflow = 1;
2739       
2740       /* This depends on large values being output in octal, which is
2741          what GCC does. */
2742       if (radix == 8)
2743         {
2744           if (nbits == 0)
2745             {
2746               if (c == '0')
2747                 /* Ignore leading zeroes.  */
2748                 ;
2749               else if (c == '1')
2750                 nbits = 1;
2751               else if (c == '2' || c == '3')
2752                 nbits = 2;
2753               else
2754                 nbits = 3;
2755             }
2756           else
2757             nbits += 3;
2758         }
2759     }
2760   if (end)
2761     {
2762       if (c && c != end)
2763         {
2764           if (bits != NULL)
2765             *bits = -1;
2766           return;
2767         }
2768     }
2769   else
2770     --p;
2771
2772   *pp = p;
2773   if (overflow)
2774     {
2775       if (nbits == 0)
2776         {
2777           /* Large decimal constants are an error (because it is hard to
2778              count how many bits are in them).  */
2779           if (bits != NULL)
2780             *bits = -1;
2781           return;
2782         }
2783       
2784       /* -0x7f is the same as 0x80.  So deal with it by adding one to
2785          the number of bits.  */
2786       if (sign == -1)
2787         ++nbits;
2788       if (bits)
2789         *bits = nbits;
2790     }
2791   else
2792     {
2793       if (valu)
2794         *valu = n * sign;
2795       if (bits)
2796         *bits = 0;
2797     }
2798 }
2799
2800 static struct type *
2801 read_range_type (pp, typenums, objfile)
2802      char **pp;
2803      int typenums[2];
2804      struct objfile *objfile;
2805 {
2806   int rangenums[2];
2807   long n2, n3;
2808   int n2bits, n3bits;
2809   int self_subrange;
2810   struct type *result_type;
2811   struct type *index_type;
2812
2813   /* First comes a type we are a subrange of.
2814      In C it is usually 0, 1 or the type being defined.  */
2815   read_type_number (pp, rangenums);
2816   self_subrange = (rangenums[0] == typenums[0] &&
2817                    rangenums[1] == typenums[1]);
2818
2819   /* A semicolon should now follow; skip it.  */
2820   if (**pp == ';')
2821     (*pp)++;
2822
2823   /* The remaining two operands are usually lower and upper bounds
2824      of the range.  But in some special cases they mean something else.  */
2825   read_huge_number (pp, ';', &n2, &n2bits);
2826   read_huge_number (pp, ';', &n3, &n3bits);
2827
2828   if (n2bits == -1 || n3bits == -1)
2829     return error_type (pp);
2830   
2831   /* If limits are huge, must be large integral type.  */
2832   if (n2bits != 0 || n3bits != 0)
2833     {
2834       char got_signed = 0;
2835       char got_unsigned = 0;
2836       /* Number of bits in the type.  */
2837       int nbits;
2838
2839       /* Range from 0 to <large number> is an unsigned large integral type.  */
2840       if ((n2bits == 0 && n2 == 0) && n3bits != 0)
2841         {
2842           got_unsigned = 1;
2843           nbits = n3bits;
2844         }
2845       /* Range from <large number> to <large number>-1 is a large signed
2846          integral type.  */
2847       else if (n2bits != 0 && n3bits != 0 && n2bits == n3bits + 1)
2848         {
2849           got_signed = 1;
2850           nbits = n2bits;
2851         }
2852
2853       /* Check for "long long".  */
2854       if (got_signed && nbits == TARGET_LONG_LONG_BIT)
2855         return (lookup_fundamental_type (objfile, FT_LONG_LONG));
2856       if (got_unsigned && nbits == TARGET_LONG_LONG_BIT)
2857         return (lookup_fundamental_type (objfile, FT_UNSIGNED_LONG_LONG));
2858
2859       if (got_signed || got_unsigned)
2860         {
2861           result_type = alloc_type (objfile);
2862           TYPE_LENGTH (result_type) = nbits / TARGET_CHAR_BIT;
2863           TYPE_CODE (result_type) = TYPE_CODE_INT;
2864           if (got_unsigned)
2865             TYPE_FLAGS (result_type) |= TYPE_FLAG_UNSIGNED;
2866           return result_type;
2867         }
2868       else
2869         return error_type (pp);
2870     }
2871
2872   /* A type defined as a subrange of itself, with bounds both 0, is void.  */
2873   if (self_subrange && n2 == 0 && n3 == 0)
2874     return (lookup_fundamental_type (objfile, FT_VOID));
2875
2876   /* If n3 is zero and n2 is not, we want a floating type,
2877      and n2 is the width in bytes.
2878
2879      Fortran programs appear to use this for complex types also,
2880      and they give no way to distinguish between double and single-complex!
2881      We don't have complex types, so we would lose on all fortran files!
2882      So return type `double' for all of those.  It won't work right
2883      for the complex values, but at least it makes the file loadable.
2884
2885      FIXME, we may be able to distinguish these by their names. FIXME.  */
2886
2887   if (n3 == 0 && n2 > 0)
2888     {
2889       if (n2 == sizeof (float))
2890         return (lookup_fundamental_type (objfile, FT_FLOAT));
2891       return (lookup_fundamental_type (objfile, FT_DBL_PREC_FLOAT));
2892     }
2893
2894   /* If the upper bound is -1, it must really be an unsigned int.  */
2895
2896   else if (n2 == 0 && n3 == -1)
2897     {
2898       /* FIXME -- the only way to distinguish `unsigned int' from `unsigned
2899          long' is to look at its name!  */
2900       if (
2901        long_kludge_name && ((long_kludge_name[0] == 'u' /* unsigned */ &&
2902                              long_kludge_name[9] == 'l' /* long */)
2903                          || (long_kludge_name[0] == 'l' /* long unsigned */)))
2904         return (lookup_fundamental_type (objfile, FT_UNSIGNED_LONG));
2905       else
2906         return (lookup_fundamental_type (objfile, FT_UNSIGNED_INTEGER));
2907     }
2908
2909   /* Special case: char is defined (Who knows why) as a subrange of
2910      itself with range 0-127.  */
2911   else if (self_subrange && n2 == 0 && n3 == 127)
2912     return (lookup_fundamental_type (objfile, FT_CHAR));
2913
2914   /* Assumptions made here: Subrange of self is equivalent to subrange
2915      of int.  FIXME:  Host and target type-sizes assumed the same.  */
2916   /* FIXME:  This is the *only* place in GDB that depends on comparing
2917      some type to a builtin type with ==.  Fix it! */
2918   else if (n2 == 0
2919            && (self_subrange ||
2920                *dbx_lookup_type (rangenums) == lookup_fundamental_type (objfile, FT_INTEGER)))
2921     {
2922       /* an unsigned type */
2923 #ifdef LONG_LONG
2924       if (n3 == - sizeof (long long))
2925         return (lookup_fundamental_type (objfile, FT_UNSIGNED_LONG_LONG));
2926 #endif
2927       /* FIXME -- the only way to distinguish `unsigned int' from `unsigned
2928          long' is to look at its name!  */
2929       if (n3 == (unsigned long)~0L &&
2930        long_kludge_name && ((long_kludge_name[0] == 'u' /* unsigned */ &&
2931                              long_kludge_name[9] == 'l' /* long */)
2932                          || (long_kludge_name[0] == 'l' /* long unsigned */)))
2933         return (lookup_fundamental_type (objfile, FT_UNSIGNED_LONG));
2934       if (n3 == (unsigned int)~0L)
2935         return (lookup_fundamental_type (objfile, FT_UNSIGNED_INTEGER));
2936       if (n3 == (unsigned short)~0L)
2937         return (lookup_fundamental_type (objfile, FT_UNSIGNED_SHORT));
2938       if (n3 == (unsigned char)~0L)
2939         return (lookup_fundamental_type (objfile, FT_UNSIGNED_CHAR));
2940     }
2941 #ifdef LONG_LONG
2942   else if (n3 == 0 && n2 == -sizeof (long long))
2943     return (lookup_fundamental_type (objfile, FT_LONG_LONG));
2944 #endif  
2945   else if (n2 == -n3 -1)
2946     {
2947       /* a signed type */
2948       /* FIXME -- the only way to distinguish `int' from `long' is to look
2949          at its name!  */
2950       if ((n3 ==(long)(((unsigned long)1 << (8 * sizeof (long)  - 1)) - 1)) &&
2951        long_kludge_name && long_kludge_name[0] == 'l' /* long */)
2952          return (lookup_fundamental_type (objfile, FT_LONG));
2953       if (n3 == (long)(((unsigned long)1 << (8 * sizeof (int)   - 1)) - 1))
2954         return (lookup_fundamental_type (objfile, FT_INTEGER));
2955       if (n3 ==        (               1 << (8 * sizeof (short) - 1)) - 1)
2956         return (lookup_fundamental_type (objfile, FT_SHORT));
2957       if (n3 ==        (               1 << (8 * sizeof (char)  - 1)) - 1)
2958         return (lookup_fundamental_type (objfile, FT_SIGNED_CHAR));
2959     }
2960
2961   /* We have a real range type on our hands.  Allocate space and
2962      return a real pointer.  */
2963
2964   /* At this point I don't have the faintest idea how to deal with
2965      a self_subrange type; I'm going to assume that this is used
2966      as an idiom, and that all of them are special cases.  So . . .  */
2967   if (self_subrange)
2968     return error_type (pp);
2969
2970   index_type = *dbx_lookup_type (rangenums);
2971   if (index_type == NULL)
2972     {
2973       complain (&range_type_base_complaint, rangenums[1]);
2974       index_type = lookup_fundamental_type (objfile, FT_INTEGER);
2975     }
2976
2977   result_type = create_range_type ((struct type *) NULL, index_type, n2, n3);
2978   return (result_type);
2979 }
2980
2981 /* Read a number from the string pointed to by *PP.
2982    The value of *PP is advanced over the number.
2983    If END is nonzero, the character that ends the
2984    number must match END, or an error happens;
2985    and that character is skipped if it does match.
2986    If END is zero, *PP is left pointing to that character.  */
2987
2988 long
2989 read_number (pp, end)
2990      char **pp;
2991      int end;
2992 {
2993   register char *p = *pp;
2994   register long n = 0;
2995   register int c;
2996   int sign = 1;
2997
2998   /* Handle an optional leading minus sign.  */
2999
3000   if (*p == '-')
3001     {
3002       sign = -1;
3003       p++;
3004     }
3005
3006   /* Read the digits, as far as they go.  */
3007
3008   while ((c = *p++) >= '0' && c <= '9')
3009     {
3010       n *= 10;
3011       n += c - '0';
3012     }
3013   if (end)
3014     {
3015       if (c && c != end)
3016         error ("Invalid symbol data: invalid character \\%03o at symbol pos %d.", c, symnum);
3017     }
3018   else
3019     --p;
3020
3021   *pp = p;
3022   return n * sign;
3023 }
3024
3025 /* Read in an argument list.  This is a list of types, separated by commas
3026    and terminated with END.  Return the list of types read in, or (struct type
3027    **)-1 if there is an error.  */
3028
3029 static struct type **
3030 read_args (pp, end, objfile)
3031      char **pp;
3032      int end;
3033      struct objfile *objfile;
3034 {
3035   /* FIXME!  Remove this arbitrary limit!  */
3036   struct type *types[1024], **rval; /* allow for fns of 1023 parameters */
3037   int n = 0;
3038
3039   while (**pp != end)
3040     {
3041       if (**pp != ',')
3042         /* Invalid argument list: no ','.  */
3043         return (struct type **)-1;
3044       (*pp)++;
3045       STABS_CONTINUE (pp);
3046       types[n++] = read_type (pp, objfile);
3047     }
3048   (*pp)++;                      /* get past `end' (the ':' character) */
3049
3050   if (n == 1)
3051     {
3052       rval = (struct type **) xmalloc (2 * sizeof (struct type *));
3053     }
3054   else if (TYPE_CODE (types[n-1]) != TYPE_CODE_VOID)
3055     {
3056       rval = (struct type **) xmalloc ((n + 1) * sizeof (struct type *));
3057       memset (rval + n, 0, sizeof (struct type *));
3058     }
3059   else
3060     {
3061       rval = (struct type **) xmalloc (n * sizeof (struct type *));
3062     }
3063   memcpy (rval, types, n * sizeof (struct type *));
3064   return rval;
3065 }
3066
3067 /* Add a common block's start address to the offset of each symbol
3068    declared to be in it (by being between a BCOMM/ECOMM pair that uses
3069    the common block name).  */
3070
3071 static void
3072 fix_common_block (sym, valu)
3073     struct symbol *sym;
3074     int valu;
3075 {
3076   struct pending *next = (struct pending *) SYMBOL_NAMESPACE (sym);
3077   for ( ; next; next = next->next)
3078     {
3079       register int j;
3080       for (j = next->nsyms - 1; j >= 0; j--)
3081         SYMBOL_VALUE_ADDRESS (next->symbol[j]) += valu;
3082     }
3083 }
3084
3085
3086 \f
3087 /* What about types defined as forward references inside of a small lexical
3088    scope?  */
3089 /* Add a type to the list of undefined types to be checked through
3090    once this file has been read in.  */
3091
3092 void
3093 add_undefined_type (type)
3094      struct type *type;
3095 {
3096   if (undef_types_length == undef_types_allocated)
3097     {
3098       undef_types_allocated *= 2;
3099       undef_types = (struct type **)
3100         xrealloc ((char *) undef_types,
3101                   undef_types_allocated * sizeof (struct type *));
3102     }
3103   undef_types[undef_types_length++] = type;
3104 }
3105
3106 /* Go through each undefined type, see if it's still undefined, and fix it
3107    up if possible.  We have two kinds of undefined types:
3108
3109    TYPE_CODE_ARRAY:  Array whose target type wasn't defined yet.
3110                         Fix:  update array length using the element bounds
3111                         and the target type's length.
3112    TYPE_CODE_STRUCT, TYPE_CODE_UNION:  Structure whose fields were not
3113                         yet defined at the time a pointer to it was made.
3114                         Fix:  Do a full lookup on the struct/union tag.  */
3115 void
3116 cleanup_undefined_types ()
3117 {
3118   struct type **type;
3119
3120   for (type = undef_types; type < undef_types + undef_types_length; type++)
3121     {
3122       switch (TYPE_CODE (*type))
3123         {
3124
3125           case TYPE_CODE_STRUCT:
3126           case TYPE_CODE_UNION:
3127           case TYPE_CODE_ENUM:
3128           {
3129             /* Check if it has been defined since.  */
3130             if (TYPE_FLAGS (*type) & TYPE_FLAG_STUB)
3131               {
3132                 struct pending *ppt;
3133                 int i;
3134                 /* Name of the type, without "struct" or "union" */
3135                 char *typename = TYPE_NAME (*type);
3136
3137                 if (!strncmp (typename, "struct ", 7))
3138                   typename += 7;
3139                 if (!strncmp (typename, "union ", 6))
3140                   typename += 6;
3141                 if (!strncmp (typename, "enum ", 5))
3142                   typename += 5;
3143
3144                 for (ppt = file_symbols; ppt; ppt = ppt->next)
3145                   {
3146                     for (i = 0; i < ppt->nsyms; i++)
3147                       {
3148                         struct symbol *sym = ppt->symbol[i];
3149                         
3150                         if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
3151                             && SYMBOL_NAMESPACE (sym) == STRUCT_NAMESPACE
3152                             && (TYPE_CODE (SYMBOL_TYPE (sym)) ==
3153                                 TYPE_CODE (*type))
3154                             && STREQ (SYMBOL_NAME (sym), typename))
3155                           {
3156                             memcpy (*type, SYMBOL_TYPE (sym),
3157                                     sizeof (struct type));
3158                           }
3159                       }
3160                   }
3161               }
3162           }
3163           break;
3164
3165           case TYPE_CODE_ARRAY:
3166           {
3167             struct type *range_type;
3168             int lower, upper;
3169
3170             if (TYPE_LENGTH (*type) != 0)               /* Better be unknown */
3171               goto badtype;
3172             if (TYPE_NFIELDS (*type) != 1)
3173               goto badtype;
3174             range_type = TYPE_FIELD_TYPE (*type, 0);
3175             if (TYPE_CODE (range_type) != TYPE_CODE_RANGE)
3176               goto badtype;
3177
3178             /* Now recompute the length of the array type, based on its
3179                number of elements and the target type's length.  */
3180             lower = TYPE_FIELD_BITPOS (range_type, 0);
3181             upper = TYPE_FIELD_BITPOS (range_type, 1);
3182             TYPE_LENGTH (*type) = (upper - lower + 1)
3183               * TYPE_LENGTH (TYPE_TARGET_TYPE (*type));
3184           }
3185           break;
3186
3187           default:
3188           badtype:
3189           error ("GDB internal error.  cleanup_undefined_types with bad type %d.", TYPE_CODE (*type));
3190           break;
3191         }
3192     }
3193   undef_types_length = 0;
3194 }
3195
3196 /* Scan through all of the global symbols defined in the object file,
3197    assigning values to the debugging symbols that need to be assigned
3198    to.  Get these symbols from the minimal symbol table.  */
3199
3200 void
3201 scan_file_globals (objfile)
3202      struct objfile *objfile;
3203 {
3204   int hash;
3205   struct minimal_symbol *msymbol;
3206   struct symbol *sym, *prev;
3207
3208   if (objfile->msymbols == 0)           /* Beware the null file.  */
3209     return;
3210
3211   for (msymbol = objfile -> msymbols; SYMBOL_NAME (msymbol) != NULL; msymbol++)
3212     {
3213       QUIT;
3214
3215       prev = NULL;
3216
3217       /* Get the hash index and check all the symbols
3218          under that hash index. */
3219
3220       hash = hashname (SYMBOL_NAME (msymbol));
3221
3222       for (sym = global_sym_chain[hash]; sym;)
3223         {
3224           if (SYMBOL_NAME (msymbol)[0] == SYMBOL_NAME (sym)[0] &&
3225               STREQ(SYMBOL_NAME (msymbol) + 1, SYMBOL_NAME (sym) + 1))
3226             {
3227               /* Splice this symbol out of the hash chain and
3228                  assign the value we have to it. */
3229               if (prev)
3230                 {
3231                   SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
3232                 }
3233               else
3234                 {
3235                   global_sym_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
3236                 }
3237               
3238               /* Check to see whether we need to fix up a common block.  */
3239               /* Note: this code might be executed several times for
3240                  the same symbol if there are multiple references.  */
3241
3242               if (SYMBOL_CLASS (sym) == LOC_BLOCK)
3243                 {
3244                   fix_common_block (sym, SYMBOL_VALUE_ADDRESS (msymbol));
3245                 }
3246               else
3247                 {
3248                   SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msymbol);
3249                 }
3250               
3251               if (prev)
3252                 {
3253                   sym = SYMBOL_VALUE_CHAIN (prev);
3254                 }
3255               else
3256                 {
3257                   sym = global_sym_chain[hash];
3258                 }
3259             }
3260           else
3261             {
3262               prev = sym;
3263               sym = SYMBOL_VALUE_CHAIN (sym);
3264             }
3265         }
3266     }
3267 }
3268
3269 /* Initialize anything that needs initializing when starting to read
3270    a fresh piece of a symbol file, e.g. reading in the stuff corresponding
3271    to a psymtab.  */
3272
3273 void
3274 stabsread_init ()
3275 {
3276 }
3277
3278 /* Initialize anything that needs initializing when a completely new
3279    symbol file is specified (not just adding some symbols from another
3280    file, e.g. a shared library).  */
3281
3282 void
3283 stabsread_new_init ()
3284 {
3285   /* Empty the hash table of global syms looking for values.  */
3286   memset (global_sym_chain, 0, sizeof (global_sym_chain));
3287 }
3288
3289 /* Initialize anything that needs initializing at the same time as
3290    start_symtab() is called. */
3291
3292 void start_stabs ()
3293 {
3294   global_stabs = NULL;          /* AIX COFF */
3295   /* Leave FILENUM of 0 free for builtin types and this file's types.  */
3296   n_this_object_header_files = 1;
3297   type_vector_length = 0;
3298   type_vector = (struct type **) 0;
3299 }
3300
3301 /* Call after end_symtab() */
3302
3303 void end_stabs ()
3304 {
3305   if (type_vector)
3306     {
3307       free ((char *) type_vector);
3308     }
3309   type_vector = 0;
3310   type_vector_length = 0;
3311   previous_stab_code = 0;
3312 }
3313
3314 void
3315 finish_global_stabs (objfile)
3316      struct objfile *objfile;
3317 {
3318   if (global_stabs)
3319     {
3320       patch_block_stabs (global_symbols, global_stabs, objfile);
3321       free ((PTR) global_stabs);
3322       global_stabs = NULL;
3323     }
3324 }
3325
3326 /* Initializer for this module */
3327
3328 void
3329 _initialize_stabsread ()
3330 {
3331   undef_types_allocated = 20;
3332   undef_types_length = 0;
3333   undef_types = (struct type **)
3334     xmalloc (undef_types_allocated * sizeof (struct type *));
3335 }
This page took 0.205896 seconds and 4 git commands to generate.