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