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