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