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