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