]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/dwarf2read.c
2002-01-20 Daniel Jacobowitz <drow@mvista.com>
[thirdparty/binutils-gdb.git] / gdb / dwarf2read.c
1 /* DWARF 2 debugging format support for GDB.
2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
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 /* Check for artificial methods. */
2172 attr = dwarf_attr (die, DW_AT_artificial);
2173 if (attr && DW_UNSND (attr) != 0)
2174 fnp->is_artificial = 1;
2175
2176 /* Get index in virtual function table if it is a virtual member function. */
2177 attr = dwarf_attr (die, DW_AT_vtable_elem_location);
2178 if (attr)
2179 fnp->voffset = decode_locdesc (DW_BLOCK (attr), objfile, cu_header) + 2;
2180 }
2181
2182 /* Create the vector of member function fields, and attach it to the type. */
2183
2184 static void
2185 dwarf2_attach_fn_fields_to_type (struct field_info *fip, struct type *type,
2186 struct objfile *objfile)
2187 {
2188 struct fnfieldlist *flp;
2189 int total_length = 0;
2190 int i;
2191
2192 ALLOCATE_CPLUS_STRUCT_TYPE (type);
2193 TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
2194 TYPE_ALLOC (type, sizeof (struct fn_fieldlist) * fip->nfnfields);
2195
2196 for (i = 0, flp = fip->fnfieldlists; i < fip->nfnfields; i++, flp++)
2197 {
2198 struct nextfnfield *nfp = flp->head;
2199 struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i);
2200 int k;
2201
2202 TYPE_FN_FIELDLIST_NAME (type, i) = flp->name;
2203 TYPE_FN_FIELDLIST_LENGTH (type, i) = flp->length;
2204 fn_flp->fn_fields = (struct fn_field *)
2205 TYPE_ALLOC (type, sizeof (struct fn_field) * flp->length);
2206 for (k = flp->length; (k--, nfp); nfp = nfp->next)
2207 fn_flp->fn_fields[k] = nfp->fnfield;
2208
2209 total_length += flp->length;
2210 }
2211
2212 TYPE_NFN_FIELDS (type) = fip->nfnfields;
2213 TYPE_NFN_FIELDS_TOTAL (type) = total_length;
2214 }
2215
2216 /* Called when we find the DIE that starts a structure or union scope
2217 (definition) to process all dies that define the members of the
2218 structure or union.
2219
2220 NOTE: we need to call struct_type regardless of whether or not the
2221 DIE has an at_name attribute, since it might be an anonymous
2222 structure or union. This gets the type entered into our set of
2223 user defined types.
2224
2225 However, if the structure is incomplete (an opaque struct/union)
2226 then suppress creating a symbol table entry for it since gdb only
2227 wants to find the one with the complete definition. Note that if
2228 it is complete, we just call new_symbol, which does it's own
2229 checking about whether the struct/union is anonymous or not (and
2230 suppresses creating a symbol table entry itself). */
2231
2232 static void
2233 read_structure_scope (struct die_info *die, struct objfile *objfile,
2234 const struct comp_unit_head *cu_header)
2235 {
2236 struct type *type;
2237 struct attribute *attr;
2238
2239 type = alloc_type (objfile);
2240
2241 INIT_CPLUS_SPECIFIC (type);
2242 attr = dwarf_attr (die, DW_AT_name);
2243 if (attr && DW_STRING (attr))
2244 {
2245 TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
2246 strlen (DW_STRING (attr)),
2247 &objfile->type_obstack);
2248 }
2249
2250 if (die->tag == DW_TAG_structure_type)
2251 {
2252 TYPE_CODE (type) = TYPE_CODE_STRUCT;
2253 }
2254 else if (die->tag == DW_TAG_union_type)
2255 {
2256 TYPE_CODE (type) = TYPE_CODE_UNION;
2257 }
2258 else
2259 {
2260 /* FIXME: TYPE_CODE_CLASS is currently defined to TYPE_CODE_STRUCT
2261 in gdbtypes.h. */
2262 TYPE_CODE (type) = TYPE_CODE_CLASS;
2263 }
2264
2265 attr = dwarf_attr (die, DW_AT_byte_size);
2266 if (attr)
2267 {
2268 TYPE_LENGTH (type) = DW_UNSND (attr);
2269 }
2270 else
2271 {
2272 TYPE_LENGTH (type) = 0;
2273 }
2274
2275 /* We need to add the type field to the die immediately so we don't
2276 infinitely recurse when dealing with pointers to the structure
2277 type within the structure itself. */
2278 die->type = type;
2279
2280 if (die->has_children && ! die_is_declaration (die))
2281 {
2282 struct field_info fi;
2283 struct die_info *child_die;
2284 struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
2285
2286 memset (&fi, 0, sizeof (struct field_info));
2287
2288 child_die = die->next;
2289
2290 while (child_die && child_die->tag)
2291 {
2292 if (child_die->tag == DW_TAG_member)
2293 {
2294 dwarf2_add_field (&fi, child_die, objfile, cu_header);
2295 }
2296 else if (child_die->tag == DW_TAG_variable)
2297 {
2298 /* C++ static member. */
2299 dwarf2_add_field (&fi, child_die, objfile, cu_header);
2300 }
2301 else if (child_die->tag == DW_TAG_subprogram)
2302 {
2303 /* C++ member function. */
2304 process_die (child_die, objfile, cu_header);
2305 dwarf2_add_member_fn (&fi, child_die, type, objfile, cu_header);
2306 }
2307 else if (child_die->tag == DW_TAG_inheritance)
2308 {
2309 /* C++ base class field. */
2310 dwarf2_add_field (&fi, child_die, objfile, cu_header);
2311 }
2312 else
2313 {
2314 process_die (child_die, objfile, cu_header);
2315 }
2316 child_die = sibling_die (child_die);
2317 }
2318
2319 /* Attach fields and member functions to the type. */
2320 if (fi.nfields)
2321 dwarf2_attach_fields_to_type (&fi, type, objfile);
2322 if (fi.nfnfields)
2323 {
2324 dwarf2_attach_fn_fields_to_type (&fi, type, objfile);
2325
2326 /* Get the type which refers to the base class (possibly this
2327 class itself) which contains the vtable pointer for the current
2328 class from the DW_AT_containing_type attribute. */
2329
2330 if (dwarf_attr (die, DW_AT_containing_type) != NULL)
2331 {
2332 struct type *t = die_containing_type (die, objfile, cu_header);
2333
2334 TYPE_VPTR_BASETYPE (type) = t;
2335 if (type == t)
2336 {
2337 static const char vptr_name[] =
2338 {'_', 'v', 'p', 't', 'r', '\0'};
2339 int i;
2340
2341 /* Our own class provides vtbl ptr. */
2342 for (i = TYPE_NFIELDS (t) - 1;
2343 i >= TYPE_N_BASECLASSES (t);
2344 --i)
2345 {
2346 char *fieldname = TYPE_FIELD_NAME (t, i);
2347
2348 if (STREQN (fieldname, vptr_name, strlen (vptr_name) - 1)
2349 && is_cplus_marker (fieldname[strlen (vptr_name)]))
2350 {
2351 TYPE_VPTR_FIELDNO (type) = i;
2352 break;
2353 }
2354 }
2355
2356 /* Complain if virtual function table field not found. */
2357 if (i < TYPE_N_BASECLASSES (t))
2358 complain (&dwarf2_vtbl_not_found_complaint,
2359 TYPE_TAG_NAME (type) ? TYPE_TAG_NAME (type) : "");
2360 }
2361 else
2362 {
2363 TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t);
2364 }
2365 }
2366 }
2367
2368 new_symbol (die, type, objfile, cu_header);
2369
2370 do_cleanups (back_to);
2371 }
2372 else
2373 {
2374 /* No children, must be stub. */
2375 TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
2376 }
2377
2378 finish_cv_type (die->type);
2379 }
2380
2381 /* Given a pointer to a die which begins an enumeration, process all
2382 the dies that define the members of the enumeration.
2383
2384 This will be much nicer in draft 6 of the DWARF spec when our
2385 members will be dies instead squished into the DW_AT_element_list
2386 attribute.
2387
2388 NOTE: We reverse the order of the element list. */
2389
2390 static void
2391 read_enumeration (struct die_info *die, struct objfile *objfile,
2392 const struct comp_unit_head *cu_header)
2393 {
2394 struct die_info *child_die;
2395 struct type *type;
2396 struct field *fields;
2397 struct attribute *attr;
2398 struct symbol *sym;
2399 int num_fields;
2400 int unsigned_enum = 1;
2401
2402 type = alloc_type (objfile);
2403
2404 TYPE_CODE (type) = TYPE_CODE_ENUM;
2405 attr = dwarf_attr (die, DW_AT_name);
2406 if (attr && DW_STRING (attr))
2407 {
2408 TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
2409 strlen (DW_STRING (attr)),
2410 &objfile->type_obstack);
2411 }
2412
2413 attr = dwarf_attr (die, DW_AT_byte_size);
2414 if (attr)
2415 {
2416 TYPE_LENGTH (type) = DW_UNSND (attr);
2417 }
2418 else
2419 {
2420 TYPE_LENGTH (type) = 0;
2421 }
2422
2423 num_fields = 0;
2424 fields = NULL;
2425 if (die->has_children)
2426 {
2427 child_die = die->next;
2428 while (child_die && child_die->tag)
2429 {
2430 if (child_die->tag != DW_TAG_enumerator)
2431 {
2432 process_die (child_die, objfile, cu_header);
2433 }
2434 else
2435 {
2436 attr = dwarf_attr (child_die, DW_AT_name);
2437 if (attr)
2438 {
2439 sym = new_symbol (child_die, type, objfile, cu_header);
2440 if (SYMBOL_VALUE (sym) < 0)
2441 unsigned_enum = 0;
2442
2443 if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
2444 {
2445 fields = (struct field *)
2446 xrealloc (fields,
2447 (num_fields + DW_FIELD_ALLOC_CHUNK)
2448 * sizeof (struct field));
2449 }
2450
2451 FIELD_NAME (fields[num_fields]) = SYMBOL_NAME (sym);
2452 FIELD_TYPE (fields[num_fields]) = NULL;
2453 FIELD_BITPOS (fields[num_fields]) = SYMBOL_VALUE (sym);
2454 FIELD_BITSIZE (fields[num_fields]) = 0;
2455
2456 num_fields++;
2457 }
2458 }
2459
2460 child_die = sibling_die (child_die);
2461 }
2462
2463 if (num_fields)
2464 {
2465 TYPE_NFIELDS (type) = num_fields;
2466 TYPE_FIELDS (type) = (struct field *)
2467 TYPE_ALLOC (type, sizeof (struct field) * num_fields);
2468 memcpy (TYPE_FIELDS (type), fields,
2469 sizeof (struct field) * num_fields);
2470 xfree (fields);
2471 }
2472 if (unsigned_enum)
2473 TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
2474 }
2475 die->type = type;
2476 new_symbol (die, type, objfile, cu_header);
2477 }
2478
2479 /* Extract all information from a DW_TAG_array_type DIE and put it in
2480 the DIE's type field. For now, this only handles one dimensional
2481 arrays. */
2482
2483 static void
2484 read_array_type (struct die_info *die, struct objfile *objfile,
2485 const struct comp_unit_head *cu_header)
2486 {
2487 struct die_info *child_die;
2488 struct type *type = NULL;
2489 struct type *element_type, *range_type, *index_type;
2490 struct type **range_types = NULL;
2491 struct attribute *attr;
2492 int ndim = 0;
2493 struct cleanup *back_to;
2494
2495 /* Return if we've already decoded this type. */
2496 if (die->type)
2497 {
2498 return;
2499 }
2500
2501 element_type = die_type (die, objfile, cu_header);
2502
2503 /* Irix 6.2 native cc creates array types without children for
2504 arrays with unspecified length. */
2505 if (die->has_children == 0)
2506 {
2507 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
2508 range_type = create_range_type (NULL, index_type, 0, -1);
2509 die->type = create_array_type (NULL, element_type, range_type);
2510 return;
2511 }
2512
2513 back_to = make_cleanup (null_cleanup, NULL);
2514 child_die = die->next;
2515 while (child_die && child_die->tag)
2516 {
2517 if (child_die->tag == DW_TAG_subrange_type)
2518 {
2519 unsigned int low, high;
2520
2521 /* Default bounds to an array with unspecified length. */
2522 low = 0;
2523 high = -1;
2524 if (cu_language == language_fortran)
2525 {
2526 /* FORTRAN implies a lower bound of 1, if not given. */
2527 low = 1;
2528 }
2529
2530 index_type = die_type (child_die, objfile, cu_header);
2531 attr = dwarf_attr (child_die, DW_AT_lower_bound);
2532 if (attr)
2533 {
2534 if (attr->form == DW_FORM_sdata)
2535 {
2536 low = DW_SND (attr);
2537 }
2538 else if (attr->form == DW_FORM_udata
2539 || attr->form == DW_FORM_data1
2540 || attr->form == DW_FORM_data2
2541 || attr->form == DW_FORM_data4)
2542 {
2543 low = DW_UNSND (attr);
2544 }
2545 else
2546 {
2547 complain (&dwarf2_non_const_array_bound_ignored,
2548 dwarf_form_name (attr->form));
2549 #ifdef FORTRAN_HACK
2550 die->type = lookup_pointer_type (element_type);
2551 return;
2552 #else
2553 low = 0;
2554 #endif
2555 }
2556 }
2557 attr = dwarf_attr (child_die, DW_AT_upper_bound);
2558 if (attr)
2559 {
2560 if (attr->form == DW_FORM_sdata)
2561 {
2562 high = DW_SND (attr);
2563 }
2564 else if (attr->form == DW_FORM_udata
2565 || attr->form == DW_FORM_data1
2566 || attr->form == DW_FORM_data2
2567 || attr->form == DW_FORM_data4)
2568 {
2569 high = DW_UNSND (attr);
2570 }
2571 else if (attr->form == DW_FORM_block1)
2572 {
2573 /* GCC encodes arrays with unspecified or dynamic length
2574 with a DW_FORM_block1 attribute.
2575 FIXME: GDB does not yet know how to handle dynamic
2576 arrays properly, treat them as arrays with unspecified
2577 length for now. */
2578 high = -1;
2579 }
2580 else
2581 {
2582 complain (&dwarf2_non_const_array_bound_ignored,
2583 dwarf_form_name (attr->form));
2584 #ifdef FORTRAN_HACK
2585 die->type = lookup_pointer_type (element_type);
2586 return;
2587 #else
2588 high = 1;
2589 #endif
2590 }
2591 }
2592
2593 /* Create a range type and save it for array type creation. */
2594 if ((ndim % DW_FIELD_ALLOC_CHUNK) == 0)
2595 {
2596 range_types = (struct type **)
2597 xrealloc (range_types, (ndim + DW_FIELD_ALLOC_CHUNK)
2598 * sizeof (struct type *));
2599 if (ndim == 0)
2600 make_cleanup (free_current_contents, &range_types);
2601 }
2602 range_types[ndim++] = create_range_type (NULL, index_type, low, high);
2603 }
2604 child_die = sibling_die (child_die);
2605 }
2606
2607 /* Dwarf2 dimensions are output from left to right, create the
2608 necessary array types in backwards order. */
2609 type = element_type;
2610 while (ndim-- > 0)
2611 type = create_array_type (NULL, type, range_types[ndim]);
2612
2613 do_cleanups (back_to);
2614
2615 /* Install the type in the die. */
2616 die->type = type;
2617 }
2618
2619 /* First cut: install each common block member as a global variable. */
2620
2621 static void
2622 read_common_block (struct die_info *die, struct objfile *objfile,
2623 const struct comp_unit_head *cu_header)
2624 {
2625 struct die_info *child_die;
2626 struct attribute *attr;
2627 struct symbol *sym;
2628 CORE_ADDR base = (CORE_ADDR) 0;
2629
2630 attr = dwarf_attr (die, DW_AT_location);
2631 if (attr)
2632 {
2633 base = decode_locdesc (DW_BLOCK (attr), objfile, cu_header);
2634 }
2635 if (die->has_children)
2636 {
2637 child_die = die->next;
2638 while (child_die && child_die->tag)
2639 {
2640 sym = new_symbol (child_die, NULL, objfile, cu_header);
2641 attr = dwarf_attr (child_die, DW_AT_data_member_location);
2642 if (attr)
2643 {
2644 SYMBOL_VALUE_ADDRESS (sym) =
2645 base + decode_locdesc (DW_BLOCK (attr), objfile, cu_header);
2646 add_symbol_to_list (sym, &global_symbols);
2647 }
2648 child_die = sibling_die (child_die);
2649 }
2650 }
2651 }
2652
2653 /* Extract all information from a DW_TAG_pointer_type DIE and add to
2654 the user defined type vector. */
2655
2656 static void
2657 read_tag_pointer_type (struct die_info *die, struct objfile *objfile,
2658 const struct comp_unit_head *cu_header)
2659 {
2660 struct type *type;
2661 struct attribute *attr;
2662
2663 if (die->type)
2664 {
2665 return;
2666 }
2667
2668 type = lookup_pointer_type (die_type (die, objfile, cu_header));
2669 attr = dwarf_attr (die, DW_AT_byte_size);
2670 if (attr)
2671 {
2672 TYPE_LENGTH (type) = DW_UNSND (attr);
2673 }
2674 else
2675 {
2676 TYPE_LENGTH (type) = cu_header->addr_size;
2677 }
2678 die->type = type;
2679 }
2680
2681 /* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to
2682 the user defined type vector. */
2683
2684 static void
2685 read_tag_ptr_to_member_type (struct die_info *die, struct objfile *objfile,
2686 const struct comp_unit_head *cu_header)
2687 {
2688 struct type *type;
2689 struct type *to_type;
2690 struct type *domain;
2691
2692 if (die->type)
2693 {
2694 return;
2695 }
2696
2697 type = alloc_type (objfile);
2698 to_type = die_type (die, objfile, cu_header);
2699 domain = die_containing_type (die, objfile, cu_header);
2700 smash_to_member_type (type, domain, to_type);
2701
2702 die->type = type;
2703 }
2704
2705 /* Extract all information from a DW_TAG_reference_type DIE and add to
2706 the user defined type vector. */
2707
2708 static void
2709 read_tag_reference_type (struct die_info *die, struct objfile *objfile,
2710 const struct comp_unit_head *cu_header)
2711 {
2712 struct type *type;
2713 struct attribute *attr;
2714
2715 if (die->type)
2716 {
2717 return;
2718 }
2719
2720 type = lookup_reference_type (die_type (die, objfile, cu_header));
2721 attr = dwarf_attr (die, DW_AT_byte_size);
2722 if (attr)
2723 {
2724 TYPE_LENGTH (type) = DW_UNSND (attr);
2725 }
2726 else
2727 {
2728 TYPE_LENGTH (type) = cu_header->addr_size;
2729 }
2730 die->type = type;
2731 }
2732
2733 static void
2734 read_tag_const_type (struct die_info *die, struct objfile *objfile,
2735 const struct comp_unit_head *cu_header)
2736 {
2737 struct type *base_type;
2738
2739 if (die->type)
2740 {
2741 return;
2742 }
2743
2744 base_type = die_type (die, objfile, cu_header);
2745 die->type = make_cv_type (1, TYPE_VOLATILE (base_type), base_type, 0);
2746 }
2747
2748 static void
2749 read_tag_volatile_type (struct die_info *die, struct objfile *objfile,
2750 const struct comp_unit_head *cu_header)
2751 {
2752 struct type *base_type;
2753
2754 if (die->type)
2755 {
2756 return;
2757 }
2758
2759 base_type = die_type (die, objfile, cu_header);
2760 die->type = make_cv_type (TYPE_CONST (base_type), 1, base_type, 0);
2761 }
2762
2763 /* Extract all information from a DW_TAG_string_type DIE and add to
2764 the user defined type vector. It isn't really a user defined type,
2765 but it behaves like one, with other DIE's using an AT_user_def_type
2766 attribute to reference it. */
2767
2768 static void
2769 read_tag_string_type (struct die_info *die, struct objfile *objfile)
2770 {
2771 struct type *type, *range_type, *index_type, *char_type;
2772 struct attribute *attr;
2773 unsigned int length;
2774
2775 if (die->type)
2776 {
2777 return;
2778 }
2779
2780 attr = dwarf_attr (die, DW_AT_string_length);
2781 if (attr)
2782 {
2783 length = DW_UNSND (attr);
2784 }
2785 else
2786 {
2787 /* check for the DW_AT_byte_size attribute */
2788 attr = dwarf_attr (die, DW_AT_byte_size);
2789 if (attr)
2790 {
2791 length = DW_UNSND (attr);
2792 }
2793 else
2794 {
2795 length = 1;
2796 }
2797 }
2798 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
2799 range_type = create_range_type (NULL, index_type, 1, length);
2800 if (cu_language == language_fortran)
2801 {
2802 /* Need to create a unique string type for bounds
2803 information */
2804 type = create_string_type (0, range_type);
2805 }
2806 else
2807 {
2808 char_type = dwarf2_fundamental_type (objfile, FT_CHAR);
2809 type = create_string_type (char_type, range_type);
2810 }
2811 die->type = type;
2812 }
2813
2814 /* Handle DIES due to C code like:
2815
2816 struct foo
2817 {
2818 int (*funcp)(int a, long l);
2819 int b;
2820 };
2821
2822 ('funcp' generates a DW_TAG_subroutine_type DIE)
2823 */
2824
2825 static void
2826 read_subroutine_type (struct die_info *die, struct objfile *objfile,
2827 const struct comp_unit_head *cu_header)
2828 {
2829 struct type *type; /* Type that this function returns */
2830 struct type *ftype; /* Function that returns above type */
2831 struct attribute *attr;
2832
2833 /* Decode the type that this subroutine returns */
2834 if (die->type)
2835 {
2836 return;
2837 }
2838 type = die_type (die, objfile, cu_header);
2839 ftype = lookup_function_type (type);
2840
2841 /* All functions in C++ have prototypes. */
2842 attr = dwarf_attr (die, DW_AT_prototyped);
2843 if ((attr && (DW_UNSND (attr) != 0))
2844 || cu_language == language_cplus)
2845 TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED;
2846
2847 if (die->has_children)
2848 {
2849 struct die_info *child_die;
2850 int nparams = 0;
2851 int iparams = 0;
2852
2853 /* Count the number of parameters.
2854 FIXME: GDB currently ignores vararg functions, but knows about
2855 vararg member functions. */
2856 child_die = die->next;
2857 while (child_die && child_die->tag)
2858 {
2859 if (child_die->tag == DW_TAG_formal_parameter)
2860 nparams++;
2861 else if (child_die->tag == DW_TAG_unspecified_parameters)
2862 TYPE_FLAGS (ftype) |= TYPE_FLAG_VARARGS;
2863 child_die = sibling_die (child_die);
2864 }
2865
2866 /* Allocate storage for parameters and fill them in. */
2867 TYPE_NFIELDS (ftype) = nparams;
2868 TYPE_FIELDS (ftype) = (struct field *)
2869 TYPE_ALLOC (ftype, nparams * sizeof (struct field));
2870
2871 child_die = die->next;
2872 while (child_die && child_die->tag)
2873 {
2874 if (child_die->tag == DW_TAG_formal_parameter)
2875 {
2876 /* Dwarf2 has no clean way to discern C++ static and non-static
2877 member functions. G++ helps GDB by marking the first
2878 parameter for non-static member functions (which is the
2879 this pointer) as artificial. We pass this information
2880 to dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL. */
2881 attr = dwarf_attr (child_die, DW_AT_artificial);
2882 if (attr)
2883 TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr);
2884 else
2885 TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
2886 TYPE_FIELD_TYPE (ftype, iparams) = die_type (child_die, objfile,
2887 cu_header);
2888 iparams++;
2889 }
2890 child_die = sibling_die (child_die);
2891 }
2892 }
2893
2894 die->type = ftype;
2895 }
2896
2897 static void
2898 read_typedef (struct die_info *die, struct objfile *objfile,
2899 const struct comp_unit_head *cu_header)
2900 {
2901 struct attribute *attr;
2902 char *name = NULL;
2903
2904 if (!die->type)
2905 {
2906 attr = dwarf_attr (die, DW_AT_name);
2907 if (attr && DW_STRING (attr))
2908 {
2909 name = DW_STRING (attr);
2910 }
2911 die->type = init_type (TYPE_CODE_TYPEDEF, 0, TYPE_FLAG_TARGET_STUB, name, objfile);
2912 TYPE_TARGET_TYPE (die->type) = die_type (die, objfile, cu_header);
2913 }
2914 }
2915
2916 /* Find a representation of a given base type and install
2917 it in the TYPE field of the die. */
2918
2919 static void
2920 read_base_type (struct die_info *die, struct objfile *objfile)
2921 {
2922 struct type *type;
2923 struct attribute *attr;
2924 int encoding = 0, size = 0;
2925
2926 /* If we've already decoded this die, this is a no-op. */
2927 if (die->type)
2928 {
2929 return;
2930 }
2931
2932 attr = dwarf_attr (die, DW_AT_encoding);
2933 if (attr)
2934 {
2935 encoding = DW_UNSND (attr);
2936 }
2937 attr = dwarf_attr (die, DW_AT_byte_size);
2938 if (attr)
2939 {
2940 size = DW_UNSND (attr);
2941 }
2942 attr = dwarf_attr (die, DW_AT_name);
2943 if (attr && DW_STRING (attr))
2944 {
2945 enum type_code code = TYPE_CODE_INT;
2946 int type_flags = 0;
2947
2948 switch (encoding)
2949 {
2950 case DW_ATE_address:
2951 /* Turn DW_ATE_address into a void * pointer. */
2952 code = TYPE_CODE_PTR;
2953 type_flags |= TYPE_FLAG_UNSIGNED;
2954 break;
2955 case DW_ATE_boolean:
2956 code = TYPE_CODE_BOOL;
2957 type_flags |= TYPE_FLAG_UNSIGNED;
2958 break;
2959 case DW_ATE_complex_float:
2960 code = TYPE_CODE_COMPLEX;
2961 break;
2962 case DW_ATE_float:
2963 code = TYPE_CODE_FLT;
2964 break;
2965 case DW_ATE_signed:
2966 case DW_ATE_signed_char:
2967 break;
2968 case DW_ATE_unsigned:
2969 case DW_ATE_unsigned_char:
2970 type_flags |= TYPE_FLAG_UNSIGNED;
2971 break;
2972 default:
2973 complain (&dwarf2_unsupported_at_encoding,
2974 dwarf_type_encoding_name (encoding));
2975 break;
2976 }
2977 type = init_type (code, size, type_flags, DW_STRING (attr), objfile);
2978 if (encoding == DW_ATE_address)
2979 TYPE_TARGET_TYPE (type) = dwarf2_fundamental_type (objfile, FT_VOID);
2980 }
2981 else
2982 {
2983 type = dwarf_base_type (encoding, size, objfile);
2984 }
2985 die->type = type;
2986 }
2987
2988 /* Read a whole compilation unit into a linked list of dies. */
2989
2990 static struct die_info *
2991 read_comp_unit (char *info_ptr, bfd *abfd,
2992 const struct comp_unit_head *cu_header)
2993 {
2994 struct die_info *first_die, *last_die, *die;
2995 char *cur_ptr;
2996 int nesting_level;
2997
2998 /* Reset die reference table; we are
2999 building new ones now. */
3000 dwarf2_empty_hash_tables ();
3001
3002 cur_ptr = info_ptr;
3003 nesting_level = 0;
3004 first_die = last_die = NULL;
3005 do
3006 {
3007 cur_ptr = read_full_die (&die, abfd, cur_ptr, cu_header);
3008 if (die->has_children)
3009 {
3010 nesting_level++;
3011 }
3012 if (die->tag == 0)
3013 {
3014 nesting_level--;
3015 }
3016
3017 die->next = NULL;
3018
3019 /* Enter die in reference hash table */
3020 store_in_ref_table (die->offset, die);
3021
3022 if (!first_die)
3023 {
3024 first_die = last_die = die;
3025 }
3026 else
3027 {
3028 last_die->next = die;
3029 last_die = die;
3030 }
3031 }
3032 while (nesting_level > 0);
3033 return first_die;
3034 }
3035
3036 /* Free a linked list of dies. */
3037
3038 static void
3039 free_die_list (struct die_info *dies)
3040 {
3041 struct die_info *die, *next;
3042
3043 die = dies;
3044 while (die)
3045 {
3046 next = die->next;
3047 xfree (die->attrs);
3048 xfree (die);
3049 die = next;
3050 }
3051 }
3052
3053 static void
3054 do_free_die_list_cleanup (void *dies)
3055 {
3056 free_die_list (dies);
3057 }
3058
3059 static struct cleanup *
3060 make_cleanup_free_die_list (struct die_info *dies)
3061 {
3062 return make_cleanup (do_free_die_list_cleanup, dies);
3063 }
3064
3065
3066 /* Read the contents of the section at OFFSET and of size SIZE from the
3067 object file specified by OBJFILE into the psymbol_obstack and return it. */
3068
3069 char *
3070 dwarf2_read_section (struct objfile *objfile, file_ptr offset,
3071 unsigned int size)
3072 {
3073 bfd *abfd = objfile->obfd;
3074 char *buf;
3075
3076 if (size == 0)
3077 return NULL;
3078
3079 buf = (char *) obstack_alloc (&objfile->psymbol_obstack, size);
3080 if ((bfd_seek (abfd, offset, SEEK_SET) != 0) ||
3081 (bfd_bread (buf, size, abfd) != size))
3082 {
3083 buf = NULL;
3084 error ("Dwarf Error: Can't read DWARF data from '%s'",
3085 bfd_get_filename (abfd));
3086 }
3087 return buf;
3088 }
3089
3090 /* In DWARF version 2, the description of the debugging information is
3091 stored in a separate .debug_abbrev section. Before we read any
3092 dies from a section we read in all abbreviations and install them
3093 in a hash table. */
3094
3095 static void
3096 dwarf2_read_abbrevs (bfd *abfd, unsigned int offset)
3097 {
3098 char *abbrev_ptr;
3099 struct abbrev_info *cur_abbrev;
3100 unsigned int abbrev_number, bytes_read, abbrev_name;
3101 unsigned int abbrev_form, hash_number;
3102
3103 /* empty the table */
3104 dwarf2_empty_abbrev_table (NULL);
3105
3106 abbrev_ptr = dwarf_abbrev_buffer + offset;
3107 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3108 abbrev_ptr += bytes_read;
3109
3110 /* loop until we reach an abbrev number of 0 */
3111 while (abbrev_number)
3112 {
3113 cur_abbrev = dwarf_alloc_abbrev ();
3114
3115 /* read in abbrev header */
3116 cur_abbrev->number = abbrev_number;
3117 cur_abbrev->tag = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3118 abbrev_ptr += bytes_read;
3119 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
3120 abbrev_ptr += 1;
3121
3122 /* now read in declarations */
3123 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3124 abbrev_ptr += bytes_read;
3125 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3126 abbrev_ptr += bytes_read;
3127 while (abbrev_name)
3128 {
3129 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
3130 {
3131 cur_abbrev->attrs = (struct attr_abbrev *)
3132 xrealloc (cur_abbrev->attrs,
3133 (cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK)
3134 * sizeof (struct attr_abbrev));
3135 }
3136 cur_abbrev->attrs[cur_abbrev->num_attrs].name = abbrev_name;
3137 cur_abbrev->attrs[cur_abbrev->num_attrs++].form = abbrev_form;
3138 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3139 abbrev_ptr += bytes_read;
3140 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3141 abbrev_ptr += bytes_read;
3142 }
3143
3144 hash_number = abbrev_number % ABBREV_HASH_SIZE;
3145 cur_abbrev->next = dwarf2_abbrevs[hash_number];
3146 dwarf2_abbrevs[hash_number] = cur_abbrev;
3147
3148 /* Get next abbreviation.
3149 Under Irix6 the abbreviations for a compilation unit are not
3150 always properly terminated with an abbrev number of 0.
3151 Exit loop if we encounter an abbreviation which we have
3152 already read (which means we are about to read the abbreviations
3153 for the next compile unit) or if the end of the abbreviation
3154 table is reached. */
3155 if ((unsigned int) (abbrev_ptr - dwarf_abbrev_buffer)
3156 >= dwarf_abbrev_size)
3157 break;
3158 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3159 abbrev_ptr += bytes_read;
3160 if (dwarf2_lookup_abbrev (abbrev_number) != NULL)
3161 break;
3162 }
3163 }
3164
3165 /* Empty the abbrev table for a new compilation unit. */
3166
3167 /* ARGSUSED */
3168 static void
3169 dwarf2_empty_abbrev_table (PTR ignore)
3170 {
3171 int i;
3172 struct abbrev_info *abbrev, *next;
3173
3174 for (i = 0; i < ABBREV_HASH_SIZE; ++i)
3175 {
3176 next = NULL;
3177 abbrev = dwarf2_abbrevs[i];
3178 while (abbrev)
3179 {
3180 next = abbrev->next;
3181 xfree (abbrev->attrs);
3182 xfree (abbrev);
3183 abbrev = next;
3184 }
3185 dwarf2_abbrevs[i] = NULL;
3186 }
3187 }
3188
3189 /* Lookup an abbrev_info structure in the abbrev hash table. */
3190
3191 static struct abbrev_info *
3192 dwarf2_lookup_abbrev (unsigned int number)
3193 {
3194 unsigned int hash_number;
3195 struct abbrev_info *abbrev;
3196
3197 hash_number = number % ABBREV_HASH_SIZE;
3198 abbrev = dwarf2_abbrevs[hash_number];
3199
3200 while (abbrev)
3201 {
3202 if (abbrev->number == number)
3203 return abbrev;
3204 else
3205 abbrev = abbrev->next;
3206 }
3207 return NULL;
3208 }
3209
3210 /* Read a minimal amount of information into the minimal die structure. */
3211
3212 static char *
3213 read_partial_die (struct partial_die_info *part_die, bfd *abfd,
3214 char *info_ptr, const struct comp_unit_head *cu_header)
3215 {
3216 unsigned int abbrev_number, bytes_read, i;
3217 struct abbrev_info *abbrev;
3218 struct attribute attr;
3219 struct attribute spec_attr;
3220 int found_spec_attr = 0;
3221 int has_low_pc_attr = 0;
3222 int has_high_pc_attr = 0;
3223
3224 *part_die = zeroed_partial_die;
3225 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3226 info_ptr += bytes_read;
3227 if (!abbrev_number)
3228 return info_ptr;
3229
3230 abbrev = dwarf2_lookup_abbrev (abbrev_number);
3231 if (!abbrev)
3232 {
3233 error ("Dwarf Error: Could not find abbrev number %d.", abbrev_number);
3234 }
3235 part_die->offset = info_ptr - dwarf_info_buffer;
3236 part_die->tag = abbrev->tag;
3237 part_die->has_children = abbrev->has_children;
3238 part_die->abbrev = abbrev_number;
3239
3240 for (i = 0; i < abbrev->num_attrs; ++i)
3241 {
3242 info_ptr = read_attribute (&attr, &abbrev->attrs[i], abfd,
3243 info_ptr, cu_header);
3244
3245 /* Store the data if it is of an attribute we want to keep in a
3246 partial symbol table. */
3247 switch (attr.name)
3248 {
3249 case DW_AT_name:
3250
3251 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
3252 if (part_die->name == NULL)
3253 part_die->name = DW_STRING (&attr);
3254 break;
3255 case DW_AT_MIPS_linkage_name:
3256 part_die->name = DW_STRING (&attr);
3257 break;
3258 case DW_AT_low_pc:
3259 has_low_pc_attr = 1;
3260 part_die->lowpc = DW_ADDR (&attr);
3261 break;
3262 case DW_AT_high_pc:
3263 has_high_pc_attr = 1;
3264 part_die->highpc = DW_ADDR (&attr);
3265 break;
3266 case DW_AT_location:
3267 part_die->locdesc = DW_BLOCK (&attr);
3268 break;
3269 case DW_AT_language:
3270 part_die->language = DW_UNSND (&attr);
3271 break;
3272 case DW_AT_external:
3273 part_die->is_external = DW_UNSND (&attr);
3274 break;
3275 case DW_AT_declaration:
3276 part_die->is_declaration = DW_UNSND (&attr);
3277 break;
3278 case DW_AT_type:
3279 part_die->has_type = 1;
3280 break;
3281 case DW_AT_abstract_origin:
3282 case DW_AT_specification:
3283 found_spec_attr = 1;
3284 spec_attr = attr;
3285 break;
3286 case DW_AT_sibling:
3287 /* Ignore absolute siblings, they might point outside of
3288 the current compile unit. */
3289 if (attr.form == DW_FORM_ref_addr)
3290 complain (&dwarf2_absolute_sibling_complaint);
3291 else
3292 part_die->sibling =
3293 dwarf_info_buffer + dwarf2_get_ref_die_offset (&attr);
3294 break;
3295 default:
3296 break;
3297 }
3298 }
3299
3300 /* If we found a reference attribute and the die has no name, try
3301 to find a name in the referred to die. */
3302
3303 if (found_spec_attr && part_die->name == NULL)
3304 {
3305 struct partial_die_info spec_die;
3306 char *spec_ptr;
3307 int dummy;
3308
3309 spec_ptr = dwarf_info_buffer + dwarf2_get_ref_die_offset (&spec_attr);
3310 read_partial_die (&spec_die, abfd, spec_ptr, cu_header);
3311 if (spec_die.name)
3312 {
3313 part_die->name = spec_die.name;
3314
3315 /* Copy DW_AT_external attribute if it is set. */
3316 if (spec_die.is_external)
3317 part_die->is_external = spec_die.is_external;
3318 }
3319 }
3320
3321 /* When using the GNU linker, .gnu.linkonce. sections are used to
3322 eliminate duplicate copies of functions and vtables and such.
3323 The linker will arbitrarily choose one and discard the others.
3324 The AT_*_pc values for such functions refer to local labels in
3325 these sections. If the section from that file was discarded, the
3326 labels are not in the output, so the relocs get a value of 0.
3327 If this is a discarded function, mark the pc bounds as invalid,
3328 so that GDB will ignore it. */
3329 if (has_low_pc_attr && has_high_pc_attr
3330 && part_die->lowpc < part_die->highpc
3331 && (part_die->lowpc != 0
3332 || (bfd_get_file_flags (abfd) & HAS_RELOC)))
3333 part_die->has_pc_info = 1;
3334 return info_ptr;
3335 }
3336
3337 /* Read the die from the .debug_info section buffer. And set diep to
3338 point to a newly allocated die with its information. */
3339
3340 static char *
3341 read_full_die (struct die_info **diep, bfd *abfd, char *info_ptr,
3342 const struct comp_unit_head *cu_header)
3343 {
3344 unsigned int abbrev_number, bytes_read, i, offset;
3345 struct abbrev_info *abbrev;
3346 struct die_info *die;
3347
3348 offset = info_ptr - dwarf_info_buffer;
3349 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3350 info_ptr += bytes_read;
3351 if (!abbrev_number)
3352 {
3353 die = dwarf_alloc_die ();
3354 die->tag = 0;
3355 die->abbrev = abbrev_number;
3356 die->type = NULL;
3357 *diep = die;
3358 return info_ptr;
3359 }
3360
3361 abbrev = dwarf2_lookup_abbrev (abbrev_number);
3362 if (!abbrev)
3363 {
3364 error ("Dwarf Error: could not find abbrev number %d.", abbrev_number);
3365 }
3366 die = dwarf_alloc_die ();
3367 die->offset = offset;
3368 die->tag = abbrev->tag;
3369 die->has_children = abbrev->has_children;
3370 die->abbrev = abbrev_number;
3371 die->type = NULL;
3372
3373 die->num_attrs = abbrev->num_attrs;
3374 die->attrs = (struct attribute *)
3375 xmalloc (die->num_attrs * sizeof (struct attribute));
3376
3377 for (i = 0; i < abbrev->num_attrs; ++i)
3378 {
3379 info_ptr = read_attribute (&die->attrs[i], &abbrev->attrs[i],
3380 abfd, info_ptr, cu_header);
3381 }
3382
3383 *diep = die;
3384 return info_ptr;
3385 }
3386
3387 /* Read an attribute value described by an attribute form. */
3388
3389 static char *
3390 read_attribute_value (struct attribute *attr, unsigned form,
3391 bfd *abfd, char *info_ptr,
3392 const struct comp_unit_head *cu_header)
3393 {
3394 unsigned int bytes_read;
3395 struct dwarf_block *blk;
3396
3397 attr->form = form;
3398 switch (form)
3399 {
3400 case DW_FORM_addr:
3401 case DW_FORM_ref_addr:
3402 DW_ADDR (attr) = read_address (abfd, info_ptr, cu_header, &bytes_read);
3403 info_ptr += bytes_read;
3404 break;
3405 case DW_FORM_block2:
3406 blk = dwarf_alloc_block ();
3407 blk->size = read_2_bytes (abfd, info_ptr);
3408 info_ptr += 2;
3409 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3410 info_ptr += blk->size;
3411 DW_BLOCK (attr) = blk;
3412 break;
3413 case DW_FORM_block4:
3414 blk = dwarf_alloc_block ();
3415 blk->size = read_4_bytes (abfd, info_ptr);
3416 info_ptr += 4;
3417 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3418 info_ptr += blk->size;
3419 DW_BLOCK (attr) = blk;
3420 break;
3421 case DW_FORM_data2:
3422 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
3423 info_ptr += 2;
3424 break;
3425 case DW_FORM_data4:
3426 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
3427 info_ptr += 4;
3428 break;
3429 case DW_FORM_data8:
3430 DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
3431 info_ptr += 8;
3432 break;
3433 case DW_FORM_string:
3434 DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
3435 info_ptr += bytes_read;
3436 break;
3437 case DW_FORM_strp:
3438 DW_STRING (attr) = read_indirect_string (abfd, info_ptr, cu_header,
3439 &bytes_read);
3440 info_ptr += bytes_read;
3441 break;
3442 case DW_FORM_block:
3443 blk = dwarf_alloc_block ();
3444 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3445 info_ptr += bytes_read;
3446 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3447 info_ptr += blk->size;
3448 DW_BLOCK (attr) = blk;
3449 break;
3450 case DW_FORM_block1:
3451 blk = dwarf_alloc_block ();
3452 blk->size = read_1_byte (abfd, info_ptr);
3453 info_ptr += 1;
3454 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3455 info_ptr += blk->size;
3456 DW_BLOCK (attr) = blk;
3457 break;
3458 case DW_FORM_data1:
3459 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3460 info_ptr += 1;
3461 break;
3462 case DW_FORM_flag:
3463 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3464 info_ptr += 1;
3465 break;
3466 case DW_FORM_sdata:
3467 DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
3468 info_ptr += bytes_read;
3469 break;
3470 case DW_FORM_udata:
3471 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3472 info_ptr += bytes_read;
3473 break;
3474 case DW_FORM_ref1:
3475 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3476 info_ptr += 1;
3477 break;
3478 case DW_FORM_ref2:
3479 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
3480 info_ptr += 2;
3481 break;
3482 case DW_FORM_ref4:
3483 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
3484 info_ptr += 4;
3485 break;
3486 case DW_FORM_ref8:
3487 DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
3488 info_ptr += 8;
3489 break;
3490 case DW_FORM_ref_udata:
3491 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3492 info_ptr += bytes_read;
3493 break;
3494 case DW_FORM_indirect:
3495 form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3496 info_ptr += bytes_read;
3497 info_ptr = read_attribute_value (attr, form, abfd, info_ptr, cu_header);
3498 break;
3499 default:
3500 error ("Dwarf Error: Cannot handle %s in DWARF reader.",
3501 dwarf_form_name (form));
3502 }
3503 return info_ptr;
3504 }
3505
3506 /* Read an attribute described by an abbreviated attribute. */
3507
3508 static char *
3509 read_attribute (struct attribute *attr, struct attr_abbrev *abbrev,
3510 bfd *abfd, char *info_ptr,
3511 const struct comp_unit_head *cu_header)
3512 {
3513 attr->name = abbrev->name;
3514 return read_attribute_value (attr, abbrev->form, abfd, info_ptr, cu_header);
3515 }
3516
3517 /* read dwarf information from a buffer */
3518
3519 static unsigned int
3520 read_1_byte (bfd *abfd, char *buf)
3521 {
3522 return bfd_get_8 (abfd, (bfd_byte *) buf);
3523 }
3524
3525 static int
3526 read_1_signed_byte (bfd *abfd, char *buf)
3527 {
3528 return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
3529 }
3530
3531 static unsigned int
3532 read_2_bytes (bfd *abfd, char *buf)
3533 {
3534 return bfd_get_16 (abfd, (bfd_byte *) buf);
3535 }
3536
3537 static int
3538 read_2_signed_bytes (bfd *abfd, char *buf)
3539 {
3540 return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
3541 }
3542
3543 static unsigned int
3544 read_4_bytes (bfd *abfd, char *buf)
3545 {
3546 return bfd_get_32 (abfd, (bfd_byte *) buf);
3547 }
3548
3549 static int
3550 read_4_signed_bytes (bfd *abfd, char *buf)
3551 {
3552 return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
3553 }
3554
3555 static unsigned long
3556 read_8_bytes (bfd *abfd, char *buf)
3557 {
3558 return bfd_get_64 (abfd, (bfd_byte *) buf);
3559 }
3560
3561 static CORE_ADDR
3562 read_address (bfd *abfd, char *buf, const struct comp_unit_head *cu_header,
3563 int *bytes_read)
3564 {
3565 CORE_ADDR retval = 0;
3566
3567 if (cu_header->signed_addr_p)
3568 {
3569 switch (cu_header->addr_size)
3570 {
3571 case 2:
3572 retval = bfd_get_signed_16 (abfd, (bfd_byte *) buf);
3573 break;
3574 case 4:
3575 retval = bfd_get_signed_32 (abfd, (bfd_byte *) buf);
3576 break;
3577 case 8:
3578 retval = bfd_get_signed_64 (abfd, (bfd_byte *) buf);
3579 break;
3580 default:
3581 internal_error (__FILE__, __LINE__,
3582 "read_address: bad switch, signed");
3583 }
3584 }
3585 else
3586 {
3587 switch (cu_header->addr_size)
3588 {
3589 case 2:
3590 retval = bfd_get_16 (abfd, (bfd_byte *) buf);
3591 break;
3592 case 4:
3593 retval = bfd_get_32 (abfd, (bfd_byte *) buf);
3594 break;
3595 case 8:
3596 retval = bfd_get_64 (abfd, (bfd_byte *) buf);
3597 break;
3598 default:
3599 internal_error (__FILE__, __LINE__,
3600 "read_address: bad switch, unsigned");
3601 }
3602 }
3603
3604 *bytes_read = cu_header->addr_size;
3605 return retval;
3606 }
3607
3608 /* Reads the initial length from a section. The (draft) DWARF 2.1
3609 specification allows the initial length to take up either 4 bytes
3610 or 12 bytes. If the first 4 bytes are 0xffffffff, then the next 8
3611 bytes describe the length and all offsets will be 8 bytes in length
3612 instead of 4.
3613
3614 The value returned via bytes_read should be used to increment
3615 the relevant pointer after calling read_initial_length().
3616
3617 As a side effect, this function sets the fields initial_length_size
3618 and offset_size in cu_header to the values appropriate for the
3619 length field. (The format of the initial length field determines
3620 the width of file offsets to be fetched later with fetch_offset().)
3621
3622 [ Note: read_initial_length() and read_offset() are based on the
3623 document entitled "DWARF Debugging Information Format", revision
3624 2.1, draft 4, dated July 20, 2000. This document was obtained
3625 from:
3626
3627 http://reality.sgi.com/dehnert_engr/dwarf/dwarf2p1-draft4-000720.pdf
3628
3629 This document is only a draft and is subject to change. (So beware.)
3630
3631 - Kevin, Aug 4, 2000
3632 ] */
3633
3634 static LONGEST
3635 read_initial_length (bfd *abfd, char *buf, struct comp_unit_head *cu_header,
3636 int *bytes_read)
3637 {
3638 LONGEST retval = 0;
3639
3640 retval = bfd_get_32 (abfd, (bfd_byte *) buf);
3641
3642 if (retval == 0xffffffff)
3643 {
3644 retval = bfd_get_64 (abfd, (bfd_byte *) buf + 4);
3645 *bytes_read = 12;
3646 if (cu_header != NULL)
3647 {
3648 cu_header->initial_length_size = 12;
3649 cu_header->offset_size = 8;
3650 }
3651 }
3652 else
3653 {
3654 *bytes_read = 4;
3655 if (cu_header != NULL)
3656 {
3657 cu_header->initial_length_size = 4;
3658 cu_header->offset_size = 4;
3659 }
3660 }
3661
3662 return retval;
3663 }
3664
3665 /* Read an offset from the data stream. The size of the offset is
3666 given by cu_header->offset_size. */
3667
3668 static LONGEST
3669 read_offset (bfd *abfd, char *buf, const struct comp_unit_head *cu_header,
3670 int *bytes_read)
3671 {
3672 LONGEST retval = 0;
3673
3674 switch (cu_header->offset_size)
3675 {
3676 case 4:
3677 retval = bfd_get_32 (abfd, (bfd_byte *) buf);
3678 *bytes_read = 4;
3679 break;
3680 case 8:
3681 retval = bfd_get_64 (abfd, (bfd_byte *) buf);
3682 *bytes_read = 8;
3683 break;
3684 default:
3685 internal_error (__FILE__, __LINE__,
3686 "read_offset: bad switch");
3687 }
3688
3689 return retval;
3690 }
3691
3692 static char *
3693 read_n_bytes (bfd *abfd, char *buf, unsigned int size)
3694 {
3695 /* If the size of a host char is 8 bits, we can return a pointer
3696 to the buffer, otherwise we have to copy the data to a buffer
3697 allocated on the temporary obstack. */
3698 gdb_assert (HOST_CHAR_BIT == 8);
3699 return buf;
3700 }
3701
3702 static char *
3703 read_string (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
3704 {
3705 /* If the size of a host char is 8 bits, we can return a pointer
3706 to the string, otherwise we have to copy the string to a buffer
3707 allocated on the temporary obstack. */
3708 gdb_assert (HOST_CHAR_BIT == 8);
3709 if (*buf == '\0')
3710 {
3711 *bytes_read_ptr = 1;
3712 return NULL;
3713 }
3714 *bytes_read_ptr = strlen (buf) + 1;
3715 return buf;
3716 }
3717
3718 static char *
3719 read_indirect_string (bfd *abfd, char *buf,
3720 const struct comp_unit_head *cu_header,
3721 unsigned int *bytes_read_ptr)
3722 {
3723 LONGEST str_offset = read_offset (abfd, buf, cu_header,
3724 (int *) bytes_read_ptr);
3725
3726 if (dwarf_str_buffer == NULL)
3727 {
3728 error ("DW_FORM_strp used without .debug_str section");
3729 return NULL;
3730 }
3731 if (str_offset >= dwarf_str_size)
3732 {
3733 error ("DW_FORM_strp pointing outside of .debug_str section");
3734 return NULL;
3735 }
3736 gdb_assert (HOST_CHAR_BIT == 8);
3737 if (dwarf_str_buffer[str_offset] == '\0')
3738 return NULL;
3739 return dwarf_str_buffer + str_offset;
3740 }
3741
3742 static unsigned long
3743 read_unsigned_leb128 (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
3744 {
3745 unsigned long result;
3746 unsigned int num_read;
3747 int i, shift;
3748 unsigned char byte;
3749
3750 result = 0;
3751 shift = 0;
3752 num_read = 0;
3753 i = 0;
3754 while (1)
3755 {
3756 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
3757 buf++;
3758 num_read++;
3759 result |= ((unsigned long)(byte & 127) << shift);
3760 if ((byte & 128) == 0)
3761 {
3762 break;
3763 }
3764 shift += 7;
3765 }
3766 *bytes_read_ptr = num_read;
3767 return result;
3768 }
3769
3770 static long
3771 read_signed_leb128 (bfd *abfd, char *buf, unsigned int *bytes_read_ptr)
3772 {
3773 long result;
3774 int i, shift, size, num_read;
3775 unsigned char byte;
3776
3777 result = 0;
3778 shift = 0;
3779 size = 32;
3780 num_read = 0;
3781 i = 0;
3782 while (1)
3783 {
3784 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
3785 buf++;
3786 num_read++;
3787 result |= ((long)(byte & 127) << shift);
3788 shift += 7;
3789 if ((byte & 128) == 0)
3790 {
3791 break;
3792 }
3793 }
3794 if ((shift < size) && (byte & 0x40))
3795 {
3796 result |= -(1 << shift);
3797 }
3798 *bytes_read_ptr = num_read;
3799 return result;
3800 }
3801
3802 static void
3803 set_cu_language (unsigned int lang)
3804 {
3805 switch (lang)
3806 {
3807 case DW_LANG_C89:
3808 case DW_LANG_C:
3809 cu_language = language_c;
3810 break;
3811 case DW_LANG_C_plus_plus:
3812 cu_language = language_cplus;
3813 break;
3814 case DW_LANG_Fortran77:
3815 case DW_LANG_Fortran90:
3816 case DW_LANG_Fortran95:
3817 cu_language = language_fortran;
3818 break;
3819 case DW_LANG_Mips_Assembler:
3820 cu_language = language_asm;
3821 break;
3822 case DW_LANG_Java:
3823 cu_language = language_java;
3824 break;
3825 case DW_LANG_Ada83:
3826 case DW_LANG_Cobol74:
3827 case DW_LANG_Cobol85:
3828 case DW_LANG_Pascal83:
3829 case DW_LANG_Modula2:
3830 default:
3831 cu_language = language_unknown;
3832 break;
3833 }
3834 cu_language_defn = language_def (cu_language);
3835 }
3836
3837 /* Return the named attribute or NULL if not there. */
3838
3839 static struct attribute *
3840 dwarf_attr (struct die_info *die, unsigned int name)
3841 {
3842 unsigned int i;
3843 struct attribute *spec = NULL;
3844
3845 for (i = 0; i < die->num_attrs; ++i)
3846 {
3847 if (die->attrs[i].name == name)
3848 {
3849 return &die->attrs[i];
3850 }
3851 if (die->attrs[i].name == DW_AT_specification
3852 || die->attrs[i].name == DW_AT_abstract_origin)
3853 spec = &die->attrs[i];
3854 }
3855 if (spec)
3856 {
3857 struct die_info *ref_die =
3858 follow_die_ref (dwarf2_get_ref_die_offset (spec));
3859
3860 if (ref_die)
3861 return dwarf_attr (ref_die, name);
3862 }
3863
3864 return NULL;
3865 }
3866
3867 static int
3868 die_is_declaration (struct die_info *die)
3869 {
3870 return (dwarf_attr (die, DW_AT_declaration)
3871 && ! dwarf_attr (die, DW_AT_specification));
3872 }
3873
3874 /* Decode the line number information for the compilation unit whose
3875 line number info is at OFFSET in the .debug_line section.
3876 The compilation directory of the file is passed in COMP_DIR. */
3877
3878 struct filenames
3879 {
3880 unsigned int num_files;
3881 struct fileinfo
3882 {
3883 char *name;
3884 unsigned int dir;
3885 unsigned int time;
3886 unsigned int size;
3887 }
3888 *files;
3889 };
3890
3891 struct directories
3892 {
3893 unsigned int num_dirs;
3894 char **dirs;
3895 };
3896
3897 static void
3898 dwarf_decode_lines (unsigned int offset, char *comp_dir, bfd *abfd,
3899 const struct comp_unit_head *cu_header)
3900 {
3901 char *line_ptr;
3902 char *line_end;
3903 struct line_head lh;
3904 struct cleanup *back_to;
3905 unsigned int i, bytes_read;
3906 char *cur_file, *cur_dir;
3907 unsigned char op_code, extended_op, adj_opcode;
3908
3909 #define FILE_ALLOC_CHUNK 5
3910 #define DIR_ALLOC_CHUNK 5
3911
3912 struct filenames files;
3913 struct directories dirs;
3914
3915 if (dwarf_line_buffer == NULL)
3916 {
3917 complain (&dwarf2_missing_line_number_section);
3918 return;
3919 }
3920
3921 files.num_files = 0;
3922 files.files = NULL;
3923
3924 dirs.num_dirs = 0;
3925 dirs.dirs = NULL;
3926
3927 line_ptr = dwarf_line_buffer + offset;
3928
3929 /* read in the prologue */
3930 lh.total_length = read_initial_length (abfd, line_ptr, NULL, &bytes_read);
3931 line_ptr += bytes_read;
3932 line_end = line_ptr + lh.total_length;
3933 lh.version = read_2_bytes (abfd, line_ptr);
3934 line_ptr += 2;
3935 lh.prologue_length = read_offset (abfd, line_ptr, cu_header, &bytes_read);
3936 line_ptr += bytes_read;
3937 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
3938 line_ptr += 1;
3939 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
3940 line_ptr += 1;
3941 lh.line_base = read_1_signed_byte (abfd, line_ptr);
3942 line_ptr += 1;
3943 lh.line_range = read_1_byte (abfd, line_ptr);
3944 line_ptr += 1;
3945 lh.opcode_base = read_1_byte (abfd, line_ptr);
3946 line_ptr += 1;
3947 lh.standard_opcode_lengths = (unsigned char *)
3948 xmalloc (lh.opcode_base * sizeof (unsigned char));
3949 back_to = make_cleanup (free_current_contents, &lh.standard_opcode_lengths);
3950
3951 lh.standard_opcode_lengths[0] = 1;
3952 for (i = 1; i < lh.opcode_base; ++i)
3953 {
3954 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
3955 line_ptr += 1;
3956 }
3957
3958 /* Read directory table */
3959 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
3960 {
3961 line_ptr += bytes_read;
3962 if ((dirs.num_dirs % DIR_ALLOC_CHUNK) == 0)
3963 {
3964 dirs.dirs = (char **)
3965 xrealloc (dirs.dirs,
3966 (dirs.num_dirs + DIR_ALLOC_CHUNK) * sizeof (char *));
3967 if (dirs.num_dirs == 0)
3968 make_cleanup (free_current_contents, &dirs.dirs);
3969 }
3970 dirs.dirs[dirs.num_dirs++] = cur_dir;
3971 }
3972 line_ptr += bytes_read;
3973
3974 /* Read file name table */
3975 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
3976 {
3977 line_ptr += bytes_read;
3978 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
3979 {
3980 files.files = (struct fileinfo *)
3981 xrealloc (files.files,
3982 (files.num_files + FILE_ALLOC_CHUNK)
3983 * sizeof (struct fileinfo));
3984 if (files.num_files == 0)
3985 make_cleanup (free_current_contents, &files.files);
3986 }
3987 files.files[files.num_files].name = cur_file;
3988 files.files[files.num_files].dir =
3989 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3990 line_ptr += bytes_read;
3991 files.files[files.num_files].time =
3992 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3993 line_ptr += bytes_read;
3994 files.files[files.num_files].size =
3995 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3996 line_ptr += bytes_read;
3997 files.num_files++;
3998 }
3999 line_ptr += bytes_read;
4000
4001 /* Read the statement sequences until there's nothing left. */
4002 while (line_ptr < line_end)
4003 {
4004 /* state machine registers */
4005 CORE_ADDR address = 0;
4006 unsigned int file = 1;
4007 unsigned int line = 1;
4008 unsigned int column = 0;
4009 int is_stmt = lh.default_is_stmt;
4010 int basic_block = 0;
4011 int end_sequence = 0;
4012
4013 /* Start a subfile for the current file of the state machine. */
4014 if (files.num_files >= file)
4015 {
4016 /* The file and directory tables are 0 based, the references
4017 are 1 based. */
4018 dwarf2_start_subfile (files.files[file - 1].name,
4019 (files.files[file - 1].dir
4020 ? dirs.dirs[files.files[file - 1].dir - 1]
4021 : comp_dir));
4022 }
4023
4024 /* Decode the table. */
4025 while (!end_sequence)
4026 {
4027 op_code = read_1_byte (abfd, line_ptr);
4028 line_ptr += 1;
4029
4030 if (op_code >= lh.opcode_base)
4031 { /* Special operand. */
4032 adj_opcode = op_code - lh.opcode_base;
4033 address += (adj_opcode / lh.line_range)
4034 * lh.minimum_instruction_length;
4035 line += lh.line_base + (adj_opcode % lh.line_range);
4036 /* append row to matrix using current values */
4037 record_line (current_subfile, line, address);
4038 basic_block = 1;
4039 }
4040 else switch (op_code)
4041 {
4042 case DW_LNS_extended_op:
4043 line_ptr += 1; /* ignore length */
4044 extended_op = read_1_byte (abfd, line_ptr);
4045 line_ptr += 1;
4046 switch (extended_op)
4047 {
4048 case DW_LNE_end_sequence:
4049 end_sequence = 1;
4050 /* Don't call record_line here. The end_sequence
4051 instruction provides the address of the first byte
4052 *after* the last line in the sequence; it's not the
4053 address of any real source line. However, the GDB
4054 linetable structure only records the starts of lines,
4055 not the ends. This is a weakness of GDB. */
4056 break;
4057 case DW_LNE_set_address:
4058 address = read_address (abfd, line_ptr, cu_header, &bytes_read);
4059 line_ptr += bytes_read;
4060 address += baseaddr;
4061 break;
4062 case DW_LNE_define_file:
4063 cur_file = read_string (abfd, line_ptr, &bytes_read);
4064 line_ptr += bytes_read;
4065 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
4066 {
4067 files.files = (struct fileinfo *)
4068 xrealloc (files.files,
4069 (files.num_files + FILE_ALLOC_CHUNK)
4070 * sizeof (struct fileinfo));
4071 if (files.num_files == 0)
4072 make_cleanup (free_current_contents, &files.files);
4073 }
4074 files.files[files.num_files].name = cur_file;
4075 files.files[files.num_files].dir =
4076 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4077 line_ptr += bytes_read;
4078 files.files[files.num_files].time =
4079 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4080 line_ptr += bytes_read;
4081 files.files[files.num_files].size =
4082 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4083 line_ptr += bytes_read;
4084 files.num_files++;
4085 break;
4086 default:
4087 complain (&dwarf2_mangled_line_number_section);
4088 goto done;
4089 }
4090 break;
4091 case DW_LNS_copy:
4092 record_line (current_subfile, line, address);
4093 basic_block = 0;
4094 break;
4095 case DW_LNS_advance_pc:
4096 address += lh.minimum_instruction_length
4097 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4098 line_ptr += bytes_read;
4099 break;
4100 case DW_LNS_advance_line:
4101 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
4102 line_ptr += bytes_read;
4103 break;
4104 case DW_LNS_set_file:
4105 /* The file and directory tables are 0 based, the references
4106 are 1 based. */
4107 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4108 line_ptr += bytes_read;
4109 dwarf2_start_subfile
4110 (files.files[file - 1].name,
4111 (files.files[file - 1].dir
4112 ? dirs.dirs[files.files[file - 1].dir - 1]
4113 : comp_dir));
4114 break;
4115 case DW_LNS_set_column:
4116 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4117 line_ptr += bytes_read;
4118 break;
4119 case DW_LNS_negate_stmt:
4120 is_stmt = (!is_stmt);
4121 break;
4122 case DW_LNS_set_basic_block:
4123 basic_block = 1;
4124 break;
4125 /* Add to the address register of the state machine the
4126 address increment value corresponding to special opcode
4127 255. Ie, this value is scaled by the minimum instruction
4128 length since special opcode 255 would have scaled the
4129 the increment. */
4130 case DW_LNS_const_add_pc:
4131 address += (lh.minimum_instruction_length
4132 * ((255 - lh.opcode_base) / lh.line_range));
4133 break;
4134 case DW_LNS_fixed_advance_pc:
4135 address += read_2_bytes (abfd, line_ptr);
4136 line_ptr += 2;
4137 break;
4138 default:
4139 { /* Unknown standard opcode, ignore it. */
4140 int i;
4141 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
4142 {
4143 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
4144 line_ptr += bytes_read;
4145 }
4146 }
4147 }
4148 }
4149 }
4150 done:
4151 do_cleanups (back_to);
4152 }
4153
4154 /* Start a subfile for DWARF. FILENAME is the name of the file and
4155 DIRNAME the name of the source directory which contains FILENAME
4156 or NULL if not known.
4157 This routine tries to keep line numbers from identical absolute and
4158 relative file names in a common subfile.
4159
4160 Using the `list' example from the GDB testsuite, which resides in
4161 /srcdir and compiling it with Irix6.2 cc in /compdir using a filename
4162 of /srcdir/list0.c yields the following debugging information for list0.c:
4163
4164 DW_AT_name: /srcdir/list0.c
4165 DW_AT_comp_dir: /compdir
4166 files.files[0].name: list0.h
4167 files.files[0].dir: /srcdir
4168 files.files[1].name: list0.c
4169 files.files[1].dir: /srcdir
4170
4171 The line number information for list0.c has to end up in a single
4172 subfile, so that `break /srcdir/list0.c:1' works as expected. */
4173
4174 static void
4175 dwarf2_start_subfile (char *filename, char *dirname)
4176 {
4177 /* If the filename isn't absolute, try to match an existing subfile
4178 with the full pathname. */
4179
4180 if (!IS_ABSOLUTE_PATH (filename) && dirname != NULL)
4181 {
4182 struct subfile *subfile;
4183 char *fullname = concat (dirname, "/", filename, NULL);
4184
4185 for (subfile = subfiles; subfile; subfile = subfile->next)
4186 {
4187 if (FILENAME_CMP (subfile->name, fullname) == 0)
4188 {
4189 current_subfile = subfile;
4190 xfree (fullname);
4191 return;
4192 }
4193 }
4194 xfree (fullname);
4195 }
4196 start_subfile (filename, dirname);
4197 }
4198
4199 /* Given a pointer to a DWARF information entry, figure out if we need
4200 to make a symbol table entry for it, and if so, create a new entry
4201 and return a pointer to it.
4202 If TYPE is NULL, determine symbol type from the die, otherwise
4203 used the passed type. */
4204
4205 static struct symbol *
4206 new_symbol (struct die_info *die, struct type *type, struct objfile *objfile,
4207 const struct comp_unit_head *cu_header)
4208 {
4209 struct symbol *sym = NULL;
4210 char *name;
4211 struct attribute *attr = NULL;
4212 struct attribute *attr2 = NULL;
4213 CORE_ADDR addr;
4214
4215 name = dwarf2_linkage_name (die);
4216 if (name)
4217 {
4218 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
4219 sizeof (struct symbol));
4220 OBJSTAT (objfile, n_syms++);
4221 memset (sym, 0, sizeof (struct symbol));
4222 SYMBOL_NAME (sym) = obsavestring (name, strlen (name),
4223 &objfile->symbol_obstack);
4224
4225 /* Default assumptions.
4226 Use the passed type or decode it from the die. */
4227 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4228 SYMBOL_CLASS (sym) = LOC_STATIC;
4229 if (type != NULL)
4230 SYMBOL_TYPE (sym) = type;
4231 else
4232 SYMBOL_TYPE (sym) = die_type (die, objfile, cu_header);
4233 attr = dwarf_attr (die, DW_AT_decl_line);
4234 if (attr)
4235 {
4236 SYMBOL_LINE (sym) = DW_UNSND (attr);
4237 }
4238
4239 /* If this symbol is from a C++ compilation, then attempt to
4240 cache the demangled form for future reference. This is a
4241 typical time versus space tradeoff, that was decided in favor
4242 of time because it sped up C++ symbol lookups by a factor of
4243 about 20. */
4244
4245 SYMBOL_LANGUAGE (sym) = cu_language;
4246 SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
4247 switch (die->tag)
4248 {
4249 case DW_TAG_label:
4250 attr = dwarf_attr (die, DW_AT_low_pc);
4251 if (attr)
4252 {
4253 SYMBOL_VALUE_ADDRESS (sym) = DW_ADDR (attr) + baseaddr;
4254 }
4255 SYMBOL_CLASS (sym) = LOC_LABEL;
4256 break;
4257 case DW_TAG_subprogram:
4258 /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
4259 finish_block. */
4260 SYMBOL_CLASS (sym) = LOC_BLOCK;
4261 attr2 = dwarf_attr (die, DW_AT_external);
4262 if (attr2 && (DW_UNSND (attr2) != 0))
4263 {
4264 add_symbol_to_list (sym, &global_symbols);
4265 }
4266 else
4267 {
4268 add_symbol_to_list (sym, list_in_scope);
4269 }
4270 break;
4271 case DW_TAG_variable:
4272 /* Compilation with minimal debug info may result in variables
4273 with missing type entries. Change the misleading `void' type
4274 to something sensible. */
4275 if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID)
4276 SYMBOL_TYPE (sym) = init_type (TYPE_CODE_INT,
4277 TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4278 "<variable, no debug info>",
4279 objfile);
4280 attr = dwarf_attr (die, DW_AT_const_value);
4281 if (attr)
4282 {
4283 dwarf2_const_value (attr, sym, objfile, cu_header);
4284 attr2 = dwarf_attr (die, DW_AT_external);
4285 if (attr2 && (DW_UNSND (attr2) != 0))
4286 add_symbol_to_list (sym, &global_symbols);
4287 else
4288 add_symbol_to_list (sym, list_in_scope);
4289 break;
4290 }
4291 attr = dwarf_attr (die, DW_AT_location);
4292 if (attr)
4293 {
4294 attr2 = dwarf_attr (die, DW_AT_external);
4295 if (attr2 && (DW_UNSND (attr2) != 0))
4296 {
4297 SYMBOL_VALUE_ADDRESS (sym) =
4298 decode_locdesc (DW_BLOCK (attr), objfile, cu_header);
4299 add_symbol_to_list (sym, &global_symbols);
4300
4301 /* In shared libraries the address of the variable
4302 in the location descriptor might still be relocatable,
4303 so its value could be zero.
4304 Enter the symbol as a LOC_UNRESOLVED symbol, if its
4305 value is zero, the address of the variable will then
4306 be determined from the minimal symbol table whenever
4307 the variable is referenced. */
4308 if (SYMBOL_VALUE_ADDRESS (sym))
4309 {
4310 fixup_symbol_section (sym, objfile);
4311 SYMBOL_VALUE_ADDRESS (sym) +=
4312 ANOFFSET (objfile->section_offsets,
4313 SYMBOL_SECTION (sym));
4314 SYMBOL_CLASS (sym) = LOC_STATIC;
4315 }
4316 else
4317 SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
4318 }
4319 else
4320 {
4321 SYMBOL_VALUE (sym) = addr =
4322 decode_locdesc (DW_BLOCK (attr), objfile, cu_header);
4323 add_symbol_to_list (sym, list_in_scope);
4324 if (optimized_out)
4325 {
4326 SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
4327 }
4328 else if (isreg)
4329 {
4330 SYMBOL_CLASS (sym) = LOC_REGISTER;
4331 SYMBOL_VALUE (sym) =
4332 DWARF2_REG_TO_REGNUM (SYMBOL_VALUE (sym));
4333 }
4334 else if (offreg)
4335 {
4336 SYMBOL_CLASS (sym) = LOC_BASEREG;
4337 SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg);
4338 }
4339 else if (islocal)
4340 {
4341 SYMBOL_CLASS (sym) = LOC_LOCAL;
4342 }
4343 else
4344 {
4345 fixup_symbol_section (sym, objfile);
4346 SYMBOL_VALUE_ADDRESS (sym) =
4347 addr + ANOFFSET (objfile->section_offsets,
4348 SYMBOL_SECTION (sym));
4349 SYMBOL_CLASS (sym) = LOC_STATIC;
4350 }
4351 }
4352 }
4353 else
4354 {
4355 /* We do not know the address of this symbol.
4356 If it is an external symbol and we have type information
4357 for it, enter the symbol as a LOC_UNRESOLVED symbol.
4358 The address of the variable will then be determined from
4359 the minimal symbol table whenever the variable is
4360 referenced. */
4361 attr2 = dwarf_attr (die, DW_AT_external);
4362 if (attr2 && (DW_UNSND (attr2) != 0)
4363 && dwarf_attr (die, DW_AT_type) != NULL)
4364 {
4365 SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
4366 add_symbol_to_list (sym, &global_symbols);
4367 }
4368 }
4369 break;
4370 case DW_TAG_formal_parameter:
4371 attr = dwarf_attr (die, DW_AT_location);
4372 if (attr)
4373 {
4374 SYMBOL_VALUE (sym) =
4375 decode_locdesc (DW_BLOCK (attr), objfile, cu_header);
4376 if (isreg)
4377 {
4378 SYMBOL_CLASS (sym) = LOC_REGPARM;
4379 SYMBOL_VALUE (sym) =
4380 DWARF2_REG_TO_REGNUM (SYMBOL_VALUE (sym));
4381 }
4382 else if (offreg)
4383 {
4384 if (isderef)
4385 {
4386 if (basereg != frame_base_reg)
4387 complain (&dwarf2_complex_location_expr);
4388 SYMBOL_CLASS (sym) = LOC_REF_ARG;
4389 }
4390 else
4391 {
4392 SYMBOL_CLASS (sym) = LOC_BASEREG_ARG;
4393 SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg);
4394 }
4395 }
4396 else
4397 {
4398 SYMBOL_CLASS (sym) = LOC_ARG;
4399 }
4400 }
4401 attr = dwarf_attr (die, DW_AT_const_value);
4402 if (attr)
4403 {
4404 dwarf2_const_value (attr, sym, objfile, cu_header);
4405 }
4406 add_symbol_to_list (sym, list_in_scope);
4407 break;
4408 case DW_TAG_unspecified_parameters:
4409 /* From varargs functions; gdb doesn't seem to have any
4410 interest in this information, so just ignore it for now.
4411 (FIXME?) */
4412 break;
4413 case DW_TAG_class_type:
4414 case DW_TAG_structure_type:
4415 case DW_TAG_union_type:
4416 case DW_TAG_enumeration_type:
4417 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
4418 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
4419 add_symbol_to_list (sym, list_in_scope);
4420
4421 /* The semantics of C++ state that "struct foo { ... }" also
4422 defines a typedef for "foo". Synthesize a typedef symbol so
4423 that "ptype foo" works as expected. */
4424 if (cu_language == language_cplus)
4425 {
4426 struct symbol *typedef_sym = (struct symbol *)
4427 obstack_alloc (&objfile->symbol_obstack,
4428 sizeof (struct symbol));
4429 *typedef_sym = *sym;
4430 SYMBOL_NAMESPACE (typedef_sym) = VAR_NAMESPACE;
4431 if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
4432 TYPE_NAME (SYMBOL_TYPE (sym)) =
4433 obsavestring (SYMBOL_NAME (sym),
4434 strlen (SYMBOL_NAME (sym)),
4435 &objfile->type_obstack);
4436 add_symbol_to_list (typedef_sym, list_in_scope);
4437 }
4438 break;
4439 case DW_TAG_typedef:
4440 case DW_TAG_base_type:
4441 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
4442 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4443 add_symbol_to_list (sym, list_in_scope);
4444 break;
4445 case DW_TAG_enumerator:
4446 attr = dwarf_attr (die, DW_AT_const_value);
4447 if (attr)
4448 {
4449 dwarf2_const_value (attr, sym, objfile, cu_header);
4450 }
4451 add_symbol_to_list (sym, list_in_scope);
4452 break;
4453 default:
4454 /* Not a tag we recognize. Hopefully we aren't processing
4455 trash data, but since we must specifically ignore things
4456 we don't recognize, there is nothing else we should do at
4457 this point. */
4458 complain (&dwarf2_unsupported_tag, dwarf_tag_name (die->tag));
4459 break;
4460 }
4461 }
4462 return (sym);
4463 }
4464
4465 /* Copy constant value from an attribute to a symbol. */
4466
4467 static void
4468 dwarf2_const_value (struct attribute *attr, struct symbol *sym,
4469 struct objfile *objfile,
4470 const struct comp_unit_head *cu_header)
4471 {
4472 struct dwarf_block *blk;
4473
4474 switch (attr->form)
4475 {
4476 case DW_FORM_addr:
4477 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != cu_header->addr_size)
4478 complain (&dwarf2_const_value_length_mismatch, SYMBOL_NAME (sym),
4479 cu_header->addr_size, TYPE_LENGTH (SYMBOL_TYPE (sym)));
4480 SYMBOL_VALUE_BYTES (sym) = (char *)
4481 obstack_alloc (&objfile->symbol_obstack, cu_header->addr_size);
4482 store_address (SYMBOL_VALUE_BYTES (sym), cu_header->addr_size,
4483 DW_ADDR (attr));
4484 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
4485 break;
4486 case DW_FORM_block1:
4487 case DW_FORM_block2:
4488 case DW_FORM_block4:
4489 case DW_FORM_block:
4490 blk = DW_BLOCK (attr);
4491 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != blk->size)
4492 complain (&dwarf2_const_value_length_mismatch, SYMBOL_NAME (sym),
4493 blk->size, TYPE_LENGTH (SYMBOL_TYPE (sym)));
4494 SYMBOL_VALUE_BYTES (sym) = (char *)
4495 obstack_alloc (&objfile->symbol_obstack, blk->size);
4496 memcpy (SYMBOL_VALUE_BYTES (sym), blk->data, blk->size);
4497 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
4498 break;
4499
4500 /* The DW_AT_const_value attributes are supposed to carry the
4501 symbol's value "represented as it would be on the target
4502 architecture." By the time we get here, it's already been
4503 converted to host endianness, so we just need to sign- or
4504 zero-extend it as appropriate. */
4505 case DW_FORM_data1:
4506 dwarf2_const_value_data (attr, sym, 8);
4507 break;
4508 case DW_FORM_data2:
4509 dwarf2_const_value_data (attr, sym, 16);
4510 break;
4511 case DW_FORM_data4:
4512 dwarf2_const_value_data (attr, sym, 32);
4513 break;
4514 case DW_FORM_data8:
4515 dwarf2_const_value_data (attr, sym, 64);
4516 break;
4517
4518 case DW_FORM_sdata:
4519 SYMBOL_VALUE (sym) = DW_SND (attr);
4520 SYMBOL_CLASS (sym) = LOC_CONST;
4521 break;
4522
4523 case DW_FORM_udata:
4524 SYMBOL_VALUE (sym) = DW_UNSND (attr);
4525 SYMBOL_CLASS (sym) = LOC_CONST;
4526 break;
4527
4528 default:
4529 complain (&dwarf2_unsupported_const_value_attr,
4530 dwarf_form_name (attr->form));
4531 SYMBOL_VALUE (sym) = 0;
4532 SYMBOL_CLASS (sym) = LOC_CONST;
4533 break;
4534 }
4535 }
4536
4537
4538 /* Given an attr with a DW_FORM_dataN value in host byte order, sign-
4539 or zero-extend it as appropriate for the symbol's type. */
4540 static void
4541 dwarf2_const_value_data (struct attribute *attr,
4542 struct symbol *sym,
4543 int bits)
4544 {
4545 LONGEST l = DW_UNSND (attr);
4546
4547 if (bits < sizeof (l) * 8)
4548 {
4549 if (TYPE_UNSIGNED (SYMBOL_TYPE (sym)))
4550 l &= ((LONGEST) 1 << bits) - 1;
4551 else
4552 l = (l << (sizeof (l) * 8 - bits)) >> (sizeof (l) * 8 - bits);
4553 }
4554
4555 SYMBOL_VALUE (sym) = l;
4556 SYMBOL_CLASS (sym) = LOC_CONST;
4557 }
4558
4559
4560 /* Return the type of the die in question using its DW_AT_type attribute. */
4561
4562 static struct type *
4563 die_type (struct die_info *die, struct objfile *objfile,
4564 const struct comp_unit_head *cu_header)
4565 {
4566 struct type *type;
4567 struct attribute *type_attr;
4568 struct die_info *type_die;
4569 unsigned int ref;
4570
4571 type_attr = dwarf_attr (die, DW_AT_type);
4572 if (!type_attr)
4573 {
4574 /* A missing DW_AT_type represents a void type. */
4575 return dwarf2_fundamental_type (objfile, FT_VOID);
4576 }
4577 else
4578 {
4579 ref = dwarf2_get_ref_die_offset (type_attr);
4580 type_die = follow_die_ref (ref);
4581 if (!type_die)
4582 {
4583 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
4584 return NULL;
4585 }
4586 }
4587 type = tag_type_to_type (type_die, objfile, cu_header);
4588 if (!type)
4589 {
4590 dump_die (type_die);
4591 error ("Dwarf Error: Problem turning type die at offset into gdb type.");
4592 }
4593 return type;
4594 }
4595
4596 /* Return the containing type of the die in question using its
4597 DW_AT_containing_type attribute. */
4598
4599 static struct type *
4600 die_containing_type (struct die_info *die, struct objfile *objfile,
4601 const struct comp_unit_head *cu_header)
4602 {
4603 struct type *type = NULL;
4604 struct attribute *type_attr;
4605 struct die_info *type_die = NULL;
4606 unsigned int ref;
4607
4608 type_attr = dwarf_attr (die, DW_AT_containing_type);
4609 if (type_attr)
4610 {
4611 ref = dwarf2_get_ref_die_offset (type_attr);
4612 type_die = follow_die_ref (ref);
4613 if (!type_die)
4614 {
4615 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
4616 return NULL;
4617 }
4618 type = tag_type_to_type (type_die, objfile, cu_header);
4619 }
4620 if (!type)
4621 {
4622 if (type_die)
4623 dump_die (type_die);
4624 error ("Dwarf Error: Problem turning containing type into gdb type.");
4625 }
4626 return type;
4627 }
4628
4629 #if 0
4630 static struct type *
4631 type_at_offset (unsigned int offset, struct objfile *objfile)
4632 {
4633 struct die_info *die;
4634 struct type *type;
4635
4636 die = follow_die_ref (offset);
4637 if (!die)
4638 {
4639 error ("Dwarf Error: Cannot find type referent at offset %d.", offset);
4640 return NULL;
4641 }
4642 type = tag_type_to_type (die, objfile);
4643 return type;
4644 }
4645 #endif
4646
4647 static struct type *
4648 tag_type_to_type (struct die_info *die, struct objfile *objfile,
4649 const struct comp_unit_head *cu_header)
4650 {
4651 if (die->type)
4652 {
4653 return die->type;
4654 }
4655 else
4656 {
4657 read_type_die (die, objfile, cu_header);
4658 if (!die->type)
4659 {
4660 dump_die (die);
4661 error ("Dwarf Error: Cannot find type of die.");
4662 }
4663 return die->type;
4664 }
4665 }
4666
4667 static void
4668 read_type_die (struct die_info *die, struct objfile *objfile,
4669 const struct comp_unit_head *cu_header)
4670 {
4671 switch (die->tag)
4672 {
4673 case DW_TAG_class_type:
4674 case DW_TAG_structure_type:
4675 case DW_TAG_union_type:
4676 read_structure_scope (die, objfile, cu_header);
4677 break;
4678 case DW_TAG_enumeration_type:
4679 read_enumeration (die, objfile, cu_header);
4680 break;
4681 case DW_TAG_subprogram:
4682 case DW_TAG_subroutine_type:
4683 read_subroutine_type (die, objfile, cu_header);
4684 break;
4685 case DW_TAG_array_type:
4686 read_array_type (die, objfile, cu_header);
4687 break;
4688 case DW_TAG_pointer_type:
4689 read_tag_pointer_type (die, objfile, cu_header);
4690 break;
4691 case DW_TAG_ptr_to_member_type:
4692 read_tag_ptr_to_member_type (die, objfile, cu_header);
4693 break;
4694 case DW_TAG_reference_type:
4695 read_tag_reference_type (die, objfile, cu_header);
4696 break;
4697 case DW_TAG_const_type:
4698 read_tag_const_type (die, objfile, cu_header);
4699 break;
4700 case DW_TAG_volatile_type:
4701 read_tag_volatile_type (die, objfile, cu_header);
4702 break;
4703 case DW_TAG_string_type:
4704 read_tag_string_type (die, objfile);
4705 break;
4706 case DW_TAG_typedef:
4707 read_typedef (die, objfile, cu_header);
4708 break;
4709 case DW_TAG_base_type:
4710 read_base_type (die, objfile);
4711 break;
4712 default:
4713 complain (&dwarf2_unexpected_tag, dwarf_tag_name (die->tag));
4714 break;
4715 }
4716 }
4717
4718 static struct type *
4719 dwarf_base_type (int encoding, int size, struct objfile *objfile)
4720 {
4721 /* FIXME - this should not produce a new (struct type *)
4722 every time. It should cache base types. */
4723 struct type *type;
4724 switch (encoding)
4725 {
4726 case DW_ATE_address:
4727 type = dwarf2_fundamental_type (objfile, FT_VOID);
4728 return type;
4729 case DW_ATE_boolean:
4730 type = dwarf2_fundamental_type (objfile, FT_BOOLEAN);
4731 return type;
4732 case DW_ATE_complex_float:
4733 if (size == 16)
4734 {
4735 type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_COMPLEX);
4736 }
4737 else
4738 {
4739 type = dwarf2_fundamental_type (objfile, FT_COMPLEX);
4740 }
4741 return type;
4742 case DW_ATE_float:
4743 if (size == 8)
4744 {
4745 type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_FLOAT);
4746 }
4747 else
4748 {
4749 type = dwarf2_fundamental_type (objfile, FT_FLOAT);
4750 }
4751 return type;
4752 case DW_ATE_signed:
4753 switch (size)
4754 {
4755 case 1:
4756 type = dwarf2_fundamental_type (objfile, FT_SIGNED_CHAR);
4757 break;
4758 case 2:
4759 type = dwarf2_fundamental_type (objfile, FT_SIGNED_SHORT);
4760 break;
4761 default:
4762 case 4:
4763 type = dwarf2_fundamental_type (objfile, FT_SIGNED_INTEGER);
4764 break;
4765 }
4766 return type;
4767 case DW_ATE_signed_char:
4768 type = dwarf2_fundamental_type (objfile, FT_SIGNED_CHAR);
4769 return type;
4770 case DW_ATE_unsigned:
4771 switch (size)
4772 {
4773 case 1:
4774 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_CHAR);
4775 break;
4776 case 2:
4777 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_SHORT);
4778 break;
4779 default:
4780 case 4:
4781 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_INTEGER);
4782 break;
4783 }
4784 return type;
4785 case DW_ATE_unsigned_char:
4786 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_CHAR);
4787 return type;
4788 default:
4789 type = dwarf2_fundamental_type (objfile, FT_SIGNED_INTEGER);
4790 return type;
4791 }
4792 }
4793
4794 #if 0
4795 struct die_info *
4796 copy_die (struct die_info *old_die)
4797 {
4798 struct die_info *new_die;
4799 int i, num_attrs;
4800
4801 new_die = (struct die_info *) xmalloc (sizeof (struct die_info));
4802 memset (new_die, 0, sizeof (struct die_info));
4803
4804 new_die->tag = old_die->tag;
4805 new_die->has_children = old_die->has_children;
4806 new_die->abbrev = old_die->abbrev;
4807 new_die->offset = old_die->offset;
4808 new_die->type = NULL;
4809
4810 num_attrs = old_die->num_attrs;
4811 new_die->num_attrs = num_attrs;
4812 new_die->attrs = (struct attribute *)
4813 xmalloc (num_attrs * sizeof (struct attribute));
4814
4815 for (i = 0; i < old_die->num_attrs; ++i)
4816 {
4817 new_die->attrs[i].name = old_die->attrs[i].name;
4818 new_die->attrs[i].form = old_die->attrs[i].form;
4819 new_die->attrs[i].u.addr = old_die->attrs[i].u.addr;
4820 }
4821
4822 new_die->next = NULL;
4823 return new_die;
4824 }
4825 #endif
4826
4827 /* Return sibling of die, NULL if no sibling. */
4828
4829 static struct die_info *
4830 sibling_die (struct die_info *die)
4831 {
4832 int nesting_level = 0;
4833
4834 if (!die->has_children)
4835 {
4836 if (die->next && (die->next->tag == 0))
4837 {
4838 return NULL;
4839 }
4840 else
4841 {
4842 return die->next;
4843 }
4844 }
4845 else
4846 {
4847 do
4848 {
4849 if (die->has_children)
4850 {
4851 nesting_level++;
4852 }
4853 if (die->tag == 0)
4854 {
4855 nesting_level--;
4856 }
4857 die = die->next;
4858 }
4859 while (nesting_level);
4860 if (die && (die->tag == 0))
4861 {
4862 return NULL;
4863 }
4864 else
4865 {
4866 return die;
4867 }
4868 }
4869 }
4870
4871 /* Get linkage name of a die, return NULL if not found. */
4872
4873 static char *
4874 dwarf2_linkage_name (struct die_info *die)
4875 {
4876 struct attribute *attr;
4877
4878 attr = dwarf_attr (die, DW_AT_MIPS_linkage_name);
4879 if (attr && DW_STRING (attr))
4880 return DW_STRING (attr);
4881 attr = dwarf_attr (die, DW_AT_name);
4882 if (attr && DW_STRING (attr))
4883 return DW_STRING (attr);
4884 return NULL;
4885 }
4886
4887 /* Convert a DIE tag into its string name. */
4888
4889 static char *
4890 dwarf_tag_name (register unsigned tag)
4891 {
4892 switch (tag)
4893 {
4894 case DW_TAG_padding:
4895 return "DW_TAG_padding";
4896 case DW_TAG_array_type:
4897 return "DW_TAG_array_type";
4898 case DW_TAG_class_type:
4899 return "DW_TAG_class_type";
4900 case DW_TAG_entry_point:
4901 return "DW_TAG_entry_point";
4902 case DW_TAG_enumeration_type:
4903 return "DW_TAG_enumeration_type";
4904 case DW_TAG_formal_parameter:
4905 return "DW_TAG_formal_parameter";
4906 case DW_TAG_imported_declaration:
4907 return "DW_TAG_imported_declaration";
4908 case DW_TAG_label:
4909 return "DW_TAG_label";
4910 case DW_TAG_lexical_block:
4911 return "DW_TAG_lexical_block";
4912 case DW_TAG_member:
4913 return "DW_TAG_member";
4914 case DW_TAG_pointer_type:
4915 return "DW_TAG_pointer_type";
4916 case DW_TAG_reference_type:
4917 return "DW_TAG_reference_type";
4918 case DW_TAG_compile_unit:
4919 return "DW_TAG_compile_unit";
4920 case DW_TAG_string_type:
4921 return "DW_TAG_string_type";
4922 case DW_TAG_structure_type:
4923 return "DW_TAG_structure_type";
4924 case DW_TAG_subroutine_type:
4925 return "DW_TAG_subroutine_type";
4926 case DW_TAG_typedef:
4927 return "DW_TAG_typedef";
4928 case DW_TAG_union_type:
4929 return "DW_TAG_union_type";
4930 case DW_TAG_unspecified_parameters:
4931 return "DW_TAG_unspecified_parameters";
4932 case DW_TAG_variant:
4933 return "DW_TAG_variant";
4934 case DW_TAG_common_block:
4935 return "DW_TAG_common_block";
4936 case DW_TAG_common_inclusion:
4937 return "DW_TAG_common_inclusion";
4938 case DW_TAG_inheritance:
4939 return "DW_TAG_inheritance";
4940 case DW_TAG_inlined_subroutine:
4941 return "DW_TAG_inlined_subroutine";
4942 case DW_TAG_module:
4943 return "DW_TAG_module";
4944 case DW_TAG_ptr_to_member_type:
4945 return "DW_TAG_ptr_to_member_type";
4946 case DW_TAG_set_type:
4947 return "DW_TAG_set_type";
4948 case DW_TAG_subrange_type:
4949 return "DW_TAG_subrange_type";
4950 case DW_TAG_with_stmt:
4951 return "DW_TAG_with_stmt";
4952 case DW_TAG_access_declaration:
4953 return "DW_TAG_access_declaration";
4954 case DW_TAG_base_type:
4955 return "DW_TAG_base_type";
4956 case DW_TAG_catch_block:
4957 return "DW_TAG_catch_block";
4958 case DW_TAG_const_type:
4959 return "DW_TAG_const_type";
4960 case DW_TAG_constant:
4961 return "DW_TAG_constant";
4962 case DW_TAG_enumerator:
4963 return "DW_TAG_enumerator";
4964 case DW_TAG_file_type:
4965 return "DW_TAG_file_type";
4966 case DW_TAG_friend:
4967 return "DW_TAG_friend";
4968 case DW_TAG_namelist:
4969 return "DW_TAG_namelist";
4970 case DW_TAG_namelist_item:
4971 return "DW_TAG_namelist_item";
4972 case DW_TAG_packed_type:
4973 return "DW_TAG_packed_type";
4974 case DW_TAG_subprogram:
4975 return "DW_TAG_subprogram";
4976 case DW_TAG_template_type_param:
4977 return "DW_TAG_template_type_param";
4978 case DW_TAG_template_value_param:
4979 return "DW_TAG_template_value_param";
4980 case DW_TAG_thrown_type:
4981 return "DW_TAG_thrown_type";
4982 case DW_TAG_try_block:
4983 return "DW_TAG_try_block";
4984 case DW_TAG_variant_part:
4985 return "DW_TAG_variant_part";
4986 case DW_TAG_variable:
4987 return "DW_TAG_variable";
4988 case DW_TAG_volatile_type:
4989 return "DW_TAG_volatile_type";
4990 case DW_TAG_MIPS_loop:
4991 return "DW_TAG_MIPS_loop";
4992 case DW_TAG_format_label:
4993 return "DW_TAG_format_label";
4994 case DW_TAG_function_template:
4995 return "DW_TAG_function_template";
4996 case DW_TAG_class_template:
4997 return "DW_TAG_class_template";
4998 default:
4999 return "DW_TAG_<unknown>";
5000 }
5001 }
5002
5003 /* Convert a DWARF attribute code into its string name. */
5004
5005 static char *
5006 dwarf_attr_name (register unsigned attr)
5007 {
5008 switch (attr)
5009 {
5010 case DW_AT_sibling:
5011 return "DW_AT_sibling";
5012 case DW_AT_location:
5013 return "DW_AT_location";
5014 case DW_AT_name:
5015 return "DW_AT_name";
5016 case DW_AT_ordering:
5017 return "DW_AT_ordering";
5018 case DW_AT_subscr_data:
5019 return "DW_AT_subscr_data";
5020 case DW_AT_byte_size:
5021 return "DW_AT_byte_size";
5022 case DW_AT_bit_offset:
5023 return "DW_AT_bit_offset";
5024 case DW_AT_bit_size:
5025 return "DW_AT_bit_size";
5026 case DW_AT_element_list:
5027 return "DW_AT_element_list";
5028 case DW_AT_stmt_list:
5029 return "DW_AT_stmt_list";
5030 case DW_AT_low_pc:
5031 return "DW_AT_low_pc";
5032 case DW_AT_high_pc:
5033 return "DW_AT_high_pc";
5034 case DW_AT_language:
5035 return "DW_AT_language";
5036 case DW_AT_member:
5037 return "DW_AT_member";
5038 case DW_AT_discr:
5039 return "DW_AT_discr";
5040 case DW_AT_discr_value:
5041 return "DW_AT_discr_value";
5042 case DW_AT_visibility:
5043 return "DW_AT_visibility";
5044 case DW_AT_import:
5045 return "DW_AT_import";
5046 case DW_AT_string_length:
5047 return "DW_AT_string_length";
5048 case DW_AT_common_reference:
5049 return "DW_AT_common_reference";
5050 case DW_AT_comp_dir:
5051 return "DW_AT_comp_dir";
5052 case DW_AT_const_value:
5053 return "DW_AT_const_value";
5054 case DW_AT_containing_type:
5055 return "DW_AT_containing_type";
5056 case DW_AT_default_value:
5057 return "DW_AT_default_value";
5058 case DW_AT_inline:
5059 return "DW_AT_inline";
5060 case DW_AT_is_optional:
5061 return "DW_AT_is_optional";
5062 case DW_AT_lower_bound:
5063 return "DW_AT_lower_bound";
5064 case DW_AT_producer:
5065 return "DW_AT_producer";
5066 case DW_AT_prototyped:
5067 return "DW_AT_prototyped";
5068 case DW_AT_return_addr:
5069 return "DW_AT_return_addr";
5070 case DW_AT_start_scope:
5071 return "DW_AT_start_scope";
5072 case DW_AT_stride_size:
5073 return "DW_AT_stride_size";
5074 case DW_AT_upper_bound:
5075 return "DW_AT_upper_bound";
5076 case DW_AT_abstract_origin:
5077 return "DW_AT_abstract_origin";
5078 case DW_AT_accessibility:
5079 return "DW_AT_accessibility";
5080 case DW_AT_address_class:
5081 return "DW_AT_address_class";
5082 case DW_AT_artificial:
5083 return "DW_AT_artificial";
5084 case DW_AT_base_types:
5085 return "DW_AT_base_types";
5086 case DW_AT_calling_convention:
5087 return "DW_AT_calling_convention";
5088 case DW_AT_count:
5089 return "DW_AT_count";
5090 case DW_AT_data_member_location:
5091 return "DW_AT_data_member_location";
5092 case DW_AT_decl_column:
5093 return "DW_AT_decl_column";
5094 case DW_AT_decl_file:
5095 return "DW_AT_decl_file";
5096 case DW_AT_decl_line:
5097 return "DW_AT_decl_line";
5098 case DW_AT_declaration:
5099 return "DW_AT_declaration";
5100 case DW_AT_discr_list:
5101 return "DW_AT_discr_list";
5102 case DW_AT_encoding:
5103 return "DW_AT_encoding";
5104 case DW_AT_external:
5105 return "DW_AT_external";
5106 case DW_AT_frame_base:
5107 return "DW_AT_frame_base";
5108 case DW_AT_friend:
5109 return "DW_AT_friend";
5110 case DW_AT_identifier_case:
5111 return "DW_AT_identifier_case";
5112 case DW_AT_macro_info:
5113 return "DW_AT_macro_info";
5114 case DW_AT_namelist_items:
5115 return "DW_AT_namelist_items";
5116 case DW_AT_priority:
5117 return "DW_AT_priority";
5118 case DW_AT_segment:
5119 return "DW_AT_segment";
5120 case DW_AT_specification:
5121 return "DW_AT_specification";
5122 case DW_AT_static_link:
5123 return "DW_AT_static_link";
5124 case DW_AT_type:
5125 return "DW_AT_type";
5126 case DW_AT_use_location:
5127 return "DW_AT_use_location";
5128 case DW_AT_variable_parameter:
5129 return "DW_AT_variable_parameter";
5130 case DW_AT_virtuality:
5131 return "DW_AT_virtuality";
5132 case DW_AT_vtable_elem_location:
5133 return "DW_AT_vtable_elem_location";
5134
5135 #ifdef MIPS
5136 case DW_AT_MIPS_fde:
5137 return "DW_AT_MIPS_fde";
5138 case DW_AT_MIPS_loop_begin:
5139 return "DW_AT_MIPS_loop_begin";
5140 case DW_AT_MIPS_tail_loop_begin:
5141 return "DW_AT_MIPS_tail_loop_begin";
5142 case DW_AT_MIPS_epilog_begin:
5143 return "DW_AT_MIPS_epilog_begin";
5144 case DW_AT_MIPS_loop_unroll_factor:
5145 return "DW_AT_MIPS_loop_unroll_factor";
5146 case DW_AT_MIPS_software_pipeline_depth:
5147 return "DW_AT_MIPS_software_pipeline_depth";
5148 case DW_AT_MIPS_linkage_name:
5149 return "DW_AT_MIPS_linkage_name";
5150 #endif
5151
5152 case DW_AT_sf_names:
5153 return "DW_AT_sf_names";
5154 case DW_AT_src_info:
5155 return "DW_AT_src_info";
5156 case DW_AT_mac_info:
5157 return "DW_AT_mac_info";
5158 case DW_AT_src_coords:
5159 return "DW_AT_src_coords";
5160 case DW_AT_body_begin:
5161 return "DW_AT_body_begin";
5162 case DW_AT_body_end:
5163 return "DW_AT_body_end";
5164 default:
5165 return "DW_AT_<unknown>";
5166 }
5167 }
5168
5169 /* Convert a DWARF value form code into its string name. */
5170
5171 static char *
5172 dwarf_form_name (register unsigned form)
5173 {
5174 switch (form)
5175 {
5176 case DW_FORM_addr:
5177 return "DW_FORM_addr";
5178 case DW_FORM_block2:
5179 return "DW_FORM_block2";
5180 case DW_FORM_block4:
5181 return "DW_FORM_block4";
5182 case DW_FORM_data2:
5183 return "DW_FORM_data2";
5184 case DW_FORM_data4:
5185 return "DW_FORM_data4";
5186 case DW_FORM_data8:
5187 return "DW_FORM_data8";
5188 case DW_FORM_string:
5189 return "DW_FORM_string";
5190 case DW_FORM_block:
5191 return "DW_FORM_block";
5192 case DW_FORM_block1:
5193 return "DW_FORM_block1";
5194 case DW_FORM_data1:
5195 return "DW_FORM_data1";
5196 case DW_FORM_flag:
5197 return "DW_FORM_flag";
5198 case DW_FORM_sdata:
5199 return "DW_FORM_sdata";
5200 case DW_FORM_strp:
5201 return "DW_FORM_strp";
5202 case DW_FORM_udata:
5203 return "DW_FORM_udata";
5204 case DW_FORM_ref_addr:
5205 return "DW_FORM_ref_addr";
5206 case DW_FORM_ref1:
5207 return "DW_FORM_ref1";
5208 case DW_FORM_ref2:
5209 return "DW_FORM_ref2";
5210 case DW_FORM_ref4:
5211 return "DW_FORM_ref4";
5212 case DW_FORM_ref8:
5213 return "DW_FORM_ref8";
5214 case DW_FORM_ref_udata:
5215 return "DW_FORM_ref_udata";
5216 case DW_FORM_indirect:
5217 return "DW_FORM_indirect";
5218 default:
5219 return "DW_FORM_<unknown>";
5220 }
5221 }
5222
5223 /* Convert a DWARF stack opcode into its string name. */
5224
5225 static char *
5226 dwarf_stack_op_name (register unsigned op)
5227 {
5228 switch (op)
5229 {
5230 case DW_OP_addr:
5231 return "DW_OP_addr";
5232 case DW_OP_deref:
5233 return "DW_OP_deref";
5234 case DW_OP_const1u:
5235 return "DW_OP_const1u";
5236 case DW_OP_const1s:
5237 return "DW_OP_const1s";
5238 case DW_OP_const2u:
5239 return "DW_OP_const2u";
5240 case DW_OP_const2s:
5241 return "DW_OP_const2s";
5242 case DW_OP_const4u:
5243 return "DW_OP_const4u";
5244 case DW_OP_const4s:
5245 return "DW_OP_const4s";
5246 case DW_OP_const8u:
5247 return "DW_OP_const8u";
5248 case DW_OP_const8s:
5249 return "DW_OP_const8s";
5250 case DW_OP_constu:
5251 return "DW_OP_constu";
5252 case DW_OP_consts:
5253 return "DW_OP_consts";
5254 case DW_OP_dup:
5255 return "DW_OP_dup";
5256 case DW_OP_drop:
5257 return "DW_OP_drop";
5258 case DW_OP_over:
5259 return "DW_OP_over";
5260 case DW_OP_pick:
5261 return "DW_OP_pick";
5262 case DW_OP_swap:
5263 return "DW_OP_swap";
5264 case DW_OP_rot:
5265 return "DW_OP_rot";
5266 case DW_OP_xderef:
5267 return "DW_OP_xderef";
5268 case DW_OP_abs:
5269 return "DW_OP_abs";
5270 case DW_OP_and:
5271 return "DW_OP_and";
5272 case DW_OP_div:
5273 return "DW_OP_div";
5274 case DW_OP_minus:
5275 return "DW_OP_minus";
5276 case DW_OP_mod:
5277 return "DW_OP_mod";
5278 case DW_OP_mul:
5279 return "DW_OP_mul";
5280 case DW_OP_neg:
5281 return "DW_OP_neg";
5282 case DW_OP_not:
5283 return "DW_OP_not";
5284 case DW_OP_or:
5285 return "DW_OP_or";
5286 case DW_OP_plus:
5287 return "DW_OP_plus";
5288 case DW_OP_plus_uconst:
5289 return "DW_OP_plus_uconst";
5290 case DW_OP_shl:
5291 return "DW_OP_shl";
5292 case DW_OP_shr:
5293 return "DW_OP_shr";
5294 case DW_OP_shra:
5295 return "DW_OP_shra";
5296 case DW_OP_xor:
5297 return "DW_OP_xor";
5298 case DW_OP_bra:
5299 return "DW_OP_bra";
5300 case DW_OP_eq:
5301 return "DW_OP_eq";
5302 case DW_OP_ge:
5303 return "DW_OP_ge";
5304 case DW_OP_gt:
5305 return "DW_OP_gt";
5306 case DW_OP_le:
5307 return "DW_OP_le";
5308 case DW_OP_lt:
5309 return "DW_OP_lt";
5310 case DW_OP_ne:
5311 return "DW_OP_ne";
5312 case DW_OP_skip:
5313 return "DW_OP_skip";
5314 case DW_OP_lit0:
5315 return "DW_OP_lit0";
5316 case DW_OP_lit1:
5317 return "DW_OP_lit1";
5318 case DW_OP_lit2:
5319 return "DW_OP_lit2";
5320 case DW_OP_lit3:
5321 return "DW_OP_lit3";
5322 case DW_OP_lit4:
5323 return "DW_OP_lit4";
5324 case DW_OP_lit5:
5325 return "DW_OP_lit5";
5326 case DW_OP_lit6:
5327 return "DW_OP_lit6";
5328 case DW_OP_lit7:
5329 return "DW_OP_lit7";
5330 case DW_OP_lit8:
5331 return "DW_OP_lit8";
5332 case DW_OP_lit9:
5333 return "DW_OP_lit9";
5334 case DW_OP_lit10:
5335 return "DW_OP_lit10";
5336 case DW_OP_lit11:
5337 return "DW_OP_lit11";
5338 case DW_OP_lit12:
5339 return "DW_OP_lit12";
5340 case DW_OP_lit13:
5341 return "DW_OP_lit13";
5342 case DW_OP_lit14:
5343 return "DW_OP_lit14";
5344 case DW_OP_lit15:
5345 return "DW_OP_lit15";
5346 case DW_OP_lit16:
5347 return "DW_OP_lit16";
5348 case DW_OP_lit17:
5349 return "DW_OP_lit17";
5350 case DW_OP_lit18:
5351 return "DW_OP_lit18";
5352 case DW_OP_lit19:
5353 return "DW_OP_lit19";
5354 case DW_OP_lit20:
5355 return "DW_OP_lit20";
5356 case DW_OP_lit21:
5357 return "DW_OP_lit21";
5358 case DW_OP_lit22:
5359 return "DW_OP_lit22";
5360 case DW_OP_lit23:
5361 return "DW_OP_lit23";
5362 case DW_OP_lit24:
5363 return "DW_OP_lit24";
5364 case DW_OP_lit25:
5365 return "DW_OP_lit25";
5366 case DW_OP_lit26:
5367 return "DW_OP_lit26";
5368 case DW_OP_lit27:
5369 return "DW_OP_lit27";
5370 case DW_OP_lit28:
5371 return "DW_OP_lit28";
5372 case DW_OP_lit29:
5373 return "DW_OP_lit29";
5374 case DW_OP_lit30:
5375 return "DW_OP_lit30";
5376 case DW_OP_lit31:
5377 return "DW_OP_lit31";
5378 case DW_OP_reg0:
5379 return "DW_OP_reg0";
5380 case DW_OP_reg1:
5381 return "DW_OP_reg1";
5382 case DW_OP_reg2:
5383 return "DW_OP_reg2";
5384 case DW_OP_reg3:
5385 return "DW_OP_reg3";
5386 case DW_OP_reg4:
5387 return "DW_OP_reg4";
5388 case DW_OP_reg5:
5389 return "DW_OP_reg5";
5390 case DW_OP_reg6:
5391 return "DW_OP_reg6";
5392 case DW_OP_reg7:
5393 return "DW_OP_reg7";
5394 case DW_OP_reg8:
5395 return "DW_OP_reg8";
5396 case DW_OP_reg9:
5397 return "DW_OP_reg9";
5398 case DW_OP_reg10:
5399 return "DW_OP_reg10";
5400 case DW_OP_reg11:
5401 return "DW_OP_reg11";
5402 case DW_OP_reg12:
5403 return "DW_OP_reg12";
5404 case DW_OP_reg13:
5405 return "DW_OP_reg13";
5406 case DW_OP_reg14:
5407 return "DW_OP_reg14";
5408 case DW_OP_reg15:
5409 return "DW_OP_reg15";
5410 case DW_OP_reg16:
5411 return "DW_OP_reg16";
5412 case DW_OP_reg17:
5413 return "DW_OP_reg17";
5414 case DW_OP_reg18:
5415 return "DW_OP_reg18";
5416 case DW_OP_reg19:
5417 return "DW_OP_reg19";
5418 case DW_OP_reg20:
5419 return "DW_OP_reg20";
5420 case DW_OP_reg21:
5421 return "DW_OP_reg21";
5422 case DW_OP_reg22:
5423 return "DW_OP_reg22";
5424 case DW_OP_reg23:
5425 return "DW_OP_reg23";
5426 case DW_OP_reg24:
5427 return "DW_OP_reg24";
5428 case DW_OP_reg25:
5429 return "DW_OP_reg25";
5430 case DW_OP_reg26:
5431 return "DW_OP_reg26";
5432 case DW_OP_reg27:
5433 return "DW_OP_reg27";
5434 case DW_OP_reg28:
5435 return "DW_OP_reg28";
5436 case DW_OP_reg29:
5437 return "DW_OP_reg29";
5438 case DW_OP_reg30:
5439 return "DW_OP_reg30";
5440 case DW_OP_reg31:
5441 return "DW_OP_reg31";
5442 case DW_OP_breg0:
5443 return "DW_OP_breg0";
5444 case DW_OP_breg1:
5445 return "DW_OP_breg1";
5446 case DW_OP_breg2:
5447 return "DW_OP_breg2";
5448 case DW_OP_breg3:
5449 return "DW_OP_breg3";
5450 case DW_OP_breg4:
5451 return "DW_OP_breg4";
5452 case DW_OP_breg5:
5453 return "DW_OP_breg5";
5454 case DW_OP_breg6:
5455 return "DW_OP_breg6";
5456 case DW_OP_breg7:
5457 return "DW_OP_breg7";
5458 case DW_OP_breg8:
5459 return "DW_OP_breg8";
5460 case DW_OP_breg9:
5461 return "DW_OP_breg9";
5462 case DW_OP_breg10:
5463 return "DW_OP_breg10";
5464 case DW_OP_breg11:
5465 return "DW_OP_breg11";
5466 case DW_OP_breg12:
5467 return "DW_OP_breg12";
5468 case DW_OP_breg13:
5469 return "DW_OP_breg13";
5470 case DW_OP_breg14:
5471 return "DW_OP_breg14";
5472 case DW_OP_breg15:
5473 return "DW_OP_breg15";
5474 case DW_OP_breg16:
5475 return "DW_OP_breg16";
5476 case DW_OP_breg17:
5477 return "DW_OP_breg17";
5478 case DW_OP_breg18:
5479 return "DW_OP_breg18";
5480 case DW_OP_breg19:
5481 return "DW_OP_breg19";
5482 case DW_OP_breg20:
5483 return "DW_OP_breg20";
5484 case DW_OP_breg21:
5485 return "DW_OP_breg21";
5486 case DW_OP_breg22:
5487 return "DW_OP_breg22";
5488 case DW_OP_breg23:
5489 return "DW_OP_breg23";
5490 case DW_OP_breg24:
5491 return "DW_OP_breg24";
5492 case DW_OP_breg25:
5493 return "DW_OP_breg25";
5494 case DW_OP_breg26:
5495 return "DW_OP_breg26";
5496 case DW_OP_breg27:
5497 return "DW_OP_breg27";
5498 case DW_OP_breg28:
5499 return "DW_OP_breg28";
5500 case DW_OP_breg29:
5501 return "DW_OP_breg29";
5502 case DW_OP_breg30:
5503 return "DW_OP_breg30";
5504 case DW_OP_breg31:
5505 return "DW_OP_breg31";
5506 case DW_OP_regx:
5507 return "DW_OP_regx";
5508 case DW_OP_fbreg:
5509 return "DW_OP_fbreg";
5510 case DW_OP_bregx:
5511 return "DW_OP_bregx";
5512 case DW_OP_piece:
5513 return "DW_OP_piece";
5514 case DW_OP_deref_size:
5515 return "DW_OP_deref_size";
5516 case DW_OP_xderef_size:
5517 return "DW_OP_xderef_size";
5518 case DW_OP_nop:
5519 return "DW_OP_nop";
5520 default:
5521 return "OP_<unknown>";
5522 }
5523 }
5524
5525 static char *
5526 dwarf_bool_name (unsigned mybool)
5527 {
5528 if (mybool)
5529 return "TRUE";
5530 else
5531 return "FALSE";
5532 }
5533
5534 /* Convert a DWARF type code into its string name. */
5535
5536 static char *
5537 dwarf_type_encoding_name (register unsigned enc)
5538 {
5539 switch (enc)
5540 {
5541 case DW_ATE_address:
5542 return "DW_ATE_address";
5543 case DW_ATE_boolean:
5544 return "DW_ATE_boolean";
5545 case DW_ATE_complex_float:
5546 return "DW_ATE_complex_float";
5547 case DW_ATE_float:
5548 return "DW_ATE_float";
5549 case DW_ATE_signed:
5550 return "DW_ATE_signed";
5551 case DW_ATE_signed_char:
5552 return "DW_ATE_signed_char";
5553 case DW_ATE_unsigned:
5554 return "DW_ATE_unsigned";
5555 case DW_ATE_unsigned_char:
5556 return "DW_ATE_unsigned_char";
5557 default:
5558 return "DW_ATE_<unknown>";
5559 }
5560 }
5561
5562 /* Convert a DWARF call frame info operation to its string name. */
5563
5564 #if 0
5565 static char *
5566 dwarf_cfi_name (register unsigned cfi_opc)
5567 {
5568 switch (cfi_opc)
5569 {
5570 case DW_CFA_advance_loc:
5571 return "DW_CFA_advance_loc";
5572 case DW_CFA_offset:
5573 return "DW_CFA_offset";
5574 case DW_CFA_restore:
5575 return "DW_CFA_restore";
5576 case DW_CFA_nop:
5577 return "DW_CFA_nop";
5578 case DW_CFA_set_loc:
5579 return "DW_CFA_set_loc";
5580 case DW_CFA_advance_loc1:
5581 return "DW_CFA_advance_loc1";
5582 case DW_CFA_advance_loc2:
5583 return "DW_CFA_advance_loc2";
5584 case DW_CFA_advance_loc4:
5585 return "DW_CFA_advance_loc4";
5586 case DW_CFA_offset_extended:
5587 return "DW_CFA_offset_extended";
5588 case DW_CFA_restore_extended:
5589 return "DW_CFA_restore_extended";
5590 case DW_CFA_undefined:
5591 return "DW_CFA_undefined";
5592 case DW_CFA_same_value:
5593 return "DW_CFA_same_value";
5594 case DW_CFA_register:
5595 return "DW_CFA_register";
5596 case DW_CFA_remember_state:
5597 return "DW_CFA_remember_state";
5598 case DW_CFA_restore_state:
5599 return "DW_CFA_restore_state";
5600 case DW_CFA_def_cfa:
5601 return "DW_CFA_def_cfa";
5602 case DW_CFA_def_cfa_register:
5603 return "DW_CFA_def_cfa_register";
5604 case DW_CFA_def_cfa_offset:
5605 return "DW_CFA_def_cfa_offset";
5606 /* SGI/MIPS specific */
5607 case DW_CFA_MIPS_advance_loc8:
5608 return "DW_CFA_MIPS_advance_loc8";
5609 default:
5610 return "DW_CFA_<unknown>";
5611 }
5612 }
5613 #endif
5614
5615 static void
5616 dump_die (struct die_info *die)
5617 {
5618 unsigned int i;
5619
5620 fprintf (stderr, "Die: %s (abbrev = %d, offset = %d)\n",
5621 dwarf_tag_name (die->tag), die->abbrev, die->offset);
5622 fprintf (stderr, "\thas children: %s\n",
5623 dwarf_bool_name (die->has_children));
5624
5625 fprintf (stderr, "\tattributes:\n");
5626 for (i = 0; i < die->num_attrs; ++i)
5627 {
5628 fprintf (stderr, "\t\t%s (%s) ",
5629 dwarf_attr_name (die->attrs[i].name),
5630 dwarf_form_name (die->attrs[i].form));
5631 switch (die->attrs[i].form)
5632 {
5633 case DW_FORM_ref_addr:
5634 case DW_FORM_addr:
5635 fprintf (stderr, "address: ");
5636 print_address_numeric (DW_ADDR (&die->attrs[i]), 1, gdb_stderr);
5637 break;
5638 case DW_FORM_block2:
5639 case DW_FORM_block4:
5640 case DW_FORM_block:
5641 case DW_FORM_block1:
5642 fprintf (stderr, "block: size %d", DW_BLOCK (&die->attrs[i])->size);
5643 break;
5644 case DW_FORM_data1:
5645 case DW_FORM_data2:
5646 case DW_FORM_data4:
5647 case DW_FORM_data8:
5648 case DW_FORM_ref1:
5649 case DW_FORM_ref2:
5650 case DW_FORM_ref4:
5651 case DW_FORM_udata:
5652 case DW_FORM_sdata:
5653 fprintf (stderr, "constant: %ld", DW_UNSND (&die->attrs[i]));
5654 break;
5655 case DW_FORM_string:
5656 case DW_FORM_strp:
5657 fprintf (stderr, "string: \"%s\"",
5658 DW_STRING (&die->attrs[i])
5659 ? DW_STRING (&die->attrs[i]) : "");
5660 break;
5661 case DW_FORM_flag:
5662 if (DW_UNSND (&die->attrs[i]))
5663 fprintf (stderr, "flag: TRUE");
5664 else
5665 fprintf (stderr, "flag: FALSE");
5666 break;
5667 case DW_FORM_indirect:
5668 /* the reader will have reduced the indirect form to
5669 the "base form" so this form should not occur */
5670 fprintf (stderr, "unexpected attribute form: DW_FORM_indirect");
5671 break;
5672 default:
5673 fprintf (stderr, "unsupported attribute form: %d.",
5674 die->attrs[i].form);
5675 }
5676 fprintf (stderr, "\n");
5677 }
5678 }
5679
5680 static void
5681 dump_die_list (struct die_info *die)
5682 {
5683 while (die)
5684 {
5685 dump_die (die);
5686 die = die->next;
5687 }
5688 }
5689
5690 static void
5691 store_in_ref_table (unsigned int offset, struct die_info *die)
5692 {
5693 int h;
5694 struct die_info *old;
5695
5696 h = (offset % REF_HASH_SIZE);
5697 old = die_ref_table[h];
5698 die->next_ref = old;
5699 die_ref_table[h] = die;
5700 }
5701
5702
5703 static void
5704 dwarf2_empty_hash_tables (void)
5705 {
5706 memset (die_ref_table, 0, sizeof (die_ref_table));
5707 }
5708
5709 static unsigned int
5710 dwarf2_get_ref_die_offset (struct attribute *attr)
5711 {
5712 unsigned int result = 0;
5713
5714 switch (attr->form)
5715 {
5716 case DW_FORM_ref_addr:
5717 result = DW_ADDR (attr);
5718 break;
5719 case DW_FORM_ref1:
5720 case DW_FORM_ref2:
5721 case DW_FORM_ref4:
5722 case DW_FORM_ref8:
5723 case DW_FORM_ref_udata:
5724 result = cu_header_offset + DW_UNSND (attr);
5725 break;
5726 default:
5727 complain (&dwarf2_unsupported_die_ref_attr, dwarf_form_name (attr->form));
5728 }
5729 return result;
5730 }
5731
5732 static struct die_info *
5733 follow_die_ref (unsigned int offset)
5734 {
5735 struct die_info *die;
5736 int h;
5737
5738 h = (offset % REF_HASH_SIZE);
5739 die = die_ref_table[h];
5740 while (die)
5741 {
5742 if (die->offset == offset)
5743 {
5744 return die;
5745 }
5746 die = die->next_ref;
5747 }
5748 return NULL;
5749 }
5750
5751 static struct type *
5752 dwarf2_fundamental_type (struct objfile *objfile, int typeid)
5753 {
5754 if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
5755 {
5756 error ("Dwarf Error: internal error - invalid fundamental type id %d.",
5757 typeid);
5758 }
5759
5760 /* Look for this particular type in the fundamental type vector. If
5761 one is not found, create and install one appropriate for the
5762 current language and the current target machine. */
5763
5764 if (ftypes[typeid] == NULL)
5765 {
5766 ftypes[typeid] = cu_language_defn->la_fund_type (objfile, typeid);
5767 }
5768
5769 return (ftypes[typeid]);
5770 }
5771
5772 /* Decode simple location descriptions.
5773 Given a pointer to a dwarf block that defines a location, compute
5774 the location and return the value.
5775
5776 FIXME: This is a kludge until we figure out a better
5777 way to handle the location descriptions.
5778 Gdb's design does not mesh well with the DWARF2 notion of a location
5779 computing interpreter, which is a shame because the flexibility goes unused.
5780 FIXME: Implement more operations as necessary.
5781
5782 A location description containing no operations indicates that the
5783 object is optimized out. The global optimized_out flag is set for
5784 those, the return value is meaningless.
5785
5786 When the result is a register number, the global isreg flag is set,
5787 otherwise it is cleared.
5788
5789 When the result is a base register offset, the global offreg flag is set
5790 and the register number is returned in basereg, otherwise it is cleared.
5791
5792 When the DW_OP_fbreg operation is encountered without a corresponding
5793 DW_AT_frame_base attribute, the global islocal flag is set.
5794 Hopefully the machine dependent code knows how to set up a virtual
5795 frame pointer for the local references.
5796
5797 Note that stack[0] is unused except as a default error return.
5798 Note that stack overflow is not yet handled. */
5799
5800 static CORE_ADDR
5801 decode_locdesc (struct dwarf_block *blk, struct objfile *objfile,
5802 const struct comp_unit_head *cu_header)
5803 {
5804 int i;
5805 int size = blk->size;
5806 char *data = blk->data;
5807 CORE_ADDR stack[64];
5808 int stacki;
5809 unsigned int bytes_read, unsnd;
5810 unsigned char op;
5811
5812 i = 0;
5813 stacki = 0;
5814 stack[stacki] = 0;
5815 isreg = 0;
5816 offreg = 0;
5817 isderef = 0;
5818 islocal = 0;
5819 optimized_out = 1;
5820
5821 while (i < size)
5822 {
5823 optimized_out = 0;
5824 op = data[i++];
5825 switch (op)
5826 {
5827 case DW_OP_lit0:
5828 case DW_OP_lit1:
5829 case DW_OP_lit2:
5830 case DW_OP_lit3:
5831 case DW_OP_lit4:
5832 case DW_OP_lit5:
5833 case DW_OP_lit6:
5834 case DW_OP_lit7:
5835 case DW_OP_lit8:
5836 case DW_OP_lit9:
5837 case DW_OP_lit10:
5838 case DW_OP_lit11:
5839 case DW_OP_lit12:
5840 case DW_OP_lit13:
5841 case DW_OP_lit14:
5842 case DW_OP_lit15:
5843 case DW_OP_lit16:
5844 case DW_OP_lit17:
5845 case DW_OP_lit18:
5846 case DW_OP_lit19:
5847 case DW_OP_lit20:
5848 case DW_OP_lit21:
5849 case DW_OP_lit22:
5850 case DW_OP_lit23:
5851 case DW_OP_lit24:
5852 case DW_OP_lit25:
5853 case DW_OP_lit26:
5854 case DW_OP_lit27:
5855 case DW_OP_lit28:
5856 case DW_OP_lit29:
5857 case DW_OP_lit30:
5858 case DW_OP_lit31:
5859 stack[++stacki] = op - DW_OP_lit0;
5860 break;
5861
5862 case DW_OP_reg0:
5863 case DW_OP_reg1:
5864 case DW_OP_reg2:
5865 case DW_OP_reg3:
5866 case DW_OP_reg4:
5867 case DW_OP_reg5:
5868 case DW_OP_reg6:
5869 case DW_OP_reg7:
5870 case DW_OP_reg8:
5871 case DW_OP_reg9:
5872 case DW_OP_reg10:
5873 case DW_OP_reg11:
5874 case DW_OP_reg12:
5875 case DW_OP_reg13:
5876 case DW_OP_reg14:
5877 case DW_OP_reg15:
5878 case DW_OP_reg16:
5879 case DW_OP_reg17:
5880 case DW_OP_reg18:
5881 case DW_OP_reg19:
5882 case DW_OP_reg20:
5883 case DW_OP_reg21:
5884 case DW_OP_reg22:
5885 case DW_OP_reg23:
5886 case DW_OP_reg24:
5887 case DW_OP_reg25:
5888 case DW_OP_reg26:
5889 case DW_OP_reg27:
5890 case DW_OP_reg28:
5891 case DW_OP_reg29:
5892 case DW_OP_reg30:
5893 case DW_OP_reg31:
5894 isreg = 1;
5895 stack[++stacki] = op - DW_OP_reg0;
5896 break;
5897
5898 case DW_OP_regx:
5899 isreg = 1;
5900 unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5901 i += bytes_read;
5902 #if defined(HARRIS_TARGET) && defined(_M88K)
5903 /* The Harris 88110 gdb ports have long kept their special reg
5904 numbers between their gp-regs and their x-regs. This is
5905 not how our dwarf is generated. Punt. */
5906 unsnd += 6;
5907 #endif
5908 stack[++stacki] = unsnd;
5909 break;
5910
5911 case DW_OP_breg0:
5912 case DW_OP_breg1:
5913 case DW_OP_breg2:
5914 case DW_OP_breg3:
5915 case DW_OP_breg4:
5916 case DW_OP_breg5:
5917 case DW_OP_breg6:
5918 case DW_OP_breg7:
5919 case DW_OP_breg8:
5920 case DW_OP_breg9:
5921 case DW_OP_breg10:
5922 case DW_OP_breg11:
5923 case DW_OP_breg12:
5924 case DW_OP_breg13:
5925 case DW_OP_breg14:
5926 case DW_OP_breg15:
5927 case DW_OP_breg16:
5928 case DW_OP_breg17:
5929 case DW_OP_breg18:
5930 case DW_OP_breg19:
5931 case DW_OP_breg20:
5932 case DW_OP_breg21:
5933 case DW_OP_breg22:
5934 case DW_OP_breg23:
5935 case DW_OP_breg24:
5936 case DW_OP_breg25:
5937 case DW_OP_breg26:
5938 case DW_OP_breg27:
5939 case DW_OP_breg28:
5940 case DW_OP_breg29:
5941 case DW_OP_breg30:
5942 case DW_OP_breg31:
5943 offreg = 1;
5944 basereg = op - DW_OP_breg0;
5945 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5946 i += bytes_read;
5947 break;
5948
5949 case DW_OP_bregx:
5950 offreg = 1;
5951 basereg = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5952 i += bytes_read;
5953 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5954 i += bytes_read;
5955 break;
5956
5957 case DW_OP_fbreg:
5958 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5959 i += bytes_read;
5960 if (frame_base_reg >= 0)
5961 {
5962 offreg = 1;
5963 basereg = frame_base_reg;
5964 stack[stacki] += frame_base_offset;
5965 }
5966 else
5967 {
5968 complain (&dwarf2_missing_at_frame_base);
5969 islocal = 1;
5970 }
5971 break;
5972
5973 case DW_OP_addr:
5974 stack[++stacki] = read_address (objfile->obfd, &data[i],
5975 cu_header, &bytes_read);
5976 i += bytes_read;
5977 break;
5978
5979 case DW_OP_const1u:
5980 stack[++stacki] = read_1_byte (objfile->obfd, &data[i]);
5981 i += 1;
5982 break;
5983
5984 case DW_OP_const1s:
5985 stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]);
5986 i += 1;
5987 break;
5988
5989 case DW_OP_const2u:
5990 stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]);
5991 i += 2;
5992 break;
5993
5994 case DW_OP_const2s:
5995 stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]);
5996 i += 2;
5997 break;
5998
5999 case DW_OP_const4u:
6000 stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]);
6001 i += 4;
6002 break;
6003
6004 case DW_OP_const4s:
6005 stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]);
6006 i += 4;
6007 break;
6008
6009 case DW_OP_constu:
6010 stack[++stacki] = read_unsigned_leb128 (NULL, (data + i),
6011 &bytes_read);
6012 i += bytes_read;
6013 break;
6014
6015 case DW_OP_consts:
6016 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
6017 i += bytes_read;
6018 break;
6019
6020 case DW_OP_dup:
6021 stack[stacki + 1] = stack[stacki];
6022 stacki++;
6023 break;
6024
6025 case DW_OP_plus:
6026 stack[stacki - 1] += stack[stacki];
6027 stacki--;
6028 break;
6029
6030 case DW_OP_plus_uconst:
6031 stack[stacki] += read_unsigned_leb128 (NULL, (data + i), &bytes_read);
6032 i += bytes_read;
6033 break;
6034
6035 case DW_OP_minus:
6036 stack[stacki - 1] -= stack[stacki];
6037 stacki--;
6038 break;
6039
6040 case DW_OP_deref:
6041 isderef = 1;
6042 /* If we're not the last op, then we definitely can't encode
6043 this using GDB's address_class enum. */
6044 if (i < size)
6045 complain (&dwarf2_complex_location_expr);
6046 break;
6047
6048 default:
6049 complain (&dwarf2_unsupported_stack_op, dwarf_stack_op_name (op));
6050 return (stack[stacki]);
6051 }
6052 }
6053 return (stack[stacki]);
6054 }
6055
6056 /* memory allocation interface */
6057
6058 /* ARGSUSED */
6059 static void
6060 dwarf2_free_tmp_obstack (PTR ignore)
6061 {
6062 obstack_free (&dwarf2_tmp_obstack, NULL);
6063 }
6064
6065 static struct dwarf_block *
6066 dwarf_alloc_block (void)
6067 {
6068 struct dwarf_block *blk;
6069
6070 blk = (struct dwarf_block *)
6071 obstack_alloc (&dwarf2_tmp_obstack, sizeof (struct dwarf_block));
6072 return (blk);
6073 }
6074
6075 static struct abbrev_info *
6076 dwarf_alloc_abbrev (void)
6077 {
6078 struct abbrev_info *abbrev;
6079
6080 abbrev = (struct abbrev_info *) xmalloc (sizeof (struct abbrev_info));
6081 memset (abbrev, 0, sizeof (struct abbrev_info));
6082 return (abbrev);
6083 }
6084
6085 static struct die_info *
6086 dwarf_alloc_die (void)
6087 {
6088 struct die_info *die;
6089
6090 die = (struct die_info *) xmalloc (sizeof (struct die_info));
6091 memset (die, 0, sizeof (struct die_info));
6092 return (die);
6093 }