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