]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dwarf2read.c
Fix typo in sign extension code in dwarf2_const_value_data().
[thirdparty/binutils-gdb.git] / gdb / dwarf2read.c
CommitLineData
c906108c
SS
1/* DWARF 2 debugging format support for GDB.
2 Copyright 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
3
4 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
5 Inc. with support from Florida State University (under contract
6 with the Ada Joint Program Office), and Silicon Graphics, Inc.
7 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
8 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
9 support in dwarfread.c
10
c5aa993b 11 This file is part of GDB.
c906108c 12
c5aa993b
JM
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 2 of the License, or (at
16 your option) any later version.
c906108c 17
c5aa993b
JM
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
c906108c 22
c5aa993b
JM
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. */
c906108c
SS
27
28#include "defs.h"
29#include "bfd.h"
c906108c
SS
30#include "symtab.h"
31#include "gdbtypes.h"
32#include "symfile.h"
33#include "objfiles.h"
34#include "elf/dwarf2.h"
35#include "buildsym.h"
36#include "demangle.h"
37#include "expression.h"
38#include "language.h"
39#include "complaints.h"
40
41#include <fcntl.h>
42#include "gdb_string.h"
43#include <sys/types.h>
44
45/* .debug_info header for a compilation unit
46 Because of alignment constraints, this structure has padding and cannot
47 be mapped directly onto the beginning of the .debug_info section. */
48typedef struct comp_unit_header
49 {
50 unsigned int length; /* length of the .debug_info
51 contribution */
52 unsigned short version; /* version number -- 2 for DWARF
53 version 2 */
54 unsigned int abbrev_offset; /* offset into .debug_abbrev section */
55 unsigned char addr_size; /* byte size of an address -- 4 */
56 }
57_COMP_UNIT_HEADER;
58#define _ACTUAL_COMP_UNIT_HEADER_SIZE 11
59
60/* .debug_pubnames header
61 Because of alignment constraints, this structure has padding and cannot
62 be mapped directly onto the beginning of the .debug_info section. */
63typedef struct pubnames_header
64 {
65 unsigned int length; /* length of the .debug_pubnames
66 contribution */
67 unsigned char version; /* version number -- 2 for DWARF
68 version 2 */
69 unsigned int info_offset; /* offset into .debug_info section */
70 unsigned int info_size; /* byte size of .debug_info section
71 portion */
72 }
73_PUBNAMES_HEADER;
74#define _ACTUAL_PUBNAMES_HEADER_SIZE 13
75
76/* .debug_pubnames header
77 Because of alignment constraints, this structure has padding and cannot
78 be mapped directly onto the beginning of the .debug_info section. */
79typedef struct aranges_header
80 {
81 unsigned int length; /* byte len of the .debug_aranges
82 contribution */
83 unsigned short version; /* version number -- 2 for DWARF
84 version 2 */
85 unsigned int info_offset; /* offset into .debug_info section */
86 unsigned char addr_size; /* byte size of an address */
87 unsigned char seg_size; /* byte size of segment descriptor */
88 }
89_ARANGES_HEADER;
90#define _ACTUAL_ARANGES_HEADER_SIZE 12
91
92/* .debug_line statement program prologue
93 Because of alignment constraints, this structure has padding and cannot
94 be mapped directly onto the beginning of the .debug_info section. */
95typedef struct statement_prologue
96 {
97 unsigned int total_length; /* byte length of the statement
98 information */
99 unsigned short version; /* version number -- 2 for DWARF
100 version 2 */
101 unsigned int prologue_length; /* # bytes between prologue &
102 stmt program */
103 unsigned char minimum_instruction_length; /* byte size of
104 smallest instr */
105 unsigned char default_is_stmt; /* initial value of is_stmt
106 register */
107 char line_base;
108 unsigned char line_range;
109 unsigned char opcode_base; /* number assigned to first special
110 opcode */
111 unsigned char *standard_opcode_lengths;
112 }
113_STATEMENT_PROLOGUE;
114
115/* offsets and sizes of debugging sections */
116
117static file_ptr dwarf_info_offset;
118static file_ptr dwarf_abbrev_offset;
119static file_ptr dwarf_line_offset;
120static file_ptr dwarf_pubnames_offset;
121static file_ptr dwarf_aranges_offset;
122static file_ptr dwarf_loc_offset;
123static file_ptr dwarf_macinfo_offset;
124static file_ptr dwarf_str_offset;
125
126static unsigned int dwarf_info_size;
127static unsigned int dwarf_abbrev_size;
128static unsigned int dwarf_line_size;
129static unsigned int dwarf_pubnames_size;
130static unsigned int dwarf_aranges_size;
131static unsigned int dwarf_loc_size;
132static unsigned int dwarf_macinfo_size;
133static unsigned int dwarf_str_size;
134
135/* names of the debugging sections */
136
137#define INFO_SECTION ".debug_info"
138#define ABBREV_SECTION ".debug_abbrev"
139#define LINE_SECTION ".debug_line"
140#define PUBNAMES_SECTION ".debug_pubnames"
141#define ARANGES_SECTION ".debug_aranges"
142#define LOC_SECTION ".debug_loc"
143#define MACINFO_SECTION ".debug_macinfo"
144#define STR_SECTION ".debug_str"
145
146/* local data types */
147
148/* The data in a compilation unit header looks like this. */
149struct comp_unit_head
150 {
151 unsigned int length;
152 short version;
153 unsigned int abbrev_offset;
154 unsigned char addr_size;
155 };
156
157/* The data in the .debug_line statement prologue looks like this. */
158struct line_head
159 {
160 unsigned int total_length;
161 unsigned short version;
162 unsigned int prologue_length;
163 unsigned char minimum_instruction_length;
164 unsigned char default_is_stmt;
165 int line_base;
166 unsigned char line_range;
167 unsigned char opcode_base;
168 unsigned char *standard_opcode_lengths;
169 };
170
171/* When we construct a partial symbol table entry we only
172 need this much information. */
173struct partial_die_info
174 {
175 enum dwarf_tag tag;
176 unsigned char has_children;
177 unsigned char is_external;
178 unsigned char is_declaration;
179 unsigned char has_type;
180 unsigned int offset;
181 unsigned int abbrev;
182 char *name;
183 CORE_ADDR lowpc;
184 CORE_ADDR highpc;
185 struct dwarf_block *locdesc;
186 unsigned int language;
187 char *sibling;
188 };
189
190/* This data structure holds the information of an abbrev. */
191struct abbrev_info
192 {
193 unsigned int number; /* number identifying abbrev */
194 enum dwarf_tag tag; /* dwarf tag */
195 int has_children; /* boolean */
196 unsigned int num_attrs; /* number of attributes */
197 struct attr_abbrev *attrs; /* an array of attribute descriptions */
198 struct abbrev_info *next; /* next in chain */
199 };
200
201struct attr_abbrev
202 {
203 enum dwarf_attribute name;
204 enum dwarf_form form;
205 };
206
207/* This data structure holds a complete die structure. */
208struct die_info
209 {
c5aa993b
JM
210 enum dwarf_tag tag; /* Tag indicating type of die */
211 unsigned short has_children; /* Does the die have children */
212 unsigned int abbrev; /* Abbrev number */
213 unsigned int offset; /* Offset in .debug_info section */
214 unsigned int num_attrs; /* Number of attributes */
215 struct attribute *attrs; /* An array of attributes */
216 struct die_info *next_ref; /* Next die in ref hash table */
217 struct die_info *next; /* Next die in linked list */
218 struct type *type; /* Cached type information */
c906108c
SS
219 };
220
221/* Attributes have a name and a value */
222struct attribute
223 {
224 enum dwarf_attribute name;
225 enum dwarf_form form;
226 union
227 {
228 char *str;
229 struct dwarf_block *blk;
230 unsigned int unsnd;
231 int snd;
232 CORE_ADDR addr;
233 }
234 u;
235 };
236
237/* Get at parts of an attribute structure */
238
239#define DW_STRING(attr) ((attr)->u.str)
240#define DW_UNSND(attr) ((attr)->u.unsnd)
241#define DW_BLOCK(attr) ((attr)->u.blk)
242#define DW_SND(attr) ((attr)->u.snd)
243#define DW_ADDR(attr) ((attr)->u.addr)
244
245/* Blocks are a bunch of untyped bytes. */
246struct dwarf_block
247 {
248 unsigned int size;
249 char *data;
250 };
251
252/* We only hold one compilation unit's abbrevs in
253 memory at any one time. */
254#ifndef ABBREV_HASH_SIZE
255#define ABBREV_HASH_SIZE 121
256#endif
257#ifndef ATTR_ALLOC_CHUNK
258#define ATTR_ALLOC_CHUNK 4
259#endif
260
261static struct abbrev_info *dwarf2_abbrevs[ABBREV_HASH_SIZE];
262
263/* A hash table of die offsets for following references. */
264#ifndef REF_HASH_SIZE
265#define REF_HASH_SIZE 1021
266#endif
267
268static struct die_info *die_ref_table[REF_HASH_SIZE];
269
270/* Obstack for allocating temporary storage used during symbol reading. */
271static struct obstack dwarf2_tmp_obstack;
272
273/* Offset to the first byte of the current compilation unit header,
274 for resolving relative reference dies. */
275static unsigned int cu_header_offset;
276
277/* Allocate fields for structs, unions and enums in this size. */
278#ifndef DW_FIELD_ALLOC_CHUNK
279#define DW_FIELD_ALLOC_CHUNK 4
280#endif
281
282/* The language we are debugging. */
283static enum language cu_language;
284static const struct language_defn *cu_language_defn;
285
286/* Actually data from the sections. */
287static char *dwarf_info_buffer;
288static char *dwarf_abbrev_buffer;
289static char *dwarf_line_buffer;
290
291/* A zeroed version of a partial die for initialization purposes. */
292static struct partial_die_info zeroed_partial_die;
293
294/* The generic symbol table building routines have separate lists for
295 file scope symbols and all all other scopes (local scopes). So
296 we need to select the right one to pass to add_symbol_to_list().
297 We do it by keeping a pointer to the correct list in list_in_scope.
298
299 FIXME: The original dwarf code just treated the file scope as the first
300 local scope, and all other local scopes as nested local scopes, and worked
301 fine. Check to see if we really need to distinguish these
302 in buildsym.c. */
303static struct pending **list_in_scope = &file_symbols;
304
7a292a7a
SS
305/* FIXME: decode_locdesc sets these variables to describe the location
306 to the caller. These ought to be a structure or something. If
307 none of the flags are set, the object lives at the address returned
308 by decode_locdesc. */
309
310static int optimized_out; /* No ops in location in expression,
311 so object was optimized out. */
312static int isreg; /* Object lives in register.
313 decode_locdesc's return value is
314 the register number. */
315static int offreg; /* Object's address is the sum of the
316 register specified by basereg, plus
317 the offset returned. */
c5aa993b 318static int basereg; /* See `offreg'. */
7a292a7a
SS
319static int isderef; /* Value described by flags above is
320 the address of a pointer to the object. */
321static int islocal; /* Variable is at the returned offset
322 from the frame start, but there's
323 no identified frame pointer for
324 this function, so we can't say
325 which register it's relative to;
326 use LOC_LOCAL. */
c906108c
SS
327
328/* DW_AT_frame_base values for the current function.
329 frame_base_reg is -1 if DW_AT_frame_base is missing, otherwise it
330 contains the register number for the frame register.
331 frame_base_offset is the offset from the frame register to the
332 virtual stack frame. */
333static int frame_base_reg;
334static CORE_ADDR frame_base_offset;
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). */
339static CORE_ADDR baseaddr; /* Add to each symbol value */
340
341/* We put a pointer to this structure in the read_symtab_private field
342 of the psymtab.
343 The complete dwarf information for an objfile is kept in the
344 psymbol_obstack, so that absolute die references can be handled.
345 Most of the information in this structure is related to an entire
346 object file and could be passed via the sym_private field of the objfile.
347 It is however conceivable that dwarf2 might not be the only type
348 of symbols read from an object file. */
349
350struct dwarf2_pinfo
c5aa993b
JM
351 {
352 /* Pointer to start of dwarf info buffer for the objfile. */
c906108c 353
c5aa993b 354 char *dwarf_info_buffer;
c906108c 355
c5aa993b 356 /* Offset in dwarf_info_buffer for this compilation unit. */
c906108c 357
c5aa993b 358 unsigned long dwarf_info_offset;
c906108c 359
c5aa993b 360 /* Pointer to start of dwarf abbreviation buffer for the objfile. */
c906108c 361
c5aa993b 362 char *dwarf_abbrev_buffer;
c906108c 363
c5aa993b 364 /* Size of dwarf abbreviation section for the objfile. */
c906108c 365
c5aa993b 366 unsigned int dwarf_abbrev_size;
c906108c 367
c5aa993b 368 /* Pointer to start of dwarf line buffer for the objfile. */
c906108c 369
c5aa993b
JM
370 char *dwarf_line_buffer;
371 };
c906108c
SS
372
373#define PST_PRIVATE(p) ((struct dwarf2_pinfo *)(p)->read_symtab_private)
374#define DWARF_INFO_BUFFER(p) (PST_PRIVATE(p)->dwarf_info_buffer)
375#define DWARF_INFO_OFFSET(p) (PST_PRIVATE(p)->dwarf_info_offset)
376#define DWARF_ABBREV_BUFFER(p) (PST_PRIVATE(p)->dwarf_abbrev_buffer)
377#define DWARF_ABBREV_SIZE(p) (PST_PRIVATE(p)->dwarf_abbrev_size)
378#define DWARF_LINE_BUFFER(p) (PST_PRIVATE(p)->dwarf_line_buffer)
379
380/* Maintain an array of referenced fundamental types for the current
381 compilation unit being read. For DWARF version 1, we have to construct
382 the fundamental types on the fly, since no information about the
383 fundamental types is supplied. Each such fundamental type is created by
384 calling a language dependent routine to create the type, and then a
385 pointer to that type is then placed in the array at the index specified
386 by it's FT_<TYPENAME> value. The array has a fixed size set by the
387 FT_NUM_MEMBERS compile time constant, which is the number of predefined
388 fundamental types gdb knows how to construct. */
389static struct type *ftypes[FT_NUM_MEMBERS]; /* Fundamental types */
390
391/* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte,
392 but this would require a corresponding change in unpack_field_as_long
393 and friends. */
394static int bits_per_byte = 8;
395
396/* The routines that read and process dies for a C struct or C++ class
397 pass lists of data member fields and lists of member function fields
398 in an instance of a field_info structure, as defined below. */
399struct field_info
c5aa993b
JM
400 {
401 /* List of data member and baseclasses fields. */
402 struct nextfield
403 {
404 struct nextfield *next;
405 int accessibility;
406 int virtuality;
407 struct field field;
408 }
409 *fields;
c906108c 410
c5aa993b
JM
411 /* Number of fields. */
412 int nfields;
c906108c 413
c5aa993b
JM
414 /* Number of baseclasses. */
415 int nbaseclasses;
c906108c 416
c5aa993b
JM
417 /* Set if the accesibility of one of the fields is not public. */
418 int non_public_fields;
c906108c 419
c5aa993b
JM
420 /* Member function fields array, entries are allocated in the order they
421 are encountered in the object file. */
422 struct nextfnfield
423 {
424 struct nextfnfield *next;
425 struct fn_field fnfield;
426 }
427 *fnfields;
c906108c 428
c5aa993b
JM
429 /* Member function fieldlist array, contains name of possibly overloaded
430 member function, number of overloaded member functions and a pointer
431 to the head of the member function field chain. */
432 struct fnfieldlist
433 {
434 char *name;
435 int length;
436 struct nextfnfield *head;
437 }
438 *fnfieldlists;
c906108c 439
c5aa993b
JM
440 /* Number of entries in the fnfieldlists array. */
441 int nfnfields;
442 };
c906108c
SS
443
444/* FIXME: Kludge to mark a varargs function type for C++ member function
445 argument processing. */
446#define TYPE_FLAG_VARARGS (1 << 10)
447
448/* Dwarf2 has no clean way to discern C++ static and non-static member
449 functions. G++ helps GDB by marking the first parameter for non-static
450 member functions (which is the this pointer) as artificial.
451 We pass this information between dwarf2_add_member_fn and
452 read_subroutine_type via TYPE_FIELD_ARTIFICIAL. */
453#define TYPE_FIELD_ARTIFICIAL TYPE_FIELD_BITPOS
454
455/* Various complaints about symbol reading that don't abort the process */
456
457static struct complaint dwarf2_const_ignored =
458{
459 "type qualifier 'const' ignored", 0, 0
460};
461static struct complaint dwarf2_volatile_ignored =
462{
463 "type qualifier 'volatile' ignored", 0, 0
464};
465static struct complaint dwarf2_non_const_array_bound_ignored =
466{
467 "non-constant array bounds form '%s' ignored", 0, 0
468};
469static struct complaint dwarf2_missing_line_number_section =
470{
471 "missing .debug_line section", 0, 0
472};
473static struct complaint dwarf2_mangled_line_number_section =
474{
475 "mangled .debug_line section", 0, 0
476};
477static struct complaint dwarf2_unsupported_die_ref_attr =
478{
479 "unsupported die ref attribute form: '%s'", 0, 0
480};
481static struct complaint dwarf2_unsupported_stack_op =
482{
483 "unsupported stack op: '%s'", 0, 0
484};
7a292a7a
SS
485static struct complaint dwarf2_complex_location_expr =
486{
487 "location expression too complex", 0, 0
488};
c906108c
SS
489static struct complaint dwarf2_unsupported_tag =
490{
491 "unsupported tag: '%s'", 0, 0
492};
493static struct complaint dwarf2_unsupported_at_encoding =
494{
495 "unsupported DW_AT_encoding: '%s'", 0, 0
496};
497static struct complaint dwarf2_unsupported_at_frame_base =
498{
499 "unsupported DW_AT_frame_base for function '%s'", 0, 0
500};
501static struct complaint dwarf2_unexpected_tag =
502{
503 "unexepected tag in read_type_die: '%s'", 0, 0
504};
505static struct complaint dwarf2_missing_at_frame_base =
506{
507 "DW_AT_frame_base missing for DW_OP_fbreg", 0, 0
508};
509static struct complaint dwarf2_bad_static_member_name =
510{
511 "unrecognized static data member name '%s'", 0, 0
512};
513static struct complaint dwarf2_unsupported_accessibility =
514{
515 "unsupported accessibility %d", 0, 0
516};
517static struct complaint dwarf2_bad_member_name_complaint =
518{
519 "cannot extract member name from '%s'", 0, 0
520};
521static struct complaint dwarf2_missing_member_fn_type_complaint =
522{
523 "member function type missing for '%s'", 0, 0
524};
525static struct complaint dwarf2_vtbl_not_found_complaint =
526{
527 "virtual function table pointer not found when defining class '%s'", 0, 0
528};
529static struct complaint dwarf2_absolute_sibling_complaint =
530{
531 "ignoring absolute DW_AT_sibling", 0, 0
532};
533static struct complaint dwarf2_const_value_length_mismatch =
534{
535 "const value length mismatch for '%s', got %d, expected %d", 0, 0
536};
537static struct complaint dwarf2_unsupported_const_value_attr =
538{
539 "unsupported const value attribute form: '%s'", 0, 0
540};
541
542/* Remember the addr_size read from the dwarf.
543 If a target expects to link compilation units with differing address
544 sizes, gdb needs to be sure that the appropriate size is here for
545 whatever scope is currently getting read. */
546static int address_size;
547
c906108c
SS
548/* Externals references. */
549extern int info_verbose; /* From main.c; nonzero => verbose */
550
551/* local function prototypes */
552
553static void dwarf2_locate_sections PARAMS ((bfd *, asection *, PTR));
554
555#if 0
d4f3574e 556static void dwarf2_build_psymtabs_easy PARAMS ((struct objfile *, int));
c906108c
SS
557#endif
558
d4f3574e 559static void dwarf2_build_psymtabs_hard PARAMS ((struct objfile *, int));
c906108c
SS
560
561static char *scan_partial_symbols PARAMS ((char *, struct objfile *,
562 CORE_ADDR *, CORE_ADDR *));
563
564static void add_partial_symbol PARAMS ((struct partial_die_info *,
565 struct objfile *));
566
567static void dwarf2_psymtab_to_symtab PARAMS ((struct partial_symtab *));
568
569static void psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
570
571static char *dwarf2_read_section PARAMS ((struct objfile *, file_ptr,
572 unsigned int));
573
574static void dwarf2_read_abbrevs PARAMS ((bfd *, unsigned int));
575
576static void dwarf2_empty_abbrev_table PARAMS ((PTR));
577
578static struct abbrev_info *dwarf2_lookup_abbrev PARAMS ((unsigned int));
579
580static char *read_partial_die PARAMS ((struct partial_die_info *,
581 bfd *, char *, int *));
582
583static char *read_full_die PARAMS ((struct die_info **, bfd *, char *));
584
585static char *read_attribute PARAMS ((struct attribute *, struct attr_abbrev *,
586 bfd *, char *));
587
588static unsigned int read_1_byte PARAMS ((bfd *, char *));
589
590static int read_1_signed_byte PARAMS ((bfd *, char *));
591
592static unsigned int read_2_bytes PARAMS ((bfd *, char *));
593
594static unsigned int read_4_bytes PARAMS ((bfd *, char *));
595
596static unsigned int read_8_bytes PARAMS ((bfd *, char *));
597
598static CORE_ADDR read_address PARAMS ((bfd *, char *));
599
600static char *read_n_bytes PARAMS ((bfd *, char *, unsigned int));
601
602static char *read_string PARAMS ((bfd *, char *, unsigned int *));
603
604static unsigned int read_unsigned_leb128 PARAMS ((bfd *, char *,
605 unsigned int *));
606
607static int read_signed_leb128 PARAMS ((bfd *, char *, unsigned int *));
608
609static void set_cu_language PARAMS ((unsigned int));
610
611static struct attribute *dwarf_attr PARAMS ((struct die_info *,
612 unsigned int));
613
3ca72b44
AC
614static int die_is_declaration (struct die_info *);
615
c906108c
SS
616static void dwarf_decode_lines PARAMS ((unsigned int, char *, bfd *));
617
618static void dwarf2_start_subfile PARAMS ((char *, char *));
619
620static struct symbol *new_symbol PARAMS ((struct die_info *, struct type *,
621 struct objfile *));
622
623static void dwarf2_const_value PARAMS ((struct attribute *, struct symbol *,
624 struct objfile *));
625
2df3850c
JM
626static void dwarf2_const_value_data (struct attribute *attr,
627 struct symbol *sym,
628 int bits);
629
c906108c
SS
630static struct type *die_type PARAMS ((struct die_info *, struct objfile *));
631
632static struct type *die_containing_type PARAMS ((struct die_info *,
633 struct objfile *));
634
635#if 0
636static struct type *type_at_offset PARAMS ((unsigned int, struct objfile *));
637#endif
638
639static struct type *tag_type_to_type PARAMS ((struct die_info *,
640 struct objfile *));
641
642static void read_type_die PARAMS ((struct die_info *, struct objfile *));
643
644static void read_typedef PARAMS ((struct die_info *, struct objfile *));
645
646static void read_base_type PARAMS ((struct die_info *, struct objfile *));
647
648static void read_file_scope PARAMS ((struct die_info *, struct objfile *));
649
650static void read_func_scope PARAMS ((struct die_info *, struct objfile *));
651
652static void read_lexical_block_scope PARAMS ((struct die_info *,
653 struct objfile *));
654
655static int dwarf2_get_pc_bounds PARAMS ((struct die_info *,
656 CORE_ADDR *, CORE_ADDR *,
657 struct objfile *));
658
659static void dwarf2_add_field PARAMS ((struct field_info *, struct die_info *,
660 struct objfile *));
661
662static void dwarf2_attach_fields_to_type PARAMS ((struct field_info *,
c5aa993b 663 struct type *,
c906108c
SS
664 struct objfile *));
665
c906108c
SS
666static void dwarf2_add_member_fn PARAMS ((struct field_info *,
667 struct die_info *, struct type *,
c5aa993b 668 struct objfile * objfile));
c906108c
SS
669
670static void dwarf2_attach_fn_fields_to_type PARAMS ((struct field_info *,
671 struct type *,
672 struct objfile *));
673
674static void read_structure_scope PARAMS ((struct die_info *, struct objfile *));
675
676static void read_common_block PARAMS ((struct die_info *, struct objfile *));
677
678static void read_enumeration PARAMS ((struct die_info *, struct objfile *));
679
680static struct type *dwarf_base_type PARAMS ((int, int, struct objfile *));
681
682static CORE_ADDR decode_locdesc PARAMS ((struct dwarf_block *,
683 struct objfile *));
684
685static void read_array_type PARAMS ((struct die_info *, struct objfile *));
686
687static void read_tag_pointer_type PARAMS ((struct die_info *,
688 struct objfile *));
689
690static void read_tag_ptr_to_member_type PARAMS ((struct die_info *,
691 struct objfile *));
692
693static void read_tag_reference_type PARAMS ((struct die_info *,
694 struct objfile *));
695
696static void read_tag_const_type PARAMS ((struct die_info *, struct objfile *));
697
698static void read_tag_volatile_type PARAMS ((struct die_info *,
699 struct objfile *));
700
701static void read_tag_string_type PARAMS ((struct die_info *,
702 struct objfile *));
703
704static void read_subroutine_type PARAMS ((struct die_info *,
705 struct objfile *));
706
707struct die_info *read_comp_unit PARAMS ((char *, bfd *));
708
709static void free_die_list PARAMS ((struct die_info *));
710
711static void process_die PARAMS ((struct die_info *, struct objfile *));
712
713static char *dwarf2_linkage_name PARAMS ((struct die_info *));
714
715static char *dwarf_tag_name PARAMS ((unsigned int));
716
717static char *dwarf_attr_name PARAMS ((unsigned int));
718
719static char *dwarf_form_name PARAMS ((unsigned int));
720
721static char *dwarf_stack_op_name PARAMS ((unsigned int));
722
723static char *dwarf_bool_name PARAMS ((unsigned int));
724
725static char *dwarf_type_encoding_name PARAMS ((unsigned int));
726
727#if 0
728static char *dwarf_cfi_name PARAMS ((unsigned int));
729
730struct die_info *copy_die PARAMS ((struct die_info *));
731#endif
732
733struct die_info *sibling_die PARAMS ((struct die_info *));
734
735void dump_die PARAMS ((struct die_info *));
736
737void dump_die_list PARAMS ((struct die_info *));
738
739void store_in_ref_table PARAMS ((unsigned int, struct die_info *));
740
741static void dwarf2_empty_die_ref_table PARAMS ((void));
742
743static unsigned int dwarf2_get_ref_die_offset PARAMS ((struct attribute *));
744
745struct die_info *follow_die_ref PARAMS ((unsigned int));
746
747static struct type *dwarf2_fundamental_type PARAMS ((struct objfile *, int));
748
749/* memory allocation interface */
750
751static void dwarf2_free_tmp_obstack PARAMS ((PTR));
752
753static struct dwarf_block *dwarf_alloc_block PARAMS ((void));
754
755static struct abbrev_info *dwarf_alloc_abbrev PARAMS ((void));
756
757static struct die_info *dwarf_alloc_die PARAMS ((void));
758
759/* Try to locate the sections we need for DWARF 2 debugging
760 information and return true if we have enough to do something. */
761
762int
763dwarf2_has_info (abfd)
764 bfd *abfd;
765{
766 dwarf_info_offset = dwarf_abbrev_offset = dwarf_line_offset = 0;
767 bfd_map_over_sections (abfd, dwarf2_locate_sections, NULL);
768 if (dwarf_info_offset && dwarf_abbrev_offset)
769 {
770 return 1;
771 }
772 else
773 {
774 return 0;
775 }
776}
777
778/* This function is mapped across the sections and remembers the
779 offset and size of each of the debugging sections we are interested
780 in. */
781
782static void
783dwarf2_locate_sections (ignore_abfd, sectp, ignore_ptr)
784 bfd *ignore_abfd;
785 asection *sectp;
786 PTR ignore_ptr;
787{
788 if (STREQ (sectp->name, INFO_SECTION))
789 {
790 dwarf_info_offset = sectp->filepos;
791 dwarf_info_size = bfd_get_section_size_before_reloc (sectp);
792 }
793 else if (STREQ (sectp->name, ABBREV_SECTION))
794 {
795 dwarf_abbrev_offset = sectp->filepos;
796 dwarf_abbrev_size = bfd_get_section_size_before_reloc (sectp);
797 }
798 else if (STREQ (sectp->name, LINE_SECTION))
799 {
800 dwarf_line_offset = sectp->filepos;
801 dwarf_line_size = bfd_get_section_size_before_reloc (sectp);
802 }
803 else if (STREQ (sectp->name, PUBNAMES_SECTION))
804 {
805 dwarf_pubnames_offset = sectp->filepos;
806 dwarf_pubnames_size = bfd_get_section_size_before_reloc (sectp);
807 }
808 else if (STREQ (sectp->name, ARANGES_SECTION))
809 {
810 dwarf_aranges_offset = sectp->filepos;
811 dwarf_aranges_size = bfd_get_section_size_before_reloc (sectp);
812 }
813 else if (STREQ (sectp->name, LOC_SECTION))
814 {
815 dwarf_loc_offset = sectp->filepos;
816 dwarf_loc_size = bfd_get_section_size_before_reloc (sectp);
817 }
818 else if (STREQ (sectp->name, MACINFO_SECTION))
819 {
820 dwarf_macinfo_offset = sectp->filepos;
821 dwarf_macinfo_size = bfd_get_section_size_before_reloc (sectp);
822 }
823 else if (STREQ (sectp->name, STR_SECTION))
824 {
825 dwarf_str_offset = sectp->filepos;
826 dwarf_str_size = bfd_get_section_size_before_reloc (sectp);
827 }
828}
829
830/* Build a partial symbol table. */
831
832void
d4f3574e 833dwarf2_build_psymtabs (objfile, mainline)
c5aa993b 834 struct objfile *objfile;
c5aa993b 835 int mainline;
c906108c
SS
836{
837
838 /* We definitely need the .debug_info and .debug_abbrev sections */
839
840 dwarf_info_buffer = dwarf2_read_section (objfile,
841 dwarf_info_offset,
842 dwarf_info_size);
843 dwarf_abbrev_buffer = dwarf2_read_section (objfile,
844 dwarf_abbrev_offset,
845 dwarf_abbrev_size);
846 dwarf_line_buffer = dwarf2_read_section (objfile,
847 dwarf_line_offset,
848 dwarf_line_size);
849
850 if (mainline || objfile->global_psymbols.size == 0 ||
851 objfile->static_psymbols.size == 0)
852 {
853 init_psymbol_list (objfile, 1024);
854 }
855
856#if 0
857 if (dwarf_aranges_offset && dwarf_pubnames_offset)
858 {
d4f3574e 859 /* Things are significantly easier if we have .debug_aranges and
c906108c
SS
860 .debug_pubnames sections */
861
d4f3574e 862 dwarf2_build_psymtabs_easy (objfile, mainline);
c906108c
SS
863 }
864 else
865#endif
866 /* only test this case for now */
c5aa993b 867 {
c906108c 868 /* In this case we have to work a bit harder */
d4f3574e 869 dwarf2_build_psymtabs_hard (objfile, mainline);
c906108c
SS
870 }
871}
872
873#if 0
874/* Build the partial symbol table from the information in the
875 .debug_pubnames and .debug_aranges sections. */
876
877static void
d4f3574e 878dwarf2_build_psymtabs_easy (objfile, mainline)
c906108c 879 struct objfile *objfile;
c906108c
SS
880 int mainline;
881{
882 bfd *abfd = objfile->obfd;
883 char *aranges_buffer, *pubnames_buffer;
884 char *aranges_ptr, *pubnames_ptr;
885 unsigned int entry_length, version, info_offset, info_size;
886
887 pubnames_buffer = dwarf2_read_section (objfile,
888 dwarf_pubnames_offset,
889 dwarf_pubnames_size);
890 pubnames_ptr = pubnames_buffer;
891 while ((pubnames_ptr - pubnames_buffer) < dwarf_pubnames_size)
892 {
893 entry_length = read_4_bytes (abfd, pubnames_ptr);
894 pubnames_ptr += 4;
895 version = read_1_byte (abfd, pubnames_ptr);
896 pubnames_ptr += 1;
897 info_offset = read_4_bytes (abfd, pubnames_ptr);
898 pubnames_ptr += 4;
899 info_size = read_4_bytes (abfd, pubnames_ptr);
900 pubnames_ptr += 4;
901 }
902
903 aranges_buffer = dwarf2_read_section (objfile,
904 dwarf_aranges_offset,
905 dwarf_aranges_size);
906
907}
908#endif
909
910/* Build the partial symbol table by doing a quick pass through the
911 .debug_info and .debug_abbrev sections. */
912
913static void
d4f3574e 914dwarf2_build_psymtabs_hard (objfile, mainline)
c906108c 915 struct objfile *objfile;
c906108c
SS
916 int mainline;
917{
918 /* Instead of reading this into a big buffer, we should probably use
919 mmap() on architectures that support it. (FIXME) */
920 bfd *abfd = objfile->obfd;
921 char *info_ptr, *abbrev_ptr;
922 char *beg_of_comp_unit;
923 struct comp_unit_head cu_header;
924 struct partial_die_info comp_unit_die;
925 struct partial_symtab *pst;
926 struct cleanup *back_to;
927 int comp_unit_has_pc_info;
928 CORE_ADDR lowpc, highpc;
929
c906108c
SS
930 info_ptr = dwarf_info_buffer;
931 abbrev_ptr = dwarf_abbrev_buffer;
932
933 obstack_init (&dwarf2_tmp_obstack);
934 back_to = make_cleanup (dwarf2_free_tmp_obstack, NULL);
935
936 while ((unsigned int) (info_ptr - dwarf_info_buffer)
c5aa993b 937 + ((info_ptr - dwarf_info_buffer) % 4) < dwarf_info_size)
c906108c
SS
938 {
939 beg_of_comp_unit = info_ptr;
940 cu_header.length = read_4_bytes (abfd, info_ptr);
941 info_ptr += 4;
942 cu_header.version = read_2_bytes (abfd, info_ptr);
943 info_ptr += 2;
944 cu_header.abbrev_offset = read_4_bytes (abfd, info_ptr);
945 info_ptr += 4;
946 cu_header.addr_size = read_1_byte (abfd, info_ptr);
947 info_ptr += 1;
948 address_size = cu_header.addr_size;
949
950 if (cu_header.version != 2)
951 {
952 error ("Dwarf Error: wrong version in compilation unit header.");
953 return;
954 }
955 if (cu_header.abbrev_offset >= dwarf_abbrev_size)
956 {
957 error ("Dwarf Error: bad offset (0x%lx) in compilation unit header (offset 0x%lx + 6).",
958 (long) cu_header.abbrev_offset,
959 (long) (beg_of_comp_unit - dwarf_info_buffer));
960 return;
961 }
962 if (beg_of_comp_unit + cu_header.length + 4
963 > dwarf_info_buffer + dwarf_info_size)
964 {
965 error ("Dwarf Error: bad length (0x%lx) in compilation unit header (offset 0x%lx + 0).",
966 (long) cu_header.length,
967 (long) (beg_of_comp_unit - dwarf_info_buffer));
968 return;
969 }
c906108c
SS
970 /* Read the abbrevs for this compilation unit into a table */
971 dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
972 make_cleanup (dwarf2_empty_abbrev_table, NULL);
973
974 /* Read the compilation unit die */
975 info_ptr = read_partial_die (&comp_unit_die, abfd,
976 info_ptr, &comp_unit_has_pc_info);
977
978 /* Set the language we're debugging */
979 set_cu_language (comp_unit_die.language);
980
981 /* Allocate a new partial symbol table structure */
d4f3574e 982 pst = start_psymtab_common (objfile, objfile->section_offsets,
96baa820 983 comp_unit_die.name ? comp_unit_die.name : "",
c906108c
SS
984 comp_unit_die.lowpc,
985 objfile->global_psymbols.next,
986 objfile->static_psymbols.next);
987
988 pst->read_symtab_private = (char *)
989 obstack_alloc (&objfile->psymbol_obstack, sizeof (struct dwarf2_pinfo));
990 cu_header_offset = beg_of_comp_unit - dwarf_info_buffer;
c5aa993b
JM
991 DWARF_INFO_BUFFER (pst) = dwarf_info_buffer;
992 DWARF_INFO_OFFSET (pst) = beg_of_comp_unit - dwarf_info_buffer;
993 DWARF_ABBREV_BUFFER (pst) = dwarf_abbrev_buffer;
994 DWARF_ABBREV_SIZE (pst) = dwarf_abbrev_size;
995 DWARF_LINE_BUFFER (pst) = dwarf_line_buffer;
d4f3574e 996 baseaddr = ANOFFSET (objfile->section_offsets, 0);
c906108c
SS
997
998 /* Store the function that reads in the rest of the symbol table */
999 pst->read_symtab = dwarf2_psymtab_to_symtab;
1000
1001 /* Check if comp unit has_children.
1002 If so, read the rest of the partial symbols from this comp unit.
1003 If not, there's no more debug_info for this comp unit. */
1004 if (comp_unit_die.has_children)
1005 {
1006 info_ptr = scan_partial_symbols (info_ptr, objfile, &lowpc, &highpc);
1007
1008 /* If the compilation unit didn't have an explicit address range,
1009 then use the information extracted from its child dies. */
1010 if (!comp_unit_has_pc_info)
1011 {
c5aa993b 1012 comp_unit_die.lowpc = lowpc;
c906108c
SS
1013 comp_unit_die.highpc = highpc;
1014 }
1015 }
c5aa993b 1016 pst->textlow = comp_unit_die.lowpc + baseaddr;
c906108c
SS
1017 pst->texthigh = comp_unit_die.highpc + baseaddr;
1018
1019 pst->n_global_syms = objfile->global_psymbols.next -
1020 (objfile->global_psymbols.list + pst->globals_offset);
1021 pst->n_static_syms = objfile->static_psymbols.next -
1022 (objfile->static_psymbols.list + pst->statics_offset);
1023 sort_pst_symbols (pst);
1024
1025 /* If there is already a psymtab or symtab for a file of this
1026 name, remove it. (If there is a symtab, more drastic things
1027 also happen.) This happens in VxWorks. */
1028 free_named_symtabs (pst->filename);
1029
1030 info_ptr = beg_of_comp_unit + cu_header.length + 4;
1031 }
1032 do_cleanups (back_to);
1033}
1034
1035/* Read in all interesting dies to the end of the compilation unit. */
1036
1037static char *
1038scan_partial_symbols (info_ptr, objfile, lowpc, highpc)
1039 char *info_ptr;
1040 struct objfile *objfile;
1041 CORE_ADDR *lowpc;
1042 CORE_ADDR *highpc;
1043{
1044 bfd *abfd = objfile->obfd;
1045 struct partial_die_info pdi;
1046
1047 /* This function is called after we've read in the comp_unit_die in
1048 order to read its children. We start the nesting level at 1 since
1049 we have pushed 1 level down in order to read the comp unit's children.
1050 The comp unit itself is at level 0, so we stop reading when we pop
1051 back to that level. */
1052
1053 int nesting_level = 1;
1054 int has_pc_info;
c5aa993b 1055
2acceee2 1056 *lowpc = ((CORE_ADDR) -1);
c906108c
SS
1057 *highpc = ((CORE_ADDR) 0);
1058
1059 while (nesting_level)
1060 {
1061 info_ptr = read_partial_die (&pdi, abfd, info_ptr, &has_pc_info);
1062
1063 if (pdi.name)
1064 {
1065 switch (pdi.tag)
1066 {
1067 case DW_TAG_subprogram:
1068 if (has_pc_info)
1069 {
1070 if (pdi.lowpc < *lowpc)
1071 {
1072 *lowpc = pdi.lowpc;
1073 }
1074 if (pdi.highpc > *highpc)
1075 {
1076 *highpc = pdi.highpc;
1077 }
1078 if ((pdi.is_external || nesting_level == 1)
1079 && !pdi.is_declaration)
1080 {
1081 add_partial_symbol (&pdi, objfile);
1082 }
1083 }
1084 break;
1085 case DW_TAG_variable:
1086 case DW_TAG_typedef:
1087 case DW_TAG_class_type:
1088 case DW_TAG_structure_type:
1089 case DW_TAG_union_type:
1090 case DW_TAG_enumeration_type:
1091 if ((pdi.is_external || nesting_level == 1)
1092 && !pdi.is_declaration)
1093 {
1094 add_partial_symbol (&pdi, objfile);
1095 }
1096 break;
1097 case DW_TAG_enumerator:
1098 /* File scope enumerators are added to the partial symbol
c5aa993b 1099 table. */
c906108c
SS
1100 if (nesting_level == 2)
1101 add_partial_symbol (&pdi, objfile);
1102 break;
1103 case DW_TAG_base_type:
1104 /* File scope base type definitions are added to the partial
c5aa993b 1105 symbol table. */
c906108c
SS
1106 if (nesting_level == 1)
1107 add_partial_symbol (&pdi, objfile);
1108 break;
1109 default:
1110 break;
1111 }
1112 }
1113
1114 /* If the die has a sibling, skip to the sibling.
c5aa993b
JM
1115 Do not skip enumeration types, we want to record their
1116 enumerators. */
c906108c
SS
1117 if (pdi.sibling && pdi.tag != DW_TAG_enumeration_type)
1118 {
1119 info_ptr = pdi.sibling;
1120 }
1121 else if (pdi.has_children)
1122 {
1123 /* Die has children, but the optional DW_AT_sibling attribute
1124 is missing. */
1125 nesting_level++;
1126 }
1127
1128 if (pdi.tag == 0)
1129 {
1130 nesting_level--;
1131 }
1132 }
1133
1134 /* If we didn't find a lowpc, set it to highpc to avoid complaints
1135 from `maint check'. */
2acceee2 1136 if (*lowpc == ((CORE_ADDR) -1))
c906108c
SS
1137 *lowpc = *highpc;
1138 return info_ptr;
1139}
1140
1141static void
1142add_partial_symbol (pdi, objfile)
1143 struct partial_die_info *pdi;
1144 struct objfile *objfile;
1145{
1146 CORE_ADDR addr = 0;
1147
1148 switch (pdi->tag)
1149 {
1150 case DW_TAG_subprogram:
1151 if (pdi->is_external)
1152 {
1153 /*prim_record_minimal_symbol (pdi->name, pdi->lowpc + baseaddr,
c5aa993b 1154 mst_text, objfile); */
c906108c
SS
1155 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1156 VAR_NAMESPACE, LOC_BLOCK,
1157 &objfile->global_psymbols,
c5aa993b 1158 0, pdi->lowpc + baseaddr, cu_language, objfile);
c906108c
SS
1159 }
1160 else
1161 {
1162 /*prim_record_minimal_symbol (pdi->name, pdi->lowpc + baseaddr,
c5aa993b 1163 mst_file_text, objfile); */
c906108c
SS
1164 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1165 VAR_NAMESPACE, LOC_BLOCK,
1166 &objfile->static_psymbols,
c5aa993b 1167 0, pdi->lowpc + baseaddr, cu_language, objfile);
c906108c
SS
1168 }
1169 break;
1170 case DW_TAG_variable:
1171 if (pdi->is_external)
1172 {
1173 /* Global Variable.
1174 Don't enter into the minimal symbol tables as there is
1175 a minimal symbol table entry from the ELF symbols already.
1176 Enter into partial symbol table if it has a location
1177 descriptor or a type.
1178 If the location descriptor is missing, new_symbol will create
1179 a LOC_UNRESOLVED symbol, the address of the variable will then
1180 be determined from the minimal symbol table whenever the variable
1181 is referenced.
1182 The address for the partial symbol table entry is not
1183 used by GDB, but it comes in handy for debugging partial symbol
1184 table building. */
1185
1186 if (pdi->locdesc)
1187 addr = decode_locdesc (pdi->locdesc, objfile);
1188 if (pdi->locdesc || pdi->has_type)
1189 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1190 VAR_NAMESPACE, LOC_STATIC,
1191 &objfile->global_psymbols,
1192 0, addr + baseaddr, cu_language, objfile);
1193 }
1194 else
1195 {
1196 /* Static Variable. Skip symbols without location descriptors. */
1197 if (pdi->locdesc == NULL)
1198 return;
1199 addr = decode_locdesc (pdi->locdesc, objfile);
1200 /*prim_record_minimal_symbol (pdi->name, addr + baseaddr,
c5aa993b 1201 mst_file_data, objfile); */
c906108c
SS
1202 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1203 VAR_NAMESPACE, LOC_STATIC,
1204 &objfile->static_psymbols,
1205 0, addr + baseaddr, cu_language, objfile);
1206 }
1207 break;
1208 case DW_TAG_typedef:
1209 case DW_TAG_base_type:
1210 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1211 VAR_NAMESPACE, LOC_TYPEDEF,
1212 &objfile->static_psymbols,
1213 0, (CORE_ADDR) 0, cu_language, objfile);
1214 break;
1215 case DW_TAG_class_type:
1216 case DW_TAG_structure_type:
1217 case DW_TAG_union_type:
1218 case DW_TAG_enumeration_type:
1219 /* Skip aggregate types without children, these are external
c5aa993b 1220 references. */
c906108c
SS
1221 if (pdi->has_children == 0)
1222 return;
1223 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1224 STRUCT_NAMESPACE, LOC_TYPEDEF,
1225 &objfile->static_psymbols,
1226 0, (CORE_ADDR) 0, cu_language, objfile);
1227
1228 if (cu_language == language_cplus)
1229 {
1230 /* For C++, these implicitly act as typedefs as well. */
1231 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1232 VAR_NAMESPACE, LOC_TYPEDEF,
1233 &objfile->static_psymbols,
1234 0, (CORE_ADDR) 0, cu_language, objfile);
1235 }
1236 break;
1237 case DW_TAG_enumerator:
1238 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1239 VAR_NAMESPACE, LOC_CONST,
1240 &objfile->static_psymbols,
1241 0, (CORE_ADDR) 0, cu_language, objfile);
1242 break;
1243 default:
1244 break;
1245 }
1246}
1247
1248/* Expand this partial symbol table into a full symbol table. */
1249
1250static void
1251dwarf2_psymtab_to_symtab (pst)
1252 struct partial_symtab *pst;
1253{
1254 /* FIXME: This is barely more than a stub. */
1255 if (pst != NULL)
1256 {
1257 if (pst->readin)
1258 {
1259 warning ("bug: psymtab for %s is already read in.", pst->filename);
1260 }
1261 else
1262 {
1263 if (info_verbose)
1264 {
1265 printf_filtered ("Reading in symbols for %s...", pst->filename);
1266 gdb_flush (gdb_stdout);
1267 }
1268
1269 psymtab_to_symtab_1 (pst);
1270
1271 /* Finish up the debug error message. */
1272 if (info_verbose)
1273 printf_filtered ("done.\n");
1274 }
1275 }
1276}
1277
1278static void
1279psymtab_to_symtab_1 (pst)
1280 struct partial_symtab *pst;
1281{
1282 struct objfile *objfile = pst->objfile;
1283 bfd *abfd = objfile->obfd;
1284 struct comp_unit_head cu_header;
1285 struct die_info *dies;
1286 unsigned long offset;
1287 CORE_ADDR lowpc, highpc;
1288 struct die_info *child_die;
1289 char *info_ptr;
1290 struct symtab *symtab;
1291 struct cleanup *back_to;
1292
1293 /* Set local variables from the partial symbol table info. */
c5aa993b
JM
1294 offset = DWARF_INFO_OFFSET (pst);
1295 dwarf_info_buffer = DWARF_INFO_BUFFER (pst);
1296 dwarf_abbrev_buffer = DWARF_ABBREV_BUFFER (pst);
1297 dwarf_abbrev_size = DWARF_ABBREV_SIZE (pst);
1298 dwarf_line_buffer = DWARF_LINE_BUFFER (pst);
c906108c
SS
1299 baseaddr = ANOFFSET (pst->section_offsets, 0);
1300 cu_header_offset = offset;
1301 info_ptr = dwarf_info_buffer + offset;
1302
1303 obstack_init (&dwarf2_tmp_obstack);
1304 back_to = make_cleanup (dwarf2_free_tmp_obstack, NULL);
1305
1306 buildsym_init ();
a0b3c4fd 1307 make_cleanup (really_free_pendings, NULL);
c906108c
SS
1308
1309 /* read in the comp_unit header */
1310 cu_header.length = read_4_bytes (abfd, info_ptr);
1311 info_ptr += 4;
1312 cu_header.version = read_2_bytes (abfd, info_ptr);
1313 info_ptr += 2;
1314 cu_header.abbrev_offset = read_4_bytes (abfd, info_ptr);
1315 info_ptr += 4;
1316 cu_header.addr_size = read_1_byte (abfd, info_ptr);
1317 info_ptr += 1;
1318
1319 /* Read the abbrevs for this compilation unit */
1320 dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
1321 make_cleanup (dwarf2_empty_abbrev_table, NULL);
1322
1323 dies = read_comp_unit (info_ptr, abfd);
1324
1325 make_cleanup ((make_cleanup_func) free_die_list, dies);
1326
1327 /* Do line number decoding in read_file_scope () */
1328 process_die (dies, objfile);
1329
1330 if (!dwarf2_get_pc_bounds (dies, &lowpc, &highpc, objfile))
1331 {
1332 /* Some compilers don't define a DW_AT_high_pc attribute for
c5aa993b
JM
1333 the compilation unit. If the DW_AT_high_pc is missing,
1334 synthesize it, by scanning the DIE's below the compilation unit. */
c906108c
SS
1335 highpc = 0;
1336 if (dies->has_children)
1337 {
1338 child_die = dies->next;
1339 while (child_die && child_die->tag)
1340 {
1341 if (child_die->tag == DW_TAG_subprogram)
1342 {
1343 CORE_ADDR low, high;
1344
1345 if (dwarf2_get_pc_bounds (child_die, &low, &high, objfile))
1346 {
1347 highpc = max (highpc, high);
1348 }
1349 }
1350 child_die = sibling_die (child_die);
1351 }
1352 }
1353 }
1354 symtab = end_symtab (highpc + baseaddr, objfile, 0);
1355
1356 /* Set symtab language to language from DW_AT_language.
1357 If the compilation is from a C file generated by language preprocessors,
1358 do not set the language if it was already deduced by start_subfile. */
1359 if (symtab != NULL
1360 && !(cu_language == language_c && symtab->language != language_c))
1361 {
1362 symtab->language = cu_language;
1363 }
1364 pst->symtab = symtab;
1365 pst->readin = 1;
1366 sort_symtab_syms (pst->symtab);
1367
1368 do_cleanups (back_to);
1369}
1370
1371/* Process a die and its children. */
1372
1373static void
1374process_die (die, objfile)
1375 struct die_info *die;
1376 struct objfile *objfile;
1377{
1378 switch (die->tag)
1379 {
1380 case DW_TAG_padding:
1381 break;
1382 case DW_TAG_compile_unit:
1383 read_file_scope (die, objfile);
1384 break;
1385 case DW_TAG_subprogram:
1386 read_subroutine_type (die, objfile);
1387 read_func_scope (die, objfile);
1388 break;
1389 case DW_TAG_inlined_subroutine:
1390 /* FIXME: These are ignored for now.
c5aa993b
JM
1391 They could be used to set breakpoints on all inlined instances
1392 of a function and make GDB `next' properly over inlined functions. */
c906108c
SS
1393 break;
1394 case DW_TAG_lexical_block:
1395 read_lexical_block_scope (die, objfile);
1396 break;
1397 case DW_TAG_class_type:
1398 case DW_TAG_structure_type:
1399 case DW_TAG_union_type:
1400 read_structure_scope (die, objfile);
1401 break;
1402 case DW_TAG_enumeration_type:
1403 read_enumeration (die, objfile);
1404 break;
1405 case DW_TAG_subroutine_type:
1406 read_subroutine_type (die, objfile);
1407 break;
1408 case DW_TAG_array_type:
1409 read_array_type (die, objfile);
1410 break;
1411 case DW_TAG_pointer_type:
1412 read_tag_pointer_type (die, objfile);
1413 break;
1414 case DW_TAG_ptr_to_member_type:
1415 read_tag_ptr_to_member_type (die, objfile);
1416 break;
1417 case DW_TAG_reference_type:
1418 read_tag_reference_type (die, objfile);
1419 break;
1420 case DW_TAG_string_type:
1421 read_tag_string_type (die, objfile);
1422 break;
1423 case DW_TAG_base_type:
1424 read_base_type (die, objfile);
1425 if (dwarf_attr (die, DW_AT_name))
1426 {
1427 /* Add a typedef symbol for the base type definition. */
1428 new_symbol (die, die->type, objfile);
1429 }
1430 break;
1431 case DW_TAG_common_block:
1432 read_common_block (die, objfile);
1433 break;
1434 case DW_TAG_common_inclusion:
1435 break;
1436 default:
1437 new_symbol (die, NULL, objfile);
1438 break;
1439 }
1440}
1441
1442static void
1443read_file_scope (die, objfile)
1444 struct die_info *die;
1445 struct objfile *objfile;
1446{
1447 unsigned int line_offset = 0;
2acceee2 1448 CORE_ADDR lowpc = ((CORE_ADDR) -1);
c906108c
SS
1449 CORE_ADDR highpc = ((CORE_ADDR) 0);
1450 struct attribute *attr;
1451 char *name = "<unknown>";
1452 char *comp_dir = NULL;
1453 struct die_info *child_die;
1454 bfd *abfd = objfile->obfd;
1455
1456 if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
1457 {
1458 if (die->has_children)
1459 {
1460 child_die = die->next;
1461 while (child_die && child_die->tag)
1462 {
1463 if (child_die->tag == DW_TAG_subprogram)
1464 {
1465 CORE_ADDR low, high;
1466
1467 if (dwarf2_get_pc_bounds (child_die, &low, &high, objfile))
1468 {
1469 lowpc = min (lowpc, low);
1470 highpc = max (highpc, high);
1471 }
1472 }
1473 child_die = sibling_die (child_die);
1474 }
1475 }
1476 }
1477
1478 /* If we didn't find a lowpc, set it to highpc to avoid complaints
1479 from finish_block. */
2acceee2 1480 if (lowpc == ((CORE_ADDR) -1))
c906108c
SS
1481 lowpc = highpc;
1482 lowpc += baseaddr;
1483 highpc += baseaddr;
1484
1485 attr = dwarf_attr (die, DW_AT_name);
1486 if (attr)
1487 {
1488 name = DW_STRING (attr);
1489 }
1490 attr = dwarf_attr (die, DW_AT_comp_dir);
1491 if (attr)
1492 {
1493 comp_dir = DW_STRING (attr);
1494 if (comp_dir)
1495 {
1496 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1497 directory, get rid of it. */
1498 char *cp = strchr (comp_dir, ':');
1499
1500 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1501 comp_dir = cp + 1;
1502 }
1503 }
1504
1505 if (objfile->ei.entry_point >= lowpc &&
1506 objfile->ei.entry_point < highpc)
1507 {
1508 objfile->ei.entry_file_lowpc = lowpc;
1509 objfile->ei.entry_file_highpc = highpc;
1510 }
1511
1512 attr = dwarf_attr (die, DW_AT_language);
1513 if (attr)
1514 {
1515 set_cu_language (DW_UNSND (attr));
1516 }
1517
1518 /* We assume that we're processing GCC output. */
1519 processing_gcc_compilation = 2;
1520#if 0
c5aa993b
JM
1521 /* FIXME:Do something here. */
1522 if (dip->at_producer != NULL)
c906108c
SS
1523 {
1524 handle_producer (dip->at_producer);
1525 }
1526#endif
1527
1528 /* The compilation unit may be in a different language or objfile,
1529 zero out all remembered fundamental types. */
1530 memset (ftypes, 0, FT_NUM_MEMBERS * sizeof (struct type *));
1531
1532 start_symtab (name, comp_dir, lowpc);
1533 record_debugformat ("DWARF 2");
1534
1535 /* Decode line number information if present. */
1536 attr = dwarf_attr (die, DW_AT_stmt_list);
1537 if (attr)
1538 {
1539 line_offset = DW_UNSND (attr);
1540 dwarf_decode_lines (line_offset, comp_dir, abfd);
1541 }
1542
1543 /* Process all dies in compilation unit. */
1544 if (die->has_children)
1545 {
1546 child_die = die->next;
1547 while (child_die && child_die->tag)
1548 {
1549 process_die (child_die, objfile);
1550 child_die = sibling_die (child_die);
1551 }
1552 }
1553}
1554
1555static void
1556read_func_scope (die, objfile)
1557 struct die_info *die;
1558 struct objfile *objfile;
1559{
1560 register struct context_stack *new;
1561 CORE_ADDR lowpc;
1562 CORE_ADDR highpc;
1563 struct die_info *child_die;
1564 struct attribute *attr;
1565 char *name;
1566
1567 name = dwarf2_linkage_name (die);
1568
1569 /* Ignore functions with missing or empty names and functions with
1570 missing or invalid low and high pc attributes. */
1571 if (name == NULL || !dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
1572 return;
1573
1574 lowpc += baseaddr;
1575 highpc += baseaddr;
1576
1577 if (objfile->ei.entry_point >= lowpc &&
1578 objfile->ei.entry_point < highpc)
1579 {
1580 objfile->ei.entry_func_lowpc = lowpc;
1581 objfile->ei.entry_func_highpc = highpc;
1582 }
1583
c906108c
SS
1584 /* Decode DW_AT_frame_base location descriptor if present, keep result
1585 for DW_OP_fbreg operands in decode_locdesc. */
1586 frame_base_reg = -1;
1587 frame_base_offset = 0;
1588 attr = dwarf_attr (die, DW_AT_frame_base);
1589 if (attr)
1590 {
1591 CORE_ADDR addr = decode_locdesc (DW_BLOCK (attr), objfile);
7a292a7a
SS
1592 if (isderef)
1593 complain (&dwarf2_unsupported_at_frame_base, name);
1594 else if (isreg)
c906108c
SS
1595 frame_base_reg = addr;
1596 else if (offreg)
1597 {
1598 frame_base_reg = basereg;
1599 frame_base_offset = addr;
1600 }
1601 else
1602 complain (&dwarf2_unsupported_at_frame_base, name);
1603 }
1604
1605 new = push_context (0, lowpc);
1606 new->name = new_symbol (die, die->type, objfile);
1607 list_in_scope = &local_symbols;
1608
1609 if (die->has_children)
1610 {
1611 child_die = die->next;
1612 while (child_die && child_die->tag)
1613 {
1614 process_die (child_die, objfile);
1615 child_die = sibling_die (child_die);
1616 }
1617 }
1618
1619 new = pop_context ();
1620 /* Make a block for the local symbols within. */
1621 finish_block (new->name, &local_symbols, new->old_blocks,
1622 lowpc, highpc, objfile);
1623 list_in_scope = &file_symbols;
1624}
1625
1626/* Process all the DIES contained within a lexical block scope. Start
1627 a new scope, process the dies, and then close the scope. */
1628
1629static void
1630read_lexical_block_scope (die, objfile)
1631 struct die_info *die;
1632 struct objfile *objfile;
1633{
1634 register struct context_stack *new;
1635 CORE_ADDR lowpc, highpc;
1636 struct die_info *child_die;
1637
1638 /* Ignore blocks with missing or invalid low and high pc attributes. */
1639 if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
1640 return;
1641 lowpc += baseaddr;
1642 highpc += baseaddr;
1643
1644 push_context (0, lowpc);
1645 if (die->has_children)
1646 {
1647 child_die = die->next;
1648 while (child_die && child_die->tag)
1649 {
1650 process_die (child_die, objfile);
1651 child_die = sibling_die (child_die);
1652 }
1653 }
1654 new = pop_context ();
1655
1656 if (local_symbols != NULL)
1657 {
1658 finish_block (0, &local_symbols, new->old_blocks, new->start_addr,
1659 highpc, objfile);
1660 }
1661 local_symbols = new->locals;
1662}
1663
1664/* Get low and high pc attributes from a die.
1665 Return 1 if the attributes are present and valid, otherwise, return 0. */
1666
1667static int
1668dwarf2_get_pc_bounds (die, lowpc, highpc, objfile)
1669 struct die_info *die;
1670 CORE_ADDR *lowpc;
1671 CORE_ADDR *highpc;
1672 struct objfile *objfile;
1673{
1674 struct attribute *attr;
1675 CORE_ADDR low;
1676 CORE_ADDR high;
1677
1678 attr = dwarf_attr (die, DW_AT_low_pc);
1679 if (attr)
1680 low = DW_ADDR (attr);
1681 else
1682 return 0;
1683 attr = dwarf_attr (die, DW_AT_high_pc);
1684 if (attr)
1685 high = DW_ADDR (attr);
1686 else
1687 return 0;
1688
1689 if (high < low)
1690 return 0;
1691
1692 /* When using the GNU linker, .gnu.linkonce. sections are used to
1693 eliminate duplicate copies of functions and vtables and such.
1694 The linker will arbitrarily choose one and discard the others.
1695 The AT_*_pc values for such functions refer to local labels in
1696 these sections. If the section from that file was discarded, the
1697 labels are not in the output, so the relocs get a value of 0.
1698 If this is a discarded function, mark the pc bounds as invalid,
1699 so that GDB will ignore it. */
1700 if (low == 0 && (bfd_get_file_flags (objfile->obfd) & HAS_RELOC) == 0)
1701 return 0;
1702
1703 *lowpc = low;
1704 *highpc = high;
1705 return 1;
1706}
1707
1708/* Add an aggregate field to the field list. */
1709
1710static void
1711dwarf2_add_field (fip, die, objfile)
1712 struct field_info *fip;
1713 struct die_info *die;
1714 struct objfile *objfile;
1715{
1716 struct nextfield *new_field;
1717 struct attribute *attr;
1718 struct field *fp;
1719 char *fieldname = "";
1720
1721 /* Allocate a new field list entry and link it in. */
1722 new_field = (struct nextfield *) xmalloc (sizeof (struct nextfield));
1723 make_cleanup (free, new_field);
1724 memset (new_field, 0, sizeof (struct nextfield));
1725 new_field->next = fip->fields;
1726 fip->fields = new_field;
1727 fip->nfields++;
1728
1729 /* Handle accessibility and virtuality of field.
1730 The default accessibility for members is public, the default
1731 accessibility for inheritance is private. */
1732 if (die->tag != DW_TAG_inheritance)
1733 new_field->accessibility = DW_ACCESS_public;
1734 else
1735 new_field->accessibility = DW_ACCESS_private;
1736 new_field->virtuality = DW_VIRTUALITY_none;
1737
1738 attr = dwarf_attr (die, DW_AT_accessibility);
1739 if (attr)
1740 new_field->accessibility = DW_UNSND (attr);
1741 if (new_field->accessibility != DW_ACCESS_public)
1742 fip->non_public_fields = 1;
1743 attr = dwarf_attr (die, DW_AT_virtuality);
1744 if (attr)
1745 new_field->virtuality = DW_UNSND (attr);
1746
1747 fp = &new_field->field;
1748 if (die->tag == DW_TAG_member)
1749 {
1750 /* Get type of field. */
1751 fp->type = die_type (die, objfile);
1752
1753 /* Get bit size of field (zero if none). */
1754 attr = dwarf_attr (die, DW_AT_bit_size);
1755 if (attr)
1756 {
1757 FIELD_BITSIZE (*fp) = DW_UNSND (attr);
1758 }
1759 else
1760 {
1761 FIELD_BITSIZE (*fp) = 0;
1762 }
1763
1764 /* Get bit offset of field. */
1765 attr = dwarf_attr (die, DW_AT_data_member_location);
1766 if (attr)
1767 {
1768 FIELD_BITPOS (*fp) =
1769 decode_locdesc (DW_BLOCK (attr), objfile) * bits_per_byte;
1770 }
1771 else
1772 FIELD_BITPOS (*fp) = 0;
1773 attr = dwarf_attr (die, DW_AT_bit_offset);
1774 if (attr)
1775 {
1776 if (BITS_BIG_ENDIAN)
1777 {
1778 /* For big endian bits, the DW_AT_bit_offset gives the
c5aa993b
JM
1779 additional bit offset from the MSB of the containing
1780 anonymous object to the MSB of the field. We don't
1781 have to do anything special since we don't need to
1782 know the size of the anonymous object. */
c906108c
SS
1783 FIELD_BITPOS (*fp) += DW_UNSND (attr);
1784 }
1785 else
1786 {
1787 /* For little endian bits, compute the bit offset to the
c5aa993b
JM
1788 MSB of the anonymous object, subtract off the number of
1789 bits from the MSB of the field to the MSB of the
1790 object, and then subtract off the number of bits of
1791 the field itself. The result is the bit offset of
1792 the LSB of the field. */
c906108c
SS
1793 int anonymous_size;
1794 int bit_offset = DW_UNSND (attr);
1795
1796 attr = dwarf_attr (die, DW_AT_byte_size);
1797 if (attr)
1798 {
1799 /* The size of the anonymous object containing
1800 the bit field is explicit, so use the
1801 indicated size (in bytes). */
1802 anonymous_size = DW_UNSND (attr);
1803 }
1804 else
1805 {
1806 /* The size of the anonymous object containing
1807 the bit field must be inferred from the type
1808 attribute of the data member containing the
1809 bit field. */
1810 anonymous_size = TYPE_LENGTH (fp->type);
1811 }
1812 FIELD_BITPOS (*fp) += anonymous_size * bits_per_byte
1813 - bit_offset - FIELD_BITSIZE (*fp);
1814 }
1815 }
1816
1817 /* Get name of field. */
1818 attr = dwarf_attr (die, DW_AT_name);
1819 if (attr && DW_STRING (attr))
1820 fieldname = DW_STRING (attr);
1821 fp->name = obsavestring (fieldname, strlen (fieldname),
1822 &objfile->type_obstack);
1823
1824 /* Change accessibility for artificial fields (e.g. virtual table
c5aa993b 1825 pointer or virtual base class pointer) to private. */
c906108c
SS
1826 if (dwarf_attr (die, DW_AT_artificial))
1827 {
1828 new_field->accessibility = DW_ACCESS_private;
1829 fip->non_public_fields = 1;
1830 }
1831 }
1832 else if (die->tag == DW_TAG_variable)
1833 {
1834 char *physname;
c906108c
SS
1835
1836 /* C++ static member.
2df3850c
JM
1837 Get name of field. */
1838 attr = dwarf_attr (die, DW_AT_name);
1839 if (attr && DW_STRING (attr))
1840 fieldname = DW_STRING (attr);
1841 else
c906108c
SS
1842 return;
1843
2df3850c
JM
1844 /* Get physical name. */
1845 physname = dwarf2_linkage_name (die);
c906108c
SS
1846
1847 SET_FIELD_PHYSNAME (*fp, obsavestring (physname, strlen (physname),
c5aa993b 1848 &objfile->type_obstack));
c906108c
SS
1849 FIELD_TYPE (*fp) = die_type (die, objfile);
1850 FIELD_NAME (*fp) = obsavestring (fieldname, strlen (fieldname),
c5aa993b 1851 &objfile->type_obstack);
c906108c
SS
1852 }
1853 else if (die->tag == DW_TAG_inheritance)
1854 {
1855 /* C++ base class field. */
1856 attr = dwarf_attr (die, DW_AT_data_member_location);
1857 if (attr)
1858 FIELD_BITPOS (*fp) = decode_locdesc (DW_BLOCK (attr), objfile) * bits_per_byte;
1859 FIELD_BITSIZE (*fp) = 0;
1860 FIELD_TYPE (*fp) = die_type (die, objfile);
1861 FIELD_NAME (*fp) = type_name_no_tag (fp->type);
1862 fip->nbaseclasses++;
1863 }
1864}
1865
1866/* Create the vector of fields, and attach it to the type. */
1867
1868static void
1869dwarf2_attach_fields_to_type (fip, type, objfile)
1870 struct field_info *fip;
1871 struct type *type;
1872 struct objfile *objfile;
1873{
1874 int nfields = fip->nfields;
1875
1876 /* Record the field count, allocate space for the array of fields,
1877 and create blank accessibility bitfields if necessary. */
1878 TYPE_NFIELDS (type) = nfields;
1879 TYPE_FIELDS (type) = (struct field *)
1880 TYPE_ALLOC (type, sizeof (struct field) * nfields);
1881 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
1882
1883 if (fip->non_public_fields)
1884 {
1885 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1886
1887 TYPE_FIELD_PRIVATE_BITS (type) =
1888 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1889 B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
1890
1891 TYPE_FIELD_PROTECTED_BITS (type) =
1892 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1893 B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
1894
1895 TYPE_FIELD_IGNORE_BITS (type) =
1896 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1897 B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
1898 }
1899
1900 /* If the type has baseclasses, allocate and clear a bit vector for
1901 TYPE_FIELD_VIRTUAL_BITS. */
1902 if (fip->nbaseclasses)
1903 {
1904 int num_bytes = B_BYTES (fip->nbaseclasses);
1905 char *pointer;
1906
1907 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1908 pointer = (char *) TYPE_ALLOC (type, num_bytes);
1909 TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) pointer;
1910 B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), fip->nbaseclasses);
1911 TYPE_N_BASECLASSES (type) = fip->nbaseclasses;
1912 }
1913
1914 /* Copy the saved-up fields into the field vector. Start from the head
1915 of the list, adding to the tail of the field array, so that they end
1916 up in the same order in the array in which they were added to the list. */
1917 while (nfields-- > 0)
1918 {
1919 TYPE_FIELD (type, nfields) = fip->fields->field;
1920 switch (fip->fields->accessibility)
1921 {
c5aa993b
JM
1922 case DW_ACCESS_private:
1923 SET_TYPE_FIELD_PRIVATE (type, nfields);
1924 break;
c906108c 1925
c5aa993b
JM
1926 case DW_ACCESS_protected:
1927 SET_TYPE_FIELD_PROTECTED (type, nfields);
1928 break;
c906108c 1929
c5aa993b
JM
1930 case DW_ACCESS_public:
1931 break;
c906108c 1932
c5aa993b
JM
1933 default:
1934 /* Unknown accessibility. Complain and treat it as public. */
1935 {
1936 complain (&dwarf2_unsupported_accessibility,
1937 fip->fields->accessibility);
1938 }
1939 break;
c906108c
SS
1940 }
1941 if (nfields < fip->nbaseclasses)
1942 {
1943 switch (fip->fields->virtuality)
1944 {
c5aa993b
JM
1945 case DW_VIRTUALITY_virtual:
1946 case DW_VIRTUALITY_pure_virtual:
1947 SET_TYPE_FIELD_VIRTUAL (type, nfields);
1948 break;
c906108c
SS
1949 }
1950 }
1951 fip->fields = fip->fields->next;
1952 }
1953}
1954
c906108c
SS
1955/* Add a member function to the proper fieldlist. */
1956
1957static void
1958dwarf2_add_member_fn (fip, die, type, objfile)
1959 struct field_info *fip;
1960 struct die_info *die;
1961 struct type *type;
1962 struct objfile *objfile;
1963{
1964 struct attribute *attr;
1965 struct fnfieldlist *flp;
1966 int i;
1967 struct fn_field *fnp;
1968 char *fieldname;
1969 char *physname;
1970 struct nextfnfield *new_fnfield;
1971
2df3850c
JM
1972 /* Get name of member function. */
1973 attr = dwarf_attr (die, DW_AT_name);
1974 if (attr && DW_STRING (attr))
1975 fieldname = DW_STRING (attr);
c906108c 1976 else
2df3850c 1977 return;
c906108c 1978
2df3850c
JM
1979 /* Get the mangled name. */
1980 physname = dwarf2_linkage_name (die);
c906108c
SS
1981
1982 /* Look up member function name in fieldlist. */
1983 for (i = 0; i < fip->nfnfields; i++)
1984 {
1985 if (STREQ (fip->fnfieldlists[i].name, fieldname))
1986 break;
1987 }
1988
1989 /* Create new list element if necessary. */
1990 if (i < fip->nfnfields)
1991 flp = &fip->fnfieldlists[i];
1992 else
1993 {
1994 if ((fip->nfnfields % DW_FIELD_ALLOC_CHUNK) == 0)
1995 {
1996 fip->fnfieldlists = (struct fnfieldlist *)
1997 xrealloc (fip->fnfieldlists,
1998 (fip->nfnfields + DW_FIELD_ALLOC_CHUNK)
c5aa993b 1999 * sizeof (struct fnfieldlist));
c906108c 2000 if (fip->nfnfields == 0)
c13c43fd 2001 make_cleanup (free_current_contents, &fip->fnfieldlists);
c906108c
SS
2002 }
2003 flp = &fip->fnfieldlists[fip->nfnfields];
2004 flp->name = fieldname;
2005 flp->length = 0;
2006 flp->head = NULL;
2007 fip->nfnfields++;
2008 }
2009
2010 /* Create a new member function field and chain it to the field list
2011 entry. */
2012 new_fnfield = (struct nextfnfield *) xmalloc (sizeof (struct nextfnfield));
2013 make_cleanup (free, new_fnfield);
2014 memset (new_fnfield, 0, sizeof (struct nextfnfield));
2015 new_fnfield->next = flp->head;
2016 flp->head = new_fnfield;
2017 flp->length++;
2018
2019 /* Fill in the member function field info. */
2020 fnp = &new_fnfield->fnfield;
2021 fnp->physname = obsavestring (physname, strlen (physname),
2022 &objfile->type_obstack);
2023 fnp->type = alloc_type (objfile);
2024 if (die->type && TYPE_CODE (die->type) == TYPE_CODE_FUNC)
2025 {
2026 struct type *return_type = TYPE_TARGET_TYPE (die->type);
2027 struct type **arg_types;
2028 int nparams = TYPE_NFIELDS (die->type);
2029 int iparams;
2030
2031 /* Copy argument types from the subroutine type. */
2032 arg_types = (struct type **)
2033 TYPE_ALLOC (fnp->type, (nparams + 1) * sizeof (struct type *));
2034 for (iparams = 0; iparams < nparams; iparams++)
2035 arg_types[iparams] = TYPE_FIELD_TYPE (die->type, iparams);
2036
2037 /* Set last entry in argument type vector. */
2038 if (TYPE_FLAGS (die->type) & TYPE_FLAG_VARARGS)
2039 arg_types[nparams] = NULL;
2040 else
2041 arg_types[nparams] = dwarf2_fundamental_type (objfile, FT_VOID);
2042
2043 smash_to_method_type (fnp->type, type, return_type, arg_types);
2044
2045 /* Handle static member functions.
c5aa993b
JM
2046 Dwarf2 has no clean way to discern C++ static and non-static
2047 member functions. G++ helps GDB by marking the first
2048 parameter for non-static member functions (which is the
2049 this pointer) as artificial. We obtain this information
2050 from read_subroutine_type via TYPE_FIELD_ARTIFICIAL. */
c906108c
SS
2051 if (nparams == 0 || TYPE_FIELD_ARTIFICIAL (die->type, 0) == 0)
2052 fnp->voffset = VOFFSET_STATIC;
2053 }
2054 else
2055 complain (&dwarf2_missing_member_fn_type_complaint, physname);
2056
2057 /* Get fcontext from DW_AT_containing_type if present. */
2058 if (dwarf_attr (die, DW_AT_containing_type) != NULL)
2059 fnp->fcontext = die_containing_type (die, objfile);
2060
2061 /* dwarf2 doesn't have stubbed physical names, so the setting of is_const
2062 and is_volatile is irrelevant, as it is needed by gdb_mangle_name only. */
2063
2064 /* Get accessibility. */
2065 attr = dwarf_attr (die, DW_AT_accessibility);
2066 if (attr)
2067 {
2068 switch (DW_UNSND (attr))
2069 {
c5aa993b
JM
2070 case DW_ACCESS_private:
2071 fnp->is_private = 1;
2072 break;
2073 case DW_ACCESS_protected:
2074 fnp->is_protected = 1;
2075 break;
c906108c
SS
2076 }
2077 }
2078
2079 /* Get index in virtual function table if it is a virtual member function. */
2080 attr = dwarf_attr (die, DW_AT_vtable_elem_location);
2081 if (attr)
2082 fnp->voffset = decode_locdesc (DW_BLOCK (attr), objfile) + 2;
2083}
2084
2085/* Create the vector of member function fields, and attach it to the type. */
2086
2087static void
2088dwarf2_attach_fn_fields_to_type (fip, type, objfile)
2089 struct field_info *fip;
2090 struct type *type;
2091 struct objfile *objfile;
2092{
2093 struct fnfieldlist *flp;
2094 int total_length = 0;
2095 int i;
2096
2097 ALLOCATE_CPLUS_STRUCT_TYPE (type);
2098 TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
2099 TYPE_ALLOC (type, sizeof (struct fn_fieldlist) * fip->nfnfields);
2100
2101 for (i = 0, flp = fip->fnfieldlists; i < fip->nfnfields; i++, flp++)
2102 {
2103 struct nextfnfield *nfp = flp->head;
2104 struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i);
2105 int k;
2106
2107 TYPE_FN_FIELDLIST_NAME (type, i) = flp->name;
2108 TYPE_FN_FIELDLIST_LENGTH (type, i) = flp->length;
2109 fn_flp->fn_fields = (struct fn_field *)
2110 TYPE_ALLOC (type, sizeof (struct fn_field) * flp->length);
2111 for (k = flp->length; (k--, nfp); nfp = nfp->next)
c5aa993b 2112 fn_flp->fn_fields[k] = nfp->fnfield;
c906108c
SS
2113
2114 total_length += flp->length;
2115 }
2116
2117 TYPE_NFN_FIELDS (type) = fip->nfnfields;
2118 TYPE_NFN_FIELDS_TOTAL (type) = total_length;
2119}
2120
2121/* Called when we find the DIE that starts a structure or union scope
2122 (definition) to process all dies that define the members of the
2123 structure or union.
2124
2125 NOTE: we need to call struct_type regardless of whether or not the
2126 DIE has an at_name attribute, since it might be an anonymous
2127 structure or union. This gets the type entered into our set of
2128 user defined types.
2129
2130 However, if the structure is incomplete (an opaque struct/union)
2131 then suppress creating a symbol table entry for it since gdb only
2132 wants to find the one with the complete definition. Note that if
2133 it is complete, we just call new_symbol, which does it's own
2134 checking about whether the struct/union is anonymous or not (and
2135 suppresses creating a symbol table entry itself). */
2136
2137static void
2138read_structure_scope (die, objfile)
2139 struct die_info *die;
2140 struct objfile *objfile;
2141{
2142 struct type *type;
2143 struct attribute *attr;
2144
2145 type = alloc_type (objfile);
2146
2147 INIT_CPLUS_SPECIFIC (type);
2148 attr = dwarf_attr (die, DW_AT_name);
2149 if (attr && DW_STRING (attr))
2150 {
2151 TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
2152 strlen (DW_STRING (attr)),
2153 &objfile->type_obstack);
2154 }
2155
2156 if (die->tag == DW_TAG_structure_type)
2157 {
2158 TYPE_CODE (type) = TYPE_CODE_STRUCT;
2159 }
2160 else if (die->tag == DW_TAG_union_type)
2161 {
2162 TYPE_CODE (type) = TYPE_CODE_UNION;
2163 }
2164 else
2165 {
2166 /* FIXME: TYPE_CODE_CLASS is currently defined to TYPE_CODE_STRUCT
c5aa993b 2167 in gdbtypes.h. */
c906108c
SS
2168 TYPE_CODE (type) = TYPE_CODE_CLASS;
2169 }
2170
2171 attr = dwarf_attr (die, DW_AT_byte_size);
2172 if (attr)
2173 {
2174 TYPE_LENGTH (type) = DW_UNSND (attr);
2175 }
2176 else
2177 {
2178 TYPE_LENGTH (type) = 0;
2179 }
2180
2181 /* We need to add the type field to the die immediately so we don't
2182 infinitely recurse when dealing with pointers to the structure
2183 type within the structure itself. */
2184 die->type = type;
2185
3ca72b44 2186 if (die->has_children && ! die_is_declaration (die))
c906108c
SS
2187 {
2188 struct field_info fi;
2189 struct die_info *child_die;
2190 struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
2191
2192 memset (&fi, 0, sizeof (struct field_info));
2193
2194 child_die = die->next;
2195
2196 while (child_die && child_die->tag)
2197 {
2198 if (child_die->tag == DW_TAG_member)
2199 {
2200 dwarf2_add_field (&fi, child_die, objfile);
2201 }
2202 else if (child_die->tag == DW_TAG_variable)
2203 {
2204 /* C++ static member. */
2205 dwarf2_add_field (&fi, child_die, objfile);
2206 }
2207 else if (child_die->tag == DW_TAG_subprogram)
2208 {
2209 /* C++ member function. */
2210 process_die (child_die, objfile);
2211 dwarf2_add_member_fn (&fi, child_die, type, objfile);
2212 }
2213 else if (child_die->tag == DW_TAG_inheritance)
2214 {
2215 /* C++ base class field. */
2216 dwarf2_add_field (&fi, child_die, objfile);
2217 }
2218 else
2219 {
2220 process_die (child_die, objfile);
2221 }
2222 child_die = sibling_die (child_die);
2223 }
2224
2225 /* Attach fields and member functions to the type. */
2226 if (fi.nfields)
2227 dwarf2_attach_fields_to_type (&fi, type, objfile);
2228 if (fi.nfnfields)
2229 {
2230 dwarf2_attach_fn_fields_to_type (&fi, type, objfile);
2231
c5aa993b 2232 /* Get the type which refers to the base class (possibly this
c906108c
SS
2233 class itself) which contains the vtable pointer for the current
2234 class from the DW_AT_containing_type attribute. */
2235
2236 if (dwarf_attr (die, DW_AT_containing_type) != NULL)
2237 {
2238 struct type *t = die_containing_type (die, objfile);
2239
2240 TYPE_VPTR_BASETYPE (type) = t;
2241 if (type == t)
2242 {
c5aa993b
JM
2243 static const char vptr_name[] =
2244 {'_', 'v', 'p', 't', 'r', '\0'};
c906108c
SS
2245 int i;
2246
2247 /* Our own class provides vtbl ptr. */
2248 for (i = TYPE_NFIELDS (t) - 1;
2249 i >= TYPE_N_BASECLASSES (t);
2250 --i)
2251 {
2252 char *fieldname = TYPE_FIELD_NAME (t, i);
2253
2254 if (STREQN (fieldname, vptr_name, strlen (vptr_name) - 1)
2255 && is_cplus_marker (fieldname[strlen (vptr_name)]))
2256 {
2257 TYPE_VPTR_FIELDNO (type) = i;
2258 break;
2259 }
2260 }
2261
2262 /* Complain if virtual function table field not found. */
2263 if (i < TYPE_N_BASECLASSES (t))
2264 complain (&dwarf2_vtbl_not_found_complaint,
c5aa993b 2265 TYPE_TAG_NAME (type) ? TYPE_TAG_NAME (type) : "");
c906108c
SS
2266 }
2267 else
2268 {
2269 TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t);
2270 }
2271 }
2272 }
2273
2274 new_symbol (die, type, objfile);
2275
2276 do_cleanups (back_to);
2277 }
2278 else
2279 {
2280 /* No children, must be stub. */
2281 TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
2282 }
2283
2284 die->type = type;
2285}
2286
2287/* Given a pointer to a die which begins an enumeration, process all
2288 the dies that define the members of the enumeration.
2289
2290 This will be much nicer in draft 6 of the DWARF spec when our
2291 members will be dies instead squished into the DW_AT_element_list
2292 attribute.
2293
2294 NOTE: We reverse the order of the element list. */
2295
2296static void
2297read_enumeration (die, objfile)
2298 struct die_info *die;
2299 struct objfile *objfile;
2300{
2301 struct die_info *child_die;
2302 struct type *type;
2303 struct field *fields;
2304 struct attribute *attr;
2305 struct symbol *sym;
2306 int num_fields;
2307 int unsigned_enum = 1;
2308
2309 type = alloc_type (objfile);
2310
2311 TYPE_CODE (type) = TYPE_CODE_ENUM;
2312 attr = dwarf_attr (die, DW_AT_name);
2313 if (attr && DW_STRING (attr))
2314 {
2315 TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
2316 strlen (DW_STRING (attr)),
2317 &objfile->type_obstack);
2318 }
2319
2320 attr = dwarf_attr (die, DW_AT_byte_size);
2321 if (attr)
2322 {
2323 TYPE_LENGTH (type) = DW_UNSND (attr);
2324 }
2325 else
2326 {
2327 TYPE_LENGTH (type) = 0;
2328 }
2329
2330 num_fields = 0;
2331 fields = NULL;
2332 if (die->has_children)
2333 {
2334 child_die = die->next;
2335 while (child_die && child_die->tag)
2336 {
2337 if (child_die->tag != DW_TAG_enumerator)
2338 {
2339 process_die (child_die, objfile);
2340 }
2341 else
2342 {
2343 attr = dwarf_attr (child_die, DW_AT_name);
2344 if (attr)
2345 {
2346 sym = new_symbol (child_die, type, objfile);
2347 if (SYMBOL_VALUE (sym) < 0)
2348 unsigned_enum = 0;
2349
2350 if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
2351 {
2352 fields = (struct field *)
2353 xrealloc (fields,
2354 (num_fields + DW_FIELD_ALLOC_CHUNK)
c5aa993b 2355 * sizeof (struct field));
c906108c
SS
2356 }
2357
2358 FIELD_NAME (fields[num_fields]) = SYMBOL_NAME (sym);
2359 FIELD_TYPE (fields[num_fields]) = NULL;
2360 FIELD_BITPOS (fields[num_fields]) = SYMBOL_VALUE (sym);
2361 FIELD_BITSIZE (fields[num_fields]) = 0;
2362
2363 num_fields++;
2364 }
2365 }
2366
2367 child_die = sibling_die (child_die);
2368 }
2369
2370 if (num_fields)
2371 {
2372 TYPE_NFIELDS (type) = num_fields;
2373 TYPE_FIELDS (type) = (struct field *)
2374 TYPE_ALLOC (type, sizeof (struct field) * num_fields);
2375 memcpy (TYPE_FIELDS (type), fields,
2376 sizeof (struct field) * num_fields);
2377 free (fields);
2378 }
2379 if (unsigned_enum)
2380 TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
2381 }
2382 die->type = type;
2383 new_symbol (die, type, objfile);
2384}
2385
2386/* Extract all information from a DW_TAG_array_type DIE and put it in
2387 the DIE's type field. For now, this only handles one dimensional
2388 arrays. */
2389
2390static void
2391read_array_type (die, objfile)
2392 struct die_info *die;
2393 struct objfile *objfile;
2394{
2395 struct die_info *child_die;
2396 struct type *type = NULL;
2397 struct type *element_type, *range_type, *index_type;
2398 struct type **range_types = NULL;
2399 struct attribute *attr;
2400 int ndim = 0;
2401 struct cleanup *back_to;
2402
2403 /* Return if we've already decoded this type. */
2404 if (die->type)
2405 {
2406 return;
2407 }
2408
2409 element_type = die_type (die, objfile);
2410
2411 /* Irix 6.2 native cc creates array types without children for
2412 arrays with unspecified length. */
2413 if (die->has_children == 0)
2414 {
2415 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
2416 range_type = create_range_type (NULL, index_type, 0, -1);
2417 die->type = create_array_type (NULL, element_type, range_type);
2418 return;
2419 }
2420
2421 back_to = make_cleanup (null_cleanup, NULL);
2422 child_die = die->next;
2423 while (child_die && child_die->tag)
2424 {
2425 if (child_die->tag == DW_TAG_subrange_type)
2426 {
2427 unsigned int low, high;
2428
2429 /* Default bounds to an array with unspecified length. */
2430 low = 0;
2431 high = -1;
2432 if (cu_language == language_fortran)
2433 {
2434 /* FORTRAN implies a lower bound of 1, if not given. */
2435 low = 1;
2436 }
2437
2438 index_type = die_type (child_die, objfile);
2439 attr = dwarf_attr (child_die, DW_AT_lower_bound);
2440 if (attr)
2441 {
2442 if (attr->form == DW_FORM_sdata)
2443 {
2444 low = DW_SND (attr);
2445 }
2446 else if (attr->form == DW_FORM_udata
c5aa993b
JM
2447 || attr->form == DW_FORM_data1
2448 || attr->form == DW_FORM_data2
2449 || attr->form == DW_FORM_data4)
c906108c
SS
2450 {
2451 low = DW_UNSND (attr);
2452 }
2453 else
2454 {
2455 complain (&dwarf2_non_const_array_bound_ignored,
2456 dwarf_form_name (attr->form));
2457#ifdef FORTRAN_HACK
2458 die->type = lookup_pointer_type (element_type);
2459 return;
2460#else
2461 low = 0;
2462#endif
2463 }
2464 }
2465 attr = dwarf_attr (child_die, DW_AT_upper_bound);
2466 if (attr)
2467 {
2468 if (attr->form == DW_FORM_sdata)
2469 {
2470 high = DW_SND (attr);
2471 }
2472 else if (attr->form == DW_FORM_udata
c5aa993b
JM
2473 || attr->form == DW_FORM_data1
2474 || attr->form == DW_FORM_data2
2475 || attr->form == DW_FORM_data4)
c906108c
SS
2476 {
2477 high = DW_UNSND (attr);
2478 }
2479 else if (attr->form == DW_FORM_block1)
2480 {
2481 /* GCC encodes arrays with unspecified or dynamic length
2482 with a DW_FORM_block1 attribute.
2483 FIXME: GDB does not yet know how to handle dynamic
2484 arrays properly, treat them as arrays with unspecified
2485 length for now. */
2486 high = -1;
2487 }
2488 else
2489 {
2490 complain (&dwarf2_non_const_array_bound_ignored,
2491 dwarf_form_name (attr->form));
2492#ifdef FORTRAN_HACK
2493 die->type = lookup_pointer_type (element_type);
2494 return;
2495#else
2496 high = 1;
2497#endif
2498 }
2499 }
2500
2501 /* Create a range type and save it for array type creation. */
2502 if ((ndim % DW_FIELD_ALLOC_CHUNK) == 0)
2503 {
2504 range_types = (struct type **)
2505 xrealloc (range_types, (ndim + DW_FIELD_ALLOC_CHUNK)
c5aa993b 2506 * sizeof (struct type *));
c906108c 2507 if (ndim == 0)
c13c43fd 2508 make_cleanup (free_current_contents, &range_types);
c906108c
SS
2509 }
2510 range_types[ndim++] = create_range_type (NULL, index_type, low, high);
2511 }
2512 child_die = sibling_die (child_die);
2513 }
2514
2515 /* Dwarf2 dimensions are output from left to right, create the
2516 necessary array types in backwards order. */
2517 type = element_type;
2518 while (ndim-- > 0)
2519 type = create_array_type (NULL, type, range_types[ndim]);
2520
2521 do_cleanups (back_to);
2522
2523 /* Install the type in the die. */
2524 die->type = type;
2525}
2526
2527/* First cut: install each common block member as a global variable. */
2528
2529static void
2530read_common_block (die, objfile)
2531 struct die_info *die;
2532 struct objfile *objfile;
2533{
2534 struct die_info *child_die;
2535 struct attribute *attr;
2536 struct symbol *sym;
2537 CORE_ADDR base = (CORE_ADDR) 0;
2538
2539 attr = dwarf_attr (die, DW_AT_location);
2540 if (attr)
2541 {
2542 base = decode_locdesc (DW_BLOCK (attr), objfile);
2543 }
2544 if (die->has_children)
2545 {
2546 child_die = die->next;
2547 while (child_die && child_die->tag)
2548 {
2549 sym = new_symbol (child_die, NULL, objfile);
2550 attr = dwarf_attr (child_die, DW_AT_data_member_location);
2551 if (attr)
2552 {
2553 SYMBOL_VALUE_ADDRESS (sym) =
2554 base + decode_locdesc (DW_BLOCK (attr), objfile);
2555 add_symbol_to_list (sym, &global_symbols);
2556 }
2557 child_die = sibling_die (child_die);
2558 }
2559 }
2560}
2561
2562/* Extract all information from a DW_TAG_pointer_type DIE and add to
2563 the user defined type vector. */
2564
2565static void
2566read_tag_pointer_type (die, objfile)
2567 struct die_info *die;
2568 struct objfile *objfile;
2569{
2570 struct type *type;
2571 struct attribute *attr;
2572
2573 if (die->type)
2574 {
2575 return;
2576 }
2577
2578 type = lookup_pointer_type (die_type (die, objfile));
2579 attr = dwarf_attr (die, DW_AT_byte_size);
2580 if (attr)
2581 {
2582 TYPE_LENGTH (type) = DW_UNSND (attr);
2583 }
2584 else
2585 {
2586 TYPE_LENGTH (type) = address_size;
2587 }
2588 die->type = type;
2589}
2590
2591/* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to
2592 the user defined type vector. */
2593
2594static void
2595read_tag_ptr_to_member_type (die, objfile)
2596 struct die_info *die;
2597 struct objfile *objfile;
2598{
2599 struct type *type;
2600 struct type *to_type;
2601 struct type *domain;
2602
2603 if (die->type)
2604 {
2605 return;
2606 }
2607
2608 type = alloc_type (objfile);
2609 to_type = die_type (die, objfile);
2610 domain = die_containing_type (die, objfile);
2611 smash_to_member_type (type, domain, to_type);
2612
2613 die->type = type;
2614}
2615
2616/* Extract all information from a DW_TAG_reference_type DIE and add to
2617 the user defined type vector. */
2618
2619static void
2620read_tag_reference_type (die, objfile)
2621 struct die_info *die;
2622 struct objfile *objfile;
2623{
2624 struct type *type;
2625 struct attribute *attr;
2626
2627 if (die->type)
2628 {
2629 return;
2630 }
2631
2632 type = lookup_reference_type (die_type (die, objfile));
2633 attr = dwarf_attr (die, DW_AT_byte_size);
2634 if (attr)
2635 {
2636 TYPE_LENGTH (type) = DW_UNSND (attr);
2637 }
2638 else
2639 {
2640 TYPE_LENGTH (type) = address_size;
2641 }
2642 die->type = type;
2643}
2644
2645static void
2646read_tag_const_type (die, objfile)
2647 struct die_info *die;
2648 struct objfile *objfile;
2649{
2650 if (die->type)
2651 {
2652 return;
2653 }
2654
2655 complain (&dwarf2_const_ignored);
2656 die->type = die_type (die, objfile);
2657}
2658
2659static void
2660read_tag_volatile_type (die, objfile)
2661 struct die_info *die;
2662 struct objfile *objfile;
2663{
2664 if (die->type)
2665 {
2666 return;
2667 }
2668
2669 complain (&dwarf2_volatile_ignored);
2670 die->type = die_type (die, objfile);
2671}
2672
2673/* Extract all information from a DW_TAG_string_type DIE and add to
2674 the user defined type vector. It isn't really a user defined type,
2675 but it behaves like one, with other DIE's using an AT_user_def_type
2676 attribute to reference it. */
2677
2678static void
2679read_tag_string_type (die, objfile)
2680 struct die_info *die;
2681 struct objfile *objfile;
2682{
2683 struct type *type, *range_type, *index_type, *char_type;
2684 struct attribute *attr;
2685 unsigned int length;
2686
2687 if (die->type)
2688 {
2689 return;
2690 }
2691
2692 attr = dwarf_attr (die, DW_AT_string_length);
2693 if (attr)
2694 {
2695 length = DW_UNSND (attr);
2696 }
2697 else
2698 {
2699 length = 1;
2700 }
2701 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
2702 range_type = create_range_type (NULL, index_type, 1, length);
2703 char_type = dwarf2_fundamental_type (objfile, FT_CHAR);
2704 type = create_string_type (char_type, range_type);
2705 die->type = type;
2706}
2707
2708/* Handle DIES due to C code like:
2709
2710 struct foo
c5aa993b
JM
2711 {
2712 int (*funcp)(int a, long l);
2713 int b;
2714 };
c906108c
SS
2715
2716 ('funcp' generates a DW_TAG_subroutine_type DIE)
c5aa993b 2717 */
c906108c
SS
2718
2719static void
2720read_subroutine_type (die, objfile)
2721 struct die_info *die;
2722 struct objfile *objfile;
2723{
2724 struct type *type; /* Type that this function returns */
2725 struct type *ftype; /* Function that returns above type */
2726 struct attribute *attr;
2727
2728 /* Decode the type that this subroutine returns */
2729 if (die->type)
2730 {
2731 return;
2732 }
2733 type = die_type (die, objfile);
2734 ftype = lookup_function_type (type);
2735
2736 /* All functions in C++ have prototypes. */
2737 attr = dwarf_attr (die, DW_AT_prototyped);
2738 if ((attr && (DW_UNSND (attr) != 0))
2739 || cu_language == language_cplus)
2740 TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED;
2741
2742 if (die->has_children)
2743 {
2744 struct die_info *child_die;
2745 int nparams = 0;
2746 int iparams = 0;
2747
2748 /* Count the number of parameters.
2749 FIXME: GDB currently ignores vararg functions, but knows about
2750 vararg member functions. */
2751 child_die = die->next;
2752 while (child_die && child_die->tag)
2753 {
2754 if (child_die->tag == DW_TAG_formal_parameter)
2755 nparams++;
2756 else if (child_die->tag == DW_TAG_unspecified_parameters)
2757 TYPE_FLAGS (ftype) |= TYPE_FLAG_VARARGS;
2758 child_die = sibling_die (child_die);
2759 }
2760
2761 /* Allocate storage for parameters and fill them in. */
2762 TYPE_NFIELDS (ftype) = nparams;
2763 TYPE_FIELDS (ftype) = (struct field *)
2764 TYPE_ALLOC (ftype, nparams * sizeof (struct field));
2765
2766 child_die = die->next;
2767 while (child_die && child_die->tag)
2768 {
2769 if (child_die->tag == DW_TAG_formal_parameter)
2770 {
2771 /* Dwarf2 has no clean way to discern C++ static and non-static
c5aa993b
JM
2772 member functions. G++ helps GDB by marking the first
2773 parameter for non-static member functions (which is the
2774 this pointer) as artificial. We pass this information
2775 to dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL. */
c906108c
SS
2776 attr = dwarf_attr (child_die, DW_AT_artificial);
2777 if (attr)
2778 TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr);
2779 else
2780 TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
2781 TYPE_FIELD_TYPE (ftype, iparams) = die_type (child_die, objfile);
2782 iparams++;
2783 }
2784 child_die = sibling_die (child_die);
2785 }
2786 }
2787
2788 die->type = ftype;
2789}
2790
2791static void
2792read_typedef (die, objfile)
2793 struct die_info *die;
2794 struct objfile *objfile;
2795{
2796 struct type *type;
2797
2798 if (!die->type)
2799 {
2800 struct attribute *attr;
2801 struct type *xtype;
2802
2803 xtype = die_type (die, objfile);
2804
2805 type = alloc_type (objfile);
2806 TYPE_CODE (type) = TYPE_CODE_TYPEDEF;
2807 TYPE_FLAGS (type) |= TYPE_FLAG_TARGET_STUB;
2808 TYPE_TARGET_TYPE (type) = xtype;
2809 attr = dwarf_attr (die, DW_AT_name);
2810 if (attr && DW_STRING (attr))
2811 TYPE_NAME (type) = obsavestring (DW_STRING (attr),
2812 strlen (DW_STRING (attr)),
2813 &objfile->type_obstack);
2814
2815 die->type = type;
2816 }
2817}
2818
2819/* Find a representation of a given base type and install
2820 it in the TYPE field of the die. */
2821
2822static void
2823read_base_type (die, objfile)
2824 struct die_info *die;
2825 struct objfile *objfile;
2826{
2827 struct type *type;
2828 struct attribute *attr;
2829 int encoding = 0, size = 0;
2830
2831 /* If we've already decoded this die, this is a no-op. */
2832 if (die->type)
2833 {
2834 return;
2835 }
2836
2837 attr = dwarf_attr (die, DW_AT_encoding);
2838 if (attr)
2839 {
2840 encoding = DW_UNSND (attr);
2841 }
2842 attr = dwarf_attr (die, DW_AT_byte_size);
2843 if (attr)
2844 {
2845 size = DW_UNSND (attr);
2846 }
2847 attr = dwarf_attr (die, DW_AT_name);
2848 if (attr && DW_STRING (attr))
2849 {
2850 enum type_code code = TYPE_CODE_INT;
2851 int is_unsigned = 0;
2852
2853 switch (encoding)
2854 {
2855 case DW_ATE_address:
2856 /* Turn DW_ATE_address into a void * pointer. */
2857 code = TYPE_CODE_PTR;
2858 is_unsigned = 1;
2859 break;
2860 case DW_ATE_boolean:
2861 code = TYPE_CODE_BOOL;
2862 is_unsigned = 1;
2863 break;
2864 case DW_ATE_complex_float:
2865 code = TYPE_CODE_COMPLEX;
2866 break;
2867 case DW_ATE_float:
2868 code = TYPE_CODE_FLT;
2869 break;
2870 case DW_ATE_signed:
2871 case DW_ATE_signed_char:
2872 break;
2873 case DW_ATE_unsigned:
2874 case DW_ATE_unsigned_char:
2875 is_unsigned = 1;
2876 break;
2877 default:
2878 complain (&dwarf2_unsupported_at_encoding,
2879 dwarf_type_encoding_name (encoding));
2880 break;
2881 }
2882 type = init_type (code, size, is_unsigned, DW_STRING (attr), objfile);
2883 if (encoding == DW_ATE_address)
2884 TYPE_TARGET_TYPE (type) = dwarf2_fundamental_type (objfile, FT_VOID);
2885 }
2886 else
2887 {
2888 type = dwarf_base_type (encoding, size, objfile);
2889 }
2890 die->type = type;
2891}
2892
2893/* Read a whole compilation unit into a linked list of dies. */
2894
2895struct die_info *
2896read_comp_unit (info_ptr, abfd)
c5aa993b
JM
2897 char *info_ptr;
2898 bfd *abfd;
c906108c
SS
2899{
2900 struct die_info *first_die, *last_die, *die;
2901 char *cur_ptr;
2902 int nesting_level;
2903
2904 /* Reset die reference table, we are building a new one now. */
2905 dwarf2_empty_die_ref_table ();
2906
2907 cur_ptr = info_ptr;
2908 nesting_level = 0;
2909 first_die = last_die = NULL;
2910 do
2911 {
2912 cur_ptr = read_full_die (&die, abfd, cur_ptr);
2913 if (die->has_children)
2914 {
2915 nesting_level++;
2916 }
2917 if (die->tag == 0)
2918 {
2919 nesting_level--;
2920 }
2921
2922 die->next = NULL;
2923
2924 /* Enter die in reference hash table */
2925 store_in_ref_table (die->offset, die);
2926
2927 if (!first_die)
2928 {
2929 first_die = last_die = die;
2930 }
2931 else
2932 {
2933 last_die->next = die;
2934 last_die = die;
2935 }
2936 }
2937 while (nesting_level > 0);
2938 return first_die;
2939}
2940
2941/* Free a linked list of dies. */
2942
2943static void
2944free_die_list (dies)
2945 struct die_info *dies;
2946{
2947 struct die_info *die, *next;
2948
2949 die = dies;
2950 while (die)
2951 {
2952 next = die->next;
2953 free (die->attrs);
2954 free (die);
2955 die = next;
2956 }
2957}
2958
2959/* Read the contents of the section at OFFSET and of size SIZE from the
2960 object file specified by OBJFILE into the psymbol_obstack and return it. */
2961
2962static char *
2963dwarf2_read_section (objfile, offset, size)
2964 struct objfile *objfile;
2965 file_ptr offset;
2966 unsigned int size;
2967{
2968 bfd *abfd = objfile->obfd;
2969 char *buf;
2970
2971 if (size == 0)
2972 return NULL;
2973
2974 buf = (char *) obstack_alloc (&objfile->psymbol_obstack, size);
2975 if ((bfd_seek (abfd, offset, SEEK_SET) != 0) ||
2976 (bfd_read (buf, size, 1, abfd) != size))
2977 {
2978 buf = NULL;
2979 error ("Dwarf Error: Can't read DWARF data from '%s'",
c5aa993b 2980 bfd_get_filename (abfd));
c906108c
SS
2981 }
2982 return buf;
2983}
2984
2985/* In DWARF version 2, the description of the debugging information is
2986 stored in a separate .debug_abbrev section. Before we read any
2987 dies from a section we read in all abbreviations and install them
2988 in a hash table. */
2989
2990static void
2991dwarf2_read_abbrevs (abfd, offset)
c5aa993b 2992 bfd *abfd;
c906108c
SS
2993 unsigned int offset;
2994{
2995 char *abbrev_ptr;
2996 struct abbrev_info *cur_abbrev;
2997 unsigned int abbrev_number, bytes_read, abbrev_name;
2998 unsigned int abbrev_form, hash_number;
2999
3000 /* empty the table */
3001 dwarf2_empty_abbrev_table (NULL);
3002
3003 abbrev_ptr = dwarf_abbrev_buffer + offset;
3004 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3005 abbrev_ptr += bytes_read;
3006
3007 /* loop until we reach an abbrev number of 0 */
3008 while (abbrev_number)
3009 {
3010 cur_abbrev = dwarf_alloc_abbrev ();
3011
3012 /* read in abbrev header */
3013 cur_abbrev->number = abbrev_number;
3014 cur_abbrev->tag = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3015 abbrev_ptr += bytes_read;
3016 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
3017 abbrev_ptr += 1;
3018
3019 /* now read in declarations */
3020 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3021 abbrev_ptr += bytes_read;
3022 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3023 abbrev_ptr += bytes_read;
3024 while (abbrev_name)
3025 {
3026 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
3027 {
3028 cur_abbrev->attrs = (struct attr_abbrev *)
3029 xrealloc (cur_abbrev->attrs,
3030 (cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK)
c5aa993b 3031 * sizeof (struct attr_abbrev));
c906108c
SS
3032 }
3033 cur_abbrev->attrs[cur_abbrev->num_attrs].name = abbrev_name;
3034 cur_abbrev->attrs[cur_abbrev->num_attrs++].form = abbrev_form;
3035 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3036 abbrev_ptr += bytes_read;
3037 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3038 abbrev_ptr += bytes_read;
3039 }
3040
3041 hash_number = abbrev_number % ABBREV_HASH_SIZE;
3042 cur_abbrev->next = dwarf2_abbrevs[hash_number];
3043 dwarf2_abbrevs[hash_number] = cur_abbrev;
3044
3045 /* Get next abbreviation.
3046 Under Irix6 the abbreviations for a compilation unit are not
c5aa993b
JM
3047 always properly terminated with an abbrev number of 0.
3048 Exit loop if we encounter an abbreviation which we have
3049 already read (which means we are about to read the abbreviations
3050 for the next compile unit) or if the end of the abbreviation
3051 table is reached. */
c906108c 3052 if ((unsigned int) (abbrev_ptr - dwarf_abbrev_buffer)
c5aa993b 3053 >= dwarf_abbrev_size)
c906108c
SS
3054 break;
3055 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3056 abbrev_ptr += bytes_read;
3057 if (dwarf2_lookup_abbrev (abbrev_number) != NULL)
3058 break;
3059 }
3060}
3061
3062/* Empty the abbrev table for a new compilation unit. */
3063
3064/* ARGSUSED */
3065static void
3066dwarf2_empty_abbrev_table (ignore)
3067 PTR ignore;
3068{
3069 int i;
3070 struct abbrev_info *abbrev, *next;
3071
3072 for (i = 0; i < ABBREV_HASH_SIZE; ++i)
3073 {
3074 next = NULL;
3075 abbrev = dwarf2_abbrevs[i];
3076 while (abbrev)
3077 {
3078 next = abbrev->next;
3079 free (abbrev->attrs);
3080 free (abbrev);
3081 abbrev = next;
3082 }
3083 dwarf2_abbrevs[i] = NULL;
3084 }
3085}
3086
3087/* Lookup an abbrev_info structure in the abbrev hash table. */
3088
3089static struct abbrev_info *
3090dwarf2_lookup_abbrev (number)
3091 unsigned int number;
3092{
3093 unsigned int hash_number;
3094 struct abbrev_info *abbrev;
3095
3096 hash_number = number % ABBREV_HASH_SIZE;
3097 abbrev = dwarf2_abbrevs[hash_number];
3098
3099 while (abbrev)
3100 {
3101 if (abbrev->number == number)
3102 return abbrev;
3103 else
3104 abbrev = abbrev->next;
3105 }
3106 return NULL;
3107}
3108
3109/* Read a minimal amount of information into the minimal die structure. */
3110
3111static char *
3112read_partial_die (part_die, abfd, info_ptr, has_pc_info)
3113 struct partial_die_info *part_die;
c5aa993b 3114 bfd *abfd;
c906108c
SS
3115 char *info_ptr;
3116 int *has_pc_info;
3117{
3118 unsigned int abbrev_number, bytes_read, i;
3119 struct abbrev_info *abbrev;
3120 struct attribute attr;
3121 struct attribute spec_attr;
3122 int found_spec_attr = 0;
c5aa993b 3123 int has_low_pc_attr = 0;
c906108c
SS
3124 int has_high_pc_attr = 0;
3125
3126 *part_die = zeroed_partial_die;
3127 *has_pc_info = 0;
3128 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3129 info_ptr += bytes_read;
3130 if (!abbrev_number)
3131 return info_ptr;
3132
3133 abbrev = dwarf2_lookup_abbrev (abbrev_number);
3134 if (!abbrev)
3135 {
3136 error ("Dwarf Error: Could not find abbrev number %d.", abbrev_number);
3137 }
3138 part_die->offset = info_ptr - dwarf_info_buffer;
3139 part_die->tag = abbrev->tag;
3140 part_die->has_children = abbrev->has_children;
3141 part_die->abbrev = abbrev_number;
3142
3143 for (i = 0; i < abbrev->num_attrs; ++i)
3144 {
3145 info_ptr = read_attribute (&attr, &abbrev->attrs[i], abfd, info_ptr);
3146
3147 /* Store the data if it is of an attribute we want to keep in a
c5aa993b 3148 partial symbol table. */
c906108c
SS
3149 switch (attr.name)
3150 {
3151 case DW_AT_name:
3152
3153 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
3154 if (part_die->name == NULL)
3155 part_die->name = DW_STRING (&attr);
3156 break;
3157 case DW_AT_MIPS_linkage_name:
3158 part_die->name = DW_STRING (&attr);
3159 break;
3160 case DW_AT_low_pc:
3161 has_low_pc_attr = 1;
3162 part_die->lowpc = DW_ADDR (&attr);
3163 break;
3164 case DW_AT_high_pc:
3165 has_high_pc_attr = 1;
3166 part_die->highpc = DW_ADDR (&attr);
3167 break;
3168 case DW_AT_location:
3169 part_die->locdesc = DW_BLOCK (&attr);
3170 break;
3171 case DW_AT_language:
3172 part_die->language = DW_UNSND (&attr);
3173 break;
3174 case DW_AT_external:
3175 part_die->is_external = DW_UNSND (&attr);
3176 break;
3177 case DW_AT_declaration:
3178 part_die->is_declaration = DW_UNSND (&attr);
3179 break;
3180 case DW_AT_type:
3181 part_die->has_type = 1;
3182 break;
3183 case DW_AT_abstract_origin:
3184 case DW_AT_specification:
3185 found_spec_attr = 1;
3186 spec_attr = attr;
3187 break;
3188 case DW_AT_sibling:
3189 /* Ignore absolute siblings, they might point outside of
3190 the current compile unit. */
3191 if (attr.form == DW_FORM_ref_addr)
c5aa993b 3192 complain (&dwarf2_absolute_sibling_complaint);
c906108c
SS
3193 else
3194 part_die->sibling =
3195 dwarf_info_buffer + dwarf2_get_ref_die_offset (&attr);
3196 break;
3197 default:
3198 break;
3199 }
3200 }
3201
3202 /* If we found a reference attribute and the die has no name, try
3203 to find a name in the referred to die. */
3204
3205 if (found_spec_attr && part_die->name == NULL)
3206 {
3207 struct partial_die_info spec_die;
3208 char *spec_ptr;
3209 int dummy;
3210
3211 spec_ptr = dwarf_info_buffer + dwarf2_get_ref_die_offset (&spec_attr);
3212 read_partial_die (&spec_die, abfd, spec_ptr, &dummy);
3213 if (spec_die.name)
3214 {
3215 part_die->name = spec_die.name;
3216
3217 /* Copy DW_AT_external attribute if it is set. */
3218 if (spec_die.is_external)
3219 part_die->is_external = spec_die.is_external;
3220 }
3221 }
3222
3223 /* When using the GNU linker, .gnu.linkonce. sections are used to
3224 eliminate duplicate copies of functions and vtables and such.
3225 The linker will arbitrarily choose one and discard the others.
3226 The AT_*_pc values for such functions refer to local labels in
3227 these sections. If the section from that file was discarded, the
3228 labels are not in the output, so the relocs get a value of 0.
3229 If this is a discarded function, mark the pc bounds as invalid,
3230 so that GDB will ignore it. */
3231 if (has_low_pc_attr && has_high_pc_attr
3232 && part_die->lowpc < part_die->highpc
3233 && (part_die->lowpc != 0
3234 || (bfd_get_file_flags (abfd) & HAS_RELOC)))
3235 *has_pc_info = 1;
3236 return info_ptr;
3237}
3238
3239/* Read the die from the .debug_info section buffer. And set diep to
3240 point to a newly allocated die with its information. */
3241
3242static char *
3243read_full_die (diep, abfd, info_ptr)
3244 struct die_info **diep;
3245 bfd *abfd;
3246 char *info_ptr;
3247{
3248 unsigned int abbrev_number, bytes_read, i, offset;
3249 struct abbrev_info *abbrev;
3250 struct die_info *die;
3251
3252 offset = info_ptr - dwarf_info_buffer;
3253 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3254 info_ptr += bytes_read;
3255 if (!abbrev_number)
3256 {
3257 die = dwarf_alloc_die ();
3258 die->tag = 0;
3259 die->abbrev = abbrev_number;
3260 die->type = NULL;
3261 *diep = die;
3262 return info_ptr;
3263 }
3264
3265 abbrev = dwarf2_lookup_abbrev (abbrev_number);
3266 if (!abbrev)
3267 {
3268 error ("Dwarf Error: could not find abbrev number %d.", abbrev_number);
3269 }
3270 die = dwarf_alloc_die ();
3271 die->offset = offset;
3272 die->tag = abbrev->tag;
3273 die->has_children = abbrev->has_children;
3274 die->abbrev = abbrev_number;
3275 die->type = NULL;
3276
3277 die->num_attrs = abbrev->num_attrs;
3278 die->attrs = (struct attribute *)
3279 xmalloc (die->num_attrs * sizeof (struct attribute));
3280
3281 for (i = 0; i < abbrev->num_attrs; ++i)
3282 {
3283 info_ptr = read_attribute (&die->attrs[i], &abbrev->attrs[i],
3284 abfd, info_ptr);
3285 }
3286
3287 *diep = die;
3288 return info_ptr;
3289}
3290
3291/* Read an attribute described by an abbreviated attribute. */
3292
3293static char *
3294read_attribute (attr, abbrev, abfd, info_ptr)
3295 struct attribute *attr;
3296 struct attr_abbrev *abbrev;
3297 bfd *abfd;
3298 char *info_ptr;
3299{
3300 unsigned int bytes_read;
3301 struct dwarf_block *blk;
3302
3303 attr->name = abbrev->name;
3304 attr->form = abbrev->form;
3305 switch (abbrev->form)
3306 {
3307 case DW_FORM_addr:
3308 case DW_FORM_ref_addr:
3309 DW_ADDR (attr) = read_address (abfd, info_ptr);
3310 info_ptr += address_size;
3311 break;
3312 case DW_FORM_block2:
3313 blk = dwarf_alloc_block ();
3314 blk->size = read_2_bytes (abfd, info_ptr);
3315 info_ptr += 2;
3316 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3317 info_ptr += blk->size;
3318 DW_BLOCK (attr) = blk;
3319 break;
3320 case DW_FORM_block4:
3321 blk = dwarf_alloc_block ();
3322 blk->size = read_4_bytes (abfd, info_ptr);
3323 info_ptr += 4;
3324 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3325 info_ptr += blk->size;
3326 DW_BLOCK (attr) = blk;
3327 break;
3328 case DW_FORM_data2:
3329 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
3330 info_ptr += 2;
3331 break;
3332 case DW_FORM_data4:
3333 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
3334 info_ptr += 4;
3335 break;
3336 case DW_FORM_data8:
3337 DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
3338 info_ptr += 8;
3339 break;
3340 case DW_FORM_string:
3341 DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
3342 info_ptr += bytes_read;
3343 break;
3344 case DW_FORM_block:
3345 blk = dwarf_alloc_block ();
3346 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3347 info_ptr += bytes_read;
3348 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3349 info_ptr += blk->size;
3350 DW_BLOCK (attr) = blk;
3351 break;
3352 case DW_FORM_block1:
3353 blk = dwarf_alloc_block ();
3354 blk->size = read_1_byte (abfd, info_ptr);
3355 info_ptr += 1;
3356 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3357 info_ptr += blk->size;
3358 DW_BLOCK (attr) = blk;
3359 break;
3360 case DW_FORM_data1:
3361 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3362 info_ptr += 1;
3363 break;
3364 case DW_FORM_flag:
3365 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3366 info_ptr += 1;
3367 break;
3368 case DW_FORM_sdata:
3369 DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
3370 info_ptr += bytes_read;
3371 break;
3372 case DW_FORM_udata:
3373 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3374 info_ptr += bytes_read;
3375 break;
3376 case DW_FORM_ref1:
3377 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3378 info_ptr += 1;
3379 break;
3380 case DW_FORM_ref2:
3381 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
3382 info_ptr += 2;
3383 break;
3384 case DW_FORM_ref4:
3385 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
3386 info_ptr += 4;
3387 break;
3388 case DW_FORM_ref_udata:
3389 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3390 info_ptr += bytes_read;
3391 break;
3392 case DW_FORM_strp:
3393 case DW_FORM_indirect:
3394 default:
3395 error ("Dwarf Error: Cannot handle %s in DWARF reader.",
3396 dwarf_form_name (abbrev->form));
3397 }
3398 return info_ptr;
3399}
3400
3401/* read dwarf information from a buffer */
3402
3403static unsigned int
3404read_1_byte (abfd, buf)
3405 bfd *abfd;
3406 char *buf;
3407{
3408 return bfd_get_8 (abfd, (bfd_byte *) buf);
3409}
3410
3411static int
3412read_1_signed_byte (abfd, buf)
3413 bfd *abfd;
3414 char *buf;
3415{
3416 return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
3417}
3418
3419static unsigned int
3420read_2_bytes (abfd, buf)
3421 bfd *abfd;
3422 char *buf;
3423{
3424 return bfd_get_16 (abfd, (bfd_byte *) buf);
3425}
3426
3427static int
3428read_2_signed_bytes (abfd, buf)
3429 bfd *abfd;
3430 char *buf;
3431{
3432 return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
3433}
3434
3435static unsigned int
3436read_4_bytes (abfd, buf)
3437 bfd *abfd;
3438 char *buf;
3439{
3440 return bfd_get_32 (abfd, (bfd_byte *) buf);
3441}
3442
3443static int
3444read_4_signed_bytes (abfd, buf)
3445 bfd *abfd;
3446 char *buf;
3447{
3448 return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
3449}
3450
3451static unsigned int
3452read_8_bytes (abfd, buf)
3453 bfd *abfd;
3454 char *buf;
3455{
3456 return bfd_get_64 (abfd, (bfd_byte *) buf);
3457}
3458
3459static CORE_ADDR
3460read_address (abfd, buf)
3461 bfd *abfd;
3462 char *buf;
3463{
3464 CORE_ADDR retval = 0;
3465
3466 switch (address_size)
3467 {
244106e8
AC
3468 case 2:
3469 retval = bfd_get_16 (abfd, (bfd_byte *) buf);
3470 break;
c906108c
SS
3471 case 4:
3472 retval = bfd_get_32 (abfd, (bfd_byte *) buf);
3473 break;
3474 case 8:
3475 retval = bfd_get_64 (abfd, (bfd_byte *) buf);
3476 break;
3477 default:
3478 /* *THE* alternative is 8, right? */
3479 abort ();
3480 }
64367e0a
JB
3481
3482 return retval;
c906108c
SS
3483}
3484
3485static char *
3486read_n_bytes (abfd, buf, size)
c5aa993b 3487 bfd *abfd;
c906108c
SS
3488 char *buf;
3489 unsigned int size;
3490{
3491 /* If the size of a host char is 8 bits, we can return a pointer
3492 to the buffer, otherwise we have to copy the data to a buffer
3493 allocated on the temporary obstack. */
3494#if HOST_CHAR_BIT == 8
3495 return buf;
3496#else
3497 char *ret;
3498 unsigned int i;
3499
3500 ret = obstack_alloc (&dwarf2_tmp_obstack, size);
3501 for (i = 0; i < size; ++i)
3502 {
3503 ret[i] = bfd_get_8 (abfd, (bfd_byte *) buf);
3504 buf++;
3505 }
3506 return ret;
3507#endif
3508}
3509
3510static char *
3511read_string (abfd, buf, bytes_read_ptr)
3512 bfd *abfd;
3513 char *buf;
3514 unsigned int *bytes_read_ptr;
3515{
3516 /* If the size of a host char is 8 bits, we can return a pointer
3517 to the string, otherwise we have to copy the string to a buffer
3518 allocated on the temporary obstack. */
3519#if HOST_CHAR_BIT == 8
3520 if (*buf == '\0')
3521 {
3522 *bytes_read_ptr = 1;
3523 return NULL;
3524 }
3525 *bytes_read_ptr = strlen (buf) + 1;
3526 return buf;
3527#else
3528 int byte;
3529 unsigned int i = 0;
3530
3531 while ((byte = bfd_get_8 (abfd, (bfd_byte *) buf)) != 0)
3532 {
3533 obstack_1grow (&dwarf2_tmp_obstack, byte);
3534 i++;
3535 buf++;
3536 }
3537 if (i == 0)
3538 {
3539 *bytes_read_ptr = 1;
3540 return NULL;
3541 }
3542 obstack_1grow (&dwarf2_tmp_obstack, '\0');
3543 *bytes_read_ptr = i + 1;
3544 return obstack_finish (&dwarf2_tmp_obstack);
3545#endif
3546}
3547
3548static unsigned int
3549read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
3550 bfd *abfd;
3551 char *buf;
3552 unsigned int *bytes_read_ptr;
3553{
3554 unsigned int result, num_read;
3555 int i, shift;
3556 unsigned char byte;
3557
3558 result = 0;
3559 shift = 0;
3560 num_read = 0;
3561 i = 0;
3562 while (1)
3563 {
3564 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
3565 buf++;
3566 num_read++;
3567 result |= ((byte & 127) << shift);
3568 if ((byte & 128) == 0)
3569 {
3570 break;
3571 }
3572 shift += 7;
3573 }
3574 *bytes_read_ptr = num_read;
3575 return result;
3576}
3577
3578static int
3579read_signed_leb128 (abfd, buf, bytes_read_ptr)
3580 bfd *abfd;
3581 char *buf;
3582 unsigned int *bytes_read_ptr;
3583{
3584 int result;
3585 int i, shift, size, num_read;
3586 unsigned char byte;
3587
3588 result = 0;
3589 shift = 0;
3590 size = 32;
3591 num_read = 0;
3592 i = 0;
3593 while (1)
3594 {
3595 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
3596 buf++;
3597 num_read++;
3598 result |= ((byte & 127) << shift);
3599 shift += 7;
3600 if ((byte & 128) == 0)
3601 {
3602 break;
3603 }
3604 }
3605 if ((shift < size) && (byte & 0x40))
3606 {
3607 result |= -(1 << shift);
3608 }
3609 *bytes_read_ptr = num_read;
3610 return result;
3611}
3612
3613static void
3614set_cu_language (lang)
3615 unsigned int lang;
3616{
3617 switch (lang)
3618 {
3619 case DW_LANG_C89:
3620 case DW_LANG_C:
3621 cu_language = language_c;
3622 break;
3623 case DW_LANG_C_plus_plus:
3624 cu_language = language_cplus;
3625 break;
3626 case DW_LANG_Fortran77:
3627 case DW_LANG_Fortran90:
3628 cu_language = language_fortran;
3629 break;
3630 case DW_LANG_Mips_Assembler:
3631 cu_language = language_asm;
3632 break;
3633 case DW_LANG_Ada83:
3634 case DW_LANG_Cobol74:
3635 case DW_LANG_Cobol85:
3636 case DW_LANG_Pascal83:
3637 case DW_LANG_Modula2:
3638 default:
3639 cu_language = language_unknown;
3640 break;
3641 }
3642 cu_language_defn = language_def (cu_language);
3643}
3644
3645/* Return the named attribute or NULL if not there. */
3646
3647static struct attribute *
3648dwarf_attr (die, name)
3649 struct die_info *die;
3650 unsigned int name;
3651{
3652 unsigned int i;
3653 struct attribute *spec = NULL;
3654
3655 for (i = 0; i < die->num_attrs; ++i)
3656 {
3657 if (die->attrs[i].name == name)
3658 {
3659 return &die->attrs[i];
3660 }
3661 if (die->attrs[i].name == DW_AT_specification
3662 || die->attrs[i].name == DW_AT_abstract_origin)
3663 spec = &die->attrs[i];
3664 }
3665 if (spec)
3666 {
3667 struct die_info *ref_die =
c5aa993b 3668 follow_die_ref (dwarf2_get_ref_die_offset (spec));
c906108c
SS
3669
3670 if (ref_die)
3671 return dwarf_attr (ref_die, name);
3672 }
c5aa993b 3673
c906108c
SS
3674 return NULL;
3675}
3676
3ca72b44
AC
3677static int
3678die_is_declaration (struct die_info *die)
3679{
3680 return (dwarf_attr (die, DW_AT_declaration)
3681 && ! dwarf_attr (die, DW_AT_specification));
3682}
3683
c906108c
SS
3684/* Decode the line number information for the compilation unit whose
3685 line number info is at OFFSET in the .debug_line section.
3686 The compilation directory of the file is passed in COMP_DIR. */
3687
3688struct filenames
3689{
3690 unsigned int num_files;
3691 struct fileinfo
c5aa993b
JM
3692 {
3693 char *name;
3694 unsigned int dir;
3695 unsigned int time;
3696 unsigned int size;
3697 }
3698 *files;
c906108c
SS
3699};
3700
3701struct directories
c5aa993b
JM
3702 {
3703 unsigned int num_dirs;
3704 char **dirs;
3705 };
c906108c
SS
3706
3707static void
3708dwarf_decode_lines (offset, comp_dir, abfd)
3709 unsigned int offset;
3710 char *comp_dir;
3711 bfd *abfd;
3712{
3713 char *line_ptr;
3714 char *line_end;
3715 struct line_head lh;
3716 struct cleanup *back_to;
3717 unsigned int i, bytes_read;
3718 char *cur_file, *cur_dir;
3719 unsigned char op_code, extended_op, adj_opcode;
3720
3721#define FILE_ALLOC_CHUNK 5
3722#define DIR_ALLOC_CHUNK 5
3723
3724 struct filenames files;
3725 struct directories dirs;
3726
3727 if (dwarf_line_buffer == NULL)
3728 {
3729 complain (&dwarf2_missing_line_number_section);
3730 return;
3731 }
3732
3733 files.num_files = 0;
3734 files.files = NULL;
3735
3736 dirs.num_dirs = 0;
3737 dirs.dirs = NULL;
3738
3739 line_ptr = dwarf_line_buffer + offset;
3740
3741 /* read in the prologue */
3742 lh.total_length = read_4_bytes (abfd, line_ptr);
3743 line_ptr += 4;
3744 line_end = line_ptr + lh.total_length;
3745 lh.version = read_2_bytes (abfd, line_ptr);
3746 line_ptr += 2;
3747 lh.prologue_length = read_4_bytes (abfd, line_ptr);
3748 line_ptr += 4;
3749 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
3750 line_ptr += 1;
3751 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
3752 line_ptr += 1;
3753 lh.line_base = read_1_signed_byte (abfd, line_ptr);
3754 line_ptr += 1;
3755 lh.line_range = read_1_byte (abfd, line_ptr);
3756 line_ptr += 1;
3757 lh.opcode_base = read_1_byte (abfd, line_ptr);
3758 line_ptr += 1;
3759 lh.standard_opcode_lengths = (unsigned char *)
3760 xmalloc (lh.opcode_base * sizeof (unsigned char));
c13c43fd 3761 back_to = make_cleanup (free_current_contents, &lh.standard_opcode_lengths);
c906108c
SS
3762
3763 lh.standard_opcode_lengths[0] = 1;
3764 for (i = 1; i < lh.opcode_base; ++i)
3765 {
3766 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
3767 line_ptr += 1;
3768 }
3769
3770 /* Read directory table */
3771 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
3772 {
3773 line_ptr += bytes_read;
3774 if ((dirs.num_dirs % DIR_ALLOC_CHUNK) == 0)
3775 {
3776 dirs.dirs = (char **)
3777 xrealloc (dirs.dirs,
3778 (dirs.num_dirs + DIR_ALLOC_CHUNK) * sizeof (char *));
3779 if (dirs.num_dirs == 0)
c13c43fd 3780 make_cleanup (free_current_contents, &dirs.dirs);
c906108c
SS
3781 }
3782 dirs.dirs[dirs.num_dirs++] = cur_dir;
3783 }
3784 line_ptr += bytes_read;
3785
3786 /* Read file name table */
3787 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
3788 {
3789 line_ptr += bytes_read;
3790 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
3791 {
3792 files.files = (struct fileinfo *)
3793 xrealloc (files.files,
3794 (files.num_files + FILE_ALLOC_CHUNK)
c5aa993b 3795 * sizeof (struct fileinfo));
c906108c 3796 if (files.num_files == 0)
c13c43fd 3797 make_cleanup (free_current_contents, &files.files);
c906108c
SS
3798 }
3799 files.files[files.num_files].name = cur_file;
3800 files.files[files.num_files].dir =
3801 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3802 line_ptr += bytes_read;
3803 files.files[files.num_files].time =
3804 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3805 line_ptr += bytes_read;
3806 files.files[files.num_files].size =
3807 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3808 line_ptr += bytes_read;
3809 files.num_files++;
3810 }
3811 line_ptr += bytes_read;
3812
3813 /* Read the statement sequences until there's nothing left. */
3814 while (line_ptr < line_end)
3815 {
3816 /* state machine registers */
3817 CORE_ADDR address = 0;
3818 unsigned int file = 1;
3819 unsigned int line = 1;
3820 unsigned int column = 0;
3821 int is_stmt = lh.default_is_stmt;
3822 int basic_block = 0;
3823 int end_sequence = 0;
3824
3825 /* Start a subfile for the current file of the state machine. */
3826 if (files.num_files >= file)
3827 {
3828 /* The file and directory tables are 0 based, the references
3829 are 1 based. */
3830 dwarf2_start_subfile (files.files[file - 1].name,
3831 (files.files[file - 1].dir
3832 ? dirs.dirs[files.files[file - 1].dir - 1]
3833 : comp_dir));
3834 }
3835
3836 /* Decode the table. */
c5aa993b 3837 while (!end_sequence)
c906108c
SS
3838 {
3839 op_code = read_1_byte (abfd, line_ptr);
3840 line_ptr += 1;
3841 switch (op_code)
3842 {
3843 case DW_LNS_extended_op:
3844 line_ptr += 1; /* ignore length */
3845 extended_op = read_1_byte (abfd, line_ptr);
3846 line_ptr += 1;
3847 switch (extended_op)
3848 {
3849 case DW_LNE_end_sequence:
3850 end_sequence = 1;
7a292a7a
SS
3851 /* Don't call record_line here. The end_sequence
3852 instruction provides the address of the first byte
3853 *after* the last line in the sequence; it's not the
3854 address of any real source line. However, the GDB
3855 linetable structure only records the starts of lines,
3856 not the ends. This is a weakness of GDB. */
c906108c
SS
3857 break;
3858 case DW_LNE_set_address:
3859 address = read_address (abfd, line_ptr) + baseaddr;
3860 line_ptr += address_size;
3861 break;
3862 case DW_LNE_define_file:
3863 cur_file = read_string (abfd, line_ptr, &bytes_read);
3864 line_ptr += bytes_read;
3865 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
3866 {
3867 files.files = (struct fileinfo *)
3868 xrealloc (files.files,
3869 (files.num_files + FILE_ALLOC_CHUNK)
c5aa993b 3870 * sizeof (struct fileinfo));
c906108c 3871 if (files.num_files == 0)
c13c43fd 3872 make_cleanup (free_current_contents, &files.files);
c906108c
SS
3873 }
3874 files.files[files.num_files].name = cur_file;
3875 files.files[files.num_files].dir =
3876 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3877 line_ptr += bytes_read;
3878 files.files[files.num_files].time =
3879 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3880 line_ptr += bytes_read;
3881 files.files[files.num_files].size =
3882 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3883 line_ptr += bytes_read;
3884 files.num_files++;
3885 break;
3886 default:
3887 complain (&dwarf2_mangled_line_number_section);
3888 goto done;
3889 }
3890 break;
3891 case DW_LNS_copy:
3892 record_line (current_subfile, line, address);
3893 basic_block = 0;
3894 break;
3895 case DW_LNS_advance_pc:
3896 address += lh.minimum_instruction_length
3897 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3898 line_ptr += bytes_read;
3899 break;
3900 case DW_LNS_advance_line:
3901 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
3902 line_ptr += bytes_read;
3903 break;
3904 case DW_LNS_set_file:
3905 /* The file and directory tables are 0 based, the references
c5aa993b 3906 are 1 based. */
c906108c
SS
3907 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3908 line_ptr += bytes_read;
3909 dwarf2_start_subfile
3910 (files.files[file - 1].name,
3911 (files.files[file - 1].dir
3912 ? dirs.dirs[files.files[file - 1].dir - 1]
3913 : comp_dir));
3914 break;
3915 case DW_LNS_set_column:
3916 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3917 line_ptr += bytes_read;
3918 break;
3919 case DW_LNS_negate_stmt:
3920 is_stmt = (!is_stmt);
3921 break;
3922 case DW_LNS_set_basic_block:
3923 basic_block = 1;
3924 break;
c2c6d25f
JM
3925 /* Add to the address register of the state machine the
3926 address increment value corresponding to special opcode
3927 255. Ie, this value is scaled by the minimum instruction
3928 length since special opcode 255 would have scaled the
3929 the increment. */
c906108c 3930 case DW_LNS_const_add_pc:
c2c6d25f
JM
3931 address += (lh.minimum_instruction_length
3932 * ((255 - lh.opcode_base) / lh.line_range));
c906108c
SS
3933 break;
3934 case DW_LNS_fixed_advance_pc:
3935 address += read_2_bytes (abfd, line_ptr);
3936 line_ptr += 2;
3937 break;
3938 default: /* special operand */
3939 adj_opcode = op_code - lh.opcode_base;
3940 address += (adj_opcode / lh.line_range)
3941 * lh.minimum_instruction_length;
3942 line += lh.line_base + (adj_opcode % lh.line_range);
3943 /* append row to matrix using current values */
3944 record_line (current_subfile, line, address);
3945 basic_block = 1;
3946 }
3947 }
3948 }
3949done:
3950 do_cleanups (back_to);
3951}
3952
3953/* Start a subfile for DWARF. FILENAME is the name of the file and
3954 DIRNAME the name of the source directory which contains FILENAME
3955 or NULL if not known.
3956 This routine tries to keep line numbers from identical absolute and
3957 relative file names in a common subfile.
3958
3959 Using the `list' example from the GDB testsuite, which resides in
3960 /srcdir and compiling it with Irix6.2 cc in /compdir using a filename
3961 of /srcdir/list0.c yields the following debugging information for list0.c:
3962
c5aa993b
JM
3963 DW_AT_name: /srcdir/list0.c
3964 DW_AT_comp_dir: /compdir
3965 files.files[0].name: list0.h
3966 files.files[0].dir: /srcdir
3967 files.files[1].name: list0.c
3968 files.files[1].dir: /srcdir
c906108c
SS
3969
3970 The line number information for list0.c has to end up in a single
3971 subfile, so that `break /srcdir/list0.c:1' works as expected. */
3972
3973static void
3974dwarf2_start_subfile (filename, dirname)
3975 char *filename;
3976 char *dirname;
3977{
3978 /* If the filename isn't absolute, try to match an existing subfile
3979 with the full pathname. */
3980
3981 if (*filename != '/' && dirname != NULL)
3982 {
3983 struct subfile *subfile;
3984 char *fullname = concat (dirname, "/", filename, NULL);
3985
3986 for (subfile = subfiles; subfile; subfile = subfile->next)
3987 {
3988 if (STREQ (subfile->name, fullname))
3989 {
3990 current_subfile = subfile;
3991 free (fullname);
3992 return;
3993 }
3994 }
3995 free (fullname);
3996 }
3997 start_subfile (filename, dirname);
3998}
3999
4000/* Given a pointer to a DWARF information entry, figure out if we need
4001 to make a symbol table entry for it, and if so, create a new entry
4002 and return a pointer to it.
4003 If TYPE is NULL, determine symbol type from the die, otherwise
2df3850c 4004 used the passed type. */
c906108c
SS
4005
4006static struct symbol *
4007new_symbol (die, type, objfile)
4008 struct die_info *die;
4009 struct type *type;
4010 struct objfile *objfile;
4011{
4012 struct symbol *sym = NULL;
4013 char *name;
4014 struct attribute *attr = NULL;
4015 struct attribute *attr2 = NULL;
4016 CORE_ADDR addr;
4017
4018 name = dwarf2_linkage_name (die);
4019 if (name)
4020 {
4021 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
4022 sizeof (struct symbol));
4023 OBJSTAT (objfile, n_syms++);
4024 memset (sym, 0, sizeof (struct symbol));
4025 SYMBOL_NAME (sym) = obsavestring (name, strlen (name),
4026 &objfile->symbol_obstack);
4027
4028 /* Default assumptions.
c5aa993b 4029 Use the passed type or decode it from the die. */
c906108c
SS
4030 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4031 SYMBOL_CLASS (sym) = LOC_STATIC;
4032 if (type != NULL)
4033 SYMBOL_TYPE (sym) = type;
4034 else
4035 SYMBOL_TYPE (sym) = die_type (die, objfile);
4036 attr = dwarf_attr (die, DW_AT_decl_line);
4037 if (attr)
4038 {
4039 SYMBOL_LINE (sym) = DW_UNSND (attr);
4040 }
4041
4042 /* If this symbol is from a C++ compilation, then attempt to
4043 cache the demangled form for future reference. This is a
4044 typical time versus space tradeoff, that was decided in favor
4045 of time because it sped up C++ symbol lookups by a factor of
4046 about 20. */
4047
4048 SYMBOL_LANGUAGE (sym) = cu_language;
4049 SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
4050 switch (die->tag)
4051 {
4052 case DW_TAG_label:
4053 attr = dwarf_attr (die, DW_AT_low_pc);
4054 if (attr)
4055 {
4056 SYMBOL_VALUE_ADDRESS (sym) = DW_ADDR (attr) + baseaddr;
4057 }
4058 SYMBOL_CLASS (sym) = LOC_LABEL;
4059 break;
4060 case DW_TAG_subprogram:
4061 /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
4062 finish_block. */
4063 SYMBOL_CLASS (sym) = LOC_BLOCK;
4064 attr2 = dwarf_attr (die, DW_AT_external);
4065 if (attr2 && (DW_UNSND (attr2) != 0))
4066 {
4067 add_symbol_to_list (sym, &global_symbols);
4068 }
4069 else
4070 {
4071 add_symbol_to_list (sym, list_in_scope);
4072 }
4073 break;
4074 case DW_TAG_variable:
4075 /* Compilation with minimal debug info may result in variables
4076 with missing type entries. Change the misleading `void' type
4077 to something sensible. */
4078 if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID)
4079 SYMBOL_TYPE (sym) = init_type (TYPE_CODE_INT,
4080 TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4081 "<variable, no debug info>",
4082 objfile);
4083 attr = dwarf_attr (die, DW_AT_const_value);
4084 if (attr)
4085 {
4086 dwarf2_const_value (attr, sym, objfile);
4087 attr2 = dwarf_attr (die, DW_AT_external);
4088 if (attr2 && (DW_UNSND (attr2) != 0))
4089 add_symbol_to_list (sym, &global_symbols);
4090 else
4091 add_symbol_to_list (sym, list_in_scope);
4092 break;
4093 }
4094 attr = dwarf_attr (die, DW_AT_location);
4095 if (attr)
4096 {
4097 attr2 = dwarf_attr (die, DW_AT_external);
4098 if (attr2 && (DW_UNSND (attr2) != 0))
4099 {
4100 SYMBOL_VALUE_ADDRESS (sym) =
4101 decode_locdesc (DW_BLOCK (attr), objfile);
4102 add_symbol_to_list (sym, &global_symbols);
4103
c5aa993b 4104 /* In shared libraries the address of the variable
c906108c
SS
4105 in the location descriptor might still be relocatable,
4106 so its value could be zero.
4107 Enter the symbol as a LOC_UNRESOLVED symbol, if its
4108 value is zero, the address of the variable will then
4109 be determined from the minimal symbol table whenever
4110 the variable is referenced. */
4111 if (SYMBOL_VALUE_ADDRESS (sym))
4112 {
4113 SYMBOL_VALUE_ADDRESS (sym) += baseaddr;
4114 SYMBOL_CLASS (sym) = LOC_STATIC;
4115 }
4116 else
4117 SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
4118 }
4119 else
4120 {
4121 SYMBOL_VALUE (sym) = addr =
4122 decode_locdesc (DW_BLOCK (attr), objfile);
4123 add_symbol_to_list (sym, list_in_scope);
4124 if (optimized_out)
4125 {
4126 SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
4127 }
4128 else if (isreg)
4129 {
4130 SYMBOL_CLASS (sym) = LOC_REGISTER;
4131 }
4132 else if (offreg)
4133 {
4134 SYMBOL_CLASS (sym) = LOC_BASEREG;
4135 SYMBOL_BASEREG (sym) = basereg;
4136 }
4137 else if (islocal)
4138 {
4139 SYMBOL_CLASS (sym) = LOC_LOCAL;
4140 }
4141 else
4142 {
4143 SYMBOL_CLASS (sym) = LOC_STATIC;
4144 SYMBOL_VALUE_ADDRESS (sym) = addr + baseaddr;
4145 }
4146 }
4147 }
4148 else
4149 {
4150 /* We do not know the address of this symbol.
c5aa993b
JM
4151 If it is an external symbol and we have type information
4152 for it, enter the symbol as a LOC_UNRESOLVED symbol.
4153 The address of the variable will then be determined from
4154 the minimal symbol table whenever the variable is
4155 referenced. */
c906108c
SS
4156 attr2 = dwarf_attr (die, DW_AT_external);
4157 if (attr2 && (DW_UNSND (attr2) != 0)
4158 && dwarf_attr (die, DW_AT_type) != NULL)
4159 {
4160 SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
4161 add_symbol_to_list (sym, &global_symbols);
4162 }
4163 }
4164 break;
4165 case DW_TAG_formal_parameter:
4166 attr = dwarf_attr (die, DW_AT_location);
4167 if (attr)
4168 {
4169 SYMBOL_VALUE (sym) = decode_locdesc (DW_BLOCK (attr), objfile);
4170 if (isreg)
4171 {
4172 SYMBOL_CLASS (sym) = LOC_REGPARM;
4173 }
4174 else if (offreg)
4175 {
7a292a7a
SS
4176 if (isderef)
4177 {
4178 if (basereg != frame_base_reg)
4179 complain (&dwarf2_complex_location_expr);
4180 SYMBOL_CLASS (sym) = LOC_REF_ARG;
4181 }
4182 else
4183 {
4184 SYMBOL_CLASS (sym) = LOC_BASEREG_ARG;
4185 SYMBOL_BASEREG (sym) = basereg;
4186 }
c906108c
SS
4187 }
4188 else
4189 {
4190 SYMBOL_CLASS (sym) = LOC_ARG;
4191 }
4192 }
4193 attr = dwarf_attr (die, DW_AT_const_value);
4194 if (attr)
4195 {
4196 dwarf2_const_value (attr, sym, objfile);
4197 }
4198 add_symbol_to_list (sym, list_in_scope);
4199 break;
4200 case DW_TAG_unspecified_parameters:
4201 /* From varargs functions; gdb doesn't seem to have any
4202 interest in this information, so just ignore it for now.
4203 (FIXME?) */
4204 break;
4205 case DW_TAG_class_type:
4206 case DW_TAG_structure_type:
4207 case DW_TAG_union_type:
4208 case DW_TAG_enumeration_type:
4209 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
4210 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
4211 add_symbol_to_list (sym, list_in_scope);
4212
4213 /* The semantics of C++ state that "struct foo { ... }" also
4214 defines a typedef for "foo". Synthesize a typedef symbol so
4215 that "ptype foo" works as expected. */
4216 if (cu_language == language_cplus)
4217 {
4218 struct symbol *typedef_sym = (struct symbol *)
c5aa993b
JM
4219 obstack_alloc (&objfile->symbol_obstack,
4220 sizeof (struct symbol));
c906108c
SS
4221 *typedef_sym = *sym;
4222 SYMBOL_NAMESPACE (typedef_sym) = VAR_NAMESPACE;
4223 if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
4224 TYPE_NAME (SYMBOL_TYPE (sym)) =
4225 obsavestring (SYMBOL_NAME (sym),
4226 strlen (SYMBOL_NAME (sym)),
4227 &objfile->type_obstack);
4228 add_symbol_to_list (typedef_sym, list_in_scope);
4229 }
4230 break;
4231 case DW_TAG_typedef:
4232 case DW_TAG_base_type:
4233 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
4234 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4235 add_symbol_to_list (sym, list_in_scope);
4236 break;
4237 case DW_TAG_enumerator:
4238 attr = dwarf_attr (die, DW_AT_const_value);
4239 if (attr)
4240 {
4241 dwarf2_const_value (attr, sym, objfile);
4242 }
4243 add_symbol_to_list (sym, list_in_scope);
4244 break;
4245 default:
4246 /* Not a tag we recognize. Hopefully we aren't processing
4247 trash data, but since we must specifically ignore things
4248 we don't recognize, there is nothing else we should do at
4249 this point. */
4250 complain (&dwarf2_unsupported_tag, dwarf_tag_name (die->tag));
4251 break;
4252 }
4253 }
4254 return (sym);
4255}
4256
4257/* Copy constant value from an attribute to a symbol. */
4258
4259static void
4260dwarf2_const_value (attr, sym, objfile)
4261 struct attribute *attr;
4262 struct symbol *sym;
4263 struct objfile *objfile;
4264{
4265 struct dwarf_block *blk;
4266
4267 switch (attr->form)
4268 {
4269 case DW_FORM_addr:
4270 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != (unsigned int) address_size)
4271 complain (&dwarf2_const_value_length_mismatch, SYMBOL_NAME (sym),
4272 address_size, TYPE_LENGTH (SYMBOL_TYPE (sym)));
4273 SYMBOL_VALUE_BYTES (sym) = (char *)
4274 obstack_alloc (&objfile->symbol_obstack, address_size);
4275 store_address (SYMBOL_VALUE_BYTES (sym), address_size, DW_ADDR (attr));
4276 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
4277 break;
4278 case DW_FORM_block1:
4279 case DW_FORM_block2:
4280 case DW_FORM_block4:
4281 case DW_FORM_block:
4282 blk = DW_BLOCK (attr);
4283 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != blk->size)
4284 complain (&dwarf2_const_value_length_mismatch, SYMBOL_NAME (sym),
4285 blk->size, TYPE_LENGTH (SYMBOL_TYPE (sym)));
4286 SYMBOL_VALUE_BYTES (sym) = (char *)
4287 obstack_alloc (&objfile->symbol_obstack, blk->size);
4288 memcpy (SYMBOL_VALUE_BYTES (sym), blk->data, blk->size);
4289 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
4290 break;
2df3850c
JM
4291
4292 /* The DW_AT_const_value attributes are supposed to carry the
4293 symbol's value "represented as it would be on the target
4294 architecture." By the time we get here, it's already been
4295 converted to host endianness, so we just need to sign- or
4296 zero-extend it as appropriate. */
4297 case DW_FORM_data1:
4298 dwarf2_const_value_data (attr, sym, 8);
4299 break;
c906108c 4300 case DW_FORM_data2:
2df3850c
JM
4301 dwarf2_const_value_data (attr, sym, 16);
4302 break;
c906108c 4303 case DW_FORM_data4:
2df3850c
JM
4304 dwarf2_const_value_data (attr, sym, 32);
4305 break;
c906108c 4306 case DW_FORM_data8:
2df3850c
JM
4307 dwarf2_const_value_data (attr, sym, 64);
4308 break;
4309
c906108c 4310 case DW_FORM_sdata:
2df3850c
JM
4311 SYMBOL_VALUE (sym) = DW_SND (attr);
4312 SYMBOL_CLASS (sym) = LOC_CONST;
4313 break;
4314
c906108c
SS
4315 case DW_FORM_udata:
4316 SYMBOL_VALUE (sym) = DW_UNSND (attr);
4317 SYMBOL_CLASS (sym) = LOC_CONST;
4318 break;
2df3850c 4319
c906108c
SS
4320 default:
4321 complain (&dwarf2_unsupported_const_value_attr,
4322 dwarf_form_name (attr->form));
4323 SYMBOL_VALUE (sym) = 0;
4324 SYMBOL_CLASS (sym) = LOC_CONST;
4325 break;
4326 }
4327}
4328
2df3850c
JM
4329
4330/* Given an attr with a DW_FORM_dataN value in host byte order, sign-
4331 or zero-extend it as appropriate for the symbol's type. */
4332static void
4333dwarf2_const_value_data (struct attribute *attr,
4334 struct symbol *sym,
4335 int bits)
4336{
4337 LONGEST l = DW_UNSND (attr);
4338
4339 if (bits < sizeof (l) * 8)
4340 {
4341 if (TYPE_UNSIGNED (SYMBOL_TYPE (sym)))
4342 l &= ((LONGEST) 1 << bits) - 1;
4343 else
bf9198f1 4344 l = (l << (sizeof (l) * 8 - bits)) >> (sizeof (l) * 8 - bits);
2df3850c
JM
4345 }
4346
4347 SYMBOL_VALUE (sym) = l;
4348 SYMBOL_CLASS (sym) = LOC_CONST;
4349}
4350
4351
c906108c
SS
4352/* Return the type of the die in question using its DW_AT_type attribute. */
4353
4354static struct type *
4355die_type (die, objfile)
4356 struct die_info *die;
4357 struct objfile *objfile;
4358{
4359 struct type *type;
4360 struct attribute *type_attr;
4361 struct die_info *type_die;
4362 unsigned int ref;
4363
4364 type_attr = dwarf_attr (die, DW_AT_type);
4365 if (!type_attr)
4366 {
4367 /* A missing DW_AT_type represents a void type. */
4368 return dwarf2_fundamental_type (objfile, FT_VOID);
4369 }
4370 else
4371 {
4372 ref = dwarf2_get_ref_die_offset (type_attr);
4373 type_die = follow_die_ref (ref);
4374 if (!type_die)
4375 {
4376 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
4377 return NULL;
4378 }
4379 }
4380 type = tag_type_to_type (type_die, objfile);
4381 if (!type)
4382 {
4383 dump_die (type_die);
4384 error ("Dwarf Error: Problem turning type die at offset into gdb type.");
4385 }
4386 return type;
4387}
4388
4389/* Return the containing type of the die in question using its
4390 DW_AT_containing_type attribute. */
4391
4392static struct type *
4393die_containing_type (die, objfile)
4394 struct die_info *die;
4395 struct objfile *objfile;
4396{
4397 struct type *type = NULL;
4398 struct attribute *type_attr;
4399 struct die_info *type_die = NULL;
4400 unsigned int ref;
4401
4402 type_attr = dwarf_attr (die, DW_AT_containing_type);
4403 if (type_attr)
4404 {
4405 ref = dwarf2_get_ref_die_offset (type_attr);
4406 type_die = follow_die_ref (ref);
4407 if (!type_die)
4408 {
4409 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
4410 return NULL;
4411 }
4412 type = tag_type_to_type (type_die, objfile);
4413 }
4414 if (!type)
4415 {
4416 if (type_die)
4417 dump_die (type_die);
4418 error ("Dwarf Error: Problem turning containing type into gdb type.");
4419 }
4420 return type;
4421}
4422
4423#if 0
4424static struct type *
4425type_at_offset (offset, objfile)
4426 unsigned int offset;
4427 struct objfile *objfile;
4428{
4429 struct die_info *die;
4430 struct type *type;
4431
4432 die = follow_die_ref (offset);
4433 if (!die)
4434 {
4435 error ("Dwarf Error: Cannot find type referent at offset %d.", offset);
4436 return NULL;
4437 }
4438 type = tag_type_to_type (die, objfile);
4439 return type;
4440}
4441#endif
4442
4443static struct type *
4444tag_type_to_type (die, objfile)
4445 struct die_info *die;
4446 struct objfile *objfile;
4447{
4448 if (die->type)
4449 {
4450 return die->type;
4451 }
4452 else
4453 {
4454 read_type_die (die, objfile);
4455 if (!die->type)
4456 {
4457 dump_die (die);
4458 error ("Dwarf Error: Cannot find type of die.");
4459 }
4460 return die->type;
4461 }
4462}
4463
4464static void
4465read_type_die (die, objfile)
4466 struct die_info *die;
4467 struct objfile *objfile;
4468{
4469 switch (die->tag)
4470 {
4471 case DW_TAG_class_type:
4472 case DW_TAG_structure_type:
4473 case DW_TAG_union_type:
4474 read_structure_scope (die, objfile);
4475 break;
4476 case DW_TAG_enumeration_type:
4477 read_enumeration (die, objfile);
4478 break;
4479 case DW_TAG_subprogram:
4480 case DW_TAG_subroutine_type:
4481 read_subroutine_type (die, objfile);
4482 break;
4483 case DW_TAG_array_type:
4484 read_array_type (die, objfile);
4485 break;
4486 case DW_TAG_pointer_type:
4487 read_tag_pointer_type (die, objfile);
4488 break;
4489 case DW_TAG_ptr_to_member_type:
4490 read_tag_ptr_to_member_type (die, objfile);
4491 break;
4492 case DW_TAG_reference_type:
4493 read_tag_reference_type (die, objfile);
4494 break;
4495 case DW_TAG_const_type:
4496 read_tag_const_type (die, objfile);
4497 break;
4498 case DW_TAG_volatile_type:
4499 read_tag_volatile_type (die, objfile);
4500 break;
4501 case DW_TAG_string_type:
4502 read_tag_string_type (die, objfile);
4503 break;
4504 case DW_TAG_typedef:
4505 read_typedef (die, objfile);
4506 break;
4507 case DW_TAG_base_type:
4508 read_base_type (die, objfile);
4509 break;
4510 default:
4511 complain (&dwarf2_unexpected_tag, dwarf_tag_name (die->tag));
4512 break;
4513 }
4514}
4515
4516static struct type *
4517dwarf_base_type (encoding, size, objfile)
4518 int encoding;
4519 int size;
4520 struct objfile *objfile;
4521{
4522 /* FIXME - this should not produce a new (struct type *)
4523 every time. It should cache base types. */
4524 struct type *type;
4525 switch (encoding)
4526 {
4527 case DW_ATE_address:
4528 type = dwarf2_fundamental_type (objfile, FT_VOID);
4529 return type;
4530 case DW_ATE_boolean:
4531 type = dwarf2_fundamental_type (objfile, FT_BOOLEAN);
4532 return type;
4533 case DW_ATE_complex_float:
4534 if (size == 16)
4535 {
4536 type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_COMPLEX);
4537 }
4538 else
4539 {
4540 type = dwarf2_fundamental_type (objfile, FT_COMPLEX);
4541 }
4542 return type;
4543 case DW_ATE_float:
4544 if (size == 8)
4545 {
4546 type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_FLOAT);
4547 }
4548 else
4549 {
4550 type = dwarf2_fundamental_type (objfile, FT_FLOAT);
4551 }
4552 return type;
4553 case DW_ATE_signed:
4554 switch (size)
4555 {
4556 case 1:
4557 type = dwarf2_fundamental_type (objfile, FT_SIGNED_CHAR);
4558 break;
4559 case 2:
4560 type = dwarf2_fundamental_type (objfile, FT_SIGNED_SHORT);
4561 break;
4562 default:
4563 case 4:
4564 type = dwarf2_fundamental_type (objfile, FT_SIGNED_INTEGER);
4565 break;
4566 }
4567 return type;
4568 case DW_ATE_signed_char:
4569 type = dwarf2_fundamental_type (objfile, FT_SIGNED_CHAR);
4570 return type;
4571 case DW_ATE_unsigned:
4572 switch (size)
4573 {
4574 case 1:
4575 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_CHAR);
4576 break;
4577 case 2:
4578 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_SHORT);
4579 break;
4580 default:
4581 case 4:
4582 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_INTEGER);
4583 break;
4584 }
4585 return type;
4586 case DW_ATE_unsigned_char:
4587 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_CHAR);
4588 return type;
4589 default:
4590 type = dwarf2_fundamental_type (objfile, FT_SIGNED_INTEGER);
4591 return type;
4592 }
4593}
4594
4595#if 0
4596struct die_info *
4597copy_die (old_die)
4598 struct die_info *old_die;
4599{
4600 struct die_info *new_die;
4601 int i, num_attrs;
4602
4603 new_die = (struct die_info *) xmalloc (sizeof (struct die_info));
4604 memset (new_die, 0, sizeof (struct die_info));
4605
4606 new_die->tag = old_die->tag;
4607 new_die->has_children = old_die->has_children;
4608 new_die->abbrev = old_die->abbrev;
4609 new_die->offset = old_die->offset;
4610 new_die->type = NULL;
4611
4612 num_attrs = old_die->num_attrs;
4613 new_die->num_attrs = num_attrs;
4614 new_die->attrs = (struct attribute *)
4615 xmalloc (num_attrs * sizeof (struct attribute));
4616
4617 for (i = 0; i < old_die->num_attrs; ++i)
4618 {
4619 new_die->attrs[i].name = old_die->attrs[i].name;
4620 new_die->attrs[i].form = old_die->attrs[i].form;
4621 new_die->attrs[i].u.addr = old_die->attrs[i].u.addr;
4622 }
4623
4624 new_die->next = NULL;
4625 return new_die;
4626}
4627#endif
4628
4629/* Return sibling of die, NULL if no sibling. */
4630
4631struct die_info *
4632sibling_die (die)
4633 struct die_info *die;
4634{
4635 int nesting_level = 0;
4636
4637 if (!die->has_children)
4638 {
4639 if (die->next && (die->next->tag == 0))
4640 {
4641 return NULL;
4642 }
4643 else
4644 {
4645 return die->next;
4646 }
4647 }
4648 else
4649 {
4650 do
4651 {
4652 if (die->has_children)
4653 {
4654 nesting_level++;
4655 }
4656 if (die->tag == 0)
4657 {
4658 nesting_level--;
4659 }
4660 die = die->next;
4661 }
4662 while (nesting_level);
4663 if (die && (die->tag == 0))
4664 {
4665 return NULL;
4666 }
4667 else
4668 {
4669 return die;
4670 }
4671 }
4672}
4673
4674/* Get linkage name of a die, return NULL if not found. */
4675
4676static char *
4677dwarf2_linkage_name (die)
4678 struct die_info *die;
4679{
4680 struct attribute *attr;
4681
4682 attr = dwarf_attr (die, DW_AT_MIPS_linkage_name);
4683 if (attr && DW_STRING (attr))
4684 return DW_STRING (attr);
4685 attr = dwarf_attr (die, DW_AT_name);
4686 if (attr && DW_STRING (attr))
4687 return DW_STRING (attr);
4688 return NULL;
4689}
4690
4691/* Convert a DIE tag into its string name. */
4692
4693static char *
4694dwarf_tag_name (tag)
4695 register unsigned tag;
4696{
4697 switch (tag)
4698 {
4699 case DW_TAG_padding:
4700 return "DW_TAG_padding";
4701 case DW_TAG_array_type:
4702 return "DW_TAG_array_type";
4703 case DW_TAG_class_type:
4704 return "DW_TAG_class_type";
4705 case DW_TAG_entry_point:
4706 return "DW_TAG_entry_point";
4707 case DW_TAG_enumeration_type:
4708 return "DW_TAG_enumeration_type";
4709 case DW_TAG_formal_parameter:
4710 return "DW_TAG_formal_parameter";
4711 case DW_TAG_imported_declaration:
4712 return "DW_TAG_imported_declaration";
4713 case DW_TAG_label:
4714 return "DW_TAG_label";
4715 case DW_TAG_lexical_block:
4716 return "DW_TAG_lexical_block";
4717 case DW_TAG_member:
4718 return "DW_TAG_member";
4719 case DW_TAG_pointer_type:
4720 return "DW_TAG_pointer_type";
4721 case DW_TAG_reference_type:
4722 return "DW_TAG_reference_type";
4723 case DW_TAG_compile_unit:
4724 return "DW_TAG_compile_unit";
4725 case DW_TAG_string_type:
4726 return "DW_TAG_string_type";
4727 case DW_TAG_structure_type:
4728 return "DW_TAG_structure_type";
4729 case DW_TAG_subroutine_type:
4730 return "DW_TAG_subroutine_type";
4731 case DW_TAG_typedef:
4732 return "DW_TAG_typedef";
4733 case DW_TAG_union_type:
4734 return "DW_TAG_union_type";
4735 case DW_TAG_unspecified_parameters:
4736 return "DW_TAG_unspecified_parameters";
4737 case DW_TAG_variant:
4738 return "DW_TAG_variant";
4739 case DW_TAG_common_block:
4740 return "DW_TAG_common_block";
4741 case DW_TAG_common_inclusion:
4742 return "DW_TAG_common_inclusion";
4743 case DW_TAG_inheritance:
4744 return "DW_TAG_inheritance";
4745 case DW_TAG_inlined_subroutine:
4746 return "DW_TAG_inlined_subroutine";
4747 case DW_TAG_module:
4748 return "DW_TAG_module";
4749 case DW_TAG_ptr_to_member_type:
4750 return "DW_TAG_ptr_to_member_type";
4751 case DW_TAG_set_type:
4752 return "DW_TAG_set_type";
4753 case DW_TAG_subrange_type:
4754 return "DW_TAG_subrange_type";
4755 case DW_TAG_with_stmt:
4756 return "DW_TAG_with_stmt";
4757 case DW_TAG_access_declaration:
4758 return "DW_TAG_access_declaration";
4759 case DW_TAG_base_type:
4760 return "DW_TAG_base_type";
4761 case DW_TAG_catch_block:
4762 return "DW_TAG_catch_block";
4763 case DW_TAG_const_type:
4764 return "DW_TAG_const_type";
4765 case DW_TAG_constant:
4766 return "DW_TAG_constant";
4767 case DW_TAG_enumerator:
4768 return "DW_TAG_enumerator";
4769 case DW_TAG_file_type:
4770 return "DW_TAG_file_type";
4771 case DW_TAG_friend:
4772 return "DW_TAG_friend";
4773 case DW_TAG_namelist:
4774 return "DW_TAG_namelist";
4775 case DW_TAG_namelist_item:
4776 return "DW_TAG_namelist_item";
4777 case DW_TAG_packed_type:
4778 return "DW_TAG_packed_type";
4779 case DW_TAG_subprogram:
4780 return "DW_TAG_subprogram";
4781 case DW_TAG_template_type_param:
4782 return "DW_TAG_template_type_param";
4783 case DW_TAG_template_value_param:
4784 return "DW_TAG_template_value_param";
4785 case DW_TAG_thrown_type:
4786 return "DW_TAG_thrown_type";
4787 case DW_TAG_try_block:
4788 return "DW_TAG_try_block";
4789 case DW_TAG_variant_part:
4790 return "DW_TAG_variant_part";
4791 case DW_TAG_variable:
4792 return "DW_TAG_variable";
4793 case DW_TAG_volatile_type:
4794 return "DW_TAG_volatile_type";
4795 case DW_TAG_MIPS_loop:
4796 return "DW_TAG_MIPS_loop";
4797 case DW_TAG_format_label:
4798 return "DW_TAG_format_label";
4799 case DW_TAG_function_template:
4800 return "DW_TAG_function_template";
4801 case DW_TAG_class_template:
4802 return "DW_TAG_class_template";
4803 default:
4804 return "DW_TAG_<unknown>";
4805 }
4806}
4807
4808/* Convert a DWARF attribute code into its string name. */
4809
4810static char *
4811dwarf_attr_name (attr)
4812 register unsigned attr;
4813{
4814 switch (attr)
4815 {
4816 case DW_AT_sibling:
4817 return "DW_AT_sibling";
4818 case DW_AT_location:
4819 return "DW_AT_location";
4820 case DW_AT_name:
4821 return "DW_AT_name";
4822 case DW_AT_ordering:
4823 return "DW_AT_ordering";
4824 case DW_AT_subscr_data:
4825 return "DW_AT_subscr_data";
4826 case DW_AT_byte_size:
4827 return "DW_AT_byte_size";
4828 case DW_AT_bit_offset:
4829 return "DW_AT_bit_offset";
4830 case DW_AT_bit_size:
4831 return "DW_AT_bit_size";
4832 case DW_AT_element_list:
4833 return "DW_AT_element_list";
4834 case DW_AT_stmt_list:
4835 return "DW_AT_stmt_list";
4836 case DW_AT_low_pc:
4837 return "DW_AT_low_pc";
4838 case DW_AT_high_pc:
4839 return "DW_AT_high_pc";
4840 case DW_AT_language:
4841 return "DW_AT_language";
4842 case DW_AT_member:
4843 return "DW_AT_member";
4844 case DW_AT_discr:
4845 return "DW_AT_discr";
4846 case DW_AT_discr_value:
4847 return "DW_AT_discr_value";
4848 case DW_AT_visibility:
4849 return "DW_AT_visibility";
4850 case DW_AT_import:
4851 return "DW_AT_import";
4852 case DW_AT_string_length:
4853 return "DW_AT_string_length";
4854 case DW_AT_common_reference:
4855 return "DW_AT_common_reference";
4856 case DW_AT_comp_dir:
4857 return "DW_AT_comp_dir";
4858 case DW_AT_const_value:
4859 return "DW_AT_const_value";
4860 case DW_AT_containing_type:
4861 return "DW_AT_containing_type";
4862 case DW_AT_default_value:
4863 return "DW_AT_default_value";
4864 case DW_AT_inline:
4865 return "DW_AT_inline";
4866 case DW_AT_is_optional:
4867 return "DW_AT_is_optional";
4868 case DW_AT_lower_bound:
4869 return "DW_AT_lower_bound";
4870 case DW_AT_producer:
4871 return "DW_AT_producer";
4872 case DW_AT_prototyped:
4873 return "DW_AT_prototyped";
4874 case DW_AT_return_addr:
4875 return "DW_AT_return_addr";
4876 case DW_AT_start_scope:
4877 return "DW_AT_start_scope";
4878 case DW_AT_stride_size:
4879 return "DW_AT_stride_size";
4880 case DW_AT_upper_bound:
4881 return "DW_AT_upper_bound";
4882 case DW_AT_abstract_origin:
4883 return "DW_AT_abstract_origin";
4884 case DW_AT_accessibility:
4885 return "DW_AT_accessibility";
4886 case DW_AT_address_class:
4887 return "DW_AT_address_class";
4888 case DW_AT_artificial:
4889 return "DW_AT_artificial";
4890 case DW_AT_base_types:
4891 return "DW_AT_base_types";
4892 case DW_AT_calling_convention:
4893 return "DW_AT_calling_convention";
4894 case DW_AT_count:
4895 return "DW_AT_count";
4896 case DW_AT_data_member_location:
4897 return "DW_AT_data_member_location";
4898 case DW_AT_decl_column:
4899 return "DW_AT_decl_column";
4900 case DW_AT_decl_file:
4901 return "DW_AT_decl_file";
4902 case DW_AT_decl_line:
4903 return "DW_AT_decl_line";
4904 case DW_AT_declaration:
4905 return "DW_AT_declaration";
4906 case DW_AT_discr_list:
4907 return "DW_AT_discr_list";
4908 case DW_AT_encoding:
4909 return "DW_AT_encoding";
4910 case DW_AT_external:
4911 return "DW_AT_external";
4912 case DW_AT_frame_base:
4913 return "DW_AT_frame_base";
4914 case DW_AT_friend:
4915 return "DW_AT_friend";
4916 case DW_AT_identifier_case:
4917 return "DW_AT_identifier_case";
4918 case DW_AT_macro_info:
4919 return "DW_AT_macro_info";
4920 case DW_AT_namelist_items:
4921 return "DW_AT_namelist_items";
4922 case DW_AT_priority:
4923 return "DW_AT_priority";
4924 case DW_AT_segment:
4925 return "DW_AT_segment";
4926 case DW_AT_specification:
4927 return "DW_AT_specification";
4928 case DW_AT_static_link:
4929 return "DW_AT_static_link";
4930 case DW_AT_type:
4931 return "DW_AT_type";
4932 case DW_AT_use_location:
4933 return "DW_AT_use_location";
4934 case DW_AT_variable_parameter:
4935 return "DW_AT_variable_parameter";
4936 case DW_AT_virtuality:
4937 return "DW_AT_virtuality";
4938 case DW_AT_vtable_elem_location:
4939 return "DW_AT_vtable_elem_location";
4940
4941#ifdef MIPS
4942 case DW_AT_MIPS_fde:
4943 return "DW_AT_MIPS_fde";
4944 case DW_AT_MIPS_loop_begin:
4945 return "DW_AT_MIPS_loop_begin";
4946 case DW_AT_MIPS_tail_loop_begin:
4947 return "DW_AT_MIPS_tail_loop_begin";
4948 case DW_AT_MIPS_epilog_begin:
4949 return "DW_AT_MIPS_epilog_begin";
4950 case DW_AT_MIPS_loop_unroll_factor:
4951 return "DW_AT_MIPS_loop_unroll_factor";
4952 case DW_AT_MIPS_software_pipeline_depth:
4953 return "DW_AT_MIPS_software_pipeline_depth";
4954 case DW_AT_MIPS_linkage_name:
4955 return "DW_AT_MIPS_linkage_name";
4956#endif
4957
4958 case DW_AT_sf_names:
4959 return "DW_AT_sf_names";
4960 case DW_AT_src_info:
4961 return "DW_AT_src_info";
4962 case DW_AT_mac_info:
4963 return "DW_AT_mac_info";
4964 case DW_AT_src_coords:
4965 return "DW_AT_src_coords";
4966 case DW_AT_body_begin:
4967 return "DW_AT_body_begin";
4968 case DW_AT_body_end:
4969 return "DW_AT_body_end";
4970 default:
4971 return "DW_AT_<unknown>";
4972 }
4973}
4974
4975/* Convert a DWARF value form code into its string name. */
4976
4977static char *
4978dwarf_form_name (form)
4979 register unsigned form;
4980{
4981 switch (form)
4982 {
4983 case DW_FORM_addr:
4984 return "DW_FORM_addr";
4985 case DW_FORM_block2:
4986 return "DW_FORM_block2";
4987 case DW_FORM_block4:
4988 return "DW_FORM_block4";
4989 case DW_FORM_data2:
4990 return "DW_FORM_data2";
4991 case DW_FORM_data4:
4992 return "DW_FORM_data4";
4993 case DW_FORM_data8:
4994 return "DW_FORM_data8";
4995 case DW_FORM_string:
4996 return "DW_FORM_string";
4997 case DW_FORM_block:
4998 return "DW_FORM_block";
4999 case DW_FORM_block1:
5000 return "DW_FORM_block1";
5001 case DW_FORM_data1:
5002 return "DW_FORM_data1";
5003 case DW_FORM_flag:
5004 return "DW_FORM_flag";
5005 case DW_FORM_sdata:
5006 return "DW_FORM_sdata";
5007 case DW_FORM_strp:
5008 return "DW_FORM_strp";
5009 case DW_FORM_udata:
5010 return "DW_FORM_udata";
5011 case DW_FORM_ref_addr:
5012 return "DW_FORM_ref_addr";
5013 case DW_FORM_ref1:
5014 return "DW_FORM_ref1";
5015 case DW_FORM_ref2:
5016 return "DW_FORM_ref2";
5017 case DW_FORM_ref4:
5018 return "DW_FORM_ref4";
5019 case DW_FORM_ref8:
5020 return "DW_FORM_ref8";
5021 case DW_FORM_ref_udata:
5022 return "DW_FORM_ref_udata";
5023 case DW_FORM_indirect:
5024 return "DW_FORM_indirect";
5025 default:
5026 return "DW_FORM_<unknown>";
5027 }
5028}
5029
5030/* Convert a DWARF stack opcode into its string name. */
5031
5032static char *
5033dwarf_stack_op_name (op)
5034 register unsigned op;
5035{
5036 switch (op)
5037 {
5038 case DW_OP_addr:
5039 return "DW_OP_addr";
5040 case DW_OP_deref:
5041 return "DW_OP_deref";
5042 case DW_OP_const1u:
5043 return "DW_OP_const1u";
5044 case DW_OP_const1s:
5045 return "DW_OP_const1s";
5046 case DW_OP_const2u:
5047 return "DW_OP_const2u";
5048 case DW_OP_const2s:
5049 return "DW_OP_const2s";
5050 case DW_OP_const4u:
5051 return "DW_OP_const4u";
5052 case DW_OP_const4s:
5053 return "DW_OP_const4s";
5054 case DW_OP_const8u:
5055 return "DW_OP_const8u";
5056 case DW_OP_const8s:
5057 return "DW_OP_const8s";
5058 case DW_OP_constu:
5059 return "DW_OP_constu";
5060 case DW_OP_consts:
5061 return "DW_OP_consts";
5062 case DW_OP_dup:
5063 return "DW_OP_dup";
5064 case DW_OP_drop:
5065 return "DW_OP_drop";
5066 case DW_OP_over:
5067 return "DW_OP_over";
5068 case DW_OP_pick:
5069 return "DW_OP_pick";
5070 case DW_OP_swap:
5071 return "DW_OP_swap";
5072 case DW_OP_rot:
5073 return "DW_OP_rot";
5074 case DW_OP_xderef:
5075 return "DW_OP_xderef";
5076 case DW_OP_abs:
5077 return "DW_OP_abs";
5078 case DW_OP_and:
5079 return "DW_OP_and";
5080 case DW_OP_div:
5081 return "DW_OP_div";
5082 case DW_OP_minus:
5083 return "DW_OP_minus";
5084 case DW_OP_mod:
5085 return "DW_OP_mod";
5086 case DW_OP_mul:
5087 return "DW_OP_mul";
5088 case DW_OP_neg:
5089 return "DW_OP_neg";
5090 case DW_OP_not:
5091 return "DW_OP_not";
5092 case DW_OP_or:
5093 return "DW_OP_or";
5094 case DW_OP_plus:
5095 return "DW_OP_plus";
5096 case DW_OP_plus_uconst:
5097 return "DW_OP_plus_uconst";
5098 case DW_OP_shl:
5099 return "DW_OP_shl";
5100 case DW_OP_shr:
5101 return "DW_OP_shr";
5102 case DW_OP_shra:
5103 return "DW_OP_shra";
5104 case DW_OP_xor:
5105 return "DW_OP_xor";
5106 case DW_OP_bra:
5107 return "DW_OP_bra";
5108 case DW_OP_eq:
5109 return "DW_OP_eq";
5110 case DW_OP_ge:
5111 return "DW_OP_ge";
5112 case DW_OP_gt:
5113 return "DW_OP_gt";
5114 case DW_OP_le:
5115 return "DW_OP_le";
5116 case DW_OP_lt:
5117 return "DW_OP_lt";
5118 case DW_OP_ne:
5119 return "DW_OP_ne";
5120 case DW_OP_skip:
5121 return "DW_OP_skip";
5122 case DW_OP_lit0:
5123 return "DW_OP_lit0";
5124 case DW_OP_lit1:
5125 return "DW_OP_lit1";
5126 case DW_OP_lit2:
5127 return "DW_OP_lit2";
5128 case DW_OP_lit3:
5129 return "DW_OP_lit3";
5130 case DW_OP_lit4:
5131 return "DW_OP_lit4";
5132 case DW_OP_lit5:
5133 return "DW_OP_lit5";
5134 case DW_OP_lit6:
5135 return "DW_OP_lit6";
5136 case DW_OP_lit7:
5137 return "DW_OP_lit7";
5138 case DW_OP_lit8:
5139 return "DW_OP_lit8";
5140 case DW_OP_lit9:
5141 return "DW_OP_lit9";
5142 case DW_OP_lit10:
5143 return "DW_OP_lit10";
5144 case DW_OP_lit11:
5145 return "DW_OP_lit11";
5146 case DW_OP_lit12:
5147 return "DW_OP_lit12";
5148 case DW_OP_lit13:
5149 return "DW_OP_lit13";
5150 case DW_OP_lit14:
5151 return "DW_OP_lit14";
5152 case DW_OP_lit15:
5153 return "DW_OP_lit15";
5154 case DW_OP_lit16:
5155 return "DW_OP_lit16";
5156 case DW_OP_lit17:
5157 return "DW_OP_lit17";
5158 case DW_OP_lit18:
5159 return "DW_OP_lit18";
5160 case DW_OP_lit19:
5161 return "DW_OP_lit19";
5162 case DW_OP_lit20:
5163 return "DW_OP_lit20";
5164 case DW_OP_lit21:
5165 return "DW_OP_lit21";
5166 case DW_OP_lit22:
5167 return "DW_OP_lit22";
5168 case DW_OP_lit23:
5169 return "DW_OP_lit23";
5170 case DW_OP_lit24:
5171 return "DW_OP_lit24";
5172 case DW_OP_lit25:
5173 return "DW_OP_lit25";
5174 case DW_OP_lit26:
5175 return "DW_OP_lit26";
5176 case DW_OP_lit27:
5177 return "DW_OP_lit27";
5178 case DW_OP_lit28:
5179 return "DW_OP_lit28";
5180 case DW_OP_lit29:
5181 return "DW_OP_lit29";
5182 case DW_OP_lit30:
5183 return "DW_OP_lit30";
5184 case DW_OP_lit31:
5185 return "DW_OP_lit31";
5186 case DW_OP_reg0:
5187 return "DW_OP_reg0";
5188 case DW_OP_reg1:
5189 return "DW_OP_reg1";
5190 case DW_OP_reg2:
5191 return "DW_OP_reg2";
5192 case DW_OP_reg3:
5193 return "DW_OP_reg3";
5194 case DW_OP_reg4:
5195 return "DW_OP_reg4";
5196 case DW_OP_reg5:
5197 return "DW_OP_reg5";
5198 case DW_OP_reg6:
5199 return "DW_OP_reg6";
5200 case DW_OP_reg7:
5201 return "DW_OP_reg7";
5202 case DW_OP_reg8:
5203 return "DW_OP_reg8";
5204 case DW_OP_reg9:
5205 return "DW_OP_reg9";
5206 case DW_OP_reg10:
5207 return "DW_OP_reg10";
5208 case DW_OP_reg11:
5209 return "DW_OP_reg11";
5210 case DW_OP_reg12:
5211 return "DW_OP_reg12";
5212 case DW_OP_reg13:
5213 return "DW_OP_reg13";
5214 case DW_OP_reg14:
5215 return "DW_OP_reg14";
5216 case DW_OP_reg15:
5217 return "DW_OP_reg15";
5218 case DW_OP_reg16:
5219 return "DW_OP_reg16";
5220 case DW_OP_reg17:
5221 return "DW_OP_reg17";
5222 case DW_OP_reg18:
5223 return "DW_OP_reg18";
5224 case DW_OP_reg19:
5225 return "DW_OP_reg19";
5226 case DW_OP_reg20:
5227 return "DW_OP_reg20";
5228 case DW_OP_reg21:
5229 return "DW_OP_reg21";
5230 case DW_OP_reg22:
5231 return "DW_OP_reg22";
5232 case DW_OP_reg23:
5233 return "DW_OP_reg23";
5234 case DW_OP_reg24:
5235 return "DW_OP_reg24";
5236 case DW_OP_reg25:
5237 return "DW_OP_reg25";
5238 case DW_OP_reg26:
5239 return "DW_OP_reg26";
5240 case DW_OP_reg27:
5241 return "DW_OP_reg27";
5242 case DW_OP_reg28:
5243 return "DW_OP_reg28";
5244 case DW_OP_reg29:
5245 return "DW_OP_reg29";
5246 case DW_OP_reg30:
5247 return "DW_OP_reg30";
5248 case DW_OP_reg31:
5249 return "DW_OP_reg31";
5250 case DW_OP_breg0:
5251 return "DW_OP_breg0";
5252 case DW_OP_breg1:
5253 return "DW_OP_breg1";
5254 case DW_OP_breg2:
5255 return "DW_OP_breg2";
5256 case DW_OP_breg3:
5257 return "DW_OP_breg3";
5258 case DW_OP_breg4:
5259 return "DW_OP_breg4";
5260 case DW_OP_breg5:
5261 return "DW_OP_breg5";
5262 case DW_OP_breg6:
5263 return "DW_OP_breg6";
5264 case DW_OP_breg7:
5265 return "DW_OP_breg7";
5266 case DW_OP_breg8:
5267 return "DW_OP_breg8";
5268 case DW_OP_breg9:
5269 return "DW_OP_breg9";
5270 case DW_OP_breg10:
5271 return "DW_OP_breg10";
5272 case DW_OP_breg11:
5273 return "DW_OP_breg11";
5274 case DW_OP_breg12:
5275 return "DW_OP_breg12";
5276 case DW_OP_breg13:
5277 return "DW_OP_breg13";
5278 case DW_OP_breg14:
5279 return "DW_OP_breg14";
5280 case DW_OP_breg15:
5281 return "DW_OP_breg15";
5282 case DW_OP_breg16:
5283 return "DW_OP_breg16";
5284 case DW_OP_breg17:
5285 return "DW_OP_breg17";
5286 case DW_OP_breg18:
5287 return "DW_OP_breg18";
5288 case DW_OP_breg19:
5289 return "DW_OP_breg19";
5290 case DW_OP_breg20:
5291 return "DW_OP_breg20";
5292 case DW_OP_breg21:
5293 return "DW_OP_breg21";
5294 case DW_OP_breg22:
5295 return "DW_OP_breg22";
5296 case DW_OP_breg23:
5297 return "DW_OP_breg23";
5298 case DW_OP_breg24:
5299 return "DW_OP_breg24";
5300 case DW_OP_breg25:
5301 return "DW_OP_breg25";
5302 case DW_OP_breg26:
5303 return "DW_OP_breg26";
5304 case DW_OP_breg27:
5305 return "DW_OP_breg27";
5306 case DW_OP_breg28:
5307 return "DW_OP_breg28";
5308 case DW_OP_breg29:
5309 return "DW_OP_breg29";
5310 case DW_OP_breg30:
5311 return "DW_OP_breg30";
5312 case DW_OP_breg31:
5313 return "DW_OP_breg31";
5314 case DW_OP_regx:
5315 return "DW_OP_regx";
5316 case DW_OP_fbreg:
5317 return "DW_OP_fbreg";
5318 case DW_OP_bregx:
5319 return "DW_OP_bregx";
5320 case DW_OP_piece:
5321 return "DW_OP_piece";
5322 case DW_OP_deref_size:
5323 return "DW_OP_deref_size";
5324 case DW_OP_xderef_size:
5325 return "DW_OP_xderef_size";
5326 case DW_OP_nop:
5327 return "DW_OP_nop";
5328 default:
5329 return "OP_<unknown>";
5330 }
5331}
5332
5333static char *
5334dwarf_bool_name (mybool)
5335 unsigned mybool;
5336{
5337 if (mybool)
5338 return "TRUE";
5339 else
5340 return "FALSE";
5341}
5342
5343/* Convert a DWARF type code into its string name. */
5344
5345static char *
5346dwarf_type_encoding_name (enc)
5347 register unsigned enc;
5348{
5349 switch (enc)
5350 {
5351 case DW_ATE_address:
5352 return "DW_ATE_address";
5353 case DW_ATE_boolean:
5354 return "DW_ATE_boolean";
5355 case DW_ATE_complex_float:
5356 return "DW_ATE_complex_float";
5357 case DW_ATE_float:
5358 return "DW_ATE_float";
5359 case DW_ATE_signed:
5360 return "DW_ATE_signed";
5361 case DW_ATE_signed_char:
5362 return "DW_ATE_signed_char";
5363 case DW_ATE_unsigned:
5364 return "DW_ATE_unsigned";
5365 case DW_ATE_unsigned_char:
5366 return "DW_ATE_unsigned_char";
5367 default:
5368 return "DW_ATE_<unknown>";
5369 }
5370}
5371
5372/* Convert a DWARF call frame info operation to its string name. */
5373
5374#if 0
5375static char *
5376dwarf_cfi_name (cfi_opc)
5377 register unsigned cfi_opc;
5378{
5379 switch (cfi_opc)
5380 {
5381 case DW_CFA_advance_loc:
5382 return "DW_CFA_advance_loc";
5383 case DW_CFA_offset:
5384 return "DW_CFA_offset";
5385 case DW_CFA_restore:
5386 return "DW_CFA_restore";
5387 case DW_CFA_nop:
5388 return "DW_CFA_nop";
5389 case DW_CFA_set_loc:
5390 return "DW_CFA_set_loc";
5391 case DW_CFA_advance_loc1:
5392 return "DW_CFA_advance_loc1";
5393 case DW_CFA_advance_loc2:
5394 return "DW_CFA_advance_loc2";
5395 case DW_CFA_advance_loc4:
5396 return "DW_CFA_advance_loc4";
5397 case DW_CFA_offset_extended:
5398 return "DW_CFA_offset_extended";
5399 case DW_CFA_restore_extended:
5400 return "DW_CFA_restore_extended";
5401 case DW_CFA_undefined:
5402 return "DW_CFA_undefined";
5403 case DW_CFA_same_value:
5404 return "DW_CFA_same_value";
5405 case DW_CFA_register:
5406 return "DW_CFA_register";
5407 case DW_CFA_remember_state:
5408 return "DW_CFA_remember_state";
5409 case DW_CFA_restore_state:
5410 return "DW_CFA_restore_state";
5411 case DW_CFA_def_cfa:
5412 return "DW_CFA_def_cfa";
5413 case DW_CFA_def_cfa_register:
5414 return "DW_CFA_def_cfa_register";
5415 case DW_CFA_def_cfa_offset:
5416 return "DW_CFA_def_cfa_offset";
5417 /* SGI/MIPS specific */
5418 case DW_CFA_MIPS_advance_loc8:
5419 return "DW_CFA_MIPS_advance_loc8";
5420 default:
5421 return "DW_CFA_<unknown>";
5422 }
5423}
5424#endif
5425
5426void
5427dump_die (die)
5428 struct die_info *die;
5429{
5430 unsigned int i;
5431
5432 fprintf (stderr, "Die: %s (abbrev = %d, offset = %d)\n",
5433 dwarf_tag_name (die->tag), die->abbrev, die->offset);
5434 fprintf (stderr, "\thas children: %s\n",
5435 dwarf_bool_name (die->has_children));
5436
5437 fprintf (stderr, "\tattributes:\n");
5438 for (i = 0; i < die->num_attrs; ++i)
5439 {
5440 fprintf (stderr, "\t\t%s (%s) ",
5441 dwarf_attr_name (die->attrs[i].name),
5442 dwarf_form_name (die->attrs[i].form));
5443 switch (die->attrs[i].form)
5444 {
5445 case DW_FORM_ref_addr:
5446 case DW_FORM_addr:
5447 fprintf (stderr, "address: ");
5448 print_address_numeric (DW_ADDR (&die->attrs[i]), 1, gdb_stderr);
5449 break;
5450 case DW_FORM_block2:
5451 case DW_FORM_block4:
5452 case DW_FORM_block:
5453 case DW_FORM_block1:
5454 fprintf (stderr, "block: size %d", DW_BLOCK (&die->attrs[i])->size);
5455 break;
5456 case DW_FORM_data1:
5457 case DW_FORM_data2:
5458 case DW_FORM_data4:
5459 case DW_FORM_ref1:
5460 case DW_FORM_ref2:
5461 case DW_FORM_ref4:
5462 case DW_FORM_udata:
5463 case DW_FORM_sdata:
5464 fprintf (stderr, "constant: %d", DW_UNSND (&die->attrs[i]));
5465 break;
5466 case DW_FORM_string:
5467 fprintf (stderr, "string: \"%s\"",
5468 DW_STRING (&die->attrs[i])
c5aa993b 5469 ? DW_STRING (&die->attrs[i]) : "");
c906108c
SS
5470 break;
5471 case DW_FORM_flag:
5472 if (DW_UNSND (&die->attrs[i]))
5473 fprintf (stderr, "flag: TRUE");
5474 else
5475 fprintf (stderr, "flag: FALSE");
5476 break;
5477 case DW_FORM_strp: /* we do not support separate string
5478 section yet */
5479 case DW_FORM_indirect: /* we do not handle indirect yet */
5480 case DW_FORM_data8: /* we do not have 64 bit quantities */
5481 default:
5482 fprintf (stderr, "unsupported attribute form: %d.",
c5aa993b 5483 die->attrs[i].form);
c906108c
SS
5484 }
5485 fprintf (stderr, "\n");
5486 }
5487}
5488
5489void
5490dump_die_list (die)
5491 struct die_info *die;
5492{
5493 while (die)
5494 {
5495 dump_die (die);
5496 die = die->next;
5497 }
5498}
5499
5500void
5501store_in_ref_table (offset, die)
5502 unsigned int offset;
5503 struct die_info *die;
5504{
5505 int h;
5506 struct die_info *old;
5507
5508 h = (offset % REF_HASH_SIZE);
5509 old = die_ref_table[h];
5510 die->next_ref = old;
5511 die_ref_table[h] = die;
5512}
5513
5514
5515static void
5516dwarf2_empty_die_ref_table ()
5517{
5518 memset (die_ref_table, 0, sizeof (die_ref_table));
5519}
5520
5521static unsigned int
5522dwarf2_get_ref_die_offset (attr)
5523 struct attribute *attr;
5524{
5525 unsigned int result = 0;
5526
5527 switch (attr->form)
5528 {
5529 case DW_FORM_ref_addr:
5530 result = DW_ADDR (attr);
5531 break;
5532 case DW_FORM_ref1:
5533 case DW_FORM_ref2:
5534 case DW_FORM_ref4:
5535 case DW_FORM_ref_udata:
5536 result = cu_header_offset + DW_UNSND (attr);
5537 break;
5538 default:
5539 complain (&dwarf2_unsupported_die_ref_attr, dwarf_form_name (attr->form));
5540 }
5541 return result;
5542}
5543
5544struct die_info *
5545follow_die_ref (offset)
5546 unsigned int offset;
5547{
5548 struct die_info *die;
5549 int h;
5550
5551 h = (offset % REF_HASH_SIZE);
5552 die = die_ref_table[h];
5553 while (die)
5554 {
5555 if (die->offset == offset)
5556 {
5557 return die;
5558 }
5559 die = die->next_ref;
5560 }
5561 return NULL;
5562}
5563
5564static struct type *
5565dwarf2_fundamental_type (objfile, typeid)
5566 struct objfile *objfile;
5567 int typeid;
5568{
5569 if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
5570 {
5571 error ("Dwarf Error: internal error - invalid fundamental type id %d.",
5572 typeid);
5573 }
5574
5575 /* Look for this particular type in the fundamental type vector. If
5576 one is not found, create and install one appropriate for the
5577 current language and the current target machine. */
5578
5579 if (ftypes[typeid] == NULL)
5580 {
5581 ftypes[typeid] = cu_language_defn->la_fund_type (objfile, typeid);
5582 }
5583
5584 return (ftypes[typeid]);
5585}
5586
5587/* Decode simple location descriptions.
5588 Given a pointer to a dwarf block that defines a location, compute
5589 the location and return the value.
5590
5591 FIXME: This is a kludge until we figure out a better
5592 way to handle the location descriptions.
5593 Gdb's design does not mesh well with the DWARF2 notion of a location
5594 computing interpreter, which is a shame because the flexibility goes unused.
5595 FIXME: Implement more operations as necessary.
5596
5597 A location description containing no operations indicates that the
5598 object is optimized out. The global optimized_out flag is set for
5599 those, the return value is meaningless.
5600
5601 When the result is a register number, the global isreg flag is set,
5602 otherwise it is cleared.
5603
5604 When the result is a base register offset, the global offreg flag is set
5605 and the register number is returned in basereg, otherwise it is cleared.
5606
5607 When the DW_OP_fbreg operation is encountered without a corresponding
5608 DW_AT_frame_base attribute, the global islocal flag is set.
5609 Hopefully the machine dependent code knows how to set up a virtual
5610 frame pointer for the local references.
c5aa993b 5611
c906108c
SS
5612 Note that stack[0] is unused except as a default error return.
5613 Note that stack overflow is not yet handled. */
5614
5615static CORE_ADDR
5616decode_locdesc (blk, objfile)
5617 struct dwarf_block *blk;
5618 struct objfile *objfile;
5619{
5620 int i;
5621 int size = blk->size;
5622 char *data = blk->data;
5623 CORE_ADDR stack[64];
5624 int stacki;
5625 unsigned int bytes_read, unsnd;
5626 unsigned char op;
5627
5628 i = 0;
5629 stacki = 0;
5630 stack[stacki] = 0;
5631 isreg = 0;
5632 offreg = 0;
7a292a7a 5633 isderef = 0;
c906108c
SS
5634 islocal = 0;
5635 optimized_out = 1;
5636
5637 while (i < size)
5638 {
5639 optimized_out = 0;
5640 op = data[i++];
5641 switch (op)
5642 {
5643 case DW_OP_reg0:
5644 case DW_OP_reg1:
5645 case DW_OP_reg2:
5646 case DW_OP_reg3:
5647 case DW_OP_reg4:
5648 case DW_OP_reg5:
5649 case DW_OP_reg6:
5650 case DW_OP_reg7:
5651 case DW_OP_reg8:
5652 case DW_OP_reg9:
5653 case DW_OP_reg10:
5654 case DW_OP_reg11:
5655 case DW_OP_reg12:
5656 case DW_OP_reg13:
5657 case DW_OP_reg14:
5658 case DW_OP_reg15:
5659 case DW_OP_reg16:
5660 case DW_OP_reg17:
5661 case DW_OP_reg18:
5662 case DW_OP_reg19:
5663 case DW_OP_reg20:
5664 case DW_OP_reg21:
5665 case DW_OP_reg22:
5666 case DW_OP_reg23:
5667 case DW_OP_reg24:
5668 case DW_OP_reg25:
5669 case DW_OP_reg26:
5670 case DW_OP_reg27:
5671 case DW_OP_reg28:
5672 case DW_OP_reg29:
5673 case DW_OP_reg30:
5674 case DW_OP_reg31:
5675 isreg = 1;
5676 stack[++stacki] = op - DW_OP_reg0;
5677 break;
5678
5679 case DW_OP_regx:
5680 isreg = 1;
5681 unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5682 i += bytes_read;
5683#if defined(HARRIS_TARGET) && defined(_M88K)
5684 /* The Harris 88110 gdb ports have long kept their special reg
5685 numbers between their gp-regs and their x-regs. This is
5686 not how our dwarf is generated. Punt. */
5687 unsnd += 6;
5688#endif
5689 stack[++stacki] = unsnd;
5690 break;
5691
5692 case DW_OP_breg0:
5693 case DW_OP_breg1:
5694 case DW_OP_breg2:
5695 case DW_OP_breg3:
5696 case DW_OP_breg4:
5697 case DW_OP_breg5:
5698 case DW_OP_breg6:
5699 case DW_OP_breg7:
5700 case DW_OP_breg8:
5701 case DW_OP_breg9:
5702 case DW_OP_breg10:
5703 case DW_OP_breg11:
5704 case DW_OP_breg12:
5705 case DW_OP_breg13:
5706 case DW_OP_breg14:
5707 case DW_OP_breg15:
5708 case DW_OP_breg16:
5709 case DW_OP_breg17:
5710 case DW_OP_breg18:
5711 case DW_OP_breg19:
5712 case DW_OP_breg20:
5713 case DW_OP_breg21:
5714 case DW_OP_breg22:
5715 case DW_OP_breg23:
5716 case DW_OP_breg24:
5717 case DW_OP_breg25:
5718 case DW_OP_breg26:
5719 case DW_OP_breg27:
5720 case DW_OP_breg28:
5721 case DW_OP_breg29:
5722 case DW_OP_breg30:
5723 case DW_OP_breg31:
5724 offreg = 1;
5725 basereg = op - DW_OP_breg0;
5726 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5727 i += bytes_read;
5728 break;
5729
dfcd3bfb
JM
5730 case DW_OP_bregx:
5731 offreg = 1;
5732 basereg = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5733 i += bytes_read;
5734 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5735 i += bytes_read;
5736 break;
5737
c906108c
SS
5738 case DW_OP_fbreg:
5739 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5740 i += bytes_read;
5741 if (frame_base_reg >= 0)
5742 {
5743 offreg = 1;
5744 basereg = frame_base_reg;
5745 stack[stacki] += frame_base_offset;
5746 }
5747 else
5748 {
5749 complain (&dwarf2_missing_at_frame_base);
5750 islocal = 1;
5751 }
5752 break;
5753
5754 case DW_OP_addr:
5755 stack[++stacki] = read_address (objfile->obfd, &data[i]);
5756 i += address_size;
5757 break;
5758
5759 case DW_OP_const1u:
5760 stack[++stacki] = read_1_byte (objfile->obfd, &data[i]);
5761 i += 1;
5762 break;
5763
5764 case DW_OP_const1s:
5765 stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]);
5766 i += 1;
5767 break;
5768
5769 case DW_OP_const2u:
5770 stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]);
5771 i += 2;
5772 break;
5773
5774 case DW_OP_const2s:
5775 stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]);
5776 i += 2;
5777 break;
5778
5779 case DW_OP_const4u:
5780 stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]);
5781 i += 4;
5782 break;
5783
5784 case DW_OP_const4s:
5785 stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]);
5786 i += 4;
5787 break;
5788
5789 case DW_OP_constu:
5790 stack[++stacki] = read_unsigned_leb128 (NULL, (data + i),
c5aa993b 5791 &bytes_read);
c906108c
SS
5792 i += bytes_read;
5793 break;
5794
5795 case DW_OP_consts:
5796 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5797 i += bytes_read;
5798 break;
5799
5800 case DW_OP_plus:
5801 stack[stacki - 1] += stack[stacki];
5802 stacki--;
5803 break;
5804
5805 case DW_OP_plus_uconst:
5806 stack[stacki] += read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5807 i += bytes_read;
5808 break;
5809
5810 case DW_OP_minus:
5811 stack[stacki - 1] = stack[stacki] - stack[stacki - 1];
5812 stacki--;
5813 break;
5814
7a292a7a
SS
5815 case DW_OP_deref:
5816 isderef = 1;
5817 /* If we're not the last op, then we definitely can't encode
c5aa993b 5818 this using GDB's address_class enum. */
7a292a7a
SS
5819 if (i < size)
5820 complain (&dwarf2_complex_location_expr);
5821 break;
5822
c906108c 5823 default:
c5aa993b 5824 complain (&dwarf2_unsupported_stack_op, dwarf_stack_op_name (op));
c906108c
SS
5825 return (stack[stacki]);
5826 }
5827 }
5828 return (stack[stacki]);
5829}
5830
5831/* memory allocation interface */
5832
5833/* ARGSUSED */
5834static void
5835dwarf2_free_tmp_obstack (ignore)
5836 PTR ignore;
5837{
5838 obstack_free (&dwarf2_tmp_obstack, NULL);
5839}
5840
5841static struct dwarf_block *
5842dwarf_alloc_block ()
5843{
5844 struct dwarf_block *blk;
5845
5846 blk = (struct dwarf_block *)
5847 obstack_alloc (&dwarf2_tmp_obstack, sizeof (struct dwarf_block));
5848 return (blk);
5849}
5850
5851static struct abbrev_info *
5852dwarf_alloc_abbrev ()
5853{
5854 struct abbrev_info *abbrev;
5855
5856 abbrev = (struct abbrev_info *) xmalloc (sizeof (struct abbrev_info));
5857 memset (abbrev, 0, sizeof (struct abbrev_info));
5858 return (abbrev);
5859}
5860
5861static struct die_info *
5862dwarf_alloc_die ()
5863{
5864 struct die_info *die;
5865
5866 die = (struct die_info *) xmalloc (sizeof (struct die_info));
5867 memset (die, 0, sizeof (struct die_info));
5868 return (die);
5869}