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