* dwarfread.c (struct dieinfo): Add has_at_byte_size.
[external/binutils.git] / gdb / dwarfread.c
1 /* DWARF debugging format support for GDB.
2    Copyright (C) 1991, 1992 Free Software Foundation, Inc.
3    Written by Fred Fish at Cygnus Support.  Portions based on dbxread.c,
4    mipsread.c, coffread.c, and dwarfread.c from a Data General SVR4 gdb port.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
21
22 /*
23
24 FIXME: Figure out how to get the frame pointer register number in the
25 execution environment of the target.  Remove R_FP kludge
26
27 FIXME: Add generation of dependencies list to partial symtab code.
28
29 FIXME: Resolve minor differences between what information we put in the
30 partial symbol table and what dbxread puts in.  For example, we don't yet
31 put enum constants there.  And dbxread seems to invent a lot of typedefs
32 we never see.  Use the new printpsym command to see the partial symbol table
33 contents.
34
35 FIXME: Figure out a better way to tell gdb about the name of the function
36 contain the user's entry point (I.E. main())
37
38 FIXME: See other FIXME's and "ifdef 0" scattered throughout the code for
39 other things to work on, if you get bored. :-)
40
41 */
42
43 #include "defs.h"
44 #include <varargs.h>
45 #include <fcntl.h>
46 #include <string.h>
47
48 #include "bfd.h"
49 #include "symtab.h"
50 #include "gdbtypes.h"
51 #include "symfile.h"
52 #include "objfiles.h"
53 #include "libbfd.h"     /* FIXME Secret Internal BFD stuff (bfd_read) */
54 #include "elf/dwarf.h"
55 #include "buildsym.h"
56 #include "demangle.h"
57
58 #ifdef MAINTENANCE      /* Define to 1 to compile in some maintenance stuff */
59 #define SQUAWK(stuff) dwarfwarn stuff
60 #else
61 #define SQUAWK(stuff)
62 #endif
63
64 #ifndef R_FP            /* FIXME */
65 #define R_FP 14         /* Kludge to get frame pointer register number */
66 #endif
67
68 typedef unsigned int DIE_REF;   /* Reference to a DIE */
69
70 #ifndef GCC_PRODUCER
71 #define GCC_PRODUCER "GNU C "
72 #endif
73
74 #ifndef GPLUS_PRODUCER
75 #define GPLUS_PRODUCER "GNU C++ "
76 #endif
77
78 #ifndef LCC_PRODUCER
79 #define LCC_PRODUCER "NCR C/C++ "
80 #endif
81
82 #ifndef CFRONT_PRODUCER
83 #define CFRONT_PRODUCER "CFRONT "       /* A wild a** guess... */
84 #endif
85
86 #define STREQ(a,b)              (strcmp(a,b)==0)
87 #define STREQN(a,b,n)           (strncmp(a,b,n)==0)
88
89 /* Flags to target_to_host() that tell whether or not the data object is
90    expected to be signed.  Used, for example, when fetching a signed
91    integer in the target environment which is used as a signed integer
92    in the host environment, and the two environments have different sized
93    ints.  In this case, *somebody* has to sign extend the smaller sized
94    int. */
95
96 #define GET_UNSIGNED    0       /* No sign extension required */
97 #define GET_SIGNED      1       /* Sign extension required */
98
99 /* Defines for things which are specified in the document "DWARF Debugging
100    Information Format" published by UNIX International, Programming Languages
101    SIG.  These defines are based on revision 1.0.0, Jan 20, 1992. */
102
103 #define SIZEOF_DIE_LENGTH       4
104 #define SIZEOF_DIE_TAG          2
105 #define SIZEOF_ATTRIBUTE        2
106 #define SIZEOF_FORMAT_SPECIFIER 1
107 #define SIZEOF_FMT_FT           2
108 #define SIZEOF_LINETBL_LENGTH   4
109 #define SIZEOF_LINETBL_LINENO   4
110 #define SIZEOF_LINETBL_STMT     2
111 #define SIZEOF_LINETBL_DELTA    4
112 #define SIZEOF_LOC_ATOM_CODE    1
113
114 #define FORM_FROM_ATTR(attr)    ((attr) & 0xF)  /* Implicitly specified */
115
116 /* Macros that return the sizes of various types of data in the target
117    environment.
118
119    FIXME:  Currently these are just compile time constants (as they are in
120    other parts of gdb as well).  They need to be able to get the right size
121    either from the bfd or possibly from the DWARF info.  It would be nice if
122    the DWARF producer inserted DIES that describe the fundamental types in
123    the target environment into the DWARF info, similar to the way dbx stabs
124    producers produce information about their fundamental types. */
125
126 #define TARGET_FT_POINTER_SIZE(objfile) (TARGET_PTR_BIT / TARGET_CHAR_BIT)
127 #define TARGET_FT_LONG_SIZE(objfile)    (TARGET_LONG_BIT / TARGET_CHAR_BIT)
128
129 /* The Amiga SVR4 header file <dwarf.h> defines AT_element_list as a
130    FORM_BLOCK2, and this is the value emitted by the AT&T compiler.
131    However, the Issue 2 DWARF specification from AT&T defines it as
132    a FORM_BLOCK4, as does the latest specification from UI/PLSIG.
133    For backwards compatibility with the AT&T compiler produced executables
134    we define AT_short_element_list for this variant. */
135
136 #define AT_short_element_list    (0x00f0|FORM_BLOCK2)
137
138 /* External variables referenced. */
139
140 extern int info_verbose;                /* From main.c; nonzero => verbose */
141 extern char *warning_pre_print;         /* From utils.c */
142
143 /* The DWARF debugging information consists of two major pieces,
144    one is a block of DWARF Information Entries (DIE's) and the other
145    is a line number table.  The "struct dieinfo" structure contains
146    the information for a single DIE, the one currently being processed.
147
148    In order to make it easier to randomly access the attribute fields
149    of the current DIE, which are specifically unordered within the DIE,
150    each DIE is scanned and an instance of the "struct dieinfo"
151    structure is initialized.
152
153    Initialization is done in two levels.  The first, done by basicdieinfo(),
154    just initializes those fields that are vital to deciding whether or not
155    to use this DIE, how to skip past it, etc.  The second, done by the
156    function completedieinfo(), fills in the rest of the information.
157
158    Attributes which have block forms are not interpreted at the time
159    the DIE is scanned, instead we just save pointers to the start
160    of their value fields.
161
162    Some fields have a flag <name>_p that is set when the value of the
163    field is valid (I.E. we found a matching attribute in the DIE).  Since
164    we may want to test for the presence of some attributes in the DIE,
165    such as AT_low_pc, without restricting the values of the field,
166    we need someway to note that we found such an attribute.
167    
168  */
169    
170 typedef char BLOCK;
171
172 struct dieinfo {
173   char *                die;            /* Pointer to the raw DIE data */
174   unsigned long         die_length;     /* Length of the raw DIE data */
175   DIE_REF               die_ref;        /* Offset of this DIE */
176   unsigned short        die_tag;        /* Tag for this DIE */
177   unsigned long         at_padding;
178   unsigned long         at_sibling;
179   BLOCK *               at_location;
180   char *                at_name;
181   unsigned short        at_fund_type;
182   BLOCK *               at_mod_fund_type;
183   unsigned long         at_user_def_type;
184   BLOCK *               at_mod_u_d_type;
185   unsigned short        at_ordering;
186   BLOCK *               at_subscr_data;
187   unsigned long         at_byte_size;
188   unsigned short        at_bit_offset;
189   unsigned long         at_bit_size;
190   BLOCK *               at_element_list;
191   unsigned long         at_stmt_list;
192   unsigned long         at_low_pc;
193   unsigned long         at_high_pc;
194   unsigned long         at_language;
195   unsigned long         at_member;
196   unsigned long         at_discr;
197   BLOCK *               at_discr_value;
198   BLOCK *               at_string_length;
199   char *                at_comp_dir;
200   char *                at_producer;
201   unsigned long         at_start_scope;
202   unsigned long         at_stride_size;
203   unsigned long         at_src_info;
204   char *                at_prototyped;
205   unsigned int          has_at_low_pc:1;
206   unsigned int          has_at_stmt_list:1;
207   unsigned int          has_at_byte_size:1;
208   unsigned int          short_element_list:1;
209 };
210
211 static int diecount;    /* Approximate count of dies for compilation unit */
212 static struct dieinfo *curdie;  /* For warnings and such */
213
214 static char *dbbase;    /* Base pointer to dwarf info */
215 static int dbroff;      /* Relative offset from start of .debug section */
216 static char *lnbase;    /* Base pointer to line section */
217 static int isreg;       /* Kludge to identify register variables */
218 static int offreg;      /* Kludge to identify basereg references */
219
220 /* This value is added to each symbol value.  FIXME:  Generalize to 
221    the section_offsets structure used by dbxread.  */
222 static CORE_ADDR baseaddr;      /* Add to each symbol value */
223
224 /* The section offsets used in the current psymtab or symtab.  FIXME,
225    only used to pass one value (baseaddr) at the moment.  */
226 static struct section_offsets *base_section_offsets;
227
228 /* Each partial symbol table entry contains a pointer to private data for the
229    read_symtab() function to use when expanding a partial symbol table entry
230    to a full symbol table entry.  For DWARF debugging info, this data is
231    contained in the following structure and macros are provided for easy
232    access to the members given a pointer to a partial symbol table entry.
233
234    dbfoff       Always the absolute file offset to the start of the ".debug"
235                 section for the file containing the DIE's being accessed.
236
237    dbroff       Relative offset from the start of the ".debug" access to the
238                 first DIE to be accessed.  When building the partial symbol
239                 table, this value will be zero since we are accessing the
240                 entire ".debug" section.  When expanding a partial symbol
241                 table entry, this value will be the offset to the first
242                 DIE for the compilation unit containing the symbol that
243                 triggers the expansion.
244
245    dblength     The size of the chunk of DIE's being examined, in bytes.
246
247    lnfoff       The absolute file offset to the line table fragment.  Ignored
248                 when building partial symbol tables, but used when expanding
249                 them, and contains the absolute file offset to the fragment
250                 of the ".line" section containing the line numbers for the
251                 current compilation unit.
252  */
253
254 struct dwfinfo {
255   int dbfoff;           /* Absolute file offset to start of .debug section */
256   int dbroff;           /* Relative offset from start of .debug section */
257   int dblength;         /* Size of the chunk of DIE's being examined */
258   int lnfoff;           /* Absolute file offset to line table fragment */
259 };
260
261 #define DBFOFF(p) (((struct dwfinfo *)((p)->read_symtab_private))->dbfoff)
262 #define DBROFF(p) (((struct dwfinfo *)((p)->read_symtab_private))->dbroff)
263 #define DBLENGTH(p) (((struct dwfinfo *)((p)->read_symtab_private))->dblength)
264 #define LNFOFF(p) (((struct dwfinfo *)((p)->read_symtab_private))->lnfoff)
265
266 /* The generic symbol table building routines have separate lists for
267    file scope symbols and all all other scopes (local scopes).  So
268    we need to select the right one to pass to add_symbol_to_list().
269    We do it by keeping a pointer to the correct list in list_in_scope.
270
271    FIXME:  The original dwarf code just treated the file scope as the first
272    local scope, and all other local scopes as nested local scopes, and worked
273    fine.  Check to see if we really need to distinguish these in buildsym.c */
274
275 struct pending **list_in_scope = &file_symbols;
276
277 /* DIES which have user defined types or modified user defined types refer to
278    other DIES for the type information.  Thus we need to associate the offset
279    of a DIE for a user defined type with a pointer to the type information.
280
281    Originally this was done using a simple but expensive algorithm, with an
282    array of unsorted structures, each containing an offset/type-pointer pair.
283    This array was scanned linearly each time a lookup was done.  The result
284    was that gdb was spending over half it's startup time munging through this
285    array of pointers looking for a structure that had the right offset member.
286
287    The second attempt used the same array of structures, but the array was
288    sorted using qsort each time a new offset/type was recorded, and a binary
289    search was used to find the type pointer for a given DIE offset.  This was
290    even slower, due to the overhead of sorting the array each time a new
291    offset/type pair was entered.
292
293    The third attempt uses a fixed size array of type pointers, indexed by a
294    value derived from the DIE offset.  Since the minimum DIE size is 4 bytes,
295    we can divide any DIE offset by 4 to obtain a unique index into this fixed
296    size array.  Since each element is a 4 byte pointer, it takes exactly as
297    much memory to hold this array as to hold the DWARF info for a given
298    compilation unit.  But it gets freed as soon as we are done with it. */
299
300 static struct type **utypes;    /* Pointer to array of user type pointers */
301 static int numutypes;           /* Max number of user type pointers */
302
303 /* Forward declarations of static functions so we don't have to worry
304    about ordering within this file.  */
305
306 static int
307 attribute_size PARAMS ((unsigned int));
308
309 static unsigned long
310 target_to_host PARAMS ((char *, int, int, struct objfile *));
311
312 static void
313 add_enum_psymbol PARAMS ((struct dieinfo *, struct objfile *));
314
315 static void
316 handle_producer PARAMS ((char *));
317
318 static void
319 read_file_scope PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
320
321 static void
322 read_func_scope PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
323
324 static void
325 read_lexical_block_scope PARAMS ((struct dieinfo *, char *, char *,
326                                   struct objfile *));
327
328 static void
329 dwarfwarn ();
330
331 static void
332 scan_partial_symbols PARAMS ((char *, char *, struct objfile *));
333
334 static void
335 scan_compilation_units PARAMS ((char *, char *, char *, unsigned int,
336                                 unsigned int, struct objfile *));
337
338 static void
339 add_partial_symbol PARAMS ((struct dieinfo *, struct objfile *));
340
341 static void
342 init_psymbol_list PARAMS ((struct objfile *, int));
343
344 static void
345 basicdieinfo PARAMS ((struct dieinfo *, char *, struct objfile *));
346
347 static void
348 completedieinfo PARAMS ((struct dieinfo *, struct objfile *));
349
350 static void
351 dwarf_psymtab_to_symtab PARAMS ((struct partial_symtab *));
352
353 static void
354 psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
355
356 static struct symtab *
357 read_ofile_symtab PARAMS ((struct partial_symtab *));
358
359 static void
360 process_dies PARAMS ((char *, char *, struct objfile *));
361
362 static void
363 read_structure_scope PARAMS ((struct dieinfo *, char *, char *,
364                               struct objfile *));
365
366 static struct type *
367 decode_array_element_type PARAMS ((char *));
368
369 static struct type *
370 decode_subscr_data PARAMS ((char *, char *));
371
372 static void
373 dwarf_read_array_type PARAMS ((struct dieinfo *));
374
375 static void
376 read_tag_pointer_type PARAMS ((struct dieinfo *dip));
377
378 static void
379 read_subroutine_type PARAMS ((struct dieinfo *, char *, char *));
380
381 static void
382 read_enumeration PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
383
384 static struct type *
385 struct_type PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
386
387 static struct type *
388 enum_type PARAMS ((struct dieinfo *, struct objfile *));
389
390 static void
391 decode_line_numbers PARAMS ((char *));
392
393 static struct type *
394 decode_die_type PARAMS ((struct dieinfo *));
395
396 static struct type *
397 decode_mod_fund_type PARAMS ((char *));
398
399 static struct type *
400 decode_mod_u_d_type PARAMS ((char *));
401
402 static struct type *
403 decode_modified_type PARAMS ((char *, unsigned int, int));
404
405 static struct type *
406 decode_fund_type PARAMS ((unsigned int));
407
408 static char *
409 create_name PARAMS ((char *, struct obstack *));
410
411 static struct type *
412 lookup_utype PARAMS ((DIE_REF));
413
414 static struct type *
415 alloc_utype PARAMS ((DIE_REF, struct type *));
416
417 static struct symbol *
418 new_symbol PARAMS ((struct dieinfo *, struct objfile *));
419
420 static int
421 locval PARAMS ((char *));
422
423 static void
424 record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type,
425                                struct objfile *));
426
427 /*
428
429 GLOBAL FUNCTION
430
431         dwarf_build_psymtabs -- build partial symtabs from DWARF debug info
432
433 SYNOPSIS
434
435         void dwarf_build_psymtabs (int desc, char *filename, 
436              struct section_offsets *section_offsets,
437              int mainline, unsigned int dbfoff, unsigned int dbsize,
438              unsigned int lnoffset, unsigned int lnsize,
439              struct objfile *objfile)
440
441 DESCRIPTION
442
443         This function is called upon to build partial symtabs from files
444         containing DIE's (Dwarf Information Entries) and DWARF line numbers.
445
446         It is passed a file descriptor for an open file containing the DIES
447         and line number information, the corresponding filename for that
448         file, a base address for relocating the symbols, a flag indicating
449         whether or not this debugging information is from a "main symbol
450         table" rather than a shared library or dynamically linked file,
451         and file offset/size pairs for the DIE information and line number
452         information.
453
454 RETURNS
455
456         No return value.
457
458  */
459
460 void
461 dwarf_build_psymtabs (desc, filename, section_offsets, mainline, dbfoff, dbsize,
462                       lnoffset, lnsize, objfile)
463      int desc;
464      char *filename;
465      struct section_offsets *section_offsets;
466      int mainline;
467      unsigned int dbfoff;
468      unsigned int dbsize;
469      unsigned int lnoffset;
470      unsigned int lnsize;
471      struct objfile *objfile;
472 {
473   struct cleanup *back_to;
474   
475   current_objfile = objfile;
476   dbbase = xmalloc (dbsize);
477   dbroff = 0;
478   if ((lseek (desc, dbfoff, 0) != dbfoff) ||
479       (read (desc, dbbase, dbsize) != dbsize))
480     {
481       free (dbbase);
482       error ("can't read DWARF data from '%s'", filename);
483     }
484   back_to = make_cleanup (free, dbbase);
485   
486   /* If we are reinitializing, or if we have never loaded syms yet, init.
487      Since we have no idea how many DIES we are looking at, we just guess
488      some arbitrary value. */
489   
490   if (mainline || objfile -> global_psymbols.size == 0 ||
491       objfile -> static_psymbols.size == 0)
492     {
493       init_psymbol_list (objfile, 1024);
494     }
495   
496   /* Save the relocation factor where everybody can see it.  */
497
498   base_section_offsets = section_offsets;
499   baseaddr = ANOFFSET (section_offsets, 0);
500
501   /* Follow the compilation unit sibling chain, building a partial symbol
502      table entry for each one.  Save enough information about each compilation
503      unit to locate the full DWARF information later. */
504   
505   scan_compilation_units (filename, dbbase, dbbase + dbsize,
506                           dbfoff, lnoffset, objfile);
507   
508   do_cleanups (back_to);
509   current_objfile = NULL;
510 }
511
512
513 /*
514
515 LOCAL FUNCTION
516
517         record_minimal_symbol -- add entry to gdb's minimal symbol table
518
519 SYNOPSIS
520
521         static void record_minimal_symbol (char *name, CORE_ADDR address,
522                                           enum minimal_symbol_type ms_type,
523                                           struct objfile *objfile)
524
525 DESCRIPTION
526
527         Given a pointer to the name of a symbol that should be added to the
528         minimal symbol table, and the address associated with that
529         symbol, records this information for later use in building the
530         minimal symbol table.
531
532  */
533
534 static void
535 record_minimal_symbol (name, address, ms_type, objfile)
536      char *name;
537      CORE_ADDR address;
538      enum minimal_symbol_type ms_type;
539      struct objfile *objfile;
540 {
541   name = obsavestring (name, strlen (name), &objfile -> symbol_obstack);
542   prim_record_minimal_symbol (name, address, ms_type);
543 }
544
545 /*
546
547 LOCAL FUNCTION
548
549         dwarfwarn -- issue a DWARF related warning
550
551 DESCRIPTION
552
553         Issue warnings about DWARF related things that aren't serious enough
554         to warrant aborting with an error, but should not be ignored either.
555         This includes things like detectable corruption in DIE's, missing
556         DIE's, unimplemented features, etc.
557
558         In general, running across tags or attributes that we don't recognize
559         is not considered to be a problem and we should not issue warnings
560         about such.
561
562 NOTES
563
564         We mostly follow the example of the error() routine, but without
565         returning to command level.  It is arguable about whether warnings
566         should be issued at all, and if so, where they should go (stdout or
567         stderr).
568
569         We assume that curdie is valid and contains at least the basic
570         information for the DIE where the problem was noticed.
571 */
572
573 static void
574 dwarfwarn (va_alist)
575      va_dcl
576 {
577   va_list ap;
578   char *fmt;
579   
580   va_start (ap);
581   fmt = va_arg (ap, char *);
582   warning_setup ();
583   fprintf (stderr, "warning: DWARF ref 0x%x: ", curdie -> die_ref);
584   if (curdie -> at_name)
585     {
586       fprintf (stderr, "'%s': ", curdie -> at_name);
587     }
588   vfprintf (stderr, fmt, ap);
589   fprintf (stderr, "\n");
590   fflush (stderr);
591   va_end (ap);
592 }
593
594 /*
595
596 LOCAL FUNCTION
597
598         read_lexical_block_scope -- process all dies in a lexical block
599
600 SYNOPSIS
601
602         static void read_lexical_block_scope (struct dieinfo *dip,
603                 char *thisdie, char *enddie)
604
605 DESCRIPTION
606
607         Process all the DIES contained within a lexical block scope.
608         Start a new scope, process the dies, and then close the scope.
609
610  */
611
612 static void
613 read_lexical_block_scope (dip, thisdie, enddie, objfile)
614      struct dieinfo *dip;
615      char *thisdie;
616      char *enddie;
617      struct objfile *objfile;
618 {
619   register struct context_stack *new;
620
621   push_context (0, dip -> at_low_pc);
622   process_dies (thisdie + dip -> die_length, enddie, objfile);
623   new = pop_context ();
624   if (local_symbols != NULL)
625     {
626       finish_block (0, &local_symbols, new -> old_blocks, new -> start_addr,
627                     dip -> at_high_pc, objfile);
628     }
629   local_symbols = new -> locals;
630 }
631
632 /*
633
634 LOCAL FUNCTION
635
636         lookup_utype -- look up a user defined type from die reference
637
638 SYNOPSIS
639
640         static type *lookup_utype (DIE_REF die_ref)
641
642 DESCRIPTION
643
644         Given a DIE reference, lookup the user defined type associated with
645         that DIE, if it has been registered already.  If not registered, then
646         return NULL.  Alloc_utype() can be called to register an empty
647         type for this reference, which will be filled in later when the
648         actual referenced DIE is processed.
649  */
650
651 static struct type *
652 lookup_utype (die_ref)
653      DIE_REF die_ref;
654 {
655   struct type *type = NULL;
656   int utypeidx;
657   
658   utypeidx = (die_ref - dbroff) / 4;
659   if ((utypeidx < 0) || (utypeidx >= numutypes))
660     {
661       dwarfwarn ("reference to DIE (0x%x) outside compilation unit", die_ref);
662     }
663   else
664     {
665       type = *(utypes + utypeidx);
666     }
667   return (type);
668 }
669
670
671 /*
672
673 LOCAL FUNCTION
674
675         alloc_utype  -- add a user defined type for die reference
676
677 SYNOPSIS
678
679         static type *alloc_utype (DIE_REF die_ref, struct type *utypep)
680
681 DESCRIPTION
682
683         Given a die reference DIE_REF, and a possible pointer to a user
684         defined type UTYPEP, register that this reference has a user
685         defined type and either use the specified type in UTYPEP or
686         make a new empty type that will be filled in later.
687
688         We should only be called after calling lookup_utype() to verify that
689         there is not currently a type registered for DIE_REF.
690  */
691
692 static struct type *
693 alloc_utype (die_ref, utypep)
694      DIE_REF die_ref;
695      struct type *utypep;
696 {
697   struct type **typep;
698   int utypeidx;
699   
700   utypeidx = (die_ref - dbroff) / 4;
701   typep = utypes + utypeidx;
702   if ((utypeidx < 0) || (utypeidx >= numutypes))
703     {
704       utypep = lookup_fundamental_type (current_objfile, FT_INTEGER);
705       dwarfwarn ("reference to DIE (0x%x) outside compilation unit", die_ref);
706     }
707   else if (*typep != NULL)
708     {
709       utypep = *typep;
710       SQUAWK (("internal error: dup user type allocation"));
711     }
712   else
713     {
714       if (utypep == NULL)
715         {
716           utypep = alloc_type (current_objfile);
717         }
718       *typep = utypep;
719     }
720   return (utypep);
721 }
722
723 /*
724
725 LOCAL FUNCTION
726
727         decode_die_type -- return a type for a specified die
728
729 SYNOPSIS
730
731         static struct type *decode_die_type (struct dieinfo *dip)
732
733 DESCRIPTION
734
735         Given a pointer to a die information structure DIP, decode the
736         type of the die and return a pointer to the decoded type.  All
737         dies without specific types default to type int.
738  */
739
740 static struct type *
741 decode_die_type (dip)
742      struct dieinfo *dip;
743 {
744   struct type *type = NULL;
745   
746   if (dip -> at_fund_type != 0)
747     {
748       type = decode_fund_type (dip -> at_fund_type);
749     }
750   else if (dip -> at_mod_fund_type != NULL)
751     {
752       type = decode_mod_fund_type (dip -> at_mod_fund_type);
753     }
754   else if (dip -> at_user_def_type)
755     {
756       if ((type = lookup_utype (dip -> at_user_def_type)) == NULL)
757         {
758           type = alloc_utype (dip -> at_user_def_type, NULL);
759         }
760     }
761   else if (dip -> at_mod_u_d_type)
762     {
763       type = decode_mod_u_d_type (dip -> at_mod_u_d_type);
764     }
765   else
766     {
767       type = lookup_fundamental_type (current_objfile, FT_INTEGER);
768     }
769   return (type);
770 }
771
772 /*
773
774 LOCAL FUNCTION
775
776         struct_type -- compute and return the type for a struct or union
777
778 SYNOPSIS
779
780         static struct type *struct_type (struct dieinfo *dip, char *thisdie,
781             char *enddie, struct objfile *objfile)
782
783 DESCRIPTION
784
785         Given pointer to a die information structure for a die which
786         defines a union or structure (and MUST define one or the other),
787         and pointers to the raw die data that define the range of dies which
788         define the members, compute and return the user defined type for the
789         structure or union.
790  */
791
792 static struct type *
793 struct_type (dip, thisdie, enddie, objfile)
794      struct dieinfo *dip;
795      char *thisdie;
796      char *enddie;
797      struct objfile *objfile;
798 {
799   struct type *type;
800   struct nextfield {
801     struct nextfield *next;
802     struct field field;
803   };
804   struct nextfield *list = NULL;
805   struct nextfield *new;
806   int nfields = 0;
807   int n;
808   char *tpart1;
809   struct dieinfo mbr;
810   char *nextdie;
811   int anonymous_size;
812   
813   if ((type = lookup_utype (dip -> die_ref)) == NULL)
814     {
815       /* No forward references created an empty type, so install one now */
816       type = alloc_utype (dip -> die_ref, NULL);
817     }
818   INIT_CPLUS_SPECIFIC(type);
819   switch (dip -> die_tag)
820     {
821       case TAG_structure_type:
822         TYPE_CODE (type) = TYPE_CODE_STRUCT;
823         tpart1 = "struct";
824         break;
825       case TAG_union_type:
826         TYPE_CODE (type) = TYPE_CODE_UNION;
827         tpart1 = "union";
828         break;
829       default:
830         /* Should never happen */
831         TYPE_CODE (type) = TYPE_CODE_UNDEF;
832         tpart1 = "???";
833         SQUAWK (("missing structure or union tag"));
834         break;
835     }
836   /* Some compilers try to be helpful by inventing "fake" names for
837      anonymous enums, structures, and unions, like "~0fake" or ".0fake".
838      Thanks, but no thanks... */
839   if (dip -> at_name != NULL
840       && *dip -> at_name != '~'
841       && *dip -> at_name != '.')
842     {
843       TYPE_NAME (type) = obconcat (&objfile -> type_obstack,
844                                    tpart1, " ", dip -> at_name);
845     }
846   /* Use whatever size is known.  Zero is a valid size.  We might however
847      wish to check has_at_byte_size to make sure that some byte size was
848      given explicitly, but DWARF doesn't specify that explicit sizes of
849      zero have to present, so complaining about missing sizes should 
850      probably not be the default. */
851   TYPE_LENGTH (type) = dip -> at_byte_size;
852   thisdie += dip -> die_length;
853   while (thisdie < enddie)
854     {
855       basicdieinfo (&mbr, thisdie, objfile);
856       completedieinfo (&mbr, objfile);
857       if (mbr.die_length <= SIZEOF_DIE_LENGTH)
858         {
859           break;
860         }
861       else if (mbr.at_sibling != 0)
862         {
863           nextdie = dbbase + mbr.at_sibling - dbroff;
864         }
865       else
866         {
867           nextdie = thisdie + mbr.die_length;
868         }
869       switch (mbr.die_tag)
870         {
871         case TAG_member:
872           /* Get space to record the next field's data.  */
873           new = (struct nextfield *) alloca (sizeof (struct nextfield));
874           new -> next = list;
875           list = new;
876           /* Save the data.  */
877           list -> field.name =
878               obsavestring (mbr.at_name, strlen (mbr.at_name),
879                             &objfile -> type_obstack);
880           list -> field.type = decode_die_type (&mbr);
881           list -> field.bitpos = 8 * locval (mbr.at_location);
882           /* Handle bit fields. */
883           list -> field.bitsize = mbr.at_bit_size;
884 #if BITS_BIG_ENDIAN
885           /* For big endian bits, the at_bit_offset gives the additional
886              bit offset from the MSB of the containing anonymous object to
887              the MSB of the field.  We don't have to do anything special
888              since we don't need to know the size of the anonymous object. */
889           list -> field.bitpos += mbr.at_bit_offset;
890 #else
891           /* For little endian bits, we need to have a non-zero at_bit_size,
892              so that we know we are in fact dealing with a bitfield.  Compute
893              the bit offset to the MSB of the anonymous object, subtract off
894              the number of bits from the MSB of the field to the MSB of the
895              object, and then subtract off the number of bits of the field
896              itself.  The result is the bit offset of the LSB of the field. */
897           if (mbr.at_bit_size > 0)
898             {
899               if (mbr.has_at_byte_size)
900                 {
901                   /* The size of the anonymous object containing the bit field
902                      is explicit, so use the indicated size (in bytes). */
903                   anonymous_size = mbr.at_byte_size;
904                 }
905               else
906                 {
907                   /* The size of the anonymous object containing the bit field
908                      matches the size of an object of the bit field's type.
909                      DWARF allows at_byte_size to be left out in such cases,
910                      as a debug information size optimization. */
911                   anonymous_size = TYPE_LENGTH (list -> field.type);
912                 }
913               list -> field.bitpos +=
914                 anonymous_size * 8 - mbr.at_bit_offset - mbr.at_bit_size;
915             }
916 #endif
917           nfields++;
918           break;
919         default:
920           process_dies (thisdie, nextdie, objfile);
921           break;
922         }
923       thisdie = nextdie;
924     }
925   /* Now create the vector of fields, and record how big it is.  We may
926      not even have any fields, if this DIE was generated due to a reference
927      to an anonymous structure or union.  In this case, TYPE_FLAG_STUB is
928      set, which clues gdb in to the fact that it needs to search elsewhere
929      for the full structure definition. */
930   if (nfields == 0)
931     {
932       TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
933     }
934   else
935     {
936       TYPE_NFIELDS (type) = nfields;
937       TYPE_FIELDS (type) = (struct field *)
938         obstack_alloc (&objfile -> type_obstack,
939                        sizeof (struct field) * nfields);
940       /* Copy the saved-up fields into the field vector.  */
941       for (n = nfields; list; list = list -> next)
942         {
943           TYPE_FIELD (type, --n) = list -> field;
944         }       
945     }
946   return (type);
947 }
948
949 /*
950
951 LOCAL FUNCTION
952
953         read_structure_scope -- process all dies within struct or union
954
955 SYNOPSIS
956
957         static void read_structure_scope (struct dieinfo *dip,
958                 char *thisdie, char *enddie, struct objfile *objfile)
959
960 DESCRIPTION
961
962         Called when we find the DIE that starts a structure or union
963         scope (definition) to process all dies that define the members
964         of the structure or union.  DIP is a pointer to the die info
965         struct for the DIE that names the structure or union.
966
967 NOTES
968
969         Note that we need to call struct_type regardless of whether or not
970         the DIE has an at_name attribute, since it might be an anonymous
971         structure or union.  This gets the type entered into our set of
972         user defined types.
973
974         However, if the structure is incomplete (an opaque struct/union)
975         then suppress creating a symbol table entry for it since gdb only
976         wants to find the one with the complete definition.  Note that if
977         it is complete, we just call new_symbol, which does it's own
978         checking about whether the struct/union is anonymous or not (and
979         suppresses creating a symbol table entry itself).
980         
981  */
982
983 static void
984 read_structure_scope (dip, thisdie, enddie, objfile)
985      struct dieinfo *dip;
986      char *thisdie;
987      char *enddie;
988      struct objfile *objfile;
989 {
990   struct type *type;
991   struct symbol *sym;
992   
993   type = struct_type (dip, thisdie, enddie, objfile);
994   if (!(TYPE_FLAGS (type) & TYPE_FLAG_STUB))
995     {
996       if ((sym = new_symbol (dip, objfile)) != NULL)
997         {
998           SYMBOL_TYPE (sym) = type;
999         }
1000     }
1001 }
1002
1003 /*
1004
1005 LOCAL FUNCTION
1006
1007         decode_array_element_type -- decode type of the array elements
1008
1009 SYNOPSIS
1010
1011         static struct type *decode_array_element_type (char *scan, char *end)
1012
1013 DESCRIPTION
1014
1015         As the last step in decoding the array subscript information for an
1016         array DIE, we need to decode the type of the array elements.  We are
1017         passed a pointer to this last part of the subscript information and
1018         must return the appropriate type.  If the type attribute is not
1019         recognized, just warn about the problem and return type int.
1020  */
1021
1022 static struct type *
1023 decode_array_element_type (scan)
1024      char *scan;
1025 {
1026   struct type *typep;
1027   DIE_REF die_ref;
1028   unsigned short attribute;
1029   unsigned short fundtype;
1030   int nbytes;
1031   
1032   attribute = target_to_host (scan, SIZEOF_ATTRIBUTE, GET_UNSIGNED,
1033                               current_objfile);
1034   scan += SIZEOF_ATTRIBUTE;
1035   if ((nbytes = attribute_size (attribute)) == -1)
1036     {
1037       SQUAWK (("bad array element type attribute 0x%x", attribute));
1038       typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
1039     }
1040   else
1041     {
1042       switch (attribute)
1043         {
1044           case AT_fund_type:
1045             fundtype = target_to_host (scan, nbytes, GET_UNSIGNED,
1046                                        current_objfile);
1047             typep = decode_fund_type (fundtype);
1048             break;
1049           case AT_mod_fund_type:
1050             typep = decode_mod_fund_type (scan);
1051             break;
1052           case AT_user_def_type:
1053             die_ref = target_to_host (scan, nbytes, GET_UNSIGNED,
1054                                       current_objfile);
1055             if ((typep = lookup_utype (die_ref)) == NULL)
1056               {
1057                 typep = alloc_utype (die_ref, NULL);
1058               }
1059             break;
1060           case AT_mod_u_d_type:
1061             typep = decode_mod_u_d_type (scan);
1062             break;
1063           default:
1064             SQUAWK (("bad array element type attribute 0x%x", attribute));
1065             typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
1066             break;
1067           }
1068     }
1069   return (typep);
1070 }
1071
1072 /*
1073
1074 LOCAL FUNCTION
1075
1076         decode_subscr_data -- decode array subscript and element type data
1077
1078 SYNOPSIS
1079
1080         static struct type *decode_subscr_data (char *scan, char *end)
1081
1082 DESCRIPTION
1083
1084         The array subscripts and the data type of the elements of an
1085         array are described by a list of data items, stored as a block
1086         of contiguous bytes.  There is a data item describing each array
1087         dimension, and a final data item describing the element type.
1088         The data items are ordered the same as their appearance in the
1089         source (I.E. leftmost dimension first, next to leftmost second,
1090         etc).
1091
1092         We are passed a pointer to the start of the block of bytes
1093         containing the data items, and a pointer to the first byte past
1094         the data.  This function decodes the data and returns a type.
1095
1096 BUGS
1097         FIXME:  This code only implements the forms currently used
1098         by the AT&T and GNU C compilers.
1099
1100         The end pointer is supplied for error checking, maybe we should
1101         use it for that...
1102  */
1103
1104 static struct type *
1105 decode_subscr_data (scan, end)
1106      char *scan;
1107      char *end;
1108 {
1109   struct type *typep = NULL;
1110   struct type *nexttype;
1111   unsigned int format;
1112   unsigned short fundtype;
1113   unsigned long lowbound;
1114   unsigned long highbound;
1115   int nbytes;
1116   
1117   format = target_to_host (scan, SIZEOF_FORMAT_SPECIFIER, GET_UNSIGNED,
1118                            current_objfile);
1119   scan += SIZEOF_FORMAT_SPECIFIER;
1120   switch (format)
1121     {
1122     case FMT_ET:
1123       typep = decode_array_element_type (scan);
1124       break;
1125     case FMT_FT_C_C:
1126       fundtype = target_to_host (scan, SIZEOF_FMT_FT, GET_UNSIGNED,
1127                                  current_objfile);
1128       scan += SIZEOF_FMT_FT;
1129       if (fundtype != FT_integer && fundtype != FT_signed_integer
1130           && fundtype != FT_unsigned_integer)
1131         {
1132           SQUAWK (("array subscripts must be integral types, not type 0x%x",
1133                    fundtype));
1134         }
1135       else
1136         {
1137           nbytes = TARGET_FT_LONG_SIZE (current_objfile);
1138           lowbound = target_to_host (scan, nbytes, GET_UNSIGNED,
1139                                      current_objfile);
1140           scan += nbytes;
1141           highbound = target_to_host (scan, nbytes, GET_UNSIGNED,
1142                                       current_objfile);
1143           scan += nbytes;
1144           nexttype = decode_subscr_data (scan, end);
1145           if (nexttype != NULL)
1146             {
1147               typep = alloc_type (current_objfile);
1148               TYPE_CODE (typep) = TYPE_CODE_ARRAY;
1149               TYPE_LENGTH (typep) = TYPE_LENGTH (nexttype);
1150               TYPE_LENGTH (typep) *= (highbound - lowbound) + 1;
1151               TYPE_TARGET_TYPE (typep) = nexttype;
1152             }               
1153         }
1154       break;
1155     case FMT_FT_C_X:
1156     case FMT_FT_X_C:
1157     case FMT_FT_X_X:
1158     case FMT_UT_C_C:
1159     case FMT_UT_C_X:
1160     case FMT_UT_X_C:
1161     case FMT_UT_X_X:
1162       SQUAWK (("array subscript format 0x%x not handled yet", format));
1163       break;
1164     default:
1165       SQUAWK (("unknown array subscript format %x", format));
1166       break;
1167     }
1168   return (typep);
1169 }
1170
1171 /*
1172
1173 LOCAL FUNCTION
1174
1175         dwarf_read_array_type -- read TAG_array_type DIE
1176
1177 SYNOPSIS
1178
1179         static void dwarf_read_array_type (struct dieinfo *dip)
1180
1181 DESCRIPTION
1182
1183         Extract all information from a TAG_array_type DIE and add to
1184         the user defined type vector.
1185  */
1186
1187 static void
1188 dwarf_read_array_type (dip)
1189      struct dieinfo *dip;
1190 {
1191   struct type *type;
1192   struct type *utype;
1193   char *sub;
1194   char *subend;
1195   unsigned short blocksz;
1196   int nbytes;
1197   
1198   if (dip -> at_ordering != ORD_row_major)
1199     {
1200       /* FIXME:  Can gdb even handle column major arrays? */
1201       SQUAWK (("array not row major; not handled correctly"));
1202     }
1203   if ((sub = dip -> at_subscr_data) != NULL)
1204     {
1205       nbytes = attribute_size (AT_subscr_data);
1206       blocksz = target_to_host (sub, nbytes, GET_UNSIGNED, current_objfile);
1207       subend = sub + nbytes + blocksz;
1208       sub += nbytes;
1209       type = decode_subscr_data (sub, subend);
1210       if (type == NULL)
1211         {
1212           if ((utype = lookup_utype (dip -> die_ref)) == NULL)
1213             {
1214               utype = alloc_utype (dip -> die_ref, NULL);
1215             }
1216           TYPE_CODE (utype) = TYPE_CODE_ARRAY;
1217           TYPE_TARGET_TYPE (utype) = 
1218             lookup_fundamental_type (current_objfile, FT_INTEGER);
1219           TYPE_LENGTH (utype) = 1 * TYPE_LENGTH (TYPE_TARGET_TYPE (utype));
1220         }
1221       else
1222         {
1223           if ((utype = lookup_utype (dip -> die_ref)) == NULL)
1224             {
1225               alloc_utype (dip -> die_ref, type);
1226             }
1227           else
1228             {
1229               TYPE_CODE (utype) = TYPE_CODE_ARRAY;
1230               TYPE_LENGTH (utype) = TYPE_LENGTH (type);
1231               TYPE_TARGET_TYPE (utype) = TYPE_TARGET_TYPE (type);
1232             }
1233         }
1234     }
1235 }
1236
1237 /*
1238
1239 LOCAL FUNCTION
1240
1241         read_tag_pointer_type -- read TAG_pointer_type DIE
1242
1243 SYNOPSIS
1244
1245         static void read_tag_pointer_type (struct dieinfo *dip)
1246
1247 DESCRIPTION
1248
1249         Extract all information from a TAG_pointer_type DIE and add to
1250         the user defined type vector.
1251  */
1252
1253 static void
1254 read_tag_pointer_type (dip)
1255      struct dieinfo *dip;
1256 {
1257   struct type *type;
1258   struct type *utype;
1259   
1260   type = decode_die_type (dip);
1261   if ((utype = lookup_utype (dip -> die_ref)) == NULL)
1262     {
1263       utype = lookup_pointer_type (type);
1264       alloc_utype (dip -> die_ref, utype);
1265     }
1266   else
1267     {
1268       TYPE_TARGET_TYPE (utype) = type;
1269       TYPE_POINTER_TYPE (type) = utype;
1270
1271       /* We assume the machine has only one representation for pointers!  */
1272       /* FIXME:  This confuses host<->target data representations, and is a
1273          poor assumption besides. */
1274       
1275       TYPE_LENGTH (utype) = sizeof (char *);
1276       TYPE_CODE (utype) = TYPE_CODE_PTR;
1277     }
1278 }
1279
1280 /*
1281
1282 LOCAL FUNCTION
1283
1284         read_subroutine_type -- process TAG_subroutine_type dies
1285
1286 SYNOPSIS
1287
1288         static void read_subroutine_type (struct dieinfo *dip, char thisdie,
1289                 char *enddie)
1290
1291 DESCRIPTION
1292
1293         Handle DIES due to C code like:
1294
1295         struct foo {
1296             int (*funcp)(int a, long l);  (Generates TAG_subroutine_type DIE)
1297             int b;
1298         };
1299
1300 NOTES
1301
1302         The parameter DIES are currently ignored.  See if gdb has a way to
1303         include this info in it's type system, and decode them if so.  Is
1304         this what the type structure's "arg_types" field is for?  (FIXME)
1305  */
1306
1307 static void
1308 read_subroutine_type (dip, thisdie, enddie)
1309      struct dieinfo *dip;
1310      char *thisdie;
1311      char *enddie;
1312 {
1313   struct type *type;            /* Type that this function returns */
1314   struct type *ftype;           /* Function that returns above type */
1315   
1316   /* Decode the type that this subroutine returns */
1317
1318   type = decode_die_type (dip);
1319
1320   /* Check to see if we already have a partially constructed user
1321      defined type for this DIE, from a forward reference. */
1322
1323   if ((ftype = lookup_utype (dip -> die_ref)) == NULL)
1324     {
1325       /* This is the first reference to one of these types.  Make
1326          a new one and place it in the user defined types. */
1327       ftype = lookup_function_type (type);
1328       alloc_utype (dip -> die_ref, ftype);
1329     }
1330   else
1331     {
1332       /* We have an existing partially constructed type, so bash it
1333          into the correct type. */
1334       TYPE_TARGET_TYPE (ftype) = type;
1335       TYPE_FUNCTION_TYPE (type) = ftype;
1336       TYPE_LENGTH (ftype) = 1;
1337       TYPE_CODE (ftype) = TYPE_CODE_FUNC;
1338     }
1339 }
1340
1341 /*
1342
1343 LOCAL FUNCTION
1344
1345         read_enumeration -- process dies which define an enumeration
1346
1347 SYNOPSIS
1348
1349         static void read_enumeration (struct dieinfo *dip, char *thisdie,
1350                 char *enddie, struct objfile *objfile)
1351
1352 DESCRIPTION
1353
1354         Given a pointer to a die which begins an enumeration, process all
1355         the dies that define the members of the enumeration.
1356
1357 NOTES
1358
1359         Note that we need to call enum_type regardless of whether or not we
1360         have a symbol, since we might have an enum without a tag name (thus
1361         no symbol for the tagname).
1362  */
1363
1364 static void
1365 read_enumeration (dip, thisdie, enddie, objfile)
1366      struct dieinfo *dip;
1367      char *thisdie;
1368      char *enddie;
1369      struct objfile *objfile;
1370 {
1371   struct type *type;
1372   struct symbol *sym;
1373   
1374   type = enum_type (dip, objfile);
1375   if ((sym = new_symbol (dip, objfile)) != NULL)
1376     {
1377       SYMBOL_TYPE (sym) = type;
1378     }
1379 }
1380
1381 /*
1382
1383 LOCAL FUNCTION
1384
1385         enum_type -- decode and return a type for an enumeration
1386
1387 SYNOPSIS
1388
1389         static type *enum_type (struct dieinfo *dip, struct objfile *objfile)
1390
1391 DESCRIPTION
1392
1393         Given a pointer to a die information structure for the die which
1394         starts an enumeration, process all the dies that define the members
1395         of the enumeration and return a type pointer for the enumeration.
1396
1397         At the same time, for each member of the enumeration, create a
1398         symbol for it with namespace VAR_NAMESPACE and class LOC_CONST,
1399         and give it the type of the enumeration itself.
1400
1401 NOTES
1402
1403         Note that the DWARF specification explicitly mandates that enum
1404         constants occur in reverse order from the source program order,
1405         for "consistency" and because this ordering is easier for many
1406         compilers to generate. (Draft 6, sec 3.8.5, Enumeration type
1407         Entries).  Because gdb wants to see the enum members in program
1408         source order, we have to ensure that the order gets reversed while
1409         we are processing them.
1410  */
1411
1412 static struct type *
1413 enum_type (dip, objfile)
1414      struct dieinfo *dip;
1415      struct objfile *objfile;
1416 {
1417   struct type *type;
1418   struct nextfield {
1419     struct nextfield *next;
1420     struct field field;
1421   };
1422   struct nextfield *list = NULL;
1423   struct nextfield *new;
1424   int nfields = 0;
1425   int n;
1426   char *scan;
1427   char *listend;
1428   unsigned short blocksz;
1429   struct symbol *sym;
1430   int nbytes;
1431   
1432   if ((type = lookup_utype (dip -> die_ref)) == NULL)
1433     {
1434       /* No forward references created an empty type, so install one now */
1435       type = alloc_utype (dip -> die_ref, NULL);
1436     }
1437   TYPE_CODE (type) = TYPE_CODE_ENUM;
1438   /* Some compilers try to be helpful by inventing "fake" names for
1439      anonymous enums, structures, and unions, like "~0fake" or ".0fake".
1440      Thanks, but no thanks... */
1441   if (dip -> at_name != NULL
1442       && *dip -> at_name != '~'
1443       && *dip -> at_name != '.')
1444     {
1445       TYPE_NAME (type) = obconcat (&objfile -> type_obstack, "enum",
1446                                    " ", dip -> at_name);
1447     }
1448   if (dip -> at_byte_size != 0)
1449     {
1450       TYPE_LENGTH (type) = dip -> at_byte_size;
1451     }
1452   if ((scan = dip -> at_element_list) != NULL)
1453     {
1454       if (dip -> short_element_list)
1455         {
1456           nbytes = attribute_size (AT_short_element_list);
1457         }
1458       else
1459         {
1460           nbytes = attribute_size (AT_element_list);
1461         }
1462       blocksz = target_to_host (scan, nbytes, GET_UNSIGNED, objfile);
1463       listend = scan + nbytes + blocksz;
1464       scan += nbytes;
1465       while (scan < listend)
1466         {
1467           new = (struct nextfield *) alloca (sizeof (struct nextfield));
1468           new -> next = list;
1469           list = new;
1470           list -> field.type = NULL;
1471           list -> field.bitsize = 0;
1472           list -> field.bitpos =
1473             target_to_host (scan, TARGET_FT_LONG_SIZE (objfile), GET_SIGNED,
1474                             objfile);
1475           scan += TARGET_FT_LONG_SIZE (objfile);
1476           list -> field.name = obsavestring (scan, strlen (scan),
1477                                              &objfile -> type_obstack);
1478           scan += strlen (scan) + 1;
1479           nfields++;
1480           /* Handcraft a new symbol for this enum member. */
1481           sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
1482                                                  sizeof (struct symbol));
1483           memset (sym, 0, sizeof (struct symbol));
1484           SYMBOL_NAME (sym) = create_name (list -> field.name,
1485                                            &objfile->symbol_obstack);
1486           SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1487           SYMBOL_CLASS (sym) = LOC_CONST;
1488           SYMBOL_TYPE (sym) = type;
1489           SYMBOL_VALUE (sym) = list -> field.bitpos;
1490           add_symbol_to_list (sym, list_in_scope);
1491         }
1492       /* Now create the vector of fields, and record how big it is. This is
1493          where we reverse the order, by pulling the members off the list in
1494          reverse order from how they were inserted.  If we have no fields
1495          (this is apparently possible in C++) then skip building a field
1496          vector. */
1497       if (nfields > 0)
1498         {
1499           TYPE_NFIELDS (type) = nfields;
1500           TYPE_FIELDS (type) = (struct field *)
1501             obstack_alloc (&objfile->symbol_obstack, sizeof (struct field) * nfields);
1502           /* Copy the saved-up fields into the field vector.  */
1503           for (n = 0; (n < nfields) && (list != NULL); list = list -> next)
1504             {
1505               TYPE_FIELD (type, n++) = list -> field;
1506             }   
1507         }
1508     }
1509   return (type);
1510 }
1511
1512 /*
1513
1514 LOCAL FUNCTION
1515
1516         read_func_scope -- process all dies within a function scope
1517
1518 DESCRIPTION
1519
1520         Process all dies within a given function scope.  We are passed
1521         a die information structure pointer DIP for the die which
1522         starts the function scope, and pointers into the raw die data
1523         that define the dies within the function scope.
1524
1525         For now, we ignore lexical block scopes within the function.
1526         The problem is that AT&T cc does not define a DWARF lexical
1527         block scope for the function itself, while gcc defines a
1528         lexical block scope for the function.  We need to think about
1529         how to handle this difference, or if it is even a problem.
1530         (FIXME)
1531  */
1532
1533 static void
1534 read_func_scope (dip, thisdie, enddie, objfile)
1535      struct dieinfo *dip;
1536      char *thisdie;
1537      char *enddie;
1538      struct objfile *objfile;
1539 {
1540   register struct context_stack *new;
1541   
1542   if (objfile -> ei.entry_point >= dip -> at_low_pc &&
1543       objfile -> ei.entry_point <  dip -> at_high_pc)
1544     {
1545       objfile -> ei.entry_func_lowpc = dip -> at_low_pc;
1546       objfile -> ei.entry_func_highpc = dip -> at_high_pc;
1547     }
1548   if (STREQ (dip -> at_name, "main"))   /* FIXME: hardwired name */
1549     {
1550       objfile -> ei.main_func_lowpc = dip -> at_low_pc;
1551       objfile -> ei.main_func_highpc = dip -> at_high_pc;
1552     }
1553   new = push_context (0, dip -> at_low_pc);
1554   new -> name = new_symbol (dip, objfile);
1555   list_in_scope = &local_symbols;
1556   process_dies (thisdie + dip -> die_length, enddie, objfile);
1557   new = pop_context ();
1558   /* Make a block for the local symbols within.  */
1559   finish_block (new -> name, &local_symbols, new -> old_blocks,
1560                 new -> start_addr, dip -> at_high_pc, objfile);
1561   list_in_scope = &file_symbols;
1562 }
1563
1564
1565 /*
1566
1567 LOCAL FUNCTION
1568
1569         handle_producer -- process the AT_producer attribute
1570
1571 DESCRIPTION
1572
1573         Perform any operations that depend on finding a particular
1574         AT_producer attribute.
1575
1576  */
1577
1578 static void
1579 handle_producer (producer)
1580      char *producer;
1581 {
1582
1583   /* If this compilation unit was compiled with g++ or gcc, then set the
1584      processing_gcc_compilation flag. */
1585
1586   processing_gcc_compilation =
1587     STREQN (producer, GPLUS_PRODUCER, strlen (GPLUS_PRODUCER))
1588       || STREQN (producer, GCC_PRODUCER, strlen (GCC_PRODUCER));
1589
1590   /* Select a demangling style if we can identify the producer and if
1591      the current style is auto.  We leave the current style alone if it
1592      is not auto.  We also leave the demangling style alone if we find a
1593      gcc (cc1) producer, as opposed to a g++ (cc1plus) producer. */
1594
1595 #if 1 /* Works, but is experimental.  -fnf */
1596   if (current_demangling_style == auto_demangling)
1597     {
1598       if (STREQN (producer, GPLUS_PRODUCER, strlen (GPLUS_PRODUCER)))
1599         {
1600           set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1601         }
1602       else if (STREQN (producer, LCC_PRODUCER, strlen (LCC_PRODUCER)))
1603         {
1604           set_demangling_style (LUCID_DEMANGLING_STYLE_STRING);
1605         }
1606       else if (STREQN (producer, CFRONT_PRODUCER, strlen (CFRONT_PRODUCER)))
1607         {
1608           set_demangling_style (CFRONT_DEMANGLING_STYLE_STRING);
1609         }
1610     }
1611 #endif
1612 }
1613
1614
1615 /*
1616
1617 LOCAL FUNCTION
1618
1619         read_file_scope -- process all dies within a file scope
1620
1621 DESCRIPTION
1622
1623         Process all dies within a given file scope.  We are passed a
1624         pointer to the die information structure for the die which
1625         starts the file scope, and pointers into the raw die data which
1626         mark the range of dies within the file scope.
1627
1628         When the partial symbol table is built, the file offset for the line
1629         number table for each compilation unit is saved in the partial symbol
1630         table entry for that compilation unit.  As the symbols for each
1631         compilation unit are read, the line number table is read into memory
1632         and the variable lnbase is set to point to it.  Thus all we have to
1633         do is use lnbase to access the line number table for the current
1634         compilation unit.
1635  */
1636
1637 static void
1638 read_file_scope (dip, thisdie, enddie, objfile)
1639      struct dieinfo *dip;
1640      char *thisdie;
1641      char *enddie;
1642      struct objfile *objfile;
1643 {
1644   struct cleanup *back_to;
1645   struct symtab *symtab;
1646   
1647   if (objfile -> ei.entry_point >= dip -> at_low_pc &&
1648       objfile -> ei.entry_point <  dip -> at_high_pc)
1649     {
1650       objfile -> ei.entry_file_lowpc = dip -> at_low_pc;
1651       objfile -> ei.entry_file_highpc = dip -> at_high_pc;
1652     }
1653   if (dip -> at_producer != NULL)
1654     {
1655       handle_producer (dip -> at_producer);
1656     }
1657   numutypes = (enddie - thisdie) / 4;
1658   utypes = (struct type **) xmalloc (numutypes * sizeof (struct type *));
1659   back_to = make_cleanup (free, utypes);
1660   memset (utypes, 0, numutypes * sizeof (struct type *));
1661   start_symtab (dip -> at_name, dip -> at_comp_dir, dip -> at_low_pc);
1662   decode_line_numbers (lnbase);
1663   process_dies (thisdie + dip -> die_length, enddie, objfile);
1664   symtab = end_symtab (dip -> at_high_pc, 0, 0, objfile);
1665   /* FIXME:  The following may need to be expanded for other languages */
1666   switch (dip -> at_language)
1667     {
1668       case LANG_C89:
1669       case LANG_C:
1670         symtab -> language = language_c;
1671         break;
1672       case LANG_C_PLUS_PLUS:
1673         symtab -> language = language_cplus;
1674         break;
1675       default:
1676         ;
1677     }
1678   do_cleanups (back_to);
1679   utypes = NULL;
1680   numutypes = 0;
1681 }
1682
1683 /*
1684
1685 LOCAL FUNCTION
1686
1687         process_dies -- process a range of DWARF Information Entries
1688
1689 SYNOPSIS
1690
1691         static void process_dies (char *thisdie, char *enddie,
1692                                   struct objfile *objfile)
1693
1694 DESCRIPTION
1695
1696         Process all DIE's in a specified range.  May be (and almost
1697         certainly will be) called recursively.
1698  */
1699
1700 static void
1701 process_dies (thisdie, enddie, objfile)
1702      char *thisdie;
1703      char *enddie;
1704      struct objfile *objfile;
1705 {
1706   char *nextdie;
1707   struct dieinfo di;
1708   
1709   while (thisdie < enddie)
1710     {
1711       basicdieinfo (&di, thisdie, objfile);
1712       if (di.die_length < SIZEOF_DIE_LENGTH)
1713         {
1714           break;
1715         }
1716       else if (di.die_tag == TAG_padding)
1717         {
1718           nextdie = thisdie + di.die_length;
1719         }
1720       else
1721         {
1722           completedieinfo (&di, objfile);
1723           if (di.at_sibling != 0)
1724             {
1725               nextdie = dbbase + di.at_sibling - dbroff;
1726             }
1727           else
1728             {
1729               nextdie = thisdie + di.die_length;
1730             }
1731           switch (di.die_tag)
1732             {
1733             case TAG_compile_unit:
1734               read_file_scope (&di, thisdie, nextdie, objfile);
1735               break;
1736             case TAG_global_subroutine:
1737             case TAG_subroutine:
1738               if (di.has_at_low_pc)
1739                 {
1740                   read_func_scope (&di, thisdie, nextdie, objfile);
1741                 }
1742               break;
1743             case TAG_lexical_block:
1744               read_lexical_block_scope (&di, thisdie, nextdie, objfile);
1745               break;
1746             case TAG_structure_type:
1747             case TAG_union_type:
1748               read_structure_scope (&di, thisdie, nextdie, objfile);
1749               break;
1750             case TAG_enumeration_type:
1751               read_enumeration (&di, thisdie, nextdie, objfile);
1752               break;
1753             case TAG_subroutine_type:
1754               read_subroutine_type (&di, thisdie, nextdie);
1755               break;
1756             case TAG_array_type:
1757               dwarf_read_array_type (&di);
1758               break;
1759             case TAG_pointer_type:
1760               read_tag_pointer_type (&di);
1761               break;
1762             default:
1763               new_symbol (&di, objfile);
1764               break;
1765             }
1766         }
1767       thisdie = nextdie;
1768     }
1769 }
1770
1771 /*
1772
1773 LOCAL FUNCTION
1774
1775         decode_line_numbers -- decode a line number table fragment
1776
1777 SYNOPSIS
1778
1779         static void decode_line_numbers (char *tblscan, char *tblend,
1780                 long length, long base, long line, long pc)
1781
1782 DESCRIPTION
1783
1784         Translate the DWARF line number information to gdb form.
1785
1786         The ".line" section contains one or more line number tables, one for
1787         each ".line" section from the objects that were linked.
1788
1789         The AT_stmt_list attribute for each TAG_source_file entry in the
1790         ".debug" section contains the offset into the ".line" section for the
1791         start of the table for that file.
1792
1793         The table itself has the following structure:
1794
1795         <table length><base address><source statement entry>
1796         4 bytes       4 bytes       10 bytes
1797
1798         The table length is the total size of the table, including the 4 bytes
1799         for the length information.
1800
1801         The base address is the address of the first instruction generated
1802         for the source file.
1803
1804         Each source statement entry has the following structure:
1805
1806         <line number><statement position><address delta>
1807         4 bytes      2 bytes             4 bytes
1808
1809         The line number is relative to the start of the file, starting with
1810         line 1.
1811
1812         The statement position either -1 (0xFFFF) or the number of characters
1813         from the beginning of the line to the beginning of the statement.
1814
1815         The address delta is the difference between the base address and
1816         the address of the first instruction for the statement.
1817
1818         Note that we must copy the bytes from the packed table to our local
1819         variables before attempting to use them, to avoid alignment problems
1820         on some machines, particularly RISC processors.
1821
1822 BUGS
1823
1824         Does gdb expect the line numbers to be sorted?  They are now by
1825         chance/luck, but are not required to be.  (FIXME)
1826
1827         The line with number 0 is unused, gdb apparently can discover the
1828         span of the last line some other way. How?  (FIXME)
1829  */
1830
1831 static void
1832 decode_line_numbers (linetable)
1833      char *linetable;
1834 {
1835   char *tblscan;
1836   char *tblend;
1837   unsigned long length;
1838   unsigned long base;
1839   unsigned long line;
1840   unsigned long pc;
1841   
1842   if (linetable != NULL)
1843     {
1844       tblscan = tblend = linetable;
1845       length = target_to_host (tblscan, SIZEOF_LINETBL_LENGTH, GET_UNSIGNED,
1846                                current_objfile);
1847       tblscan += SIZEOF_LINETBL_LENGTH;
1848       tblend += length;
1849       base = target_to_host (tblscan, TARGET_FT_POINTER_SIZE (objfile),
1850                              GET_UNSIGNED, current_objfile);
1851       tblscan += TARGET_FT_POINTER_SIZE (objfile);
1852       base += baseaddr;
1853       while (tblscan < tblend)
1854         {
1855           line = target_to_host (tblscan, SIZEOF_LINETBL_LINENO, GET_UNSIGNED,
1856                                  current_objfile);
1857           tblscan += SIZEOF_LINETBL_LINENO + SIZEOF_LINETBL_STMT;
1858           pc = target_to_host (tblscan, SIZEOF_LINETBL_DELTA, GET_UNSIGNED,
1859                                current_objfile);
1860           tblscan += SIZEOF_LINETBL_DELTA;
1861           pc += base;
1862           if (line != 0)
1863             {
1864               record_line (current_subfile, line, pc);
1865             }
1866         }
1867     }
1868 }
1869
1870 /*
1871
1872 LOCAL FUNCTION
1873
1874         locval -- compute the value of a location attribute
1875
1876 SYNOPSIS
1877
1878         static int locval (char *loc)
1879
1880 DESCRIPTION
1881
1882         Given pointer to a string of bytes that define a location, compute
1883         the location and return the value.
1884
1885         When computing values involving the current value of the frame pointer,
1886         the value zero is used, which results in a value relative to the frame
1887         pointer, rather than the absolute value.  This is what GDB wants
1888         anyway.
1889     
1890         When the result is a register number, the global isreg flag is set,
1891         otherwise it is cleared.  This is a kludge until we figure out a better
1892         way to handle the problem.  Gdb's design does not mesh well with the
1893         DWARF notion of a location computing interpreter, which is a shame
1894         because the flexibility goes unused.
1895
1896 NOTES
1897
1898         Note that stack[0] is unused except as a default error return.
1899         Note that stack overflow is not yet handled.
1900  */
1901
1902 static int
1903 locval (loc)
1904      char *loc;
1905 {
1906   unsigned short nbytes;
1907   unsigned short locsize;
1908   auto long stack[64];
1909   int stacki;
1910   char *end;
1911   long regno;
1912   int loc_atom_code;
1913   int loc_value_size;
1914   
1915   nbytes = attribute_size (AT_location);
1916   locsize = target_to_host (loc, nbytes, GET_UNSIGNED, current_objfile);
1917   loc += nbytes;
1918   end = loc + locsize;
1919   stacki = 0;
1920   stack[stacki] = 0;
1921   isreg = 0;
1922   offreg = 0;
1923   loc_value_size = TARGET_FT_LONG_SIZE (current_objfile);
1924   while (loc < end)
1925     {
1926       loc_atom_code = target_to_host (loc, SIZEOF_LOC_ATOM_CODE, GET_UNSIGNED,
1927                                       current_objfile);
1928       loc += SIZEOF_LOC_ATOM_CODE;
1929       switch (loc_atom_code)
1930         {
1931           case 0:
1932             /* error */
1933             loc = end;
1934             break;
1935           case OP_REG:
1936             /* push register (number) */
1937             stack[++stacki] = target_to_host (loc, loc_value_size,
1938                                               GET_UNSIGNED, current_objfile);
1939             loc += loc_value_size;
1940             isreg = 1;
1941             break;
1942           case OP_BASEREG:
1943             /* push value of register (number) */
1944             /* Actually, we compute the value as if register has 0 */
1945             offreg = 1;
1946             regno = target_to_host (loc, loc_value_size, GET_UNSIGNED,
1947                                     current_objfile);
1948             loc += loc_value_size;
1949             if (regno == R_FP)
1950               {
1951                 stack[++stacki] = 0;
1952               }
1953             else
1954               {
1955                 stack[++stacki] = 0;
1956                 SQUAWK (("BASEREG %d not handled!", regno));
1957               }
1958             break;
1959           case OP_ADDR:
1960             /* push address (relocated address) */
1961             stack[++stacki] = target_to_host (loc, loc_value_size,
1962                                               GET_UNSIGNED, current_objfile);
1963             loc += loc_value_size;
1964             break;
1965           case OP_CONST:
1966             /* push constant (number)   FIXME: signed or unsigned! */
1967             stack[++stacki] = target_to_host (loc, loc_value_size,
1968                                               GET_SIGNED, current_objfile);
1969             loc += loc_value_size;
1970             break;
1971           case OP_DEREF2:
1972             /* pop, deref and push 2 bytes (as a long) */
1973             SQUAWK (("OP_DEREF2 address 0x%x not handled", stack[stacki]));
1974             break;
1975           case OP_DEREF4:       /* pop, deref and push 4 bytes (as a long) */
1976             SQUAWK (("OP_DEREF4 address 0x%x not handled", stack[stacki]));
1977             break;
1978           case OP_ADD:  /* pop top 2 items, add, push result */
1979             stack[stacki - 1] += stack[stacki];
1980             stacki--;
1981             break;
1982         }
1983     }
1984   return (stack[stacki]);
1985 }
1986
1987 /*
1988
1989 LOCAL FUNCTION
1990
1991         read_ofile_symtab -- build a full symtab entry from chunk of DIE's
1992
1993 SYNOPSIS
1994
1995         static struct symtab *read_ofile_symtab (struct partial_symtab *pst)
1996
1997 DESCRIPTION
1998
1999         When expanding a partial symbol table entry to a full symbol table
2000         entry, this is the function that gets called to read in the symbols
2001         for the compilation unit.
2002
2003         Returns a pointer to the newly constructed symtab (which is now
2004         the new first one on the objfile's symtab list).
2005  */
2006
2007 static struct symtab *
2008 read_ofile_symtab (pst)
2009      struct partial_symtab *pst;
2010 {
2011   struct cleanup *back_to;
2012   unsigned long lnsize;
2013   int foffset;
2014   bfd *abfd;
2015   char lnsizedata[SIZEOF_LINETBL_LENGTH];
2016
2017   abfd = pst -> objfile -> obfd;
2018   current_objfile = pst -> objfile;
2019
2020   /* Allocate a buffer for the entire chunk of DIE's for this compilation
2021      unit, seek to the location in the file, and read in all the DIE's. */
2022
2023   diecount = 0;
2024   dbbase = xmalloc (DBLENGTH(pst));
2025   dbroff = DBROFF(pst);
2026   foffset = DBFOFF(pst) + dbroff;
2027   base_section_offsets = pst->section_offsets;
2028   baseaddr = ANOFFSET (pst->section_offsets, 0);
2029   if (bfd_seek (abfd, foffset, 0) ||
2030       (bfd_read (dbbase, DBLENGTH(pst), 1, abfd) != DBLENGTH(pst)))
2031     {
2032       free (dbbase);
2033       error ("can't read DWARF data");
2034     }
2035   back_to = make_cleanup (free, dbbase);
2036
2037   /* If there is a line number table associated with this compilation unit
2038      then read the size of this fragment in bytes, from the fragment itself.
2039      Allocate a buffer for the fragment and read it in for future 
2040      processing. */
2041
2042   lnbase = NULL;
2043   if (LNFOFF (pst))
2044     {
2045       if (bfd_seek (abfd, LNFOFF (pst), 0) ||
2046           (bfd_read ((PTR) lnsizedata, sizeof (lnsizedata), 1, abfd) !=
2047            sizeof (lnsizedata)))
2048         {
2049           error ("can't read DWARF line number table size");
2050         }
2051       lnsize = target_to_host (lnsizedata, SIZEOF_LINETBL_LENGTH,
2052                                GET_UNSIGNED, pst -> objfile);
2053       lnbase = xmalloc (lnsize);
2054       if (bfd_seek (abfd, LNFOFF (pst), 0) ||
2055           (bfd_read (lnbase, lnsize, 1, abfd) != lnsize))
2056         {
2057           free (lnbase);
2058           error ("can't read DWARF line numbers");
2059         }
2060       make_cleanup (free, lnbase);
2061     }
2062
2063   process_dies (dbbase, dbbase + DBLENGTH(pst), pst -> objfile);
2064   do_cleanups (back_to);
2065   current_objfile = NULL;
2066   return (pst -> objfile -> symtabs);
2067 }
2068
2069 /*
2070
2071 LOCAL FUNCTION
2072
2073         psymtab_to_symtab_1 -- do grunt work for building a full symtab entry
2074
2075 SYNOPSIS
2076
2077         static void psymtab_to_symtab_1 (struct partial_symtab *pst)
2078
2079 DESCRIPTION
2080
2081         Called once for each partial symbol table entry that needs to be
2082         expanded into a full symbol table entry.
2083
2084 */
2085
2086 static void
2087 psymtab_to_symtab_1 (pst)
2088      struct partial_symtab *pst;
2089 {
2090   int i;
2091   struct cleanup *old_chain;
2092   
2093   if (pst != NULL)
2094     {
2095       if (pst->readin)
2096         {
2097           warning ("psymtab for %s already read in.  Shouldn't happen.",
2098                    pst -> filename);
2099         }
2100       else
2101         {
2102           /* Read in all partial symtabs on which this one is dependent */
2103           for (i = 0; i < pst -> number_of_dependencies; i++)
2104             {
2105               if (!pst -> dependencies[i] -> readin)
2106                 {
2107                   /* Inform about additional files that need to be read in. */
2108                   if (info_verbose)
2109                     {
2110                       fputs_filtered (" ", stdout);
2111                       wrap_here ("");
2112                       fputs_filtered ("and ", stdout);
2113                       wrap_here ("");
2114                       printf_filtered ("%s...",
2115                                        pst -> dependencies[i] -> filename);
2116                       wrap_here ("");
2117                       fflush (stdout);          /* Flush output */
2118                     }
2119                   psymtab_to_symtab_1 (pst -> dependencies[i]);
2120                 }
2121             }     
2122           if (DBLENGTH (pst))           /* Otherwise it's a dummy */
2123             {
2124               buildsym_init ();
2125               old_chain = make_cleanup (really_free_pendings, 0);
2126               pst -> symtab = read_ofile_symtab (pst);
2127               if (info_verbose)
2128                 {
2129                   printf_filtered ("%d DIE's, sorting...", diecount);
2130                   wrap_here ("");
2131                   fflush (stdout);
2132                 }
2133               sort_symtab_syms (pst -> symtab);
2134               do_cleanups (old_chain);
2135             }
2136           pst -> readin = 1;
2137         }
2138     }
2139 }
2140
2141 /*
2142
2143 LOCAL FUNCTION
2144
2145         dwarf_psymtab_to_symtab -- build a full symtab entry from partial one
2146
2147 SYNOPSIS
2148
2149         static void dwarf_psymtab_to_symtab (struct partial_symtab *pst)
2150
2151 DESCRIPTION
2152
2153         This is the DWARF support entry point for building a full symbol
2154         table entry from a partial symbol table entry.  We are passed a
2155         pointer to the partial symbol table entry that needs to be expanded.
2156
2157 */
2158
2159 static void
2160 dwarf_psymtab_to_symtab (pst)
2161      struct partial_symtab *pst;
2162 {
2163
2164   if (pst != NULL)
2165     {
2166       if (pst -> readin)
2167         {
2168           warning ("psymtab for %s already read in.  Shouldn't happen.",
2169                    pst -> filename);
2170         }
2171       else
2172         {
2173           if (DBLENGTH (pst) || pst -> number_of_dependencies)
2174             {
2175               /* Print the message now, before starting serious work, to avoid
2176                  disconcerting pauses.  */
2177               if (info_verbose)
2178                 {
2179                   printf_filtered ("Reading in symbols for %s...",
2180                                    pst -> filename);
2181                   fflush (stdout);
2182                 }
2183               
2184               psymtab_to_symtab_1 (pst);
2185               
2186 #if 0         /* FIXME:  Check to see what dbxread is doing here and see if
2187                  we need to do an equivalent or is this something peculiar to
2188                  stabs/a.out format.
2189                  Match with global symbols.  This only needs to be done once,
2190                  after all of the symtabs and dependencies have been read in.
2191                  */
2192               scan_file_globals (pst -> objfile);
2193 #endif
2194               
2195               /* Finish up the verbose info message.  */
2196               if (info_verbose)
2197                 {
2198                   printf_filtered ("done.\n");
2199                   fflush (stdout);
2200                 }
2201             }
2202         }
2203     }
2204 }
2205
2206 /*
2207
2208 LOCAL FUNCTION
2209
2210         init_psymbol_list -- initialize storage for partial symbols
2211
2212 SYNOPSIS
2213
2214         static void init_psymbol_list (struct objfile *objfile, int total_symbols)
2215
2216 DESCRIPTION
2217
2218         Initializes storage for all of the partial symbols that will be
2219         created by dwarf_build_psymtabs and subsidiaries.
2220  */
2221
2222 static void
2223 init_psymbol_list (objfile, total_symbols)
2224      struct objfile *objfile;
2225      int total_symbols;
2226 {
2227   /* Free any previously allocated psymbol lists.  */
2228   
2229   if (objfile -> global_psymbols.list)
2230     {
2231       mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
2232     }
2233   if (objfile -> static_psymbols.list)
2234     {
2235       mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
2236     }
2237   
2238   /* Current best guess is that there are approximately a twentieth
2239      of the total symbols (in a debugging file) are global or static
2240      oriented symbols */
2241   
2242   objfile -> global_psymbols.size = total_symbols / 10;
2243   objfile -> static_psymbols.size = total_symbols / 10;
2244   objfile -> global_psymbols.next =
2245     objfile -> global_psymbols.list = (struct partial_symbol *)
2246       xmmalloc (objfile -> md, objfile -> global_psymbols.size
2247                              * sizeof (struct partial_symbol));
2248   objfile -> static_psymbols.next =
2249     objfile -> static_psymbols.list = (struct partial_symbol *)
2250       xmmalloc (objfile -> md, objfile -> static_psymbols.size
2251                              * sizeof (struct partial_symbol));
2252 }
2253
2254 /*
2255
2256 LOCAL FUNCTION
2257
2258         add_enum_psymbol -- add enumeration members to partial symbol table
2259
2260 DESCRIPTION
2261
2262         Given pointer to a DIE that is known to be for an enumeration,
2263         extract the symbolic names of the enumeration members and add
2264         partial symbols for them.
2265 */
2266
2267 static void
2268 add_enum_psymbol (dip, objfile)
2269      struct dieinfo *dip;
2270      struct objfile *objfile;
2271 {
2272   char *scan;
2273   char *listend;
2274   unsigned short blocksz;
2275   int nbytes;
2276   
2277   if ((scan = dip -> at_element_list) != NULL)
2278     {
2279       if (dip -> short_element_list)
2280         {
2281           nbytes = attribute_size (AT_short_element_list);
2282         }
2283       else
2284         {
2285           nbytes = attribute_size (AT_element_list);
2286         }
2287       blocksz = target_to_host (scan, nbytes, GET_UNSIGNED, objfile);
2288       scan += nbytes;
2289       listend = scan + blocksz;
2290       while (scan < listend)
2291         {
2292           scan += TARGET_FT_LONG_SIZE (objfile);
2293           ADD_PSYMBOL_TO_LIST (scan, strlen (scan), VAR_NAMESPACE, LOC_CONST,
2294                                objfile -> static_psymbols, 0);
2295           scan += strlen (scan) + 1;
2296         }
2297     }
2298 }
2299
2300 /*
2301
2302 LOCAL FUNCTION
2303
2304         add_partial_symbol -- add symbol to partial symbol table
2305
2306 DESCRIPTION
2307
2308         Given a DIE, if it is one of the types that we want to
2309         add to a partial symbol table, finish filling in the die info
2310         and then add a partial symbol table entry for it.
2311
2312 */
2313
2314 static void
2315 add_partial_symbol (dip, objfile)
2316      struct dieinfo *dip;
2317      struct objfile *objfile;
2318 {
2319   switch (dip -> die_tag)
2320     {
2321     case TAG_global_subroutine:
2322       record_minimal_symbol (dip -> at_name, dip -> at_low_pc, mst_text,
2323                             objfile);
2324       ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2325                            VAR_NAMESPACE, LOC_BLOCK,
2326                            objfile -> global_psymbols,
2327                            dip -> at_low_pc);
2328       break;
2329     case TAG_global_variable:
2330       record_minimal_symbol (dip -> at_name, locval (dip -> at_location),
2331                             mst_data, objfile);
2332       ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2333                            VAR_NAMESPACE, LOC_STATIC,
2334                            objfile -> global_psymbols,
2335                            0);
2336       break;
2337     case TAG_subroutine:
2338       ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2339                            VAR_NAMESPACE, LOC_BLOCK,
2340                            objfile -> static_psymbols,
2341                            dip -> at_low_pc);
2342       break;
2343     case TAG_local_variable:
2344       ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2345                            VAR_NAMESPACE, LOC_STATIC,
2346                            objfile -> static_psymbols,
2347                            0);
2348       break;
2349     case TAG_typedef:
2350       ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2351                            VAR_NAMESPACE, LOC_TYPEDEF,
2352                            objfile -> static_psymbols,
2353                            0);
2354       break;
2355     case TAG_structure_type:
2356     case TAG_union_type:
2357       ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2358                            STRUCT_NAMESPACE, LOC_TYPEDEF,
2359                            objfile -> static_psymbols,
2360                            0);
2361       break;
2362     case TAG_enumeration_type:
2363       if (dip -> at_name)
2364         {
2365           ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2366                                STRUCT_NAMESPACE, LOC_TYPEDEF,
2367                                objfile -> static_psymbols,
2368                                0);
2369         }
2370       add_enum_psymbol (dip, objfile);
2371       break;
2372     }
2373 }
2374
2375 /*
2376
2377 LOCAL FUNCTION
2378
2379         scan_partial_symbols -- scan DIE's within a single compilation unit
2380
2381 DESCRIPTION
2382
2383         Process the DIE's within a single compilation unit, looking for
2384         interesting DIE's that contribute to the partial symbol table entry
2385         for this compilation unit.  Since we cannot follow any sibling
2386         chains without reading the complete DIE info for every DIE,
2387         it is probably faster to just sequentially check each one to
2388         see if it is one of the types we are interested in, and if so,
2389         then extract all the attributes info and generate a partial
2390         symbol table entry.
2391
2392 NOTES
2393
2394         Don't attempt to add anonymous structures or unions since they have
2395         no name.  Anonymous enumerations however are processed, because we
2396         want to extract their member names (the check for a tag name is
2397         done later).
2398
2399         Also, for variables and subroutines, check that this is the place
2400         where the actual definition occurs, rather than just a reference
2401         to an external.
2402  */
2403
2404 static void
2405 scan_partial_symbols (thisdie, enddie, objfile)
2406      char *thisdie;
2407      char *enddie;
2408      struct objfile *objfile;
2409 {
2410   char *nextdie;
2411   struct dieinfo di;
2412   
2413   while (thisdie < enddie)
2414     {
2415       basicdieinfo (&di, thisdie, objfile);
2416       if (di.die_length < SIZEOF_DIE_LENGTH)
2417         {
2418           break;
2419         }
2420       else
2421         {
2422           nextdie = thisdie + di.die_length;
2423           /* To avoid getting complete die information for every die, we
2424              only do it (below) for the cases we are interested in. */
2425           switch (di.die_tag)
2426             {
2427             case TAG_global_subroutine:
2428             case TAG_subroutine:
2429             case TAG_global_variable:
2430             case TAG_local_variable:
2431               completedieinfo (&di, objfile);
2432               if (di.at_name && (di.has_at_low_pc || di.at_location))
2433                 {
2434                   add_partial_symbol (&di, objfile);
2435                 }
2436               break;
2437             case TAG_typedef:
2438             case TAG_structure_type:
2439             case TAG_union_type:
2440               completedieinfo (&di, objfile);
2441               if (di.at_name)
2442                 {
2443                   add_partial_symbol (&di, objfile);
2444                 }
2445               break;
2446             case TAG_enumeration_type:
2447               completedieinfo (&di, objfile);
2448               add_partial_symbol (&di, objfile);
2449               break;
2450             }
2451         }
2452       thisdie = nextdie;
2453     }
2454 }
2455
2456 /*
2457
2458 LOCAL FUNCTION
2459
2460         scan_compilation_units -- build a psymtab entry for each compilation
2461
2462 DESCRIPTION
2463
2464         This is the top level dwarf parsing routine for building partial
2465         symbol tables.
2466
2467         It scans from the beginning of the DWARF table looking for the first
2468         TAG_compile_unit DIE, and then follows the sibling chain to locate
2469         each additional TAG_compile_unit DIE.
2470    
2471         For each TAG_compile_unit DIE it creates a partial symtab structure,
2472         calls a subordinate routine to collect all the compilation unit's
2473         global DIE's, file scope DIEs, typedef DIEs, etc, and then links the
2474         new partial symtab structure into the partial symbol table.  It also
2475         records the appropriate information in the partial symbol table entry
2476         to allow the chunk of DIE's and line number table for this compilation
2477         unit to be located and re-read later, to generate a complete symbol
2478         table entry for the compilation unit.
2479
2480         Thus it effectively partitions up a chunk of DIE's for multiple
2481         compilation units into smaller DIE chunks and line number tables,
2482         and associates them with a partial symbol table entry.
2483
2484 NOTES
2485
2486         If any compilation unit has no line number table associated with
2487         it for some reason (a missing at_stmt_list attribute, rather than
2488         just one with a value of zero, which is valid) then we ensure that
2489         the recorded file offset is zero so that the routine which later
2490         reads line number table fragments knows that there is no fragment
2491         to read.
2492
2493 RETURNS
2494
2495         Returns no value.
2496
2497  */
2498
2499 static void
2500 scan_compilation_units (filename, thisdie, enddie, dbfoff, lnoffset, objfile)
2501      char *filename;
2502      char *thisdie;
2503      char *enddie;
2504      unsigned int dbfoff;
2505      unsigned int lnoffset;
2506      struct objfile *objfile;
2507 {
2508   char *nextdie;
2509   struct dieinfo di;
2510   struct partial_symtab *pst;
2511   int culength;
2512   int curoff;
2513   int curlnoffset;
2514
2515   while (thisdie < enddie)
2516     {
2517       basicdieinfo (&di, thisdie, objfile);
2518       if (di.die_length < SIZEOF_DIE_LENGTH)
2519         {
2520           break;
2521         }
2522       else if (di.die_tag != TAG_compile_unit)
2523         {
2524           nextdie = thisdie + di.die_length;
2525         }
2526       else
2527         {
2528           completedieinfo (&di, objfile);
2529           if (di.at_sibling != 0)
2530             {
2531               nextdie = dbbase + di.at_sibling - dbroff;
2532             }
2533           else
2534             {
2535               nextdie = thisdie + di.die_length;
2536             }
2537           curoff = thisdie - dbbase;
2538           culength = nextdie - thisdie;
2539           curlnoffset = di.has_at_stmt_list ? lnoffset + di.at_stmt_list : 0;
2540
2541           /* First allocate a new partial symbol table structure */
2542
2543           pst = start_psymtab_common (objfile, base_section_offsets, di.at_name,
2544                                       di.at_low_pc,
2545                                       objfile -> global_psymbols.next,
2546                                       objfile -> static_psymbols.next);
2547
2548           pst -> texthigh = di.at_high_pc;
2549           pst -> read_symtab_private = (char *)
2550               obstack_alloc (&objfile -> psymbol_obstack,
2551                              sizeof (struct dwfinfo));
2552           DBFOFF (pst) = dbfoff;
2553           DBROFF (pst) = curoff;
2554           DBLENGTH (pst) = culength;
2555           LNFOFF (pst)  = curlnoffset;
2556           pst -> read_symtab = dwarf_psymtab_to_symtab;
2557
2558           /* Now look for partial symbols */
2559
2560           scan_partial_symbols (thisdie + di.die_length, nextdie, objfile);
2561
2562           pst -> n_global_syms = objfile -> global_psymbols.next -
2563             (objfile -> global_psymbols.list + pst -> globals_offset);
2564           pst -> n_static_syms = objfile -> static_psymbols.next - 
2565             (objfile -> static_psymbols.list + pst -> statics_offset);
2566           sort_pst_symbols (pst);
2567           /* If there is already a psymtab or symtab for a file of this name,
2568              remove it. (If there is a symtab, more drastic things also
2569              happen.)  This happens in VxWorks.  */
2570           free_named_symtabs (pst -> filename);
2571         }
2572       thisdie = nextdie;      
2573     }
2574 }
2575
2576 /*
2577
2578 LOCAL FUNCTION
2579
2580         new_symbol -- make a symbol table entry for a new symbol
2581
2582 SYNOPSIS
2583
2584         static struct symbol *new_symbol (struct dieinfo *dip,
2585                                           struct objfile *objfile)
2586
2587 DESCRIPTION
2588
2589         Given a pointer to a DWARF information entry, figure out if we need
2590         to make a symbol table entry for it, and if so, create a new entry
2591         and return a pointer to it.
2592  */
2593
2594 static struct symbol *
2595 new_symbol (dip, objfile)
2596      struct dieinfo *dip;
2597      struct objfile *objfile;
2598 {
2599   struct symbol *sym = NULL;
2600   
2601   if (dip -> at_name != NULL)
2602     {
2603       sym = (struct symbol *) obstack_alloc (&objfile -> symbol_obstack,
2604                                              sizeof (struct symbol));
2605       memset (sym, 0, sizeof (struct symbol));
2606       SYMBOL_NAME (sym) = create_name (dip -> at_name, &objfile->symbol_obstack);
2607       /* default assumptions */
2608       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2609       SYMBOL_CLASS (sym) = LOC_STATIC;
2610       SYMBOL_TYPE (sym) = decode_die_type (dip);
2611       switch (dip -> die_tag)
2612         {
2613         case TAG_label:
2614           SYMBOL_VALUE (sym) = dip -> at_low_pc;
2615           SYMBOL_CLASS (sym) = LOC_LABEL;
2616           break;
2617         case TAG_global_subroutine:
2618         case TAG_subroutine:
2619           SYMBOL_VALUE (sym) = dip -> at_low_pc;
2620           SYMBOL_TYPE (sym) = lookup_function_type (SYMBOL_TYPE (sym));
2621           SYMBOL_CLASS (sym) = LOC_BLOCK;
2622           if (dip -> die_tag == TAG_global_subroutine)
2623             {
2624               add_symbol_to_list (sym, &global_symbols);
2625             }
2626           else
2627             {
2628               add_symbol_to_list (sym, list_in_scope);
2629             }
2630           break;
2631         case TAG_global_variable:
2632           if (dip -> at_location != NULL)
2633             {
2634               SYMBOL_VALUE (sym) = locval (dip -> at_location);
2635               add_symbol_to_list (sym, &global_symbols);
2636               SYMBOL_CLASS (sym) = LOC_STATIC;
2637               SYMBOL_VALUE (sym) += baseaddr;
2638             }
2639           break;
2640         case TAG_local_variable:
2641           if (dip -> at_location != NULL)
2642             {
2643               SYMBOL_VALUE (sym) = locval (dip -> at_location);
2644               add_symbol_to_list (sym, list_in_scope);
2645               if (isreg)
2646                 {
2647                   SYMBOL_CLASS (sym) = LOC_REGISTER;
2648                 }
2649               else if (offreg)
2650                 {
2651                   SYMBOL_CLASS (sym) = LOC_LOCAL;
2652                 }
2653               else
2654                 {
2655                   SYMBOL_CLASS (sym) = LOC_STATIC;
2656                   SYMBOL_VALUE (sym) += baseaddr;
2657                 }
2658             }
2659           break;
2660         case TAG_formal_parameter:
2661           if (dip -> at_location != NULL)
2662             {
2663               SYMBOL_VALUE (sym) = locval (dip -> at_location);
2664             }
2665           add_symbol_to_list (sym, list_in_scope);
2666           if (isreg)
2667             {
2668               SYMBOL_CLASS (sym) = LOC_REGPARM;
2669             }
2670           else
2671             {
2672               SYMBOL_CLASS (sym) = LOC_ARG;
2673             }
2674           break;
2675         case TAG_unspecified_parameters:
2676           /* From varargs functions; gdb doesn't seem to have any interest in
2677              this information, so just ignore it for now. (FIXME?) */
2678           break;
2679         case TAG_structure_type:
2680         case TAG_union_type:
2681         case TAG_enumeration_type:
2682           SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2683           SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
2684           add_symbol_to_list (sym, list_in_scope);
2685           break;
2686         case TAG_typedef:
2687           SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2688           SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2689           add_symbol_to_list (sym, list_in_scope);
2690           break;
2691         default:
2692           /* Not a tag we recognize.  Hopefully we aren't processing trash
2693              data, but since we must specifically ignore things we don't
2694              recognize, there is nothing else we should do at this point. */
2695           break;
2696         }
2697     }
2698   return (sym);
2699 }
2700
2701 /*
2702
2703 LOCAL FUNCTION
2704
2705         decode_mod_fund_type -- decode a modified fundamental type
2706
2707 SYNOPSIS
2708
2709         static struct type *decode_mod_fund_type (char *typedata)
2710
2711 DESCRIPTION
2712
2713         Decode a block of data containing a modified fundamental
2714         type specification.  TYPEDATA is a pointer to the block,
2715         which starts with a length containing the size of the rest
2716         of the block.  At the end of the block is a fundmental type
2717         code value that gives the fundamental type.  Everything
2718         in between are type modifiers.
2719
2720         We simply compute the number of modifiers and call the general
2721         function decode_modified_type to do the actual work.
2722 */
2723
2724 static struct type *
2725 decode_mod_fund_type (typedata)
2726      char *typedata;
2727 {
2728   struct type *typep = NULL;
2729   unsigned short modcount;
2730   int nbytes;
2731   
2732   /* Get the total size of the block, exclusive of the size itself */
2733
2734   nbytes = attribute_size (AT_mod_fund_type);
2735   modcount = target_to_host (typedata, nbytes, GET_UNSIGNED, current_objfile);
2736   typedata += nbytes;
2737
2738   /* Deduct the size of the fundamental type bytes at the end of the block. */
2739
2740   modcount -= attribute_size (AT_fund_type);
2741
2742   /* Now do the actual decoding */
2743
2744   typep = decode_modified_type (typedata, modcount, AT_mod_fund_type);
2745   return (typep);
2746 }
2747
2748 /*
2749
2750 LOCAL FUNCTION
2751
2752         decode_mod_u_d_type -- decode a modified user defined type
2753
2754 SYNOPSIS
2755
2756         static struct type *decode_mod_u_d_type (char *typedata)
2757
2758 DESCRIPTION
2759
2760         Decode a block of data containing a modified user defined
2761         type specification.  TYPEDATA is a pointer to the block,
2762         which consists of a two byte length, containing the size
2763         of the rest of the block.  At the end of the block is a
2764         four byte value that gives a reference to a user defined type.
2765         Everything in between are type modifiers.
2766
2767         We simply compute the number of modifiers and call the general
2768         function decode_modified_type to do the actual work.
2769 */
2770
2771 static struct type *
2772 decode_mod_u_d_type (typedata)
2773      char *typedata;
2774 {
2775   struct type *typep = NULL;
2776   unsigned short modcount;
2777   int nbytes;
2778   
2779   /* Get the total size of the block, exclusive of the size itself */
2780
2781   nbytes = attribute_size (AT_mod_u_d_type);
2782   modcount = target_to_host (typedata, nbytes, GET_UNSIGNED, current_objfile);
2783   typedata += nbytes;
2784
2785   /* Deduct the size of the reference type bytes at the end of the block. */
2786
2787   modcount -= attribute_size (AT_user_def_type);
2788
2789   /* Now do the actual decoding */
2790
2791   typep = decode_modified_type (typedata, modcount, AT_mod_u_d_type);
2792   return (typep);
2793 }
2794
2795 /*
2796
2797 LOCAL FUNCTION
2798
2799         decode_modified_type -- decode modified user or fundamental type
2800
2801 SYNOPSIS
2802
2803         static struct type *decode_modified_type (char *modifiers,
2804             unsigned short modcount, int mtype)
2805
2806 DESCRIPTION
2807
2808         Decode a modified type, either a modified fundamental type or
2809         a modified user defined type.  MODIFIERS is a pointer to the
2810         block of bytes that define MODCOUNT modifiers.  Immediately
2811         following the last modifier is a short containing the fundamental
2812         type or a long containing the reference to the user defined
2813         type.  Which one is determined by MTYPE, which is either
2814         AT_mod_fund_type or AT_mod_u_d_type to indicate what modified
2815         type we are generating.
2816
2817         We call ourself recursively to generate each modified type,`
2818         until MODCOUNT reaches zero, at which point we have consumed
2819         all the modifiers and generate either the fundamental type or
2820         user defined type.  When the recursion unwinds, each modifier
2821         is applied in turn to generate the full modified type.
2822
2823 NOTES
2824
2825         If we find a modifier that we don't recognize, and it is not one
2826         of those reserved for application specific use, then we issue a
2827         warning and simply ignore the modifier.
2828
2829 BUGS
2830
2831         We currently ignore MOD_const and MOD_volatile.  (FIXME)
2832
2833  */
2834
2835 static struct type *
2836 decode_modified_type (modifiers, modcount, mtype)
2837      char *modifiers;
2838      unsigned int modcount;
2839      int mtype;
2840 {
2841   struct type *typep = NULL;
2842   unsigned short fundtype;
2843   DIE_REF die_ref;
2844   char modifier;
2845   int nbytes;
2846   
2847   if (modcount == 0)
2848     {
2849       switch (mtype)
2850         {
2851         case AT_mod_fund_type:
2852           nbytes = attribute_size (AT_fund_type);
2853           fundtype = target_to_host (modifiers, nbytes, GET_UNSIGNED,
2854                                      current_objfile);
2855           typep = decode_fund_type (fundtype);
2856           break;
2857         case AT_mod_u_d_type:
2858           nbytes = attribute_size (AT_user_def_type);
2859           die_ref = target_to_host (modifiers, nbytes, GET_UNSIGNED,
2860                                     current_objfile);
2861           if ((typep = lookup_utype (die_ref)) == NULL)
2862             {
2863               typep = alloc_utype (die_ref, NULL);
2864             }
2865           break;
2866         default:
2867           SQUAWK (("botched modified type decoding (mtype 0x%x)", mtype));
2868           typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
2869           break;
2870         }
2871     }
2872   else
2873     {
2874       modifier = *modifiers++;
2875       typep = decode_modified_type (modifiers, --modcount, mtype);
2876       switch (modifier)
2877         {
2878           case MOD_pointer_to:
2879             typep = lookup_pointer_type (typep);
2880             break;
2881           case MOD_reference_to:
2882             typep = lookup_reference_type (typep);
2883             break;
2884           case MOD_const:
2885             SQUAWK (("type modifier 'const' ignored"));         /* FIXME */
2886             break;
2887           case MOD_volatile:
2888             SQUAWK (("type modifier 'volatile' ignored"));      /* FIXME */
2889             break;
2890           default:
2891             if (!(MOD_lo_user <= (unsigned char) modifier
2892                   && (unsigned char) modifier <= MOD_hi_user))
2893               {
2894                 SQUAWK (("unknown type modifier %u",
2895                          (unsigned char) modifier));
2896               }
2897             break;
2898         }
2899     }
2900   return (typep);
2901 }
2902
2903 /*
2904
2905 LOCAL FUNCTION
2906
2907         decode_fund_type -- translate basic DWARF type to gdb base type
2908
2909 DESCRIPTION
2910
2911         Given an integer that is one of the fundamental DWARF types,
2912         translate it to one of the basic internal gdb types and return
2913         a pointer to the appropriate gdb type (a "struct type *").
2914
2915 NOTES
2916
2917         If we encounter a fundamental type that we are unprepared to
2918         deal with, and it is not in the range of those types defined
2919         as application specific types, then we issue a warning and
2920         treat the type as an "int".
2921 */
2922
2923 static struct type *
2924 decode_fund_type (fundtype)
2925      unsigned int fundtype;
2926 {
2927   struct type *typep = NULL;
2928   
2929   switch (fundtype)
2930     {
2931
2932     case FT_void:
2933       typep = lookup_fundamental_type (current_objfile, FT_VOID);
2934       break;
2935     
2936     case FT_boolean:            /* Was FT_set in AT&T version */
2937       typep = lookup_fundamental_type (current_objfile, FT_BOOLEAN);
2938       break;
2939
2940     case FT_pointer:            /* (void *) */
2941       typep = lookup_fundamental_type (current_objfile, FT_VOID);
2942       typep = lookup_pointer_type (typep);
2943       break;
2944     
2945     case FT_char:
2946       typep = lookup_fundamental_type (current_objfile, FT_CHAR);
2947       break;
2948     
2949     case FT_signed_char:
2950       typep = lookup_fundamental_type (current_objfile, FT_SIGNED_CHAR);
2951       break;
2952
2953     case FT_unsigned_char:
2954       typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_CHAR);
2955       break;
2956     
2957     case FT_short:
2958       typep = lookup_fundamental_type (current_objfile, FT_SHORT);
2959       break;
2960
2961     case FT_signed_short:
2962       typep = lookup_fundamental_type (current_objfile, FT_SIGNED_SHORT);
2963       break;
2964     
2965     case FT_unsigned_short:
2966       typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_SHORT);
2967       break;
2968     
2969     case FT_integer:
2970       typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
2971       break;
2972
2973     case FT_signed_integer:
2974       typep = lookup_fundamental_type (current_objfile, FT_SIGNED_INTEGER);
2975       break;
2976     
2977     case FT_unsigned_integer:
2978       typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_INTEGER);
2979       break;
2980     
2981     case FT_long:
2982       typep = lookup_fundamental_type (current_objfile, FT_LONG);
2983       break;
2984
2985     case FT_signed_long:
2986       typep = lookup_fundamental_type (current_objfile, FT_SIGNED_LONG);
2987       break;
2988     
2989     case FT_unsigned_long:
2990       typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_LONG);
2991       break;
2992     
2993     case FT_long_long:
2994       typep = lookup_fundamental_type (current_objfile, FT_LONG_LONG);
2995       break;
2996
2997     case FT_signed_long_long:
2998       typep = lookup_fundamental_type (current_objfile, FT_SIGNED_LONG_LONG);
2999       break;
3000
3001     case FT_unsigned_long_long:
3002       typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_LONG_LONG);
3003       break;
3004
3005     case FT_float:
3006       typep = lookup_fundamental_type (current_objfile, FT_FLOAT);
3007       break;
3008     
3009     case FT_dbl_prec_float:
3010       typep = lookup_fundamental_type (current_objfile, FT_DBL_PREC_FLOAT);
3011       break;
3012     
3013     case FT_ext_prec_float:
3014       typep = lookup_fundamental_type (current_objfile, FT_EXT_PREC_FLOAT);
3015       break;
3016     
3017     case FT_complex:
3018       typep = lookup_fundamental_type (current_objfile, FT_COMPLEX);
3019       break;
3020     
3021     case FT_dbl_prec_complex:
3022       typep = lookup_fundamental_type (current_objfile, FT_DBL_PREC_COMPLEX);
3023       break;
3024     
3025     case FT_ext_prec_complex:
3026       typep = lookup_fundamental_type (current_objfile, FT_EXT_PREC_COMPLEX);
3027       break;
3028     
3029     }
3030
3031   if ((typep == NULL) && !(FT_lo_user <= fundtype && fundtype <= FT_hi_user))
3032     {
3033       SQUAWK (("unexpected fundamental type 0x%x", fundtype));
3034       typep = lookup_fundamental_type (current_objfile, FT_VOID);
3035     }
3036     
3037   return (typep);
3038 }
3039
3040 /*
3041
3042 LOCAL FUNCTION
3043
3044         create_name -- allocate a fresh copy of a string on an obstack
3045
3046 DESCRIPTION
3047
3048         Given a pointer to a string and a pointer to an obstack, allocates
3049         a fresh copy of the string on the specified obstack.
3050
3051 */
3052
3053 static char *
3054 create_name (name, obstackp)
3055      char *name;
3056      struct obstack *obstackp;
3057 {
3058   int length;
3059   char *newname;
3060
3061   length = strlen (name) + 1;
3062   newname = (char *) obstack_alloc (obstackp, length);
3063   strcpy (newname, name);
3064   return (newname);
3065 }
3066
3067 /*
3068
3069 LOCAL FUNCTION
3070
3071         basicdieinfo -- extract the minimal die info from raw die data
3072
3073 SYNOPSIS
3074
3075         void basicdieinfo (char *diep, struct dieinfo *dip,
3076                            struct objfile *objfile)
3077
3078 DESCRIPTION
3079
3080         Given a pointer to raw DIE data, and a pointer to an instance of a
3081         die info structure, this function extracts the basic information
3082         from the DIE data required to continue processing this DIE, along
3083         with some bookkeeping information about the DIE.
3084
3085         The information we absolutely must have includes the DIE tag,
3086         and the DIE length.  If we need the sibling reference, then we
3087         will have to call completedieinfo() to process all the remaining
3088         DIE information.
3089
3090         Note that since there is no guarantee that the data is properly
3091         aligned in memory for the type of access required (indirection
3092         through anything other than a char pointer), and there is no
3093         guarantee that it is in the same byte order as the gdb host,
3094         we call a function which deals with both alignment and byte
3095         swapping issues.  Possibly inefficient, but quite portable.
3096
3097         We also take care of some other basic things at this point, such
3098         as ensuring that the instance of the die info structure starts
3099         out completely zero'd and that curdie is initialized for use
3100         in error reporting if we have a problem with the current die.
3101
3102 NOTES
3103
3104         All DIE's must have at least a valid length, thus the minimum
3105         DIE size is SIZEOF_DIE_LENGTH.  In order to have a valid tag, the
3106         DIE size must be at least SIZEOF_DIE_TAG larger, otherwise they
3107         are forced to be TAG_padding DIES.
3108
3109         Padding DIES must be at least SIZEOF_DIE_LENGTH in length, implying
3110         that if a padding DIE is used for alignment and the amount needed is
3111         less than SIZEOF_DIE_LENGTH, then the padding DIE has to be big
3112         enough to align to the next alignment boundry.
3113  */
3114
3115 static void
3116 basicdieinfo (dip, diep, objfile)
3117      struct dieinfo *dip;
3118      char *diep;
3119      struct objfile *objfile;
3120 {
3121   curdie = dip;
3122   memset (dip, 0, sizeof (struct dieinfo));
3123   dip -> die = diep;
3124   dip -> die_ref = dbroff + (diep - dbbase);
3125   dip -> die_length = target_to_host (diep, SIZEOF_DIE_LENGTH, GET_UNSIGNED,
3126                                       objfile);
3127   if (dip -> die_length < SIZEOF_DIE_LENGTH)
3128     {
3129       dwarfwarn ("malformed DIE, bad length (%d bytes)", dip -> die_length);
3130     }
3131   else if (dip -> die_length < (SIZEOF_DIE_LENGTH + SIZEOF_DIE_TAG))
3132     {
3133       dip -> die_tag = TAG_padding;
3134     }
3135   else
3136     {
3137       diep += SIZEOF_DIE_LENGTH;
3138       dip -> die_tag = target_to_host (diep, SIZEOF_DIE_TAG, GET_UNSIGNED,
3139                                        objfile);
3140     }
3141 }
3142
3143 /*
3144
3145 LOCAL FUNCTION
3146
3147         completedieinfo -- finish reading the information for a given DIE
3148
3149 SYNOPSIS
3150
3151         void completedieinfo (struct dieinfo *dip, struct objfile *objfile)
3152
3153 DESCRIPTION
3154
3155         Given a pointer to an already partially initialized die info structure,
3156         scan the raw DIE data and finish filling in the die info structure
3157         from the various attributes found.
3158    
3159         Note that since there is no guarantee that the data is properly
3160         aligned in memory for the type of access required (indirection
3161         through anything other than a char pointer), and there is no
3162         guarantee that it is in the same byte order as the gdb host,
3163         we call a function which deals with both alignment and byte
3164         swapping issues.  Possibly inefficient, but quite portable.
3165
3166 NOTES
3167
3168         Each time we are called, we increment the diecount variable, which
3169         keeps an approximate count of the number of dies processed for
3170         each compilation unit.  This information is presented to the user
3171         if the info_verbose flag is set.
3172
3173  */
3174
3175 static void
3176 completedieinfo (dip, objfile)
3177      struct dieinfo *dip;
3178      struct objfile *objfile;
3179 {
3180   char *diep;                   /* Current pointer into raw DIE data */
3181   char *end;                    /* Terminate DIE scan here */
3182   unsigned short attr;          /* Current attribute being scanned */
3183   unsigned short form;          /* Form of the attribute */
3184   int nbytes;                   /* Size of next field to read */
3185   
3186   diecount++;
3187   diep = dip -> die;
3188   end = diep + dip -> die_length;
3189   diep += SIZEOF_DIE_LENGTH + SIZEOF_DIE_TAG;
3190   while (diep < end)
3191     {
3192       attr = target_to_host (diep, SIZEOF_ATTRIBUTE, GET_UNSIGNED, objfile);
3193       diep += SIZEOF_ATTRIBUTE;
3194       if ((nbytes = attribute_size (attr)) == -1)
3195         {
3196           SQUAWK (("unknown attribute length, skipped remaining attributes"));;
3197           diep = end;
3198           continue;
3199         }
3200       switch (attr)
3201         {
3202         case AT_fund_type:
3203           dip -> at_fund_type = target_to_host (diep, nbytes, GET_UNSIGNED,
3204                                                 objfile);
3205           break;
3206         case AT_ordering:
3207           dip -> at_ordering = target_to_host (diep, nbytes, GET_UNSIGNED,
3208                                                objfile);
3209           break;
3210         case AT_bit_offset:
3211           dip -> at_bit_offset = target_to_host (diep, nbytes, GET_UNSIGNED,
3212                                                  objfile);
3213           break;
3214         case AT_sibling:
3215           dip -> at_sibling = target_to_host (diep, nbytes, GET_UNSIGNED,
3216                                               objfile);
3217           break;
3218         case AT_stmt_list:
3219           dip -> at_stmt_list = target_to_host (diep, nbytes, GET_UNSIGNED,
3220                                                 objfile);
3221           dip -> has_at_stmt_list = 1;
3222           break;
3223         case AT_low_pc:
3224           dip -> at_low_pc = target_to_host (diep, nbytes, GET_UNSIGNED,
3225                                              objfile);
3226           dip -> at_low_pc += baseaddr;
3227           dip -> has_at_low_pc = 1;
3228           break;
3229         case AT_high_pc:
3230           dip -> at_high_pc = target_to_host (diep, nbytes, GET_UNSIGNED,
3231                                               objfile);
3232           dip -> at_high_pc += baseaddr;
3233           break;
3234         case AT_language:
3235           dip -> at_language = target_to_host (diep, nbytes, GET_UNSIGNED,
3236                                                objfile);
3237           break;
3238         case AT_user_def_type:
3239           dip -> at_user_def_type = target_to_host (diep, nbytes,
3240                                                     GET_UNSIGNED, objfile);
3241           break;
3242         case AT_byte_size:
3243           dip -> at_byte_size = target_to_host (diep, nbytes, GET_UNSIGNED,
3244                                                 objfile);
3245           dip -> has_at_byte_size = 1;
3246           break;
3247         case AT_bit_size:
3248           dip -> at_bit_size = target_to_host (diep, nbytes, GET_UNSIGNED,
3249                                                objfile);
3250           break;
3251         case AT_member:
3252           dip -> at_member = target_to_host (diep, nbytes, GET_UNSIGNED,
3253                                              objfile);
3254           break;
3255         case AT_discr:
3256           dip -> at_discr = target_to_host (diep, nbytes, GET_UNSIGNED,
3257                                             objfile);
3258           break;
3259         case AT_location:
3260           dip -> at_location = diep;
3261           break;
3262         case AT_mod_fund_type:
3263           dip -> at_mod_fund_type = diep;
3264           break;
3265         case AT_subscr_data:
3266           dip -> at_subscr_data = diep;
3267           break;
3268         case AT_mod_u_d_type:
3269           dip -> at_mod_u_d_type = diep;
3270           break;
3271         case AT_element_list:
3272           dip -> at_element_list = diep;
3273           dip -> short_element_list = 0;
3274           break;
3275         case AT_short_element_list:
3276           dip -> at_element_list = diep;
3277           dip -> short_element_list = 1;
3278           break;
3279         case AT_discr_value:
3280           dip -> at_discr_value = diep;
3281           break;
3282         case AT_string_length:
3283           dip -> at_string_length = diep;
3284           break;
3285         case AT_name:
3286           dip -> at_name = diep;
3287           break;
3288         case AT_comp_dir:
3289           /* For now, ignore any "hostname:" portion, since gdb doesn't
3290              know how to deal with it.  (FIXME). */
3291           dip -> at_comp_dir = strrchr (diep, ':');
3292           if (dip -> at_comp_dir != NULL)
3293             {
3294               dip -> at_comp_dir++;
3295             }
3296           else
3297             {
3298               dip -> at_comp_dir = diep;
3299             }
3300           break;
3301         case AT_producer:
3302           dip -> at_producer = diep;
3303           break;
3304         case AT_start_scope:
3305           dip -> at_start_scope = target_to_host (diep, nbytes, GET_UNSIGNED,
3306                                                   objfile);
3307           break;
3308         case AT_stride_size:
3309           dip -> at_stride_size = target_to_host (diep, nbytes, GET_UNSIGNED,
3310                                                   objfile);
3311           break;
3312         case AT_src_info:
3313           dip -> at_src_info = target_to_host (diep, nbytes, GET_UNSIGNED,
3314                                                objfile);
3315           break;
3316         case AT_prototyped:
3317           dip -> at_prototyped = diep;
3318           break;
3319         default:
3320           /* Found an attribute that we are unprepared to handle.  However
3321              it is specifically one of the design goals of DWARF that
3322              consumers should ignore unknown attributes.  As long as the
3323              form is one that we recognize (so we know how to skip it),
3324              we can just ignore the unknown attribute. */
3325           break;
3326         }
3327       form = FORM_FROM_ATTR (attr);
3328       switch (form)
3329         {
3330         case FORM_DATA2:
3331           diep += 2;
3332           break;
3333         case FORM_DATA4:
3334         case FORM_REF:
3335           diep += 4;
3336           break;
3337         case FORM_DATA8:
3338           diep += 8;
3339           break;
3340         case FORM_ADDR:
3341           diep += TARGET_FT_POINTER_SIZE (objfile);
3342           break;
3343         case FORM_BLOCK2:
3344           diep += 2 + target_to_host (diep, nbytes, GET_UNSIGNED, objfile);
3345           break;
3346         case FORM_BLOCK4:
3347           diep += 4 + target_to_host (diep, nbytes, GET_UNSIGNED, objfile);
3348           break;
3349         case FORM_STRING:
3350           diep += strlen (diep) + 1;
3351           break;
3352         default:
3353           SQUAWK (("unknown attribute form (0x%x)", form));
3354           SQUAWK (("unknown attribute length, skipped remaining attributes"));;
3355           diep = end;
3356           break;
3357         }
3358     }
3359 }
3360
3361 /*
3362
3363 LOCAL FUNCTION
3364
3365         target_to_host -- swap in target data to host
3366
3367 SYNOPSIS
3368
3369         target_to_host (char *from, int nbytes, int signextend,
3370                         struct objfile *objfile)
3371
3372 DESCRIPTION
3373
3374         Given pointer to data in target format in FROM, a byte count for
3375         the size of the data in NBYTES, a flag indicating whether or not
3376         the data is signed in SIGNEXTEND, and a pointer to the current
3377         objfile in OBJFILE, convert the data to host format and return
3378         the converted value.
3379
3380 NOTES
3381
3382         FIXME:  If we read data that is known to be signed, and expect to
3383         use it as signed data, then we need to explicitly sign extend the
3384         result until the bfd library is able to do this for us.
3385
3386  */
3387
3388 static unsigned long
3389 target_to_host (from, nbytes, signextend, objfile)
3390      char *from;
3391      int nbytes;
3392      int signextend;            /* FIXME:  Unused */
3393      struct objfile *objfile;
3394 {
3395   unsigned long rtnval;
3396
3397   switch (nbytes)
3398     {
3399       case 8:
3400         rtnval = bfd_get_64 (objfile -> obfd, (bfd_byte *) from);
3401         break;
3402       case 4:
3403         rtnval = bfd_get_32 (objfile -> obfd, (bfd_byte *) from);
3404         break;
3405       case 2:
3406         rtnval = bfd_get_16 (objfile -> obfd, (bfd_byte *) from);
3407         break;
3408       case 1:
3409         rtnval = bfd_get_8 (objfile -> obfd, (bfd_byte *) from);
3410         break;
3411       default:
3412         dwarfwarn ("no bfd support for %d byte data object", nbytes);
3413         rtnval = 0;
3414         break;
3415     }
3416   return (rtnval);
3417 }
3418
3419 /*
3420
3421 LOCAL FUNCTION
3422
3423         attribute_size -- compute size of data for a DWARF attribute
3424
3425 SYNOPSIS
3426
3427         static int attribute_size (unsigned int attr)
3428
3429 DESCRIPTION
3430
3431         Given a DWARF attribute in ATTR, compute the size of the first
3432         piece of data associated with this attribute and return that
3433         size.
3434
3435         Returns -1 for unrecognized attributes.
3436
3437  */
3438
3439 static int
3440 attribute_size (attr)
3441      unsigned int attr;
3442 {
3443   int nbytes;                   /* Size of next data for this attribute */
3444   unsigned short form;          /* Form of the attribute */
3445
3446   form = FORM_FROM_ATTR (attr);
3447   switch (form)
3448     {
3449       case FORM_STRING:         /* A variable length field is next */
3450         nbytes = 0;
3451         break;
3452       case FORM_DATA2:          /* Next 2 byte field is the data itself */
3453       case FORM_BLOCK2:         /* Next 2 byte field is a block length */
3454         nbytes = 2;
3455         break;
3456       case FORM_DATA4:          /* Next 4 byte field is the data itself */
3457       case FORM_BLOCK4:         /* Next 4 byte field is a block length */
3458       case FORM_REF:            /* Next 4 byte field is a DIE offset */
3459         nbytes = 4;
3460         break;
3461       case FORM_DATA8:          /* Next 8 byte field is the data itself */
3462         nbytes = 8;
3463         break;
3464       case FORM_ADDR:           /* Next field size is target sizeof(void *) */
3465         nbytes = TARGET_FT_POINTER_SIZE (objfile);
3466         break;
3467       default:
3468         SQUAWK (("unknown attribute form (0x%x)", form));
3469         nbytes = -1;
3470         break;
3471       }
3472   return (nbytes);
3473 }