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