1 /* DWARF 2 debugging format support for GDB.
2 Copyright 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
5 Inc. with support from Florida State University (under contract
6 with the Ada Joint Program Office), and Silicon Graphics, Inc.
7 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
8 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
11 This file is part of GDB.
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 2 of the License, or (at
16 your option) any later version.
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
33 #include "elf/dwarf2.h"
36 #include "expression.h"
38 #include "complaints.h"
41 #include "gdb_string.h"
42 #include <sys/types.h>
44 /* .debug_info header for a compilation unit
45 Because of alignment constraints, this structure has padding and cannot
46 be mapped directly onto the beginning of the .debug_info section. */
47 typedef struct comp_unit_header
49 unsigned int length; /* length of the .debug_info
51 unsigned short version; /* version number -- 2 for DWARF
53 unsigned int abbrev_offset; /* offset into .debug_abbrev section */
54 unsigned char addr_size; /* byte size of an address -- 4 */
57 #define _ACTUAL_COMP_UNIT_HEADER_SIZE 11
59 /* .debug_pubnames header
60 Because of alignment constraints, this structure has padding and cannot
61 be mapped directly onto the beginning of the .debug_info section. */
62 typedef struct pubnames_header
64 unsigned int length; /* length of the .debug_pubnames
66 unsigned char version; /* version number -- 2 for DWARF
68 unsigned int info_offset; /* offset into .debug_info section */
69 unsigned int info_size; /* byte size of .debug_info section
73 #define _ACTUAL_PUBNAMES_HEADER_SIZE 13
75 /* .debug_pubnames header
76 Because of alignment constraints, this structure has padding and cannot
77 be mapped directly onto the beginning of the .debug_info section. */
78 typedef struct aranges_header
80 unsigned int length; /* byte len of the .debug_aranges
82 unsigned short version; /* version number -- 2 for DWARF
84 unsigned int info_offset; /* offset into .debug_info section */
85 unsigned char addr_size; /* byte size of an address */
86 unsigned char seg_size; /* byte size of segment descriptor */
89 #define _ACTUAL_ARANGES_HEADER_SIZE 12
91 /* .debug_line statement program prologue
92 Because of alignment constraints, this structure has padding and cannot
93 be mapped directly onto the beginning of the .debug_info section. */
94 typedef struct statement_prologue
96 unsigned int total_length; /* byte length of the statement
98 unsigned short version; /* version number -- 2 for DWARF
100 unsigned int prologue_length; /* # bytes between prologue &
102 unsigned char minimum_instruction_length; /* byte size of
104 unsigned char default_is_stmt; /* initial value of is_stmt
107 unsigned char line_range;
108 unsigned char opcode_base; /* number assigned to first special
110 unsigned char *standard_opcode_lengths;
114 /* offsets and sizes of debugging sections */
116 static file_ptr dwarf_info_offset;
117 static file_ptr dwarf_abbrev_offset;
118 static file_ptr dwarf_line_offset;
119 static file_ptr dwarf_pubnames_offset;
120 static file_ptr dwarf_aranges_offset;
121 static file_ptr dwarf_loc_offset;
122 static file_ptr dwarf_macinfo_offset;
123 static file_ptr dwarf_str_offset;
125 static unsigned int dwarf_info_size;
126 static unsigned int dwarf_abbrev_size;
127 static unsigned int dwarf_line_size;
128 static unsigned int dwarf_pubnames_size;
129 static unsigned int dwarf_aranges_size;
130 static unsigned int dwarf_loc_size;
131 static unsigned int dwarf_macinfo_size;
132 static unsigned int dwarf_str_size;
134 /* names of the debugging sections */
136 #define INFO_SECTION ".debug_info"
137 #define ABBREV_SECTION ".debug_abbrev"
138 #define LINE_SECTION ".debug_line"
139 #define PUBNAMES_SECTION ".debug_pubnames"
140 #define ARANGES_SECTION ".debug_aranges"
141 #define LOC_SECTION ".debug_loc"
142 #define MACINFO_SECTION ".debug_macinfo"
143 #define STR_SECTION ".debug_str"
145 /* local data types */
147 /* The data in a compilation unit header looks like this. */
148 struct comp_unit_head
152 unsigned int abbrev_offset;
153 unsigned char addr_size;
156 /* The data in the .debug_line statement prologue looks like this. */
159 unsigned int total_length;
160 unsigned short version;
161 unsigned int prologue_length;
162 unsigned char minimum_instruction_length;
163 unsigned char default_is_stmt;
165 unsigned char line_range;
166 unsigned char opcode_base;
167 unsigned char *standard_opcode_lengths;
170 /* When we construct a partial symbol table entry we only
171 need this much information. */
172 struct partial_die_info
175 unsigned char has_children;
176 unsigned char is_external;
177 unsigned char is_declaration;
178 unsigned char has_type;
184 struct dwarf_block *locdesc;
185 unsigned int language;
189 /* This data structure holds the information of an abbrev. */
192 unsigned int number; /* number identifying abbrev */
193 enum dwarf_tag tag; /* dwarf tag */
194 int has_children; /* boolean */
195 unsigned int num_attrs; /* number of attributes */
196 struct attr_abbrev *attrs; /* an array of attribute descriptions */
197 struct abbrev_info *next; /* next in chain */
202 enum dwarf_attribute name;
203 enum dwarf_form form;
206 /* This data structure holds a complete die structure. */
209 enum dwarf_tag tag; /* Tag indicating type of die */
210 unsigned short has_children; /* Does the die have children */
211 unsigned int abbrev; /* Abbrev number */
212 unsigned int offset; /* Offset in .debug_info section */
213 unsigned int num_attrs; /* Number of attributes */
214 struct attribute *attrs; /* An array of attributes */
215 struct die_info *next_ref; /* Next die in ref hash table */
216 struct die_info *next; /* Next die in linked list */
217 struct type *type; /* Cached type information */
220 /* Attributes have a name and a value */
223 enum dwarf_attribute name;
224 enum dwarf_form form;
228 struct dwarf_block *blk;
236 /* Get at parts of an attribute structure */
238 #define DW_STRING(attr) ((attr)->u.str)
239 #define DW_UNSND(attr) ((attr)->u.unsnd)
240 #define DW_BLOCK(attr) ((attr)->u.blk)
241 #define DW_SND(attr) ((attr)->u.snd)
242 #define DW_ADDR(attr) ((attr)->u.addr)
244 /* Blocks are a bunch of untyped bytes. */
251 /* We only hold one compilation unit's abbrevs in
252 memory at any one time. */
253 #ifndef ABBREV_HASH_SIZE
254 #define ABBREV_HASH_SIZE 121
256 #ifndef ATTR_ALLOC_CHUNK
257 #define ATTR_ALLOC_CHUNK 4
260 static struct abbrev_info *dwarf2_abbrevs[ABBREV_HASH_SIZE];
262 /* A hash table of die offsets for following references. */
263 #ifndef REF_HASH_SIZE
264 #define REF_HASH_SIZE 1021
267 static struct die_info *die_ref_table[REF_HASH_SIZE];
269 /* Obstack for allocating temporary storage used during symbol reading. */
270 static struct obstack dwarf2_tmp_obstack;
272 /* Offset to the first byte of the current compilation unit header,
273 for resolving relative reference dies. */
274 static unsigned int cu_header_offset;
276 /* Allocate fields for structs, unions and enums in this size. */
277 #ifndef DW_FIELD_ALLOC_CHUNK
278 #define DW_FIELD_ALLOC_CHUNK 4
281 /* The language we are debugging. */
282 static enum language cu_language;
283 static const struct language_defn *cu_language_defn;
285 /* Actually data from the sections. */
286 static char *dwarf_info_buffer;
287 static char *dwarf_abbrev_buffer;
288 static char *dwarf_line_buffer;
290 /* A zeroed version of a partial die for initialization purposes. */
291 static struct partial_die_info zeroed_partial_die;
293 /* The generic symbol table building routines have separate lists for
294 file scope symbols and all all other scopes (local scopes). So
295 we need to select the right one to pass to add_symbol_to_list().
296 We do it by keeping a pointer to the correct list in list_in_scope.
298 FIXME: The original dwarf code just treated the file scope as the first
299 local scope, and all other local scopes as nested local scopes, and worked
300 fine. Check to see if we really need to distinguish these
302 static struct pending **list_in_scope = &file_symbols;
304 /* FIXME: The following variables pass additional information from
305 decode_locdesc to the caller. */
306 static int optimized_out; /* Kludge to identify optimized out variables */
307 static int isreg; /* Kludge to identify register variables */
308 static int offreg; /* Kludge to identify basereg references */
309 static int basereg; /* Which base register is it relative to? */
310 static int islocal; /* Kludge to identify local variables */
312 /* DW_AT_frame_base values for the current function.
313 frame_base_reg is -1 if DW_AT_frame_base is missing, otherwise it
314 contains the register number for the frame register.
315 frame_base_offset is the offset from the frame register to the
316 virtual stack frame. */
317 static int frame_base_reg;
318 static CORE_ADDR frame_base_offset;
320 /* This value is added to each symbol value. FIXME: Generalize to
321 the section_offsets structure used by dbxread (once this is done,
322 pass the appropriate section number to end_symtab). */
323 static CORE_ADDR baseaddr; /* Add to each symbol value */
325 /* We put a pointer to this structure in the read_symtab_private field
327 The complete dwarf information for an objfile is kept in the
328 psymbol_obstack, so that absolute die references can be handled.
329 Most of the information in this structure is related to an entire
330 object file and could be passed via the sym_private field of the objfile.
331 It is however conceivable that dwarf2 might not be the only type
332 of symbols read from an object file. */
336 /* Pointer to start of dwarf info buffer for the objfile. */
338 char *dwarf_info_buffer;
340 /* Offset in dwarf_info_buffer for this compilation unit. */
342 unsigned long dwarf_info_offset;
344 /* Pointer to start of dwarf abbreviation buffer for the objfile. */
346 char *dwarf_abbrev_buffer;
348 /* Size of dwarf abbreviation section for the objfile. */
350 unsigned int dwarf_abbrev_size;
352 /* Pointer to start of dwarf line buffer for the objfile. */
354 char *dwarf_line_buffer;
357 #define PST_PRIVATE(p) ((struct dwarf2_pinfo *)(p)->read_symtab_private)
358 #define DWARF_INFO_BUFFER(p) (PST_PRIVATE(p)->dwarf_info_buffer)
359 #define DWARF_INFO_OFFSET(p) (PST_PRIVATE(p)->dwarf_info_offset)
360 #define DWARF_ABBREV_BUFFER(p) (PST_PRIVATE(p)->dwarf_abbrev_buffer)
361 #define DWARF_ABBREV_SIZE(p) (PST_PRIVATE(p)->dwarf_abbrev_size)
362 #define DWARF_LINE_BUFFER(p) (PST_PRIVATE(p)->dwarf_line_buffer)
364 /* Maintain an array of referenced fundamental types for the current
365 compilation unit being read. For DWARF version 1, we have to construct
366 the fundamental types on the fly, since no information about the
367 fundamental types is supplied. Each such fundamental type is created by
368 calling a language dependent routine to create the type, and then a
369 pointer to that type is then placed in the array at the index specified
370 by it's FT_<TYPENAME> value. The array has a fixed size set by the
371 FT_NUM_MEMBERS compile time constant, which is the number of predefined
372 fundamental types gdb knows how to construct. */
373 static struct type *ftypes[FT_NUM_MEMBERS]; /* Fundamental types */
375 /* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte,
376 but this would require a corresponding change in unpack_field_as_long
378 static int bits_per_byte = 8;
380 /* The routines that read and process dies for a C struct or C++ class
381 pass lists of data member fields and lists of member function fields
382 in an instance of a field_info structure, as defined below. */
385 /* List of data member and baseclasses fields. */
388 struct nextfield *next;
394 /* Number of fields. */
397 /* Number of baseclasses. */
400 /* Set if the accesibility of one of the fields is not public. */
401 int non_public_fields;
403 /* Member function fields array, entries are allocated in the order they
404 are encountered in the object file. */
407 struct nextfnfield *next;
408 struct fn_field fnfield;
411 /* Member function fieldlist array, contains name of possibly overloaded
412 member function, number of overloaded member functions and a pointer
413 to the head of the member function field chain. */
418 struct nextfnfield *head;
421 /* Number of entries in the fnfieldlists array. */
425 /* FIXME: Kludge to mark a varargs function type for C++ member function
426 argument processing. */
427 #define TYPE_FLAG_VARARGS (1 << 10)
429 /* Dwarf2 has no clean way to discern C++ static and non-static member
430 functions. G++ helps GDB by marking the first parameter for non-static
431 member functions (which is the this pointer) as artificial.
432 We pass this information between dwarf2_add_member_fn and
433 read_subroutine_type via TYPE_FIELD_ARTIFICIAL. */
434 #define TYPE_FIELD_ARTIFICIAL TYPE_FIELD_BITPOS
436 /* Various complaints about symbol reading that don't abort the process */
438 static struct complaint dwarf2_const_ignored =
440 "type qualifier 'const' ignored", 0, 0
442 static struct complaint dwarf2_volatile_ignored =
444 "type qualifier 'volatile' ignored", 0, 0
446 static struct complaint dwarf2_non_const_array_bound_ignored =
448 "non-constant array bounds form '%s' ignored", 0, 0
450 static struct complaint dwarf2_missing_line_number_section =
452 "missing .debug_line section", 0, 0
454 static struct complaint dwarf2_mangled_line_number_section =
456 "mangled .debug_line section", 0, 0
458 static struct complaint dwarf2_unsupported_die_ref_attr =
460 "unsupported die ref attribute form: '%s'", 0, 0
462 static struct complaint dwarf2_unsupported_stack_op =
464 "unsupported stack op: '%s'", 0, 0
466 static struct complaint dwarf2_unsupported_tag =
468 "unsupported tag: '%s'", 0, 0
470 static struct complaint dwarf2_unsupported_at_encoding =
472 "unsupported DW_AT_encoding: '%s'", 0, 0
474 static struct complaint dwarf2_unsupported_at_frame_base =
476 "unsupported DW_AT_frame_base for function '%s'", 0, 0
478 static struct complaint dwarf2_unexpected_tag =
480 "unexepected tag in read_type_die: '%s'", 0, 0
482 static struct complaint dwarf2_missing_at_frame_base =
484 "DW_AT_frame_base missing for DW_OP_fbreg", 0, 0
486 static struct complaint dwarf2_bad_static_member_name =
488 "unrecognized static data member name '%s'", 0, 0
490 static struct complaint dwarf2_unsupported_accessibility =
492 "unsupported accessibility %d", 0, 0
494 static struct complaint dwarf2_bad_member_name_complaint =
496 "cannot extract member name from '%s'", 0, 0
498 static struct complaint dwarf2_missing_member_fn_type_complaint =
500 "member function type missing for '%s'", 0, 0
502 static struct complaint dwarf2_vtbl_not_found_complaint =
504 "virtual function table pointer not found when defining class '%s'", 0, 0
506 static struct complaint dwarf2_absolute_sibling_complaint =
508 "ignoring absolute DW_AT_sibling", 0, 0
510 static struct complaint dwarf2_const_value_length_mismatch =
512 "const value length mismatch for '%s', got %d, expected %d", 0, 0
514 static struct complaint dwarf2_unsupported_const_value_attr =
516 "unsupported const value attribute form: '%s'", 0, 0
519 /* Remember the addr_size read from the dwarf.
520 If a target expects to link compilation units with differing address
521 sizes, gdb needs to be sure that the appropriate size is here for
522 whatever scope is currently getting read. */
523 static int address_size;
525 /* Externals references. */
526 extern int info_verbose; /* From main.c; nonzero => verbose */
528 /* local function prototypes */
530 static void dwarf2_locate_sections PARAMS ((bfd *, asection *, PTR));
533 static void dwarf2_build_psymtabs_easy PARAMS ((struct objfile *,
534 struct section_offsets *,
538 static void dwarf2_build_psymtabs_hard PARAMS ((struct objfile *,
539 struct section_offsets *,
542 static char *scan_partial_symbols PARAMS ((char *, struct objfile *,
543 CORE_ADDR *, CORE_ADDR *));
545 static void add_partial_symbol PARAMS ((struct partial_die_info *,
548 static void dwarf2_psymtab_to_symtab PARAMS ((struct partial_symtab *));
550 static void psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
552 static char *dwarf2_read_section PARAMS ((struct objfile *, file_ptr,
555 static void dwarf2_read_abbrevs PARAMS ((bfd *, unsigned int));
557 static void dwarf2_empty_abbrev_table PARAMS ((PTR));
559 static struct abbrev_info *dwarf2_lookup_abbrev PARAMS ((unsigned int));
561 static char *read_partial_die PARAMS ((struct partial_die_info *,
562 bfd *, char *, int *));
564 static char *read_full_die PARAMS ((struct die_info **, bfd *, char *));
566 static char *read_attribute PARAMS ((struct attribute *, struct attr_abbrev *,
569 static unsigned int read_1_byte PARAMS ((bfd *, char *));
571 static int read_1_signed_byte PARAMS ((bfd *, char *));
573 static unsigned int read_2_bytes PARAMS ((bfd *, char *));
575 static unsigned int read_4_bytes PARAMS ((bfd *, char *));
577 static unsigned int read_8_bytes PARAMS ((bfd *, char *));
579 static CORE_ADDR read_address PARAMS ((bfd *, char *));
581 static char *read_n_bytes PARAMS ((bfd *, char *, unsigned int));
583 static char *read_string PARAMS ((bfd *, char *, unsigned int *));
585 static unsigned int read_unsigned_leb128 PARAMS ((bfd *, char *,
588 static int read_signed_leb128 PARAMS ((bfd *, char *, unsigned int *));
590 static void set_cu_language PARAMS ((unsigned int));
592 static struct attribute *dwarf_attr PARAMS ((struct die_info *,
595 static void dwarf_decode_lines PARAMS ((unsigned int, char *, bfd *));
597 static void dwarf2_start_subfile PARAMS ((char *, char *));
599 static struct symbol *new_symbol PARAMS ((struct die_info *, struct type *,
602 static void dwarf2_const_value PARAMS ((struct attribute *, struct symbol *,
605 static struct type *die_type PARAMS ((struct die_info *, struct objfile *));
607 static struct type *die_containing_type PARAMS ((struct die_info *,
611 static struct type *type_at_offset PARAMS ((unsigned int, struct objfile *));
614 static struct type *tag_type_to_type PARAMS ((struct die_info *,
617 static void read_type_die PARAMS ((struct die_info *, struct objfile *));
619 static void read_typedef PARAMS ((struct die_info *, struct objfile *));
621 static void read_base_type PARAMS ((struct die_info *, struct objfile *));
623 static void read_file_scope PARAMS ((struct die_info *, struct objfile *));
625 static void read_func_scope PARAMS ((struct die_info *, struct objfile *));
627 static void read_lexical_block_scope PARAMS ((struct die_info *,
630 static int dwarf2_get_pc_bounds PARAMS ((struct die_info *,
631 CORE_ADDR *, CORE_ADDR *,
634 static void dwarf2_add_field PARAMS ((struct field_info *, struct die_info *,
637 static void dwarf2_attach_fields_to_type PARAMS ((struct field_info *,
641 static char *skip_member_fn_name PARAMS ((char *));
643 static void dwarf2_add_member_fn PARAMS ((struct field_info *,
644 struct die_info *, struct type *,
645 struct objfile *objfile));
647 static void dwarf2_attach_fn_fields_to_type PARAMS ((struct field_info *,
651 static void read_structure_scope PARAMS ((struct die_info *, struct objfile *));
653 static void read_common_block PARAMS ((struct die_info *, struct objfile *));
655 static void read_enumeration PARAMS ((struct die_info *, struct objfile *));
657 static struct type *dwarf_base_type PARAMS ((int, int, struct objfile *));
659 static CORE_ADDR decode_locdesc PARAMS ((struct dwarf_block *,
662 static void read_array_type PARAMS ((struct die_info *, struct objfile *));
664 static void read_tag_pointer_type PARAMS ((struct die_info *,
667 static void read_tag_ptr_to_member_type PARAMS ((struct die_info *,
670 static void read_tag_reference_type PARAMS ((struct die_info *,
673 static void read_tag_const_type PARAMS ((struct die_info *, struct objfile *));
675 static void read_tag_volatile_type PARAMS ((struct die_info *,
678 static void read_tag_string_type PARAMS ((struct die_info *,
681 static void read_subroutine_type PARAMS ((struct die_info *,
684 struct die_info *read_comp_unit PARAMS ((char *, bfd *));
686 static void free_die_list PARAMS ((struct die_info *));
688 static void process_die PARAMS ((struct die_info *, struct objfile *));
690 static char *dwarf2_linkage_name PARAMS ((struct die_info *));
692 static char *dwarf_tag_name PARAMS ((unsigned int));
694 static char *dwarf_attr_name PARAMS ((unsigned int));
696 static char *dwarf_form_name PARAMS ((unsigned int));
698 static char *dwarf_stack_op_name PARAMS ((unsigned int));
700 static char *dwarf_bool_name PARAMS ((unsigned int));
702 static char *dwarf_type_encoding_name PARAMS ((unsigned int));
705 static char *dwarf_cfi_name PARAMS ((unsigned int));
707 struct die_info *copy_die PARAMS ((struct die_info *));
710 struct die_info *sibling_die PARAMS ((struct die_info *));
712 void dump_die PARAMS ((struct die_info *));
714 void dump_die_list PARAMS ((struct die_info *));
716 void store_in_ref_table PARAMS ((unsigned int, struct die_info *));
718 static void dwarf2_empty_die_ref_table PARAMS ((void));
720 static unsigned int dwarf2_get_ref_die_offset PARAMS ((struct attribute *));
722 struct die_info *follow_die_ref PARAMS ((unsigned int));
724 static struct type *dwarf2_fundamental_type PARAMS ((struct objfile *, int));
726 /* memory allocation interface */
728 static void dwarf2_free_tmp_obstack PARAMS ((PTR));
730 static struct dwarf_block *dwarf_alloc_block PARAMS ((void));
732 static struct abbrev_info *dwarf_alloc_abbrev PARAMS ((void));
734 static struct die_info *dwarf_alloc_die PARAMS ((void));
736 /* Try to locate the sections we need for DWARF 2 debugging
737 information and return true if we have enough to do something. */
740 dwarf2_has_info (abfd)
743 dwarf_info_offset = dwarf_abbrev_offset = dwarf_line_offset = 0;
744 bfd_map_over_sections (abfd, dwarf2_locate_sections, NULL);
745 if (dwarf_info_offset && dwarf_abbrev_offset)
755 /* This function is mapped across the sections and remembers the
756 offset and size of each of the debugging sections we are interested
760 dwarf2_locate_sections (ignore_abfd, sectp, ignore_ptr)
765 if (STREQ (sectp->name, INFO_SECTION))
767 dwarf_info_offset = sectp->filepos;
768 dwarf_info_size = bfd_get_section_size_before_reloc (sectp);
770 else if (STREQ (sectp->name, ABBREV_SECTION))
772 dwarf_abbrev_offset = sectp->filepos;
773 dwarf_abbrev_size = bfd_get_section_size_before_reloc (sectp);
775 else if (STREQ (sectp->name, LINE_SECTION))
777 dwarf_line_offset = sectp->filepos;
778 dwarf_line_size = bfd_get_section_size_before_reloc (sectp);
780 else if (STREQ (sectp->name, PUBNAMES_SECTION))
782 dwarf_pubnames_offset = sectp->filepos;
783 dwarf_pubnames_size = bfd_get_section_size_before_reloc (sectp);
785 else if (STREQ (sectp->name, ARANGES_SECTION))
787 dwarf_aranges_offset = sectp->filepos;
788 dwarf_aranges_size = bfd_get_section_size_before_reloc (sectp);
790 else if (STREQ (sectp->name, LOC_SECTION))
792 dwarf_loc_offset = sectp->filepos;
793 dwarf_loc_size = bfd_get_section_size_before_reloc (sectp);
795 else if (STREQ (sectp->name, MACINFO_SECTION))
797 dwarf_macinfo_offset = sectp->filepos;
798 dwarf_macinfo_size = bfd_get_section_size_before_reloc (sectp);
800 else if (STREQ (sectp->name, STR_SECTION))
802 dwarf_str_offset = sectp->filepos;
803 dwarf_str_size = bfd_get_section_size_before_reloc (sectp);
807 /* Build a partial symbol table. */
810 dwarf2_build_psymtabs (objfile, section_offsets, mainline)
811 struct objfile *objfile;
812 struct section_offsets *section_offsets;
816 /* We definitely need the .debug_info and .debug_abbrev sections */
818 dwarf_info_buffer = dwarf2_read_section (objfile,
821 dwarf_abbrev_buffer = dwarf2_read_section (objfile,
824 dwarf_line_buffer = dwarf2_read_section (objfile,
828 if (mainline || objfile->global_psymbols.size == 0 ||
829 objfile->static_psymbols.size == 0)
831 init_psymbol_list (objfile, 1024);
835 if (dwarf_aranges_offset && dwarf_pubnames_offset)
837 /* Things are significanlty easier if we have .debug_aranges and
838 .debug_pubnames sections */
840 dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline);
844 /* only test this case for now */
846 /* In this case we have to work a bit harder */
847 dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline);
852 /* Build the partial symbol table from the information in the
853 .debug_pubnames and .debug_aranges sections. */
856 dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline)
857 struct objfile *objfile;
858 struct section_offsets *section_offsets;
861 bfd *abfd = objfile->obfd;
862 char *aranges_buffer, *pubnames_buffer;
863 char *aranges_ptr, *pubnames_ptr;
864 unsigned int entry_length, version, info_offset, info_size;
866 pubnames_buffer = dwarf2_read_section (objfile,
867 dwarf_pubnames_offset,
868 dwarf_pubnames_size);
869 pubnames_ptr = pubnames_buffer;
870 while ((pubnames_ptr - pubnames_buffer) < dwarf_pubnames_size)
872 entry_length = read_4_bytes (abfd, pubnames_ptr);
874 version = read_1_byte (abfd, pubnames_ptr);
876 info_offset = read_4_bytes (abfd, pubnames_ptr);
878 info_size = read_4_bytes (abfd, pubnames_ptr);
882 aranges_buffer = dwarf2_read_section (objfile,
883 dwarf_aranges_offset,
889 /* Build the partial symbol table by doing a quick pass through the
890 .debug_info and .debug_abbrev sections. */
893 dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
894 struct objfile *objfile;
895 struct section_offsets *section_offsets;
898 /* Instead of reading this into a big buffer, we should probably use
899 mmap() on architectures that support it. (FIXME) */
900 bfd *abfd = objfile->obfd;
901 char *info_ptr, *abbrev_ptr;
902 char *beg_of_comp_unit;
903 struct comp_unit_head cu_header;
904 struct partial_die_info comp_unit_die;
905 struct partial_symtab *pst;
906 struct cleanup *back_to;
907 int comp_unit_has_pc_info;
908 CORE_ADDR lowpc, highpc;
910 info_ptr = dwarf_info_buffer;
911 abbrev_ptr = dwarf_abbrev_buffer;
913 obstack_init (&dwarf2_tmp_obstack);
914 back_to = make_cleanup (dwarf2_free_tmp_obstack, NULL);
916 while ((unsigned int) (info_ptr - dwarf_info_buffer)
917 + ((info_ptr - dwarf_info_buffer) % 4) < dwarf_info_size)
919 beg_of_comp_unit = info_ptr;
920 cu_header.length = read_4_bytes (abfd, info_ptr);
922 cu_header.version = read_2_bytes (abfd, info_ptr);
924 cu_header.abbrev_offset = read_4_bytes (abfd, info_ptr);
926 cu_header.addr_size = read_1_byte (abfd, info_ptr);
928 address_size = cu_header.addr_size;
930 if (cu_header.version != 2)
932 error ("Dwarf Error: wrong version in compilation unit header.");
935 if (cu_header.abbrev_offset >= dwarf_abbrev_size)
937 error ("Dwarf Error: bad offset in compilation unit header.");
940 if (beg_of_comp_unit + cu_header.length + 4
941 >= dwarf_info_buffer + dwarf_info_size)
943 error ("Dwarf Error: bad length in compilation unit header.");
947 /* Read the abbrevs for this compilation unit into a table */
948 dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
949 make_cleanup (dwarf2_empty_abbrev_table, NULL);
951 /* Read the compilation unit die */
952 info_ptr = read_partial_die (&comp_unit_die, abfd,
953 info_ptr, &comp_unit_has_pc_info);
955 /* Set the language we're debugging */
956 set_cu_language (comp_unit_die.language);
958 /* Allocate a new partial symbol table structure */
959 pst = start_psymtab_common (objfile, section_offsets,
960 comp_unit_die.name ? comp_unit_die.name : "",
962 objfile->global_psymbols.next,
963 objfile->static_psymbols.next);
965 pst->read_symtab_private = (char *)
966 obstack_alloc (&objfile->psymbol_obstack, sizeof (struct dwarf2_pinfo));
967 cu_header_offset = beg_of_comp_unit - dwarf_info_buffer;
968 DWARF_INFO_BUFFER(pst) = dwarf_info_buffer;
969 DWARF_INFO_OFFSET(pst) = beg_of_comp_unit - dwarf_info_buffer;
970 DWARF_ABBREV_BUFFER(pst) = dwarf_abbrev_buffer;
971 DWARF_ABBREV_SIZE(pst) = dwarf_abbrev_size;
972 DWARF_LINE_BUFFER(pst) = dwarf_line_buffer;
973 baseaddr = ANOFFSET (section_offsets, 0);
975 /* Store the function that reads in the rest of the symbol table */
976 pst->read_symtab = dwarf2_psymtab_to_symtab;
978 /* Check if comp unit has_children.
979 If so, read the rest of the partial symbols from this comp unit.
980 If not, there's no more debug_info for this comp unit. */
981 if (comp_unit_die.has_children)
982 info_ptr = scan_partial_symbols (info_ptr, objfile, &lowpc, &highpc);
984 /* If the compilation unit didn't have an explicit address range,
985 then use the information extracted from its child dies. */
986 if (!comp_unit_has_pc_info)
988 comp_unit_die.lowpc = lowpc;
989 comp_unit_die.highpc = highpc;
991 pst->textlow = comp_unit_die.lowpc + baseaddr;
992 pst->texthigh = comp_unit_die.highpc + baseaddr;
994 pst->n_global_syms = objfile->global_psymbols.next -
995 (objfile->global_psymbols.list + pst->globals_offset);
996 pst->n_static_syms = objfile->static_psymbols.next -
997 (objfile->static_psymbols.list + pst->statics_offset);
998 sort_pst_symbols (pst);
1000 /* If there is already a psymtab or symtab for a file of this
1001 name, remove it. (If there is a symtab, more drastic things
1002 also happen.) This happens in VxWorks. */
1003 free_named_symtabs (pst->filename);
1005 info_ptr = beg_of_comp_unit + cu_header.length + 4;
1007 do_cleanups (back_to);
1010 /* Read in all interesting dies to the end of the compilation unit. */
1013 scan_partial_symbols (info_ptr, objfile, lowpc, highpc)
1015 struct objfile *objfile;
1019 bfd *abfd = objfile->obfd;
1020 struct partial_die_info pdi;
1022 /* This function is called after we've read in the comp_unit_die in
1023 order to read its children. We start the nesting level at 1 since
1024 we have pushed 1 level down in order to read the comp unit's children.
1025 The comp unit itself is at level 0, so we stop reading when we pop
1026 back to that level. */
1028 int nesting_level = 1;
1031 *lowpc = ((CORE_ADDR) -1);
1032 *highpc = ((CORE_ADDR) 0);
1034 while (nesting_level)
1036 info_ptr = read_partial_die (&pdi, abfd, info_ptr, &has_pc_info);
1042 case DW_TAG_subprogram:
1045 if (pdi.lowpc < *lowpc)
1049 if (pdi.highpc > *highpc)
1051 *highpc = pdi.highpc;
1053 if ((pdi.is_external || nesting_level == 1)
1054 && !pdi.is_declaration)
1056 add_partial_symbol (&pdi, objfile);
1060 case DW_TAG_variable:
1061 case DW_TAG_typedef:
1062 case DW_TAG_class_type:
1063 case DW_TAG_structure_type:
1064 case DW_TAG_union_type:
1065 case DW_TAG_enumeration_type:
1066 if ((pdi.is_external || nesting_level == 1)
1067 && !pdi.is_declaration)
1069 add_partial_symbol (&pdi, objfile);
1072 case DW_TAG_enumerator:
1073 /* File scope enumerators are added to the partial symbol
1075 if (nesting_level == 2)
1076 add_partial_symbol (&pdi, objfile);
1078 case DW_TAG_base_type:
1079 /* File scope base type definitions are added to the partial
1081 if (nesting_level == 1)
1082 add_partial_symbol (&pdi, objfile);
1089 /* If the die has a sibling, skip to the sibling.
1090 Do not skip enumeration types, we want to record their
1092 if (pdi.sibling && pdi.tag != DW_TAG_enumeration_type)
1094 info_ptr = pdi.sibling;
1096 else if (pdi.has_children)
1098 /* Die has children, but the optional DW_AT_sibling attribute
1109 /* If we didn't find a lowpc, set it to highpc to avoid complaints
1110 from `maint check'. */
1111 if (*lowpc == ((CORE_ADDR) -1))
1117 add_partial_symbol (pdi, objfile)
1118 struct partial_die_info *pdi;
1119 struct objfile *objfile;
1125 case DW_TAG_subprogram:
1126 if (pdi->is_external)
1128 prim_record_minimal_symbol (pdi->name, pdi->lowpc + baseaddr,
1130 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1131 VAR_NAMESPACE, LOC_BLOCK,
1132 &objfile->global_psymbols,
1133 0, pdi->lowpc + baseaddr, cu_language, objfile);
1137 prim_record_minimal_symbol (pdi->name, pdi->lowpc + baseaddr,
1138 mst_file_text, objfile);
1139 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1140 VAR_NAMESPACE, LOC_BLOCK,
1141 &objfile->static_psymbols,
1142 0, pdi->lowpc + baseaddr, cu_language, objfile);
1145 case DW_TAG_variable:
1146 if (pdi->is_external)
1149 Don't enter into the minimal symbol tables as there is
1150 a minimal symbol table entry from the ELF symbols already.
1151 Enter into partial symbol table if it has a location
1152 descriptor or a type.
1153 If the location descriptor is missing, new_symbol will create
1154 a LOC_UNRESOLVED symbol, the address of the variable will then
1155 be determined from the minimal symbol table whenever the variable
1157 The address for the partial symbol table entry is not
1158 used by GDB, but it comes in handy for debugging partial symbol
1162 addr = decode_locdesc (pdi->locdesc, objfile);
1163 if (pdi->locdesc || pdi->has_type)
1164 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1165 VAR_NAMESPACE, LOC_STATIC,
1166 &objfile->global_psymbols,
1167 0, addr + baseaddr, cu_language, objfile);
1171 /* Static Variable. Skip symbols without location descriptors. */
1172 if (pdi->locdesc == NULL)
1174 addr = decode_locdesc (pdi->locdesc, objfile);
1175 prim_record_minimal_symbol (pdi->name, addr + baseaddr,
1176 mst_file_data, objfile);
1177 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1178 VAR_NAMESPACE, LOC_STATIC,
1179 &objfile->static_psymbols,
1180 0, addr + baseaddr, cu_language, objfile);
1183 case DW_TAG_typedef:
1184 case DW_TAG_base_type:
1185 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1186 VAR_NAMESPACE, LOC_TYPEDEF,
1187 &objfile->static_psymbols,
1188 0, (CORE_ADDR) 0, cu_language, objfile);
1190 case DW_TAG_class_type:
1191 case DW_TAG_structure_type:
1192 case DW_TAG_union_type:
1193 case DW_TAG_enumeration_type:
1194 /* Skip aggregate types without children, these are external
1196 if (pdi->has_children == 0)
1198 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1199 STRUCT_NAMESPACE, LOC_TYPEDEF,
1200 &objfile->static_psymbols,
1201 0, (CORE_ADDR) 0, cu_language, objfile);
1203 if (cu_language == language_cplus)
1205 /* For C++, these implicitly act as typedefs as well. */
1206 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1207 VAR_NAMESPACE, LOC_TYPEDEF,
1208 &objfile->static_psymbols,
1209 0, (CORE_ADDR) 0, cu_language, objfile);
1212 case DW_TAG_enumerator:
1213 add_psymbol_to_list (pdi->name, strlen (pdi->name),
1214 VAR_NAMESPACE, LOC_CONST,
1215 &objfile->static_psymbols,
1216 0, (CORE_ADDR) 0, cu_language, objfile);
1223 /* Expand this partial symbol table into a full symbol table. */
1226 dwarf2_psymtab_to_symtab (pst)
1227 struct partial_symtab *pst;
1229 /* FIXME: This is barely more than a stub. */
1234 warning ("bug: psymtab for %s is already read in.", pst->filename);
1240 printf_filtered ("Reading in symbols for %s...", pst->filename);
1241 gdb_flush (gdb_stdout);
1244 psymtab_to_symtab_1 (pst);
1246 /* Finish up the debug error message. */
1248 printf_filtered ("done.\n");
1254 psymtab_to_symtab_1 (pst)
1255 struct partial_symtab *pst;
1257 struct objfile *objfile = pst->objfile;
1258 bfd *abfd = objfile->obfd;
1259 struct comp_unit_head cu_header;
1260 struct die_info *dies;
1261 unsigned long offset;
1262 CORE_ADDR lowpc, highpc;
1263 struct die_info *child_die;
1265 struct symtab *symtab;
1266 struct cleanup *back_to;
1268 /* Set local variables from the partial symbol table info. */
1269 offset = DWARF_INFO_OFFSET(pst);
1270 dwarf_info_buffer = DWARF_INFO_BUFFER(pst);
1271 dwarf_abbrev_buffer = DWARF_ABBREV_BUFFER(pst);
1272 dwarf_abbrev_size = DWARF_ABBREV_SIZE(pst);
1273 dwarf_line_buffer = DWARF_LINE_BUFFER(pst);
1274 baseaddr = ANOFFSET (pst->section_offsets, 0);
1275 cu_header_offset = offset;
1276 info_ptr = dwarf_info_buffer + offset;
1278 obstack_init (&dwarf2_tmp_obstack);
1279 back_to = make_cleanup (dwarf2_free_tmp_obstack, NULL);
1282 make_cleanup (really_free_pendings, NULL);
1284 /* read in the comp_unit header */
1285 cu_header.length = read_4_bytes (abfd, info_ptr);
1287 cu_header.version = read_2_bytes (abfd, info_ptr);
1289 cu_header.abbrev_offset = read_4_bytes (abfd, info_ptr);
1291 cu_header.addr_size = read_1_byte (abfd, info_ptr);
1294 /* Read the abbrevs for this compilation unit */
1295 dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
1296 make_cleanup (dwarf2_empty_abbrev_table, NULL);
1298 dies = read_comp_unit (info_ptr, abfd);
1300 make_cleanup (free_die_list, dies);
1302 /* Do line number decoding in read_file_scope () */
1303 process_die (dies, objfile);
1305 if (!dwarf2_get_pc_bounds (dies, &lowpc, &highpc, objfile))
1307 /* Some compilers don't define a DW_AT_high_pc attribute for
1308 the compilation unit. If the DW_AT_high_pc is missing,
1309 synthesize it, by scanning the DIE's below the compilation unit. */
1311 if (dies->has_children)
1313 child_die = dies->next;
1314 while (child_die && child_die->tag)
1316 if (child_die->tag == DW_TAG_subprogram)
1318 CORE_ADDR low, high;
1320 if (dwarf2_get_pc_bounds (child_die, &low, &high, objfile))
1322 highpc = max (highpc, high);
1325 child_die = sibling_die (child_die);
1329 symtab = end_symtab (highpc + baseaddr, objfile, 0);
1331 /* Set symtab language to language from DW_AT_language.
1332 If the compilation is from a C file generated by language preprocessors,
1333 do not set the language if it was already deduced by start_subfile. */
1335 && !(cu_language == language_c && symtab->language != language_c))
1337 symtab->language = cu_language;
1339 pst->symtab = symtab;
1341 sort_symtab_syms (pst->symtab);
1343 do_cleanups (back_to);
1346 /* Process a die and its children. */
1349 process_die (die, objfile)
1350 struct die_info *die;
1351 struct objfile *objfile;
1355 case DW_TAG_padding:
1357 case DW_TAG_compile_unit:
1358 read_file_scope (die, objfile);
1360 case DW_TAG_subprogram:
1361 read_subroutine_type (die, objfile);
1362 read_func_scope (die, objfile);
1364 case DW_TAG_inlined_subroutine:
1365 /* FIXME: These are ignored for now.
1366 They could be used to set breakpoints on all inlined instances
1367 of a function and make GDB `next' properly over inlined functions. */
1369 case DW_TAG_lexical_block:
1370 read_lexical_block_scope (die, objfile);
1372 case DW_TAG_class_type:
1373 case DW_TAG_structure_type:
1374 case DW_TAG_union_type:
1375 read_structure_scope (die, objfile);
1377 case DW_TAG_enumeration_type:
1378 read_enumeration (die, objfile);
1380 case DW_TAG_subroutine_type:
1381 read_subroutine_type (die, objfile);
1383 case DW_TAG_array_type:
1384 read_array_type (die, objfile);
1386 case DW_TAG_pointer_type:
1387 read_tag_pointer_type (die, objfile);
1389 case DW_TAG_ptr_to_member_type:
1390 read_tag_ptr_to_member_type (die, objfile);
1392 case DW_TAG_reference_type:
1393 read_tag_reference_type (die, objfile);
1395 case DW_TAG_string_type:
1396 read_tag_string_type (die, objfile);
1398 case DW_TAG_base_type:
1399 read_base_type (die, objfile);
1400 if (dwarf_attr (die, DW_AT_name))
1402 /* Add a typedef symbol for the base type definition. */
1403 new_symbol (die, die->type, objfile);
1406 case DW_TAG_common_block:
1407 read_common_block (die, objfile);
1409 case DW_TAG_common_inclusion:
1412 new_symbol (die, NULL, objfile);
1418 read_file_scope (die, objfile)
1419 struct die_info *die;
1420 struct objfile *objfile;
1422 unsigned int line_offset = 0;
1423 CORE_ADDR lowpc = ((CORE_ADDR) -1);
1424 CORE_ADDR highpc = ((CORE_ADDR) 0);
1425 struct attribute *attr;
1426 char *name = "<unknown>";
1427 char *comp_dir = NULL;
1428 struct die_info *child_die;
1429 bfd *abfd = objfile->obfd;
1431 if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
1433 if (die->has_children)
1435 child_die = die->next;
1436 while (child_die && child_die->tag)
1438 if (child_die->tag == DW_TAG_subprogram)
1440 CORE_ADDR low, high;
1442 if (dwarf2_get_pc_bounds (child_die, &low, &high, objfile))
1444 lowpc = min (lowpc, low);
1445 highpc = max (highpc, high);
1448 child_die = sibling_die (child_die);
1453 /* If we didn't find a lowpc, set it to highpc to avoid complaints
1454 from finish_block. */
1455 if (lowpc == ((CORE_ADDR) -1))
1460 attr = dwarf_attr (die, DW_AT_name);
1463 name = DW_STRING (attr);
1465 attr = dwarf_attr (die, DW_AT_comp_dir);
1468 comp_dir = DW_STRING (attr);
1471 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1472 directory, get rid of it. */
1473 char *cp = strchr (comp_dir, ':');
1475 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1480 if (objfile->ei.entry_point >= lowpc &&
1481 objfile->ei.entry_point < highpc)
1483 objfile->ei.entry_file_lowpc = lowpc;
1484 objfile->ei.entry_file_highpc = highpc;
1487 attr = dwarf_attr (die, DW_AT_language);
1490 set_cu_language (DW_UNSND (attr));
1494 /* FIXME:Do something here. */
1495 if (dip->at_producer != NULL)
1497 handle_producer (dip->at_producer);
1501 /* The compilation unit may be in a different language or objfile,
1502 zero out all remembered fundamental types. */
1503 memset (ftypes, 0, FT_NUM_MEMBERS * sizeof (struct type *));
1505 start_symtab (name, comp_dir, lowpc);
1506 record_debugformat ("DWARF 2");
1508 /* Decode line number information if present. */
1509 attr = dwarf_attr (die, DW_AT_stmt_list);
1512 line_offset = DW_UNSND (attr);
1513 dwarf_decode_lines (line_offset, comp_dir, abfd);
1516 /* Process all dies in compilation unit. */
1517 if (die->has_children)
1519 child_die = die->next;
1520 while (child_die && child_die->tag)
1522 process_die (child_die, objfile);
1523 child_die = sibling_die (child_die);
1529 read_func_scope (die, objfile)
1530 struct die_info *die;
1531 struct objfile *objfile;
1533 register struct context_stack *new;
1536 struct die_info *child_die;
1537 struct attribute *attr;
1540 name = dwarf2_linkage_name (die);
1542 /* Ignore functions with missing or empty names and functions with
1543 missing or invalid low and high pc attributes. */
1544 if (name == NULL || !dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
1550 if (objfile->ei.entry_point >= lowpc &&
1551 objfile->ei.entry_point < highpc)
1553 objfile->ei.entry_func_lowpc = lowpc;
1554 objfile->ei.entry_func_highpc = highpc;
1557 if (STREQ (name, "main")) /* FIXME: hardwired name */
1559 objfile->ei.main_func_lowpc = lowpc;
1560 objfile->ei.main_func_highpc = highpc;
1563 /* Decode DW_AT_frame_base location descriptor if present, keep result
1564 for DW_OP_fbreg operands in decode_locdesc. */
1565 frame_base_reg = -1;
1566 frame_base_offset = 0;
1567 attr = dwarf_attr (die, DW_AT_frame_base);
1570 CORE_ADDR addr = decode_locdesc (DW_BLOCK (attr), objfile);
1572 frame_base_reg = addr;
1575 frame_base_reg = basereg;
1576 frame_base_offset = addr;
1579 complain (&dwarf2_unsupported_at_frame_base, name);
1582 new = push_context (0, lowpc);
1583 new->name = new_symbol (die, die->type, objfile);
1584 list_in_scope = &local_symbols;
1586 if (die->has_children)
1588 child_die = die->next;
1589 while (child_die && child_die->tag)
1591 process_die (child_die, objfile);
1592 child_die = sibling_die (child_die);
1596 new = pop_context ();
1597 /* Make a block for the local symbols within. */
1598 finish_block (new->name, &local_symbols, new->old_blocks,
1599 lowpc, highpc, objfile);
1600 list_in_scope = &file_symbols;
1603 /* Process all the DIES contained within a lexical block scope. Start
1604 a new scope, process the dies, and then close the scope. */
1607 read_lexical_block_scope (die, objfile)
1608 struct die_info *die;
1609 struct objfile *objfile;
1611 register struct context_stack *new;
1612 CORE_ADDR lowpc, highpc;
1613 struct die_info *child_die;
1615 /* Ignore blocks with missing or invalid low and high pc attributes. */
1616 if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile))
1621 push_context (0, lowpc);
1622 if (die->has_children)
1624 child_die = die->next;
1625 while (child_die && child_die->tag)
1627 process_die (child_die, objfile);
1628 child_die = sibling_die (child_die);
1631 new = pop_context ();
1633 if (local_symbols != NULL)
1635 finish_block (0, &local_symbols, new->old_blocks, new->start_addr,
1638 local_symbols = new->locals;
1641 /* Get low and high pc attributes from a die.
1642 Return 1 if the attributes are present and valid, otherwise, return 0. */
1645 dwarf2_get_pc_bounds (die, lowpc, highpc, objfile)
1646 struct die_info *die;
1649 struct objfile *objfile;
1651 struct attribute *attr;
1655 attr = dwarf_attr (die, DW_AT_low_pc);
1657 low = DW_ADDR (attr);
1660 attr = dwarf_attr (die, DW_AT_high_pc);
1662 high = DW_ADDR (attr);
1669 /* When using the GNU linker, .gnu.linkonce. sections are used to
1670 eliminate duplicate copies of functions and vtables and such.
1671 The linker will arbitrarily choose one and discard the others.
1672 The AT_*_pc values for such functions refer to local labels in
1673 these sections. If the section from that file was discarded, the
1674 labels are not in the output, so the relocs get a value of 0.
1675 If this is a discarded function, mark the pc bounds as invalid,
1676 so that GDB will ignore it. */
1677 if (low == 0 && (bfd_get_file_flags (objfile->obfd) & HAS_RELOC) == 0)
1685 /* Add an aggregate field to the field list. */
1688 dwarf2_add_field (fip, die, objfile)
1689 struct field_info *fip;
1690 struct die_info *die;
1691 struct objfile *objfile;
1693 struct nextfield *new_field;
1694 struct attribute *attr;
1696 char *fieldname = "";
1698 /* Allocate a new field list entry and link it in. */
1699 new_field = (struct nextfield *) xmalloc (sizeof (struct nextfield));
1700 make_cleanup (free, new_field);
1701 memset (new_field, 0, sizeof (struct nextfield));
1702 new_field->next = fip->fields;
1703 fip->fields = new_field;
1706 /* Handle accessibility and virtuality of field.
1707 The default accessibility for members is public, the default
1708 accessibility for inheritance is private. */
1709 if (die->tag != DW_TAG_inheritance)
1710 new_field->accessibility = DW_ACCESS_public;
1712 new_field->accessibility = DW_ACCESS_private;
1713 new_field->virtuality = DW_VIRTUALITY_none;
1715 attr = dwarf_attr (die, DW_AT_accessibility);
1717 new_field->accessibility = DW_UNSND (attr);
1718 if (new_field->accessibility != DW_ACCESS_public)
1719 fip->non_public_fields = 1;
1720 attr = dwarf_attr (die, DW_AT_virtuality);
1722 new_field->virtuality = DW_UNSND (attr);
1724 fp = &new_field->field;
1725 if (die->tag == DW_TAG_member)
1727 /* Get type of field. */
1728 fp->type = die_type (die, objfile);
1730 /* Get bit size of field (zero if none). */
1731 attr = dwarf_attr (die, DW_AT_bit_size);
1734 FIELD_BITSIZE (*fp) = DW_UNSND (attr);
1738 FIELD_BITSIZE (*fp) = 0;
1741 /* Get bit offset of field. */
1742 attr = dwarf_attr (die, DW_AT_data_member_location);
1745 FIELD_BITPOS (*fp) =
1746 decode_locdesc (DW_BLOCK (attr), objfile) * bits_per_byte;
1749 FIELD_BITPOS (*fp) = 0;
1750 attr = dwarf_attr (die, DW_AT_bit_offset);
1753 if (BITS_BIG_ENDIAN)
1755 /* For big endian bits, the DW_AT_bit_offset gives the
1756 additional bit offset from the MSB of the containing
1757 anonymous object to the MSB of the field. We don't
1758 have to do anything special since we don't need to
1759 know the size of the anonymous object. */
1760 FIELD_BITPOS (*fp) += DW_UNSND (attr);
1764 /* For little endian bits, compute the bit offset to the
1765 MSB of the anonymous object, subtract off the number of
1766 bits from the MSB of the field to the MSB of the
1767 object, and then subtract off the number of bits of
1768 the field itself. The result is the bit offset of
1769 the LSB of the field. */
1771 int bit_offset = DW_UNSND (attr);
1773 attr = dwarf_attr (die, DW_AT_byte_size);
1776 /* The size of the anonymous object containing
1777 the bit field is explicit, so use the
1778 indicated size (in bytes). */
1779 anonymous_size = DW_UNSND (attr);
1783 /* The size of the anonymous object containing
1784 the bit field must be inferred from the type
1785 attribute of the data member containing the
1787 anonymous_size = TYPE_LENGTH (fp->type);
1789 FIELD_BITPOS (*fp) += anonymous_size * bits_per_byte
1790 - bit_offset - FIELD_BITSIZE (*fp);
1794 /* Get name of field. */
1795 attr = dwarf_attr (die, DW_AT_name);
1796 if (attr && DW_STRING (attr))
1797 fieldname = DW_STRING (attr);
1798 fp->name = obsavestring (fieldname, strlen (fieldname),
1799 &objfile->type_obstack);
1801 /* Change accessibility for artificial fields (e.g. virtual table
1802 pointer or virtual base class pointer) to private. */
1803 if (dwarf_attr (die, DW_AT_artificial))
1805 new_field->accessibility = DW_ACCESS_private;
1806 fip->non_public_fields = 1;
1809 else if (die->tag == DW_TAG_variable)
1814 /* C++ static member.
1815 Get physical name, extract field name from physical name. */
1816 physname = dwarf2_linkage_name (die);
1817 if (physname == NULL)
1821 while (*cp && !is_cplus_marker (*cp))
1825 if (*fieldname == '\0')
1827 complain (&dwarf2_bad_static_member_name, physname);
1830 SET_FIELD_PHYSNAME (*fp, obsavestring (physname, strlen (physname),
1831 &objfile->type_obstack));
1832 FIELD_TYPE (*fp) = die_type (die, objfile);
1833 FIELD_NAME (*fp) = obsavestring (fieldname, strlen (fieldname),
1834 &objfile->type_obstack);
1836 else if (die->tag == DW_TAG_inheritance)
1838 /* C++ base class field. */
1839 attr = dwarf_attr (die, DW_AT_data_member_location);
1841 FIELD_BITPOS (*fp) = decode_locdesc (DW_BLOCK (attr), objfile) * bits_per_byte;
1842 FIELD_BITSIZE (*fp) = 0;
1843 FIELD_TYPE (*fp) = die_type (die, objfile);
1844 FIELD_NAME (*fp) = type_name_no_tag (fp->type);
1845 fip->nbaseclasses++;
1849 /* Create the vector of fields, and attach it to the type. */
1852 dwarf2_attach_fields_to_type (fip, type, objfile)
1853 struct field_info *fip;
1855 struct objfile *objfile;
1857 int nfields = fip->nfields;
1859 /* Record the field count, allocate space for the array of fields,
1860 and create blank accessibility bitfields if necessary. */
1861 TYPE_NFIELDS (type) = nfields;
1862 TYPE_FIELDS (type) = (struct field *)
1863 TYPE_ALLOC (type, sizeof (struct field) * nfields);
1864 memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
1866 if (fip->non_public_fields)
1868 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1870 TYPE_FIELD_PRIVATE_BITS (type) =
1871 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1872 B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
1874 TYPE_FIELD_PROTECTED_BITS (type) =
1875 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1876 B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
1878 TYPE_FIELD_IGNORE_BITS (type) =
1879 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1880 B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
1883 /* If the type has baseclasses, allocate and clear a bit vector for
1884 TYPE_FIELD_VIRTUAL_BITS. */
1885 if (fip->nbaseclasses)
1887 int num_bytes = B_BYTES (fip->nbaseclasses);
1890 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1891 pointer = (char *) TYPE_ALLOC (type, num_bytes);
1892 TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *) pointer;
1893 B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), fip->nbaseclasses);
1894 TYPE_N_BASECLASSES (type) = fip->nbaseclasses;
1897 /* Copy the saved-up fields into the field vector. Start from the head
1898 of the list, adding to the tail of the field array, so that they end
1899 up in the same order in the array in which they were added to the list. */
1900 while (nfields-- > 0)
1902 TYPE_FIELD (type, nfields) = fip->fields->field;
1903 switch (fip->fields->accessibility)
1905 case DW_ACCESS_private:
1906 SET_TYPE_FIELD_PRIVATE (type, nfields);
1909 case DW_ACCESS_protected:
1910 SET_TYPE_FIELD_PROTECTED (type, nfields);
1913 case DW_ACCESS_public:
1917 /* Unknown accessibility. Complain and treat it as public. */
1919 complain (&dwarf2_unsupported_accessibility,
1920 fip->fields->accessibility);
1924 if (nfields < fip->nbaseclasses)
1926 switch (fip->fields->virtuality)
1928 case DW_VIRTUALITY_virtual:
1929 case DW_VIRTUALITY_pure_virtual:
1930 SET_TYPE_FIELD_VIRTUAL (type, nfields);
1934 fip->fields = fip->fields->next;
1938 /* Skip to the end of a member function name in a mangled name. */
1941 skip_member_fn_name (physname)
1944 char *endname = physname;
1946 /* Skip over leading underscores. */
1947 while (*endname == '_')
1950 /* Find two succesive underscores. */
1952 endname = strchr (endname, '_');
1953 while (endname != NULL && *++endname != '_');
1955 if (endname == NULL)
1957 complain (&dwarf2_bad_member_name_complaint, physname);
1962 /* Take care of trailing underscores. */
1963 if (endname[1] != '_')
1969 /* Add a member function to the proper fieldlist. */
1972 dwarf2_add_member_fn (fip, die, type, objfile)
1973 struct field_info *fip;
1974 struct die_info *die;
1976 struct objfile *objfile;
1978 struct attribute *attr;
1979 struct fnfieldlist *flp;
1981 struct fn_field *fnp;
1984 struct nextfnfield *new_fnfield;
1986 /* Extract member function name from mangled name. */
1987 physname = dwarf2_linkage_name (die);
1988 if (physname == NULL)
1990 if ((physname[0] == '_' && physname[1] == '_'
1991 && strchr ("0123456789Qt", physname[2]))
1992 || DESTRUCTOR_PREFIX_P (physname))
1994 /* Constructor and destructor field names are set to the name
1995 of the class, but without template parameter lists.
1996 The name might be missing for anonymous aggregates. */
1997 if (TYPE_TAG_NAME (type))
1999 char *p = strchr (TYPE_TAG_NAME (type), '<');
2002 fieldname = TYPE_TAG_NAME (type);
2004 fieldname = obsavestring (TYPE_TAG_NAME (type),
2005 p - TYPE_TAG_NAME (type),
2006 &objfile->type_obstack);
2010 char *anon_name = "";
2011 fieldname = obsavestring (anon_name, strlen (anon_name),
2012 &objfile->type_obstack);
2017 char *endname = skip_member_fn_name (physname);
2019 /* Ignore member function if we were unable not extract the member
2021 if (endname == physname)
2023 fieldname = obsavestring (physname, endname - physname,
2024 &objfile->type_obstack);
2027 /* Look up member function name in fieldlist. */
2028 for (i = 0; i < fip->nfnfields; i++)
2030 if (STREQ (fip->fnfieldlists[i].name, fieldname))
2034 /* Create new list element if necessary. */
2035 if (i < fip->nfnfields)
2036 flp = &fip->fnfieldlists[i];
2039 if ((fip->nfnfields % DW_FIELD_ALLOC_CHUNK) == 0)
2041 fip->fnfieldlists = (struct fnfieldlist *)
2042 xrealloc (fip->fnfieldlists,
2043 (fip->nfnfields + DW_FIELD_ALLOC_CHUNK)
2044 * sizeof (struct fnfieldlist));
2045 if (fip->nfnfields == 0)
2046 make_cleanup (free_current_contents, &fip->fnfieldlists);
2048 flp = &fip->fnfieldlists[fip->nfnfields];
2049 flp->name = fieldname;
2055 /* Create a new member function field and chain it to the field list
2057 new_fnfield = (struct nextfnfield *) xmalloc (sizeof (struct nextfnfield));
2058 make_cleanup (free, new_fnfield);
2059 memset (new_fnfield, 0, sizeof (struct nextfnfield));
2060 new_fnfield->next = flp->head;
2061 flp->head = new_fnfield;
2064 /* Fill in the member function field info. */
2065 fnp = &new_fnfield->fnfield;
2066 fnp->physname = obsavestring (physname, strlen (physname),
2067 &objfile->type_obstack);
2068 fnp->type = alloc_type (objfile);
2069 if (die->type && TYPE_CODE (die->type) == TYPE_CODE_FUNC)
2071 struct type *return_type = TYPE_TARGET_TYPE (die->type);
2072 struct type **arg_types;
2073 int nparams = TYPE_NFIELDS (die->type);
2076 /* Copy argument types from the subroutine type. */
2077 arg_types = (struct type **)
2078 TYPE_ALLOC (fnp->type, (nparams + 1) * sizeof (struct type *));
2079 for (iparams = 0; iparams < nparams; iparams++)
2080 arg_types[iparams] = TYPE_FIELD_TYPE (die->type, iparams);
2082 /* Set last entry in argument type vector. */
2083 if (TYPE_FLAGS (die->type) & TYPE_FLAG_VARARGS)
2084 arg_types[nparams] = NULL;
2086 arg_types[nparams] = dwarf2_fundamental_type (objfile, FT_VOID);
2088 smash_to_method_type (fnp->type, type, return_type, arg_types);
2090 /* Handle static member functions.
2091 Dwarf2 has no clean way to discern C++ static and non-static
2092 member functions. G++ helps GDB by marking the first
2093 parameter for non-static member functions (which is the
2094 this pointer) as artificial. We obtain this information
2095 from read_subroutine_type via TYPE_FIELD_ARTIFICIAL. */
2096 if (nparams == 0 || TYPE_FIELD_ARTIFICIAL (die->type, 0) == 0)
2097 fnp->voffset = VOFFSET_STATIC;
2100 complain (&dwarf2_missing_member_fn_type_complaint, physname);
2102 /* Get fcontext from DW_AT_containing_type if present. */
2103 if (dwarf_attr (die, DW_AT_containing_type) != NULL)
2104 fnp->fcontext = die_containing_type (die, objfile);
2106 /* dwarf2 doesn't have stubbed physical names, so the setting of is_const
2107 and is_volatile is irrelevant, as it is needed by gdb_mangle_name only. */
2109 /* Get accessibility. */
2110 attr = dwarf_attr (die, DW_AT_accessibility);
2113 switch (DW_UNSND (attr))
2115 case DW_ACCESS_private:
2116 fnp->is_private = 1;
2118 case DW_ACCESS_protected:
2119 fnp->is_protected = 1;
2124 /* Get index in virtual function table if it is a virtual member function. */
2125 attr = dwarf_attr (die, DW_AT_vtable_elem_location);
2127 fnp->voffset = decode_locdesc (DW_BLOCK (attr), objfile) + 2;
2130 /* Create the vector of member function fields, and attach it to the type. */
2133 dwarf2_attach_fn_fields_to_type (fip, type, objfile)
2134 struct field_info *fip;
2136 struct objfile *objfile;
2138 struct fnfieldlist *flp;
2139 int total_length = 0;
2142 ALLOCATE_CPLUS_STRUCT_TYPE (type);
2143 TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
2144 TYPE_ALLOC (type, sizeof (struct fn_fieldlist) * fip->nfnfields);
2146 for (i = 0, flp = fip->fnfieldlists; i < fip->nfnfields; i++, flp++)
2148 struct nextfnfield *nfp = flp->head;
2149 struct fn_fieldlist *fn_flp = &TYPE_FN_FIELDLIST (type, i);
2152 TYPE_FN_FIELDLIST_NAME (type, i) = flp->name;
2153 TYPE_FN_FIELDLIST_LENGTH (type, i) = flp->length;
2154 fn_flp->fn_fields = (struct fn_field *)
2155 TYPE_ALLOC (type, sizeof (struct fn_field) * flp->length);
2156 for (k = flp->length; (k--, nfp); nfp = nfp->next)
2157 fn_flp->fn_fields[k] = nfp->fnfield;
2159 total_length += flp->length;
2162 TYPE_NFN_FIELDS (type) = fip->nfnfields;
2163 TYPE_NFN_FIELDS_TOTAL (type) = total_length;
2166 /* Called when we find the DIE that starts a structure or union scope
2167 (definition) to process all dies that define the members of the
2170 NOTE: we need to call struct_type regardless of whether or not the
2171 DIE has an at_name attribute, since it might be an anonymous
2172 structure or union. This gets the type entered into our set of
2175 However, if the structure is incomplete (an opaque struct/union)
2176 then suppress creating a symbol table entry for it since gdb only
2177 wants to find the one with the complete definition. Note that if
2178 it is complete, we just call new_symbol, which does it's own
2179 checking about whether the struct/union is anonymous or not (and
2180 suppresses creating a symbol table entry itself). */
2183 read_structure_scope (die, objfile)
2184 struct die_info *die;
2185 struct objfile *objfile;
2188 struct attribute *attr;
2190 type = alloc_type (objfile);
2192 INIT_CPLUS_SPECIFIC (type);
2193 attr = dwarf_attr (die, DW_AT_name);
2194 if (attr && DW_STRING (attr))
2196 TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
2197 strlen (DW_STRING (attr)),
2198 &objfile->type_obstack);
2201 if (die->tag == DW_TAG_structure_type)
2203 TYPE_CODE (type) = TYPE_CODE_STRUCT;
2205 else if (die->tag == DW_TAG_union_type)
2207 TYPE_CODE (type) = TYPE_CODE_UNION;
2211 /* FIXME: TYPE_CODE_CLASS is currently defined to TYPE_CODE_STRUCT
2213 TYPE_CODE (type) = TYPE_CODE_CLASS;
2216 attr = dwarf_attr (die, DW_AT_byte_size);
2219 TYPE_LENGTH (type) = DW_UNSND (attr);
2223 TYPE_LENGTH (type) = 0;
2226 /* We need to add the type field to the die immediately so we don't
2227 infinitely recurse when dealing with pointers to the structure
2228 type within the structure itself. */
2231 if (die->has_children)
2233 struct field_info fi;
2234 struct die_info *child_die;
2235 struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
2237 memset (&fi, 0, sizeof (struct field_info));
2239 child_die = die->next;
2241 while (child_die && child_die->tag)
2243 if (child_die->tag == DW_TAG_member)
2245 dwarf2_add_field (&fi, child_die, objfile);
2247 else if (child_die->tag == DW_TAG_variable)
2249 /* C++ static member. */
2250 dwarf2_add_field (&fi, child_die, objfile);
2252 else if (child_die->tag == DW_TAG_subprogram)
2254 /* C++ member function. */
2255 process_die (child_die, objfile);
2256 dwarf2_add_member_fn (&fi, child_die, type, objfile);
2258 else if (child_die->tag == DW_TAG_inheritance)
2260 /* C++ base class field. */
2261 dwarf2_add_field (&fi, child_die, objfile);
2265 process_die (child_die, objfile);
2267 child_die = sibling_die (child_die);
2270 /* Attach fields and member functions to the type. */
2272 dwarf2_attach_fields_to_type (&fi, type, objfile);
2275 dwarf2_attach_fn_fields_to_type (&fi, type, objfile);
2277 /* Get the type which refers to the base class (possibly this
2278 class itself) which contains the vtable pointer for the current
2279 class from the DW_AT_containing_type attribute. */
2281 if (dwarf_attr (die, DW_AT_containing_type) != NULL)
2283 struct type *t = die_containing_type (die, objfile);
2285 TYPE_VPTR_BASETYPE (type) = t;
2288 static const char vptr_name[] = { '_','v','p','t','r','\0' };
2291 /* Our own class provides vtbl ptr. */
2292 for (i = TYPE_NFIELDS (t) - 1;
2293 i >= TYPE_N_BASECLASSES (t);
2296 char *fieldname = TYPE_FIELD_NAME (t, i);
2298 if (STREQN (fieldname, vptr_name, strlen (vptr_name) - 1)
2299 && is_cplus_marker (fieldname[strlen (vptr_name)]))
2301 TYPE_VPTR_FIELDNO (type) = i;
2306 /* Complain if virtual function table field not found. */
2307 if (i < TYPE_N_BASECLASSES (t))
2308 complain (&dwarf2_vtbl_not_found_complaint,
2309 TYPE_TAG_NAME (type) ? TYPE_TAG_NAME (type) : "");
2313 TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (t);
2318 new_symbol (die, type, objfile);
2320 do_cleanups (back_to);
2324 /* No children, must be stub. */
2325 TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
2331 /* Given a pointer to a die which begins an enumeration, process all
2332 the dies that define the members of the enumeration.
2334 This will be much nicer in draft 6 of the DWARF spec when our
2335 members will be dies instead squished into the DW_AT_element_list
2338 NOTE: We reverse the order of the element list. */
2341 read_enumeration (die, objfile)
2342 struct die_info *die;
2343 struct objfile *objfile;
2345 struct die_info *child_die;
2347 struct field *fields;
2348 struct attribute *attr;
2351 int unsigned_enum = 1;
2353 type = alloc_type (objfile);
2355 TYPE_CODE (type) = TYPE_CODE_ENUM;
2356 attr = dwarf_attr (die, DW_AT_name);
2357 if (attr && DW_STRING (attr))
2359 TYPE_TAG_NAME (type) = obsavestring (DW_STRING (attr),
2360 strlen (DW_STRING (attr)),
2361 &objfile->type_obstack);
2364 attr = dwarf_attr (die, DW_AT_byte_size);
2367 TYPE_LENGTH (type) = DW_UNSND (attr);
2371 TYPE_LENGTH (type) = 0;
2376 if (die->has_children)
2378 child_die = die->next;
2379 while (child_die && child_die->tag)
2381 if (child_die->tag != DW_TAG_enumerator)
2383 process_die (child_die, objfile);
2387 attr = dwarf_attr (child_die, DW_AT_name);
2390 sym = new_symbol (child_die, type, objfile);
2391 if (SYMBOL_VALUE (sym) < 0)
2394 if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
2396 fields = (struct field *)
2398 (num_fields + DW_FIELD_ALLOC_CHUNK)
2399 * sizeof (struct field));
2402 FIELD_NAME (fields[num_fields]) = SYMBOL_NAME (sym);
2403 FIELD_TYPE (fields[num_fields]) = NULL;
2404 FIELD_BITPOS (fields[num_fields]) = SYMBOL_VALUE (sym);
2405 FIELD_BITSIZE (fields[num_fields]) = 0;
2411 child_die = sibling_die (child_die);
2416 TYPE_NFIELDS (type) = num_fields;
2417 TYPE_FIELDS (type) = (struct field *)
2418 TYPE_ALLOC (type, sizeof (struct field) * num_fields);
2419 memcpy (TYPE_FIELDS (type), fields,
2420 sizeof (struct field) * num_fields);
2424 TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
2427 new_symbol (die, type, objfile);
2430 /* Extract all information from a DW_TAG_array_type DIE and put it in
2431 the DIE's type field. For now, this only handles one dimensional
2435 read_array_type (die, objfile)
2436 struct die_info *die;
2437 struct objfile *objfile;
2439 struct die_info *child_die;
2440 struct type *type = NULL;
2441 struct type *element_type, *range_type, *index_type;
2442 struct type **range_types = NULL;
2443 struct attribute *attr;
2445 struct cleanup *back_to;
2447 /* Return if we've already decoded this type. */
2453 element_type = die_type (die, objfile);
2455 /* Irix 6.2 native cc creates array types without children for
2456 arrays with unspecified length. */
2457 if (die->has_children == 0)
2459 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
2460 range_type = create_range_type (NULL, index_type, 0, -1);
2461 die->type = create_array_type (NULL, element_type, range_type);
2465 back_to = make_cleanup (null_cleanup, NULL);
2466 child_die = die->next;
2467 while (child_die && child_die->tag)
2469 if (child_die->tag == DW_TAG_subrange_type)
2471 unsigned int low, high;
2473 /* Default bounds to an array with unspecified length. */
2476 if (cu_language == DW_LANG_Fortran77
2477 || cu_language == DW_LANG_Fortran90)
2479 /* FORTRAN implies a lower bound of 1, if not given. */
2483 index_type = die_type (child_die, objfile);
2484 attr = dwarf_attr (child_die, DW_AT_lower_bound);
2487 if (attr->form == DW_FORM_sdata)
2489 low = DW_SND (attr);
2491 else if (attr->form == DW_FORM_udata
2492 || attr->form == DW_FORM_data1
2493 || attr->form == DW_FORM_data2
2494 || attr->form == DW_FORM_data4)
2496 low = DW_UNSND (attr);
2500 complain (&dwarf2_non_const_array_bound_ignored,
2501 dwarf_form_name (attr->form));
2503 die->type = lookup_pointer_type (element_type);
2510 attr = dwarf_attr (child_die, DW_AT_upper_bound);
2513 if (attr->form == DW_FORM_sdata)
2515 high = DW_SND (attr);
2517 else if (attr->form == DW_FORM_udata
2518 || attr->form == DW_FORM_data1
2519 || attr->form == DW_FORM_data2
2520 || attr->form == DW_FORM_data4)
2522 high = DW_UNSND (attr);
2524 else if (attr->form == DW_FORM_block1)
2526 /* GCC encodes arrays with unspecified or dynamic length
2527 with a DW_FORM_block1 attribute.
2528 FIXME: GDB does not yet know how to handle dynamic
2529 arrays properly, treat them as arrays with unspecified
2535 complain (&dwarf2_non_const_array_bound_ignored,
2536 dwarf_form_name (attr->form));
2538 die->type = lookup_pointer_type (element_type);
2546 /* Create a range type and save it for array type creation. */
2547 if ((ndim % DW_FIELD_ALLOC_CHUNK) == 0)
2549 range_types = (struct type **)
2550 xrealloc (range_types, (ndim + DW_FIELD_ALLOC_CHUNK)
2551 * sizeof (struct type *));
2553 make_cleanup (free_current_contents, &range_types);
2555 range_types[ndim++] = create_range_type (NULL, index_type, low, high);
2557 child_die = sibling_die (child_die);
2560 /* Dwarf2 dimensions are output from left to right, create the
2561 necessary array types in backwards order. */
2562 type = element_type;
2564 type = create_array_type (NULL, type, range_types[ndim]);
2566 do_cleanups (back_to);
2568 /* Install the type in the die. */
2572 /* First cut: install each common block member as a global variable. */
2575 read_common_block (die, objfile)
2576 struct die_info *die;
2577 struct objfile *objfile;
2579 struct die_info *child_die;
2580 struct attribute *attr;
2582 CORE_ADDR base = (CORE_ADDR) 0;
2584 attr = dwarf_attr (die, DW_AT_location);
2587 base = decode_locdesc (DW_BLOCK (attr), objfile);
2589 if (die->has_children)
2591 child_die = die->next;
2592 while (child_die && child_die->tag)
2594 sym = new_symbol (child_die, NULL, objfile);
2595 attr = dwarf_attr (child_die, DW_AT_data_member_location);
2598 SYMBOL_VALUE_ADDRESS (sym) =
2599 base + decode_locdesc (DW_BLOCK (attr), objfile);
2600 add_symbol_to_list (sym, &global_symbols);
2602 child_die = sibling_die (child_die);
2607 /* Extract all information from a DW_TAG_pointer_type DIE and add to
2608 the user defined type vector. */
2611 read_tag_pointer_type (die, objfile)
2612 struct die_info *die;
2613 struct objfile *objfile;
2616 struct attribute *attr;
2623 type = lookup_pointer_type (die_type (die, objfile));
2624 attr = dwarf_attr (die, DW_AT_byte_size);
2627 TYPE_LENGTH (type) = DW_UNSND (attr);
2631 TYPE_LENGTH (type) = address_size;
2636 /* Extract all information from a DW_TAG_ptr_to_member_type DIE and add to
2637 the user defined type vector. */
2640 read_tag_ptr_to_member_type (die, objfile)
2641 struct die_info *die;
2642 struct objfile *objfile;
2645 struct type *to_type;
2646 struct type *domain;
2653 type = alloc_type (objfile);
2654 to_type = die_type (die, objfile);
2655 domain = die_containing_type (die, objfile);
2656 smash_to_member_type (type, domain, to_type);
2661 /* Extract all information from a DW_TAG_reference_type DIE and add to
2662 the user defined type vector. */
2665 read_tag_reference_type (die, objfile)
2666 struct die_info *die;
2667 struct objfile *objfile;
2670 struct attribute *attr;
2677 type = lookup_reference_type (die_type (die, objfile));
2678 attr = dwarf_attr (die, DW_AT_byte_size);
2681 TYPE_LENGTH (type) = DW_UNSND (attr);
2685 TYPE_LENGTH (type) = address_size;
2691 read_tag_const_type (die, objfile)
2692 struct die_info *die;
2693 struct objfile *objfile;
2700 complain (&dwarf2_const_ignored);
2701 die->type = die_type (die, objfile);
2705 read_tag_volatile_type (die, objfile)
2706 struct die_info *die;
2707 struct objfile *objfile;
2714 complain (&dwarf2_volatile_ignored);
2715 die->type = die_type (die, objfile);
2718 /* Extract all information from a DW_TAG_string_type DIE and add to
2719 the user defined type vector. It isn't really a user defined type,
2720 but it behaves like one, with other DIE's using an AT_user_def_type
2721 attribute to reference it. */
2724 read_tag_string_type (die, objfile)
2725 struct die_info *die;
2726 struct objfile *objfile;
2728 struct type *type, *range_type, *index_type, *char_type;
2729 struct attribute *attr;
2730 unsigned int length;
2737 attr = dwarf_attr (die, DW_AT_string_length);
2740 length = DW_UNSND (attr);
2746 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
2747 range_type = create_range_type (NULL, index_type, 1, length);
2748 char_type = dwarf2_fundamental_type (objfile, FT_CHAR);
2749 type = create_string_type (char_type, range_type);
2753 /* Handle DIES due to C code like:
2757 int (*funcp)(int a, long l);
2761 ('funcp' generates a DW_TAG_subroutine_type DIE)
2765 read_subroutine_type (die, objfile)
2766 struct die_info *die;
2767 struct objfile *objfile;
2769 struct type *type; /* Type that this function returns */
2770 struct type *ftype; /* Function that returns above type */
2771 struct attribute *attr;
2773 /* Decode the type that this subroutine returns */
2778 type = die_type (die, objfile);
2779 ftype = lookup_function_type (type);
2780 attr = dwarf_attr (die, DW_AT_prototyped);
2781 if (attr && (DW_UNSND (attr) != 0))
2782 TYPE_FLAGS (ftype) |= TYPE_FLAG_PROTOTYPED;
2784 if (die->has_children)
2786 struct die_info *child_die;
2790 /* Count the number of parameters.
2791 FIXME: GDB currently ignores vararg functions, but knows about
2792 vararg member functions. */
2793 child_die = die->next;
2794 while (child_die && child_die->tag)
2796 if (child_die->tag == DW_TAG_formal_parameter)
2798 else if (child_die->tag == DW_TAG_unspecified_parameters)
2799 TYPE_FLAGS (ftype) |= TYPE_FLAG_VARARGS;
2800 child_die = sibling_die (child_die);
2803 /* Allocate storage for parameters and fill them in. */
2804 TYPE_NFIELDS (ftype) = nparams;
2805 TYPE_FIELDS (ftype) = (struct field *)
2806 TYPE_ALLOC (ftype, nparams * sizeof (struct field));
2808 child_die = die->next;
2809 while (child_die && child_die->tag)
2811 if (child_die->tag == DW_TAG_formal_parameter)
2813 /* Dwarf2 has no clean way to discern C++ static and non-static
2814 member functions. G++ helps GDB by marking the first
2815 parameter for non-static member functions (which is the
2816 this pointer) as artificial. We pass this information
2817 to dwarf2_add_member_fn via TYPE_FIELD_ARTIFICIAL. */
2818 attr = dwarf_attr (child_die, DW_AT_artificial);
2820 TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr);
2822 TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
2823 TYPE_FIELD_TYPE (ftype, iparams) = die_type (child_die, objfile);
2826 child_die = sibling_die (child_die);
2834 read_typedef (die, objfile)
2835 struct die_info *die;
2836 struct objfile *objfile;
2842 struct attribute *attr;
2845 xtype = die_type (die, objfile);
2847 type = alloc_type (objfile);
2848 TYPE_CODE (type) = TYPE_CODE_TYPEDEF;
2849 TYPE_FLAGS (type) |= TYPE_FLAG_TARGET_STUB;
2850 TYPE_TARGET_TYPE (type) = xtype;
2851 attr = dwarf_attr (die, DW_AT_name);
2852 if (attr && DW_STRING (attr))
2853 TYPE_NAME (type) = obsavestring (DW_STRING (attr),
2854 strlen (DW_STRING (attr)),
2855 &objfile->type_obstack);
2861 /* Find a representation of a given base type and install
2862 it in the TYPE field of the die. */
2865 read_base_type (die, objfile)
2866 struct die_info *die;
2867 struct objfile *objfile;
2870 struct attribute *attr;
2871 int encoding = 0, size = 0;
2873 /* If we've already decoded this die, this is a no-op. */
2879 attr = dwarf_attr (die, DW_AT_encoding);
2882 encoding = DW_UNSND (attr);
2884 attr = dwarf_attr (die, DW_AT_byte_size);
2887 size = DW_UNSND (attr);
2889 attr = dwarf_attr (die, DW_AT_name);
2890 if (attr && DW_STRING (attr))
2892 enum type_code code = TYPE_CODE_INT;
2893 int is_unsigned = 0;
2897 case DW_ATE_address:
2898 /* Turn DW_ATE_address into a void * pointer. */
2899 code = TYPE_CODE_PTR;
2902 case DW_ATE_boolean:
2903 code = TYPE_CODE_BOOL;
2906 case DW_ATE_complex_float:
2907 code = TYPE_CODE_COMPLEX;
2910 code = TYPE_CODE_FLT;
2913 case DW_ATE_signed_char:
2915 case DW_ATE_unsigned:
2916 case DW_ATE_unsigned_char:
2920 complain (&dwarf2_unsupported_at_encoding,
2921 dwarf_type_encoding_name (encoding));
2924 type = init_type (code, size, is_unsigned, DW_STRING (attr), objfile);
2925 if (encoding == DW_ATE_address)
2926 TYPE_TARGET_TYPE (type) = dwarf2_fundamental_type (objfile, FT_VOID);
2930 type = dwarf_base_type (encoding, size, objfile);
2935 /* Read a whole compilation unit into a linked list of dies. */
2938 read_comp_unit (info_ptr, abfd)
2942 struct die_info *first_die, *last_die, *die;
2946 /* Reset die reference table, we are building a new one now. */
2947 dwarf2_empty_die_ref_table ();
2951 first_die = last_die = NULL;
2954 cur_ptr = read_full_die (&die, abfd, cur_ptr);
2955 if (die->has_children)
2966 /* Enter die in reference hash table */
2967 store_in_ref_table (die->offset, die);
2971 first_die = last_die = die;
2975 last_die->next = die;
2979 while (nesting_level > 0);
2983 /* Free a linked list of dies. */
2986 free_die_list (dies)
2987 struct die_info *dies;
2989 struct die_info *die, *next;
3001 /* Read the contents of the section at OFFSET and of size SIZE from the
3002 object file specified by OBJFILE into the psymbol_obstack and return it. */
3005 dwarf2_read_section (objfile, offset, size)
3006 struct objfile *objfile;
3010 bfd *abfd = objfile->obfd;
3016 buf = (char *) obstack_alloc (&objfile->psymbol_obstack, size);
3017 if ((bfd_seek (abfd, offset, SEEK_SET) != 0) ||
3018 (bfd_read (buf, size, 1, abfd) != size))
3021 error ("Dwarf Error: Can't read DWARF data from '%s'",
3022 bfd_get_filename (abfd));
3027 /* In DWARF version 2, the description of the debugging information is
3028 stored in a separate .debug_abbrev section. Before we read any
3029 dies from a section we read in all abbreviations and install them
3033 dwarf2_read_abbrevs (abfd, offset)
3035 unsigned int offset;
3038 struct abbrev_info *cur_abbrev;
3039 unsigned int abbrev_number, bytes_read, abbrev_name;
3040 unsigned int abbrev_form, hash_number;
3042 /* empty the table */
3043 dwarf2_empty_abbrev_table (NULL);
3045 abbrev_ptr = dwarf_abbrev_buffer + offset;
3046 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3047 abbrev_ptr += bytes_read;
3049 /* loop until we reach an abbrev number of 0 */
3050 while (abbrev_number)
3052 cur_abbrev = dwarf_alloc_abbrev ();
3054 /* read in abbrev header */
3055 cur_abbrev->number = abbrev_number;
3056 cur_abbrev->tag = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3057 abbrev_ptr += bytes_read;
3058 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
3061 /* now read in declarations */
3062 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3063 abbrev_ptr += bytes_read;
3064 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3065 abbrev_ptr += bytes_read;
3068 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
3070 cur_abbrev->attrs = (struct attr_abbrev *)
3071 xrealloc (cur_abbrev->attrs,
3072 (cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK)
3073 * sizeof (struct attr_abbrev));
3075 cur_abbrev->attrs[cur_abbrev->num_attrs].name = abbrev_name;
3076 cur_abbrev->attrs[cur_abbrev->num_attrs++].form = abbrev_form;
3077 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3078 abbrev_ptr += bytes_read;
3079 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3080 abbrev_ptr += bytes_read;
3083 hash_number = abbrev_number % ABBREV_HASH_SIZE;
3084 cur_abbrev->next = dwarf2_abbrevs[hash_number];
3085 dwarf2_abbrevs[hash_number] = cur_abbrev;
3087 /* Get next abbreviation.
3088 Under Irix6 the abbreviations for a compilation unit are not
3089 always properly terminated with an abbrev number of 0.
3090 Exit loop if we encounter an abbreviation which we have
3091 already read (which means we are about to read the abbreviations
3092 for the next compile unit) or if the end of the abbreviation
3093 table is reached. */
3094 if ((unsigned int) (abbrev_ptr - dwarf_abbrev_buffer)
3095 >= dwarf_abbrev_size)
3097 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
3098 abbrev_ptr += bytes_read;
3099 if (dwarf2_lookup_abbrev (abbrev_number) != NULL)
3104 /* Empty the abbrev table for a new compilation unit. */
3108 dwarf2_empty_abbrev_table (ignore)
3112 struct abbrev_info *abbrev, *next;
3114 for (i = 0; i < ABBREV_HASH_SIZE; ++i)
3117 abbrev = dwarf2_abbrevs[i];
3120 next = abbrev->next;
3121 free (abbrev->attrs);
3125 dwarf2_abbrevs[i] = NULL;
3129 /* Lookup an abbrev_info structure in the abbrev hash table. */
3131 static struct abbrev_info *
3132 dwarf2_lookup_abbrev (number)
3133 unsigned int number;
3135 unsigned int hash_number;
3136 struct abbrev_info *abbrev;
3138 hash_number = number % ABBREV_HASH_SIZE;
3139 abbrev = dwarf2_abbrevs[hash_number];
3143 if (abbrev->number == number)
3146 abbrev = abbrev->next;
3151 /* Read a minimal amount of information into the minimal die structure. */
3154 read_partial_die (part_die, abfd, info_ptr, has_pc_info)
3155 struct partial_die_info *part_die;
3160 unsigned int abbrev_number, bytes_read, i;
3161 struct abbrev_info *abbrev;
3162 struct attribute attr;
3163 struct attribute spec_attr;
3164 int found_spec_attr = 0;
3165 int has_low_pc_attr = 0;
3166 int has_high_pc_attr = 0;
3168 *part_die = zeroed_partial_die;
3170 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3171 info_ptr += bytes_read;
3175 abbrev = dwarf2_lookup_abbrev (abbrev_number);
3178 error ("Dwarf Error: Could not find abbrev number %d.", abbrev_number);
3180 part_die->offset = info_ptr - dwarf_info_buffer;
3181 part_die->tag = abbrev->tag;
3182 part_die->has_children = abbrev->has_children;
3183 part_die->abbrev = abbrev_number;
3185 for (i = 0; i < abbrev->num_attrs; ++i)
3187 info_ptr = read_attribute (&attr, &abbrev->attrs[i], abfd, info_ptr);
3189 /* Store the data if it is of an attribute we want to keep in a
3190 partial symbol table. */
3195 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
3196 if (part_die->name == NULL)
3197 part_die->name = DW_STRING (&attr);
3199 case DW_AT_MIPS_linkage_name:
3200 part_die->name = DW_STRING (&attr);
3203 has_low_pc_attr = 1;
3204 part_die->lowpc = DW_ADDR (&attr);
3207 has_high_pc_attr = 1;
3208 part_die->highpc = DW_ADDR (&attr);
3210 case DW_AT_location:
3211 part_die->locdesc = DW_BLOCK (&attr);
3213 case DW_AT_language:
3214 part_die->language = DW_UNSND (&attr);
3216 case DW_AT_external:
3217 part_die->is_external = DW_UNSND (&attr);
3219 case DW_AT_declaration:
3220 part_die->is_declaration = DW_UNSND (&attr);
3223 part_die->has_type = 1;
3225 case DW_AT_abstract_origin:
3226 case DW_AT_specification:
3227 found_spec_attr = 1;
3231 /* Ignore absolute siblings, they might point outside of
3232 the current compile unit. */
3233 if (attr.form == DW_FORM_ref_addr)
3234 complain(&dwarf2_absolute_sibling_complaint);
3237 dwarf_info_buffer + dwarf2_get_ref_die_offset (&attr);
3244 /* If we found a reference attribute and the die has no name, try
3245 to find a name in the referred to die. */
3247 if (found_spec_attr && part_die->name == NULL)
3249 struct partial_die_info spec_die;
3253 spec_ptr = dwarf_info_buffer + dwarf2_get_ref_die_offset (&spec_attr);
3254 read_partial_die (&spec_die, abfd, spec_ptr, &dummy);
3257 part_die->name = spec_die.name;
3259 /* Copy DW_AT_external attribute if it is set. */
3260 if (spec_die.is_external)
3261 part_die->is_external = spec_die.is_external;
3265 /* When using the GNU linker, .gnu.linkonce. sections are used to
3266 eliminate duplicate copies of functions and vtables and such.
3267 The linker will arbitrarily choose one and discard the others.
3268 The AT_*_pc values for such functions refer to local labels in
3269 these sections. If the section from that file was discarded, the
3270 labels are not in the output, so the relocs get a value of 0.
3271 If this is a discarded function, mark the pc bounds as invalid,
3272 so that GDB will ignore it. */
3273 if (has_low_pc_attr && has_high_pc_attr
3274 && part_die->lowpc < part_die->highpc
3275 && (part_die->lowpc != 0
3276 || (bfd_get_file_flags (abfd) & HAS_RELOC)))
3281 /* Read the die from the .debug_info section buffer. And set diep to
3282 point to a newly allocated die with its information. */
3285 read_full_die (diep, abfd, info_ptr)
3286 struct die_info **diep;
3290 unsigned int abbrev_number, bytes_read, i, offset;
3291 struct abbrev_info *abbrev;
3292 struct die_info *die;
3294 offset = info_ptr - dwarf_info_buffer;
3295 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3296 info_ptr += bytes_read;
3299 die = dwarf_alloc_die ();
3301 die->abbrev = abbrev_number;
3307 abbrev = dwarf2_lookup_abbrev (abbrev_number);
3310 error ("Dwarf Error: could not find abbrev number %d.", abbrev_number);
3312 die = dwarf_alloc_die ();
3313 die->offset = offset;
3314 die->tag = abbrev->tag;
3315 die->has_children = abbrev->has_children;
3316 die->abbrev = abbrev_number;
3319 die->num_attrs = abbrev->num_attrs;
3320 die->attrs = (struct attribute *)
3321 xmalloc (die->num_attrs * sizeof (struct attribute));
3323 for (i = 0; i < abbrev->num_attrs; ++i)
3325 info_ptr = read_attribute (&die->attrs[i], &abbrev->attrs[i],
3333 /* Read an attribute described by an abbreviated attribute. */
3336 read_attribute (attr, abbrev, abfd, info_ptr)
3337 struct attribute *attr;
3338 struct attr_abbrev *abbrev;
3342 unsigned int bytes_read;
3343 struct dwarf_block *blk;
3345 attr->name = abbrev->name;
3346 attr->form = abbrev->form;
3347 switch (abbrev->form)
3350 case DW_FORM_ref_addr:
3351 DW_ADDR (attr) = read_address (abfd, info_ptr);
3352 info_ptr += address_size;
3354 case DW_FORM_block2:
3355 blk = dwarf_alloc_block ();
3356 blk->size = read_2_bytes (abfd, info_ptr);
3358 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3359 info_ptr += blk->size;
3360 DW_BLOCK (attr) = blk;
3362 case DW_FORM_block4:
3363 blk = dwarf_alloc_block ();
3364 blk->size = read_4_bytes (abfd, info_ptr);
3366 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3367 info_ptr += blk->size;
3368 DW_BLOCK (attr) = blk;
3371 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
3375 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
3379 DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
3382 case DW_FORM_string:
3383 DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
3384 info_ptr += bytes_read;
3387 blk = dwarf_alloc_block ();
3388 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3389 info_ptr += bytes_read;
3390 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3391 info_ptr += blk->size;
3392 DW_BLOCK (attr) = blk;
3394 case DW_FORM_block1:
3395 blk = dwarf_alloc_block ();
3396 blk->size = read_1_byte (abfd, info_ptr);
3398 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
3399 info_ptr += blk->size;
3400 DW_BLOCK (attr) = blk;
3403 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3407 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3411 DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
3412 info_ptr += bytes_read;
3415 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3416 info_ptr += bytes_read;
3419 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
3423 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
3427 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
3430 case DW_FORM_ref_udata:
3431 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
3432 info_ptr += bytes_read;
3435 case DW_FORM_indirect:
3437 error ("Dwarf Error: Cannot handle %s in DWARF reader.",
3438 dwarf_form_name (abbrev->form));
3443 /* read dwarf information from a buffer */
3446 read_1_byte (abfd, buf)
3450 return bfd_get_8 (abfd, (bfd_byte *) buf);
3454 read_1_signed_byte (abfd, buf)
3458 return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
3462 read_2_bytes (abfd, buf)
3466 return bfd_get_16 (abfd, (bfd_byte *) buf);
3470 read_2_signed_bytes (abfd, buf)
3474 return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
3478 read_4_bytes (abfd, buf)
3482 return bfd_get_32 (abfd, (bfd_byte *) buf);
3486 read_4_signed_bytes (abfd, buf)
3490 return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
3494 read_8_bytes (abfd, buf)
3498 return bfd_get_64 (abfd, (bfd_byte *) buf);
3502 read_address (abfd, buf)
3506 CORE_ADDR retval = 0;
3508 if (address_size == 4)
3510 retval = bfd_get_32 (abfd, (bfd_byte *) buf);
3511 } else { /* *THE* alternative is 8, right? */
3512 retval = bfd_get_64 (abfd, (bfd_byte *) buf);
3518 read_n_bytes (abfd, buf, size)
3523 /* If the size of a host char is 8 bits, we can return a pointer
3524 to the buffer, otherwise we have to copy the data to a buffer
3525 allocated on the temporary obstack. */
3526 #if HOST_CHAR_BIT == 8
3532 ret = obstack_alloc (&dwarf2_tmp_obstack, size);
3533 for (i = 0; i < size; ++i)
3535 ret[i] = bfd_get_8 (abfd, (bfd_byte *) buf);
3543 read_string (abfd, buf, bytes_read_ptr)
3546 unsigned int *bytes_read_ptr;
3548 /* If the size of a host char is 8 bits, we can return a pointer
3549 to the string, otherwise we have to copy the string to a buffer
3550 allocated on the temporary obstack. */
3551 #if HOST_CHAR_BIT == 8
3554 *bytes_read_ptr = 1;
3557 *bytes_read_ptr = strlen (buf) + 1;
3563 while ((byte = bfd_get_8 (abfd, (bfd_byte *) buf)) != 0)
3565 obstack_1grow (&dwarf2_tmp_obstack, byte);
3571 *bytes_read_ptr = 1;
3574 obstack_1grow (&dwarf2_tmp_obstack, '\0');
3575 *bytes_read_ptr = i + 1;
3576 return obstack_finish (&dwarf2_tmp_obstack);
3581 read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
3584 unsigned int *bytes_read_ptr;
3586 unsigned int result, num_read;
3596 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
3599 result |= ((byte & 127) << shift);
3600 if ((byte & 128) == 0)
3606 *bytes_read_ptr = num_read;
3611 read_signed_leb128 (abfd, buf, bytes_read_ptr)
3614 unsigned int *bytes_read_ptr;
3617 int i, shift, size, num_read;
3627 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
3630 result |= ((byte & 127) << shift);
3632 if ((byte & 128) == 0)
3637 if ((shift < size) && (byte & 0x40))
3639 result |= -(1 << shift);
3641 *bytes_read_ptr = num_read;
3646 set_cu_language (lang)
3653 case DW_LANG_Fortran77:
3654 cu_language = language_c;
3656 case DW_LANG_C_plus_plus:
3657 cu_language = language_cplus;
3659 case DW_LANG_Mips_Assembler:
3660 cu_language = language_asm;
3663 case DW_LANG_Cobol74:
3664 case DW_LANG_Cobol85:
3666 case DW_LANG_Fortran77: /* moved up top for now */
3668 case DW_LANG_Fortran90:
3669 case DW_LANG_Pascal83:
3670 case DW_LANG_Modula2:
3672 cu_language = language_unknown;
3675 cu_language_defn = language_def (cu_language);
3678 /* Return the named attribute or NULL if not there. */
3680 static struct attribute *
3681 dwarf_attr (die, name)
3682 struct die_info *die;
3686 struct attribute *spec = NULL;
3688 for (i = 0; i < die->num_attrs; ++i)
3690 if (die->attrs[i].name == name)
3692 return &die->attrs[i];
3694 if (die->attrs[i].name == DW_AT_specification
3695 || die->attrs[i].name == DW_AT_abstract_origin)
3696 spec = &die->attrs[i];
3700 struct die_info *ref_die =
3701 follow_die_ref (dwarf2_get_ref_die_offset (spec));
3704 return dwarf_attr (ref_die, name);
3710 /* Decode the line number information for the compilation unit whose
3711 line number info is at OFFSET in the .debug_line section.
3712 The compilation directory of the file is passed in COMP_DIR. */
3716 unsigned int num_files;
3729 unsigned int num_dirs;
3734 dwarf_decode_lines (offset, comp_dir, abfd)
3735 unsigned int offset;
3741 struct line_head lh;
3742 struct cleanup *back_to;
3743 unsigned int i, bytes_read;
3744 char *cur_file, *cur_dir;
3745 unsigned char op_code, extended_op, adj_opcode;
3747 #define FILE_ALLOC_CHUNK 5
3748 #define DIR_ALLOC_CHUNK 5
3750 struct filenames files;
3751 struct directories dirs;
3753 if (dwarf_line_buffer == NULL)
3755 complain (&dwarf2_missing_line_number_section);
3759 files.num_files = 0;
3765 line_ptr = dwarf_line_buffer + offset;
3767 /* read in the prologue */
3768 lh.total_length = read_4_bytes (abfd, line_ptr);
3770 line_end = line_ptr + lh.total_length;
3771 lh.version = read_2_bytes (abfd, line_ptr);
3773 lh.prologue_length = read_4_bytes (abfd, line_ptr);
3775 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
3777 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
3779 lh.line_base = read_1_signed_byte (abfd, line_ptr);
3781 lh.line_range = read_1_byte (abfd, line_ptr);
3783 lh.opcode_base = read_1_byte (abfd, line_ptr);
3785 lh.standard_opcode_lengths = (unsigned char *)
3786 xmalloc (lh.opcode_base * sizeof (unsigned char));
3787 back_to = make_cleanup (free_current_contents, &lh.standard_opcode_lengths);
3789 lh.standard_opcode_lengths[0] = 1;
3790 for (i = 1; i < lh.opcode_base; ++i)
3792 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
3796 /* Read directory table */
3797 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
3799 line_ptr += bytes_read;
3800 if ((dirs.num_dirs % DIR_ALLOC_CHUNK) == 0)
3802 dirs.dirs = (char **)
3803 xrealloc (dirs.dirs,
3804 (dirs.num_dirs + DIR_ALLOC_CHUNK) * sizeof (char *));
3805 if (dirs.num_dirs == 0)
3806 make_cleanup (free_current_contents, &dirs.dirs);
3808 dirs.dirs[dirs.num_dirs++] = cur_dir;
3810 line_ptr += bytes_read;
3812 /* Read file name table */
3813 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
3815 line_ptr += bytes_read;
3816 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
3818 files.files = (struct fileinfo *)
3819 xrealloc (files.files,
3820 (files.num_files + FILE_ALLOC_CHUNK)
3821 * sizeof (struct fileinfo));
3822 if (files.num_files == 0)
3823 make_cleanup (free_current_contents, &files.files);
3825 files.files[files.num_files].name = cur_file;
3826 files.files[files.num_files].dir =
3827 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3828 line_ptr += bytes_read;
3829 files.files[files.num_files].time =
3830 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3831 line_ptr += bytes_read;
3832 files.files[files.num_files].size =
3833 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3834 line_ptr += bytes_read;
3837 line_ptr += bytes_read;
3839 /* Read the statement sequences until there's nothing left. */
3840 while (line_ptr < line_end)
3842 /* state machine registers */
3843 unsigned int address = 0;
3844 unsigned int file = 1;
3845 unsigned int line = 1;
3846 unsigned int column = 0;
3847 int is_stmt = lh.default_is_stmt;
3848 int basic_block = 0;
3849 int end_sequence = 0;
3851 /* Start a subfile for the current file of the state machine. */
3852 if (files.num_files >= file)
3854 /* The file and directory tables are 0 based, the references
3856 dwarf2_start_subfile (files.files[file - 1].name,
3857 (files.files[file - 1].dir
3858 ? dirs.dirs[files.files[file - 1].dir - 1]
3862 /* Decode the table. */
3863 while (! end_sequence)
3865 op_code = read_1_byte (abfd, line_ptr);
3869 case DW_LNS_extended_op:
3870 line_ptr += 1; /* ignore length */
3871 extended_op = read_1_byte (abfd, line_ptr);
3873 switch (extended_op)
3875 case DW_LNE_end_sequence:
3877 record_line (current_subfile, line, address);
3879 case DW_LNE_set_address:
3880 address = read_address (abfd, line_ptr) + baseaddr;
3881 line_ptr += address_size;
3883 case DW_LNE_define_file:
3884 cur_file = read_string (abfd, line_ptr, &bytes_read);
3885 line_ptr += bytes_read;
3886 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
3888 files.files = (struct fileinfo *)
3889 xrealloc (files.files,
3890 (files.num_files + FILE_ALLOC_CHUNK)
3891 * sizeof (struct fileinfo));
3892 if (files.num_files == 0)
3893 make_cleanup (free_current_contents, &files.files);
3895 files.files[files.num_files].name = cur_file;
3896 files.files[files.num_files].dir =
3897 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3898 line_ptr += bytes_read;
3899 files.files[files.num_files].time =
3900 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3901 line_ptr += bytes_read;
3902 files.files[files.num_files].size =
3903 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3904 line_ptr += bytes_read;
3908 complain (&dwarf2_mangled_line_number_section);
3913 record_line (current_subfile, line, address);
3916 case DW_LNS_advance_pc:
3917 address += lh.minimum_instruction_length
3918 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3919 line_ptr += bytes_read;
3921 case DW_LNS_advance_line:
3922 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
3923 line_ptr += bytes_read;
3925 case DW_LNS_set_file:
3926 /* The file and directory tables are 0 based, the references
3928 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3929 line_ptr += bytes_read;
3930 dwarf2_start_subfile
3931 (files.files[file - 1].name,
3932 (files.files[file - 1].dir
3933 ? dirs.dirs[files.files[file - 1].dir - 1]
3936 case DW_LNS_set_column:
3937 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
3938 line_ptr += bytes_read;
3940 case DW_LNS_negate_stmt:
3941 is_stmt = (!is_stmt);
3943 case DW_LNS_set_basic_block:
3946 case DW_LNS_const_add_pc:
3947 address += (255 - lh.opcode_base) / lh.line_range;
3949 case DW_LNS_fixed_advance_pc:
3950 address += read_2_bytes (abfd, line_ptr);
3953 default: /* special operand */
3954 adj_opcode = op_code - lh.opcode_base;
3955 address += (adj_opcode / lh.line_range)
3956 * lh.minimum_instruction_length;
3957 line += lh.line_base + (adj_opcode % lh.line_range);
3958 /* append row to matrix using current values */
3959 record_line (current_subfile, line, address);
3965 do_cleanups (back_to);
3968 /* Start a subfile for DWARF. FILENAME is the name of the file and
3969 DIRNAME the name of the source directory which contains FILENAME
3970 or NULL if not known.
3971 This routine tries to keep line numbers from identical absolute and
3972 relative file names in a common subfile.
3974 Using the `list' example from the GDB testsuite, which resides in
3975 /srcdir and compiling it with Irix6.2 cc in /compdir using a filename
3976 of /srcdir/list0.c yields the following debugging information for list0.c:
3978 DW_AT_name: /srcdir/list0.c
3979 DW_AT_comp_dir: /compdir
3980 files.files[0].name: list0.h
3981 files.files[0].dir: /srcdir
3982 files.files[1].name: list0.c
3983 files.files[1].dir: /srcdir
3985 The line number information for list0.c has to end up in a single
3986 subfile, so that `break /srcdir/list0.c:1' works as expected. */
3989 dwarf2_start_subfile (filename, dirname)
3993 /* If the filename isn't absolute, try to match an existing subfile
3994 with the full pathname. */
3996 if (*filename != '/' && dirname != NULL)
3998 struct subfile *subfile;
3999 char *fullname = concat (dirname, "/", filename, NULL);
4001 for (subfile = subfiles; subfile; subfile = subfile->next)
4003 if (STREQ (subfile->name, fullname))
4005 current_subfile = subfile;
4012 start_subfile (filename, dirname);
4015 /* Given a pointer to a DWARF information entry, figure out if we need
4016 to make a symbol table entry for it, and if so, create a new entry
4017 and return a pointer to it.
4018 If TYPE is NULL, determine symbol type from the die, otherwise
4019 used the passed type.
4022 static struct symbol *
4023 new_symbol (die, type, objfile)
4024 struct die_info *die;
4026 struct objfile *objfile;
4028 struct symbol *sym = NULL;
4030 struct attribute *attr = NULL;
4031 struct attribute *attr2 = NULL;
4034 name = dwarf2_linkage_name (die);
4037 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
4038 sizeof (struct symbol));
4039 OBJSTAT (objfile, n_syms++);
4040 memset (sym, 0, sizeof (struct symbol));
4041 SYMBOL_NAME (sym) = obsavestring (name, strlen (name),
4042 &objfile->symbol_obstack);
4044 /* Default assumptions.
4045 Use the passed type or decode it from the die. */
4046 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4047 SYMBOL_CLASS (sym) = LOC_STATIC;
4049 SYMBOL_TYPE (sym) = type;
4051 SYMBOL_TYPE (sym) = die_type (die, objfile);
4052 attr = dwarf_attr (die, DW_AT_decl_line);
4055 SYMBOL_LINE (sym) = DW_UNSND (attr);
4058 /* If this symbol is from a C++ compilation, then attempt to
4059 cache the demangled form for future reference. This is a
4060 typical time versus space tradeoff, that was decided in favor
4061 of time because it sped up C++ symbol lookups by a factor of
4064 SYMBOL_LANGUAGE (sym) = cu_language;
4065 SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
4069 attr = dwarf_attr (die, DW_AT_low_pc);
4072 SYMBOL_VALUE_ADDRESS (sym) = DW_ADDR (attr) + baseaddr;
4074 SYMBOL_CLASS (sym) = LOC_LABEL;
4076 case DW_TAG_subprogram:
4077 /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
4079 SYMBOL_CLASS (sym) = LOC_BLOCK;
4080 attr2 = dwarf_attr (die, DW_AT_external);
4081 if (attr2 && (DW_UNSND (attr2) != 0))
4083 add_symbol_to_list (sym, &global_symbols);
4087 add_symbol_to_list (sym, list_in_scope);
4090 case DW_TAG_variable:
4091 /* Compilation with minimal debug info may result in variables
4092 with missing type entries. Change the misleading `void' type
4093 to something sensible. */
4094 if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_VOID)
4095 SYMBOL_TYPE (sym) = init_type (TYPE_CODE_INT,
4096 TARGET_INT_BIT / HOST_CHAR_BIT, 0,
4097 "<variable, no debug info>",
4099 attr = dwarf_attr (die, DW_AT_const_value);
4102 dwarf2_const_value (attr, sym, objfile);
4103 attr2 = dwarf_attr (die, DW_AT_external);
4104 if (attr2 && (DW_UNSND (attr2) != 0))
4105 add_symbol_to_list (sym, &global_symbols);
4107 add_symbol_to_list (sym, list_in_scope);
4110 attr = dwarf_attr (die, DW_AT_location);
4113 attr2 = dwarf_attr (die, DW_AT_external);
4114 if (attr2 && (DW_UNSND (attr2) != 0))
4116 SYMBOL_VALUE_ADDRESS (sym) =
4117 decode_locdesc (DW_BLOCK (attr), objfile);
4118 add_symbol_to_list (sym, &global_symbols);
4120 /* In shared libraries the address of the variable
4121 in the location descriptor might still be relocatable,
4122 so its value could be zero.
4123 Enter the symbol as a LOC_UNRESOLVED symbol, if its
4124 value is zero, the address of the variable will then
4125 be determined from the minimal symbol table whenever
4126 the variable is referenced. */
4127 if (SYMBOL_VALUE_ADDRESS (sym))
4129 SYMBOL_VALUE_ADDRESS (sym) += baseaddr;
4130 SYMBOL_CLASS (sym) = LOC_STATIC;
4133 SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
4137 SYMBOL_VALUE (sym) = addr =
4138 decode_locdesc (DW_BLOCK (attr), objfile);
4139 add_symbol_to_list (sym, list_in_scope);
4142 SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
4146 SYMBOL_CLASS (sym) = LOC_REGISTER;
4150 SYMBOL_CLASS (sym) = LOC_BASEREG;
4151 SYMBOL_BASEREG (sym) = basereg;
4155 SYMBOL_CLASS (sym) = LOC_LOCAL;
4159 SYMBOL_CLASS (sym) = LOC_STATIC;
4160 SYMBOL_VALUE_ADDRESS (sym) = addr + baseaddr;
4166 /* We do not know the address of this symbol.
4167 If it is an external symbol and we have type information
4168 for it, enter the symbol as a LOC_UNRESOLVED symbol.
4169 The address of the variable will then be determined from
4170 the minimal symbol table whenever the variable is
4172 attr2 = dwarf_attr (die, DW_AT_external);
4173 if (attr2 && (DW_UNSND (attr2) != 0)
4174 && dwarf_attr (die, DW_AT_type) != NULL)
4176 SYMBOL_CLASS (sym) = LOC_UNRESOLVED;
4177 add_symbol_to_list (sym, &global_symbols);
4181 case DW_TAG_formal_parameter:
4182 attr = dwarf_attr (die, DW_AT_location);
4185 SYMBOL_VALUE (sym) = decode_locdesc (DW_BLOCK (attr), objfile);
4188 SYMBOL_CLASS (sym) = LOC_REGPARM;
4192 SYMBOL_CLASS (sym) = LOC_BASEREG_ARG;
4193 SYMBOL_BASEREG (sym) = basereg;
4197 SYMBOL_CLASS (sym) = LOC_ARG;
4200 attr = dwarf_attr (die, DW_AT_const_value);
4203 dwarf2_const_value (attr, sym, objfile);
4205 add_symbol_to_list (sym, list_in_scope);
4207 case DW_TAG_unspecified_parameters:
4208 /* From varargs functions; gdb doesn't seem to have any
4209 interest in this information, so just ignore it for now.
4212 case DW_TAG_class_type:
4213 case DW_TAG_structure_type:
4214 case DW_TAG_union_type:
4215 case DW_TAG_enumeration_type:
4216 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
4217 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
4218 add_symbol_to_list (sym, list_in_scope);
4220 /* The semantics of C++ state that "struct foo { ... }" also
4221 defines a typedef for "foo". Synthesize a typedef symbol so
4222 that "ptype foo" works as expected. */
4223 if (cu_language == language_cplus)
4225 struct symbol *typedef_sym = (struct symbol *)
4226 obstack_alloc (&objfile->symbol_obstack,
4227 sizeof (struct symbol));
4228 *typedef_sym = *sym;
4229 SYMBOL_NAMESPACE (typedef_sym) = VAR_NAMESPACE;
4230 if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
4231 TYPE_NAME (SYMBOL_TYPE (sym)) =
4232 obsavestring (SYMBOL_NAME (sym),
4233 strlen (SYMBOL_NAME (sym)),
4234 &objfile->type_obstack);
4235 add_symbol_to_list (typedef_sym, list_in_scope);
4238 case DW_TAG_typedef:
4239 case DW_TAG_base_type:
4240 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
4241 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
4242 add_symbol_to_list (sym, list_in_scope);
4244 case DW_TAG_enumerator:
4245 attr = dwarf_attr (die, DW_AT_const_value);
4248 dwarf2_const_value (attr, sym, objfile);
4250 add_symbol_to_list (sym, list_in_scope);
4253 /* Not a tag we recognize. Hopefully we aren't processing
4254 trash data, but since we must specifically ignore things
4255 we don't recognize, there is nothing else we should do at
4257 complain (&dwarf2_unsupported_tag, dwarf_tag_name (die->tag));
4264 /* Copy constant value from an attribute to a symbol. */
4267 dwarf2_const_value (attr, sym, objfile)
4268 struct attribute *attr;
4270 struct objfile *objfile;
4272 struct dwarf_block *blk;
4277 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != (unsigned int) address_size)
4278 complain (&dwarf2_const_value_length_mismatch, SYMBOL_NAME (sym),
4279 address_size, TYPE_LENGTH (SYMBOL_TYPE (sym)));
4280 SYMBOL_VALUE_BYTES (sym) = (char *)
4281 obstack_alloc (&objfile->symbol_obstack, address_size);
4282 store_address (SYMBOL_VALUE_BYTES (sym), address_size, DW_ADDR (attr));
4283 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
4285 case DW_FORM_block1:
4286 case DW_FORM_block2:
4287 case DW_FORM_block4:
4289 blk = DW_BLOCK (attr);
4290 if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != blk->size)
4291 complain (&dwarf2_const_value_length_mismatch, SYMBOL_NAME (sym),
4292 blk->size, TYPE_LENGTH (SYMBOL_TYPE (sym)));
4293 SYMBOL_VALUE_BYTES (sym) = (char *)
4294 obstack_alloc (&objfile->symbol_obstack, blk->size);
4295 memcpy (SYMBOL_VALUE_BYTES (sym), blk->data, blk->size);
4296 SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
4304 SYMBOL_VALUE (sym) = DW_UNSND (attr);
4305 SYMBOL_CLASS (sym) = LOC_CONST;
4308 complain (&dwarf2_unsupported_const_value_attr,
4309 dwarf_form_name (attr->form));
4310 SYMBOL_VALUE (sym) = 0;
4311 SYMBOL_CLASS (sym) = LOC_CONST;
4316 /* Return the type of the die in question using its DW_AT_type attribute. */
4318 static struct type *
4319 die_type (die, objfile)
4320 struct die_info *die;
4321 struct objfile *objfile;
4324 struct attribute *type_attr;
4325 struct die_info *type_die;
4328 type_attr = dwarf_attr (die, DW_AT_type);
4331 /* A missing DW_AT_type represents a void type. */
4332 return dwarf2_fundamental_type (objfile, FT_VOID);
4336 ref = dwarf2_get_ref_die_offset (type_attr);
4337 type_die = follow_die_ref (ref);
4340 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
4344 type = tag_type_to_type (type_die, objfile);
4347 dump_die (type_die);
4348 error ("Dwarf Error: Problem turning type die at offset into gdb type.");
4353 /* Return the containing type of the die in question using its
4354 DW_AT_containing_type attribute. */
4356 static struct type *
4357 die_containing_type (die, objfile)
4358 struct die_info *die;
4359 struct objfile *objfile;
4361 struct type *type = NULL;
4362 struct attribute *type_attr;
4363 struct die_info *type_die = NULL;
4366 type_attr = dwarf_attr (die, DW_AT_containing_type);
4369 ref = dwarf2_get_ref_die_offset (type_attr);
4370 type_die = follow_die_ref (ref);
4373 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
4376 type = tag_type_to_type (type_die, objfile);
4381 dump_die (type_die);
4382 error ("Dwarf Error: Problem turning containing type into gdb type.");
4388 static struct type *
4389 type_at_offset (offset, objfile)
4390 unsigned int offset;
4391 struct objfile *objfile;
4393 struct die_info *die;
4396 die = follow_die_ref (offset);
4399 error ("Dwarf Error: Cannot find type referent at offset %d.", offset);
4402 type = tag_type_to_type (die, objfile);
4407 static struct type *
4408 tag_type_to_type (die, objfile)
4409 struct die_info *die;
4410 struct objfile *objfile;
4418 read_type_die (die, objfile);
4422 error ("Dwarf Error: Cannot find type of die.");
4429 read_type_die (die, objfile)
4430 struct die_info *die;
4431 struct objfile *objfile;
4435 case DW_TAG_class_type:
4436 case DW_TAG_structure_type:
4437 case DW_TAG_union_type:
4438 read_structure_scope (die, objfile);
4440 case DW_TAG_enumeration_type:
4441 read_enumeration (die, objfile);
4443 case DW_TAG_subprogram:
4444 case DW_TAG_subroutine_type:
4445 read_subroutine_type (die, objfile);
4447 case DW_TAG_array_type:
4448 read_array_type (die, objfile);
4450 case DW_TAG_pointer_type:
4451 read_tag_pointer_type (die, objfile);
4453 case DW_TAG_ptr_to_member_type:
4454 read_tag_ptr_to_member_type (die, objfile);
4456 case DW_TAG_reference_type:
4457 read_tag_reference_type (die, objfile);
4459 case DW_TAG_const_type:
4460 read_tag_const_type (die, objfile);
4462 case DW_TAG_volatile_type:
4463 read_tag_volatile_type (die, objfile);
4465 case DW_TAG_string_type:
4466 read_tag_string_type (die, objfile);
4468 case DW_TAG_typedef:
4469 read_typedef (die, objfile);
4471 case DW_TAG_base_type:
4472 read_base_type (die, objfile);
4475 complain (&dwarf2_unexpected_tag, dwarf_tag_name (die->tag));
4480 static struct type *
4481 dwarf_base_type (encoding, size, objfile)
4484 struct objfile *objfile;
4486 /* FIXME - this should not produce a new (struct type *)
4487 every time. It should cache base types. */
4491 case DW_ATE_address:
4492 type = dwarf2_fundamental_type (objfile, FT_VOID);
4494 case DW_ATE_boolean:
4495 type = dwarf2_fundamental_type (objfile, FT_BOOLEAN);
4497 case DW_ATE_complex_float:
4500 type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_COMPLEX);
4504 type = dwarf2_fundamental_type (objfile, FT_COMPLEX);
4510 type = dwarf2_fundamental_type (objfile, FT_DBL_PREC_FLOAT);
4514 type = dwarf2_fundamental_type (objfile, FT_FLOAT);
4521 type = dwarf2_fundamental_type (objfile, FT_SIGNED_CHAR);
4524 type = dwarf2_fundamental_type (objfile, FT_SIGNED_SHORT);
4528 type = dwarf2_fundamental_type (objfile, FT_SIGNED_INTEGER);
4532 case DW_ATE_signed_char:
4533 type = dwarf2_fundamental_type (objfile, FT_SIGNED_CHAR);
4535 case DW_ATE_unsigned:
4539 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_CHAR);
4542 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_SHORT);
4546 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_INTEGER);
4550 case DW_ATE_unsigned_char:
4551 type = dwarf2_fundamental_type (objfile, FT_UNSIGNED_CHAR);
4554 type = dwarf2_fundamental_type (objfile, FT_SIGNED_INTEGER);
4562 struct die_info *old_die;
4564 struct die_info *new_die;
4567 new_die = (struct die_info *) xmalloc (sizeof (struct die_info));
4568 memset (new_die, 0, sizeof (struct die_info));
4570 new_die->tag = old_die->tag;
4571 new_die->has_children = old_die->has_children;
4572 new_die->abbrev = old_die->abbrev;
4573 new_die->offset = old_die->offset;
4574 new_die->type = NULL;
4576 num_attrs = old_die->num_attrs;
4577 new_die->num_attrs = num_attrs;
4578 new_die->attrs = (struct attribute *)
4579 xmalloc (num_attrs * sizeof (struct attribute));
4581 for (i = 0; i < old_die->num_attrs; ++i)
4583 new_die->attrs[i].name = old_die->attrs[i].name;
4584 new_die->attrs[i].form = old_die->attrs[i].form;
4585 new_die->attrs[i].u.addr = old_die->attrs[i].u.addr;
4588 new_die->next = NULL;
4593 /* Return sibling of die, NULL if no sibling. */
4597 struct die_info *die;
4599 int nesting_level = 0;
4601 if (!die->has_children)
4603 if (die->next && (die->next->tag == 0))
4616 if (die->has_children)
4626 while (nesting_level);
4627 if (die && (die->tag == 0))
4638 /* Get linkage name of a die, return NULL if not found. */
4641 dwarf2_linkage_name (die)
4642 struct die_info *die;
4644 struct attribute *attr;
4646 attr = dwarf_attr (die, DW_AT_MIPS_linkage_name);
4647 if (attr && DW_STRING (attr))
4648 return DW_STRING (attr);
4649 attr = dwarf_attr (die, DW_AT_name);
4650 if (attr && DW_STRING (attr))
4651 return DW_STRING (attr);
4655 /* Convert a DIE tag into its string name. */
4658 dwarf_tag_name (tag)
4659 register unsigned tag;
4663 case DW_TAG_padding:
4664 return "DW_TAG_padding";
4665 case DW_TAG_array_type:
4666 return "DW_TAG_array_type";
4667 case DW_TAG_class_type:
4668 return "DW_TAG_class_type";
4669 case DW_TAG_entry_point:
4670 return "DW_TAG_entry_point";
4671 case DW_TAG_enumeration_type:
4672 return "DW_TAG_enumeration_type";
4673 case DW_TAG_formal_parameter:
4674 return "DW_TAG_formal_parameter";
4675 case DW_TAG_imported_declaration:
4676 return "DW_TAG_imported_declaration";
4678 return "DW_TAG_label";
4679 case DW_TAG_lexical_block:
4680 return "DW_TAG_lexical_block";
4682 return "DW_TAG_member";
4683 case DW_TAG_pointer_type:
4684 return "DW_TAG_pointer_type";
4685 case DW_TAG_reference_type:
4686 return "DW_TAG_reference_type";
4687 case DW_TAG_compile_unit:
4688 return "DW_TAG_compile_unit";
4689 case DW_TAG_string_type:
4690 return "DW_TAG_string_type";
4691 case DW_TAG_structure_type:
4692 return "DW_TAG_structure_type";
4693 case DW_TAG_subroutine_type:
4694 return "DW_TAG_subroutine_type";
4695 case DW_TAG_typedef:
4696 return "DW_TAG_typedef";
4697 case DW_TAG_union_type:
4698 return "DW_TAG_union_type";
4699 case DW_TAG_unspecified_parameters:
4700 return "DW_TAG_unspecified_parameters";
4701 case DW_TAG_variant:
4702 return "DW_TAG_variant";
4703 case DW_TAG_common_block:
4704 return "DW_TAG_common_block";
4705 case DW_TAG_common_inclusion:
4706 return "DW_TAG_common_inclusion";
4707 case DW_TAG_inheritance:
4708 return "DW_TAG_inheritance";
4709 case DW_TAG_inlined_subroutine:
4710 return "DW_TAG_inlined_subroutine";
4712 return "DW_TAG_module";
4713 case DW_TAG_ptr_to_member_type:
4714 return "DW_TAG_ptr_to_member_type";
4715 case DW_TAG_set_type:
4716 return "DW_TAG_set_type";
4717 case DW_TAG_subrange_type:
4718 return "DW_TAG_subrange_type";
4719 case DW_TAG_with_stmt:
4720 return "DW_TAG_with_stmt";
4721 case DW_TAG_access_declaration:
4722 return "DW_TAG_access_declaration";
4723 case DW_TAG_base_type:
4724 return "DW_TAG_base_type";
4725 case DW_TAG_catch_block:
4726 return "DW_TAG_catch_block";
4727 case DW_TAG_const_type:
4728 return "DW_TAG_const_type";
4729 case DW_TAG_constant:
4730 return "DW_TAG_constant";
4731 case DW_TAG_enumerator:
4732 return "DW_TAG_enumerator";
4733 case DW_TAG_file_type:
4734 return "DW_TAG_file_type";
4736 return "DW_TAG_friend";
4737 case DW_TAG_namelist:
4738 return "DW_TAG_namelist";
4739 case DW_TAG_namelist_item:
4740 return "DW_TAG_namelist_item";
4741 case DW_TAG_packed_type:
4742 return "DW_TAG_packed_type";
4743 case DW_TAG_subprogram:
4744 return "DW_TAG_subprogram";
4745 case DW_TAG_template_type_param:
4746 return "DW_TAG_template_type_param";
4747 case DW_TAG_template_value_param:
4748 return "DW_TAG_template_value_param";
4749 case DW_TAG_thrown_type:
4750 return "DW_TAG_thrown_type";
4751 case DW_TAG_try_block:
4752 return "DW_TAG_try_block";
4753 case DW_TAG_variant_part:
4754 return "DW_TAG_variant_part";
4755 case DW_TAG_variable:
4756 return "DW_TAG_variable";
4757 case DW_TAG_volatile_type:
4758 return "DW_TAG_volatile_type";
4759 case DW_TAG_MIPS_loop:
4760 return "DW_TAG_MIPS_loop";
4761 case DW_TAG_format_label:
4762 return "DW_TAG_format_label";
4763 case DW_TAG_function_template:
4764 return "DW_TAG_function_template";
4765 case DW_TAG_class_template:
4766 return "DW_TAG_class_template";
4768 return "DW_TAG_<unknown>";
4772 /* Convert a DWARF attribute code into its string name. */
4775 dwarf_attr_name (attr)
4776 register unsigned attr;
4781 return "DW_AT_sibling";
4782 case DW_AT_location:
4783 return "DW_AT_location";
4785 return "DW_AT_name";
4786 case DW_AT_ordering:
4787 return "DW_AT_ordering";
4788 case DW_AT_subscr_data:
4789 return "DW_AT_subscr_data";
4790 case DW_AT_byte_size:
4791 return "DW_AT_byte_size";
4792 case DW_AT_bit_offset:
4793 return "DW_AT_bit_offset";
4794 case DW_AT_bit_size:
4795 return "DW_AT_bit_size";
4796 case DW_AT_element_list:
4797 return "DW_AT_element_list";
4798 case DW_AT_stmt_list:
4799 return "DW_AT_stmt_list";
4801 return "DW_AT_low_pc";
4803 return "DW_AT_high_pc";
4804 case DW_AT_language:
4805 return "DW_AT_language";
4807 return "DW_AT_member";
4809 return "DW_AT_discr";
4810 case DW_AT_discr_value:
4811 return "DW_AT_discr_value";
4812 case DW_AT_visibility:
4813 return "DW_AT_visibility";
4815 return "DW_AT_import";
4816 case DW_AT_string_length:
4817 return "DW_AT_string_length";
4818 case DW_AT_common_reference:
4819 return "DW_AT_common_reference";
4820 case DW_AT_comp_dir:
4821 return "DW_AT_comp_dir";
4822 case DW_AT_const_value:
4823 return "DW_AT_const_value";
4824 case DW_AT_containing_type:
4825 return "DW_AT_containing_type";
4826 case DW_AT_default_value:
4827 return "DW_AT_default_value";
4829 return "DW_AT_inline";
4830 case DW_AT_is_optional:
4831 return "DW_AT_is_optional";
4832 case DW_AT_lower_bound:
4833 return "DW_AT_lower_bound";
4834 case DW_AT_producer:
4835 return "DW_AT_producer";
4836 case DW_AT_prototyped:
4837 return "DW_AT_prototyped";
4838 case DW_AT_return_addr:
4839 return "DW_AT_return_addr";
4840 case DW_AT_start_scope:
4841 return "DW_AT_start_scope";
4842 case DW_AT_stride_size:
4843 return "DW_AT_stride_size";
4844 case DW_AT_upper_bound:
4845 return "DW_AT_upper_bound";
4846 case DW_AT_abstract_origin:
4847 return "DW_AT_abstract_origin";
4848 case DW_AT_accessibility:
4849 return "DW_AT_accessibility";
4850 case DW_AT_address_class:
4851 return "DW_AT_address_class";
4852 case DW_AT_artificial:
4853 return "DW_AT_artificial";
4854 case DW_AT_base_types:
4855 return "DW_AT_base_types";
4856 case DW_AT_calling_convention:
4857 return "DW_AT_calling_convention";
4859 return "DW_AT_count";
4860 case DW_AT_data_member_location:
4861 return "DW_AT_data_member_location";
4862 case DW_AT_decl_column:
4863 return "DW_AT_decl_column";
4864 case DW_AT_decl_file:
4865 return "DW_AT_decl_file";
4866 case DW_AT_decl_line:
4867 return "DW_AT_decl_line";
4868 case DW_AT_declaration:
4869 return "DW_AT_declaration";
4870 case DW_AT_discr_list:
4871 return "DW_AT_discr_list";
4872 case DW_AT_encoding:
4873 return "DW_AT_encoding";
4874 case DW_AT_external:
4875 return "DW_AT_external";
4876 case DW_AT_frame_base:
4877 return "DW_AT_frame_base";
4879 return "DW_AT_friend";
4880 case DW_AT_identifier_case:
4881 return "DW_AT_identifier_case";
4882 case DW_AT_macro_info:
4883 return "DW_AT_macro_info";
4884 case DW_AT_namelist_items:
4885 return "DW_AT_namelist_items";
4886 case DW_AT_priority:
4887 return "DW_AT_priority";
4889 return "DW_AT_segment";
4890 case DW_AT_specification:
4891 return "DW_AT_specification";
4892 case DW_AT_static_link:
4893 return "DW_AT_static_link";
4895 return "DW_AT_type";
4896 case DW_AT_use_location:
4897 return "DW_AT_use_location";
4898 case DW_AT_variable_parameter:
4899 return "DW_AT_variable_parameter";
4900 case DW_AT_virtuality:
4901 return "DW_AT_virtuality";
4902 case DW_AT_vtable_elem_location:
4903 return "DW_AT_vtable_elem_location";
4906 case DW_AT_MIPS_fde:
4907 return "DW_AT_MIPS_fde";
4908 case DW_AT_MIPS_loop_begin:
4909 return "DW_AT_MIPS_loop_begin";
4910 case DW_AT_MIPS_tail_loop_begin:
4911 return "DW_AT_MIPS_tail_loop_begin";
4912 case DW_AT_MIPS_epilog_begin:
4913 return "DW_AT_MIPS_epilog_begin";
4914 case DW_AT_MIPS_loop_unroll_factor:
4915 return "DW_AT_MIPS_loop_unroll_factor";
4916 case DW_AT_MIPS_software_pipeline_depth:
4917 return "DW_AT_MIPS_software_pipeline_depth";
4918 case DW_AT_MIPS_linkage_name:
4919 return "DW_AT_MIPS_linkage_name";
4922 case DW_AT_sf_names:
4923 return "DW_AT_sf_names";
4924 case DW_AT_src_info:
4925 return "DW_AT_src_info";
4926 case DW_AT_mac_info:
4927 return "DW_AT_mac_info";
4928 case DW_AT_src_coords:
4929 return "DW_AT_src_coords";
4930 case DW_AT_body_begin:
4931 return "DW_AT_body_begin";
4932 case DW_AT_body_end:
4933 return "DW_AT_body_end";
4935 return "DW_AT_<unknown>";
4939 /* Convert a DWARF value form code into its string name. */
4942 dwarf_form_name (form)
4943 register unsigned form;
4948 return "DW_FORM_addr";
4949 case DW_FORM_block2:
4950 return "DW_FORM_block2";
4951 case DW_FORM_block4:
4952 return "DW_FORM_block4";
4954 return "DW_FORM_data2";
4956 return "DW_FORM_data4";
4958 return "DW_FORM_data8";
4959 case DW_FORM_string:
4960 return "DW_FORM_string";
4962 return "DW_FORM_block";
4963 case DW_FORM_block1:
4964 return "DW_FORM_block1";
4966 return "DW_FORM_data1";
4968 return "DW_FORM_flag";
4970 return "DW_FORM_sdata";
4972 return "DW_FORM_strp";
4974 return "DW_FORM_udata";
4975 case DW_FORM_ref_addr:
4976 return "DW_FORM_ref_addr";
4978 return "DW_FORM_ref1";
4980 return "DW_FORM_ref2";
4982 return "DW_FORM_ref4";
4984 return "DW_FORM_ref8";
4985 case DW_FORM_ref_udata:
4986 return "DW_FORM_ref_udata";
4987 case DW_FORM_indirect:
4988 return "DW_FORM_indirect";
4990 return "DW_FORM_<unknown>";
4994 /* Convert a DWARF stack opcode into its string name. */
4997 dwarf_stack_op_name (op)
4998 register unsigned op;
5003 return "DW_OP_addr";
5005 return "DW_OP_deref";
5007 return "DW_OP_const1u";
5009 return "DW_OP_const1s";
5011 return "DW_OP_const2u";
5013 return "DW_OP_const2s";
5015 return "DW_OP_const4u";
5017 return "DW_OP_const4s";
5019 return "DW_OP_const8u";
5021 return "DW_OP_const8s";
5023 return "DW_OP_constu";
5025 return "DW_OP_consts";
5029 return "DW_OP_drop";
5031 return "DW_OP_over";
5033 return "DW_OP_pick";
5035 return "DW_OP_swap";
5039 return "DW_OP_xderef";
5047 return "DW_OP_minus";
5059 return "DW_OP_plus";
5060 case DW_OP_plus_uconst:
5061 return "DW_OP_plus_uconst";
5067 return "DW_OP_shra";
5085 return "DW_OP_skip";
5087 return "DW_OP_lit0";
5089 return "DW_OP_lit1";
5091 return "DW_OP_lit2";
5093 return "DW_OP_lit3";
5095 return "DW_OP_lit4";
5097 return "DW_OP_lit5";
5099 return "DW_OP_lit6";
5101 return "DW_OP_lit7";
5103 return "DW_OP_lit8";
5105 return "DW_OP_lit9";
5107 return "DW_OP_lit10";
5109 return "DW_OP_lit11";
5111 return "DW_OP_lit12";
5113 return "DW_OP_lit13";
5115 return "DW_OP_lit14";
5117 return "DW_OP_lit15";
5119 return "DW_OP_lit16";
5121 return "DW_OP_lit17";
5123 return "DW_OP_lit18";
5125 return "DW_OP_lit19";
5127 return "DW_OP_lit20";
5129 return "DW_OP_lit21";
5131 return "DW_OP_lit22";
5133 return "DW_OP_lit23";
5135 return "DW_OP_lit24";
5137 return "DW_OP_lit25";
5139 return "DW_OP_lit26";
5141 return "DW_OP_lit27";
5143 return "DW_OP_lit28";
5145 return "DW_OP_lit29";
5147 return "DW_OP_lit30";
5149 return "DW_OP_lit31";
5151 return "DW_OP_reg0";
5153 return "DW_OP_reg1";
5155 return "DW_OP_reg2";
5157 return "DW_OP_reg3";
5159 return "DW_OP_reg4";
5161 return "DW_OP_reg5";
5163 return "DW_OP_reg6";
5165 return "DW_OP_reg7";
5167 return "DW_OP_reg8";
5169 return "DW_OP_reg9";
5171 return "DW_OP_reg10";
5173 return "DW_OP_reg11";
5175 return "DW_OP_reg12";
5177 return "DW_OP_reg13";
5179 return "DW_OP_reg14";
5181 return "DW_OP_reg15";
5183 return "DW_OP_reg16";
5185 return "DW_OP_reg17";
5187 return "DW_OP_reg18";
5189 return "DW_OP_reg19";
5191 return "DW_OP_reg20";
5193 return "DW_OP_reg21";
5195 return "DW_OP_reg22";
5197 return "DW_OP_reg23";
5199 return "DW_OP_reg24";
5201 return "DW_OP_reg25";
5203 return "DW_OP_reg26";
5205 return "DW_OP_reg27";
5207 return "DW_OP_reg28";
5209 return "DW_OP_reg29";
5211 return "DW_OP_reg30";
5213 return "DW_OP_reg31";
5215 return "DW_OP_breg0";
5217 return "DW_OP_breg1";
5219 return "DW_OP_breg2";
5221 return "DW_OP_breg3";
5223 return "DW_OP_breg4";
5225 return "DW_OP_breg5";
5227 return "DW_OP_breg6";
5229 return "DW_OP_breg7";
5231 return "DW_OP_breg8";
5233 return "DW_OP_breg9";
5235 return "DW_OP_breg10";
5237 return "DW_OP_breg11";
5239 return "DW_OP_breg12";
5241 return "DW_OP_breg13";
5243 return "DW_OP_breg14";
5245 return "DW_OP_breg15";
5247 return "DW_OP_breg16";
5249 return "DW_OP_breg17";
5251 return "DW_OP_breg18";
5253 return "DW_OP_breg19";
5255 return "DW_OP_breg20";
5257 return "DW_OP_breg21";
5259 return "DW_OP_breg22";
5261 return "DW_OP_breg23";
5263 return "DW_OP_breg24";
5265 return "DW_OP_breg25";
5267 return "DW_OP_breg26";
5269 return "DW_OP_breg27";
5271 return "DW_OP_breg28";
5273 return "DW_OP_breg29";
5275 return "DW_OP_breg30";
5277 return "DW_OP_breg31";
5279 return "DW_OP_regx";
5281 return "DW_OP_fbreg";
5283 return "DW_OP_bregx";
5285 return "DW_OP_piece";
5286 case DW_OP_deref_size:
5287 return "DW_OP_deref_size";
5288 case DW_OP_xderef_size:
5289 return "DW_OP_xderef_size";
5293 return "OP_<unknown>";
5298 dwarf_bool_name (bool)
5307 /* Convert a DWARF type code into its string name. */
5310 dwarf_type_encoding_name (enc)
5311 register unsigned enc;
5315 case DW_ATE_address:
5316 return "DW_ATE_address";
5317 case DW_ATE_boolean:
5318 return "DW_ATE_boolean";
5319 case DW_ATE_complex_float:
5320 return "DW_ATE_complex_float";
5322 return "DW_ATE_float";
5324 return "DW_ATE_signed";
5325 case DW_ATE_signed_char:
5326 return "DW_ATE_signed_char";
5327 case DW_ATE_unsigned:
5328 return "DW_ATE_unsigned";
5329 case DW_ATE_unsigned_char:
5330 return "DW_ATE_unsigned_char";
5332 return "DW_ATE_<unknown>";
5336 /* Convert a DWARF call frame info operation to its string name. */
5340 dwarf_cfi_name (cfi_opc)
5341 register unsigned cfi_opc;
5345 case DW_CFA_advance_loc:
5346 return "DW_CFA_advance_loc";
5348 return "DW_CFA_offset";
5349 case DW_CFA_restore:
5350 return "DW_CFA_restore";
5352 return "DW_CFA_nop";
5353 case DW_CFA_set_loc:
5354 return "DW_CFA_set_loc";
5355 case DW_CFA_advance_loc1:
5356 return "DW_CFA_advance_loc1";
5357 case DW_CFA_advance_loc2:
5358 return "DW_CFA_advance_loc2";
5359 case DW_CFA_advance_loc4:
5360 return "DW_CFA_advance_loc4";
5361 case DW_CFA_offset_extended:
5362 return "DW_CFA_offset_extended";
5363 case DW_CFA_restore_extended:
5364 return "DW_CFA_restore_extended";
5365 case DW_CFA_undefined:
5366 return "DW_CFA_undefined";
5367 case DW_CFA_same_value:
5368 return "DW_CFA_same_value";
5369 case DW_CFA_register:
5370 return "DW_CFA_register";
5371 case DW_CFA_remember_state:
5372 return "DW_CFA_remember_state";
5373 case DW_CFA_restore_state:
5374 return "DW_CFA_restore_state";
5375 case DW_CFA_def_cfa:
5376 return "DW_CFA_def_cfa";
5377 case DW_CFA_def_cfa_register:
5378 return "DW_CFA_def_cfa_register";
5379 case DW_CFA_def_cfa_offset:
5380 return "DW_CFA_def_cfa_offset";
5381 /* SGI/MIPS specific */
5382 case DW_CFA_MIPS_advance_loc8:
5383 return "DW_CFA_MIPS_advance_loc8";
5385 return "DW_CFA_<unknown>";
5392 struct die_info *die;
5396 fprintf (stderr, "Die: %s (abbrev = %d, offset = %d)\n",
5397 dwarf_tag_name (die->tag), die->abbrev, die->offset);
5398 fprintf (stderr, "\thas children: %s\n",
5399 dwarf_bool_name (die->has_children));
5401 fprintf (stderr, "\tattributes:\n");
5402 for (i = 0; i < die->num_attrs; ++i)
5404 fprintf (stderr, "\t\t%s (%s) ",
5405 dwarf_attr_name (die->attrs[i].name),
5406 dwarf_form_name (die->attrs[i].form));
5407 switch (die->attrs[i].form)
5409 case DW_FORM_ref_addr:
5411 fprintf (stderr, "address: ");
5412 print_address_numeric (DW_ADDR (&die->attrs[i]), 1, stderr);
5414 case DW_FORM_block2:
5415 case DW_FORM_block4:
5417 case DW_FORM_block1:
5418 fprintf (stderr, "block: size %d", DW_BLOCK (&die->attrs[i])->size);
5428 fprintf (stderr, "constant: %d", DW_UNSND (&die->attrs[i]));
5430 case DW_FORM_string:
5431 fprintf (stderr, "string: \"%s\"",
5432 DW_STRING (&die->attrs[i])
5433 ? DW_STRING (&die->attrs[i]) : "");
5436 if (DW_UNSND (&die->attrs[i]))
5437 fprintf (stderr, "flag: TRUE");
5439 fprintf (stderr, "flag: FALSE");
5441 case DW_FORM_strp: /* we do not support separate string
5443 case DW_FORM_indirect: /* we do not handle indirect yet */
5444 case DW_FORM_data8: /* we do not have 64 bit quantities */
5446 fprintf (stderr, "unsupported attribute form: %d.",
5447 die->attrs[i].form);
5449 fprintf (stderr, "\n");
5455 struct die_info *die;
5465 store_in_ref_table (offset, die)
5466 unsigned int offset;
5467 struct die_info *die;
5470 struct die_info *old;
5472 h = (offset % REF_HASH_SIZE);
5473 old = die_ref_table[h];
5474 die->next_ref = old;
5475 die_ref_table[h] = die;
5480 dwarf2_empty_die_ref_table ()
5482 memset (die_ref_table, 0, sizeof (die_ref_table));
5486 dwarf2_get_ref_die_offset (attr)
5487 struct attribute *attr;
5489 unsigned int result = 0;
5493 case DW_FORM_ref_addr:
5494 result = DW_ADDR (attr);
5499 case DW_FORM_ref_udata:
5500 result = cu_header_offset + DW_UNSND (attr);
5503 complain (&dwarf2_unsupported_die_ref_attr, dwarf_form_name (attr->form));
5509 follow_die_ref (offset)
5510 unsigned int offset;
5512 struct die_info *die;
5515 h = (offset % REF_HASH_SIZE);
5516 die = die_ref_table[h];
5519 if (die->offset == offset)
5523 die = die->next_ref;
5528 static struct type *
5529 dwarf2_fundamental_type (objfile, typeid)
5530 struct objfile *objfile;
5533 if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
5535 error ("Dwarf Error: internal error - invalid fundamental type id %d.",
5539 /* Look for this particular type in the fundamental type vector. If
5540 one is not found, create and install one appropriate for the
5541 current language and the current target machine. */
5543 if (ftypes[typeid] == NULL)
5545 ftypes[typeid] = cu_language_defn->la_fund_type (objfile, typeid);
5548 return (ftypes[typeid]);
5551 /* Decode simple location descriptions.
5552 Given a pointer to a dwarf block that defines a location, compute
5553 the location and return the value.
5555 FIXME: This is a kludge until we figure out a better
5556 way to handle the location descriptions.
5557 Gdb's design does not mesh well with the DWARF2 notion of a location
5558 computing interpreter, which is a shame because the flexibility goes unused.
5559 FIXME: Implement more operations as necessary.
5561 A location description containing no operations indicates that the
5562 object is optimized out. The global optimized_out flag is set for
5563 those, the return value is meaningless.
5565 When the result is a register number, the global isreg flag is set,
5566 otherwise it is cleared.
5568 When the result is a base register offset, the global offreg flag is set
5569 and the register number is returned in basereg, otherwise it is cleared.
5571 When the DW_OP_fbreg operation is encountered without a corresponding
5572 DW_AT_frame_base attribute, the global islocal flag is set.
5573 Hopefully the machine dependent code knows how to set up a virtual
5574 frame pointer for the local references.
5576 Note that stack[0] is unused except as a default error return.
5577 Note that stack overflow is not yet handled. */
5580 decode_locdesc (blk, objfile)
5581 struct dwarf_block *blk;
5582 struct objfile *objfile;
5585 int size = blk->size;
5586 char *data = blk->data;
5587 CORE_ADDR stack[64];
5589 unsigned int bytes_read, unsnd;
5639 stack[++stacki] = op - DW_OP_reg0;
5644 unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5646 #if defined(HARRIS_TARGET) && defined(_M88K)
5647 /* The Harris 88110 gdb ports have long kept their special reg
5648 numbers between their gp-regs and their x-regs. This is
5649 not how our dwarf is generated. Punt. */
5652 stack[++stacki] = unsnd;
5688 basereg = op - DW_OP_breg0;
5689 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5694 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5696 if (frame_base_reg >= 0)
5699 basereg = frame_base_reg;
5700 stack[stacki] += frame_base_offset;
5704 complain (&dwarf2_missing_at_frame_base);
5710 stack[++stacki] = read_address (objfile->obfd, &data[i]);
5715 stack[++stacki] = read_1_byte (objfile->obfd, &data[i]);
5720 stack[++stacki] = read_1_signed_byte (objfile->obfd, &data[i]);
5725 stack[++stacki] = read_2_bytes (objfile->obfd, &data[i]);
5730 stack[++stacki] = read_2_signed_bytes (objfile->obfd, &data[i]);
5735 stack[++stacki] = read_4_bytes (objfile->obfd, &data[i]);
5740 stack[++stacki] = read_4_signed_bytes (objfile->obfd, &data[i]);
5745 stack[++stacki] = read_unsigned_leb128 (NULL, (data + i),
5751 stack[++stacki] = read_signed_leb128 (NULL, (data + i), &bytes_read);
5756 stack[stacki - 1] += stack[stacki];
5760 case DW_OP_plus_uconst:
5761 stack[stacki] += read_unsigned_leb128 (NULL, (data + i), &bytes_read);
5766 stack[stacki - 1] = stack[stacki] - stack[stacki - 1];
5771 complain (&dwarf2_unsupported_stack_op, dwarf_stack_op_name(op));
5772 return (stack[stacki]);
5775 return (stack[stacki]);
5778 /* memory allocation interface */
5782 dwarf2_free_tmp_obstack (ignore)
5785 obstack_free (&dwarf2_tmp_obstack, NULL);
5788 static struct dwarf_block *
5789 dwarf_alloc_block ()
5791 struct dwarf_block *blk;
5793 blk = (struct dwarf_block *)
5794 obstack_alloc (&dwarf2_tmp_obstack, sizeof (struct dwarf_block));
5798 static struct abbrev_info *
5799 dwarf_alloc_abbrev ()
5801 struct abbrev_info *abbrev;
5803 abbrev = (struct abbrev_info *) xmalloc (sizeof (struct abbrev_info));
5804 memset (abbrev, 0, sizeof (struct abbrev_info));
5808 static struct die_info *
5811 struct die_info *die;
5813 die = (struct die_info *) xmalloc (sizeof (struct die_info));
5814 memset (die, 0, sizeof (struct die_info));