f0f008baeec57e859f19c74ab96d46260c38e278
[deliverable/binutils-gdb.git] / gdb / dwarf2read.c
1 /* DWARF 2 debugging format support for GDB.
2 Copyright 1994, 1995, 1996 Free Software Foundation, Inc.
3
4 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
5 Inc. with support from Florida State University (under contract
6 with the Ada Joint Program Office), and Silicon Graphics, Inc.
7 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
8 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
9 support in dwarfread.c
10
11 This file is part of GDB.
12
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
15 the Free Software Foundation; either version 2 of the License, or (at
16 your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
26
27 #include "defs.h"
28 #include "bfd.h"
29 #include "symtab.h"
30 #include "gdbtypes.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "elf/dwarf2.h"
34 #include "buildsym.h"
35 #include "demangle.h"
36 #include "expression.h"
37 #include "language.h"
38
39 #include <fcntl.h>
40 #include "gdb_string.h"
41 #include <sys/types.h>
42
43 /* .debug_info header for a compilation unit
44 Because of alignment constraints, this structure has padding and cannot
45 be mapped directly onto the beginning of the .debug_info section. */
46 typedef struct comp_unit_header
47 {
48 unsigned int length; /* length of the .debug_info
49 contribution */
50 unsigned short version; /* version number -- 2 for DWARF
51 version 2 */
52 unsigned int abbrev_offset; /* offset into .debug_abbrev section */
53 unsigned char addr_size; /* byte size of an address -- 4 */
54 }
55 _COMP_UNIT_HEADER;
56 #define _ACTUAL_COMP_UNIT_HEADER_SIZE 11
57
58 /* .debug_pubnames header
59 Because of alignment constraints, this structure has padding and cannot
60 be mapped directly onto the beginning of the .debug_info section. */
61 typedef struct pubnames_header
62 {
63 unsigned int length; /* length of the .debug_pubnames
64 contribution */
65 unsigned char version; /* version number -- 2 for DWARF
66 version 2 */
67 unsigned int info_offset; /* offset into .debug_info section */
68 unsigned int info_size; /* byte size of .debug_info section
69 portion */
70 }
71 _PUBNAMES_HEADER;
72 #define _ACTUAL_PUBNAMES_HEADER_SIZE 13
73
74 /* .debug_pubnames header
75 Because of alignment constraints, this structure has padding and cannot
76 be mapped directly onto the beginning of the .debug_info section. */
77 typedef struct aranges_header
78 {
79 unsigned int length; /* byte len of the .debug_aranges
80 contribution */
81 unsigned short version; /* version number -- 2 for DWARF
82 version 2 */
83 unsigned int info_offset; /* offset into .debug_info section */
84 unsigned char addr_size; /* byte size of an address */
85 unsigned char seg_size; /* byte size of segment descriptor */
86 }
87 _ARANGES_HEADER;
88 #define _ACTUAL_ARANGES_HEADER_SIZE 12
89
90 /* .debug_line statement program prologue
91 Because of alignment constraints, this structure has padding and cannot
92 be mapped directly onto the beginning of the .debug_info section. */
93 typedef struct statement_prologue
94 {
95 unsigned int total_length; /* byte length of the statement
96 information */
97 unsigned short version; /* version number -- 2 for DWARF
98 version 2 */
99 unsigned int prologue_length; /* # bytes between prologue &
100 stmt program */
101 unsigned char minimum_instruction_length; /* byte size of
102 smallest instr */
103 unsigned char default_is_stmt; /* initial value of is_stmt
104 register */
105 char line_base;
106 unsigned char line_range;
107 unsigned char opcode_base; /* number assigned to first special
108 opcode */
109 unsigned char *standard_opcode_lengths;
110 }
111 _STATEMENT_PROLOGUE;
112
113 /* offsets and sizes of debugging sections */
114
115 static file_ptr dwarf_info_offset;
116 static file_ptr dwarf_abbrev_offset;
117 static file_ptr dwarf_line_offset;
118 static file_ptr dwarf_pubnames_offset;
119 static file_ptr dwarf_aranges_offset;
120 static file_ptr dwarf_loc_offset;
121 static file_ptr dwarf_macinfo_offset;
122 static file_ptr dwarf_str_offset;
123
124 static unsigned int dwarf_info_size;
125 static unsigned int dwarf_abbrev_size;
126 static unsigned int dwarf_line_size;
127 static unsigned int dwarf_pubnames_size;
128 static unsigned int dwarf_aranges_size;
129 static unsigned int dwarf_loc_size;
130 static unsigned int dwarf_macinfo_size;
131 static unsigned int dwarf_str_size;
132
133 /* names of the debugging sections */
134
135 #define INFO_SECTION ".debug_info"
136 #define ABBREV_SECTION ".debug_abbrev"
137 #define LINE_SECTION ".debug_line"
138 #define PUBNAMES_SECTION ".debug_pubnames"
139 #define ARANGES_SECTION ".debug_aranges"
140 #define LOC_SECTION ".debug_loc"
141 #define MACINFO_SECTION ".debug_macinfo"
142 #define STR_SECTION ".debug_str"
143
144 /* Get at parts of an attribute structure */
145
146 #define DW_STRING(attr) ((attr)->u.str)
147 #define DW_UNSND(attr) ((attr)->u.unsnd)
148 #define DW_BLOCK(attr) ((attr)->u.blk)
149 #define DW_SND(attr) ((attr)->u.snd)
150 #define DW_ADDR(attr) ((attr)->u.addr)
151
152 /* local data types */
153
154 /* The data in a compilation unit header looks like this. */
155 struct comp_unit_head
156 {
157 int length;
158 short version;
159 int abbrev_offset;
160 unsigned char addr_size;
161 };
162
163 /* The data in the .debug_line statement prologue looks like this. */
164 struct line_head
165 {
166 unsigned int total_length;
167 unsigned short version;
168 unsigned int prologue_length;
169 unsigned char minimum_instruction_length;
170 unsigned char default_is_stmt;
171 char line_base;
172 unsigned char line_range;
173 unsigned char opcode_base;
174 unsigned char *standard_opcode_lengths;
175 };
176
177 /* When we construct a partial symbol table entry we only
178 need this much information. */
179 struct partial_die_info
180 {
181 unsigned short tag;
182 unsigned char has_children;
183 unsigned char is_external;
184 unsigned int offset;
185 unsigned int abbrev;
186 char *name;
187 CORE_ADDR lowpc;
188 CORE_ADDR highpc;
189 struct dwarf_block *locdesc;
190 unsigned int language;
191 int value;
192 };
193
194 /* This data structure holds the information of an abbrev. */
195 struct abbrev_info
196 {
197 unsigned int number; /* number identifying abbrev */
198 unsigned int tag; /* dwarf tag */
199 int has_children; /* boolean */
200 unsigned int num_attrs; /* number of attributes */
201 struct attr_abbrev *attrs; /* an array of attribute descriptions */
202 struct abbrev_info *next; /* next in chain */
203 };
204
205 struct attr_abbrev
206 {
207 unsigned int name;
208 unsigned int form;
209 };
210
211 /* This data structure holds a complete die structure. */
212 struct die_info
213 {
214 unsigned short tag; /* Tag indicating type of die */
215 unsigned short has_children; /* Does the die have children */
216 unsigned int abbrev; /* Abbrev number */
217 unsigned int offset; /* Offset in .debug_info section */
218 unsigned int num_attrs; /* Number of attributes */
219 struct attribute *attrs; /* An array of attributes */
220 struct die_info *next_ref; /* Next die in ref hash table */
221 struct die_info *next; /* Next die in linked list */
222 struct type *type; /* Cached type information */
223 };
224
225 /* Attributes have a name and a value */
226 struct attribute
227 {
228 unsigned short name;
229 unsigned short form;
230 union
231 {
232 char *str;
233 struct dwarf_block *blk;
234 unsigned int unsnd;
235 int snd;
236 CORE_ADDR addr;
237 }
238 u;
239 };
240
241 /* Blocks are a bunch of untyped bytes. */
242 struct dwarf_block
243 {
244 unsigned int size;
245 char *data;
246 };
247
248 /* We only hold one compilation unit's abbrevs in
249 memory at any one time. */
250 #ifndef ABBREV_HASH_SIZE
251 #define ABBREV_HASH_SIZE 121
252 #endif
253 #ifndef ATTR_ALLOC_CHUNK
254 #define ATTR_ALLOC_CHUNK 4
255 #endif
256
257 /* FIXME: do away with this */
258
259 #ifndef DWARF2_MAX_STRING_SIZE
260 #define DWARF2_MAX_STRING_SIZE 1024
261 #endif
262
263 static struct abbrev_info *dwarf2_abbrevs[ABBREV_HASH_SIZE];
264
265 /* A hash table of die offsets for following references. */
266 #ifndef REF_HASH_SIZE
267 #define REF_HASH_SIZE 1021
268 #endif
269
270 static struct die_info *die_ref_table[REF_HASH_SIZE];
271
272 /* Allocate fields for structs, unions and enums in this size. */
273 #ifndef DW_FIELD_ALLOC_CHUNK
274 #define DW_FIELD_ALLOC_CHUNK 4
275 #endif
276
277 /* The language we are debugging. */
278 static enum language cu_language;
279 static const struct language_defn *cu_language_defn;
280
281 /* Actually data from the sections. */
282 static char *dwarf_info_buffer;
283 static char *dwarf_abbrev_buffer;
284 static char *dwarf_line_buffer;
285
286 /* A zeroed version of several structures for initialization purposes. */
287 static struct partial_die_info zeroed_partial_die;
288 static struct die_info zeroed_die;
289
290 /* The generic symbol table building routines have separate lists for
291 file scope symbols and all all other scopes (local scopes). So
292 we need to select the right one to pass to add_symbol_to_list().
293 We do it by keeping a pointer to the correct list in list_in_scope.
294
295 FIXME: The original dwarf code just treated the file scope as the first
296 local scope, and all other local scopes as nested local scopes, and worked
297 fine. Check to see if we really need to distinguish these
298 in buildsym.c. */
299 static struct pending **list_in_scope = &file_symbols;
300 static int isreg; /* Kludge to identify register
301 variables */
302 static int offreg; /* Kludge to identify basereg
303 references */
304
305 /* This value is added to each symbol value. FIXME: Generalize to
306 the section_offsets structure used by dbxread (once this is done,
307 pass the appropriate section number to end_symtab). */
308 static CORE_ADDR baseaddr; /* Add to each symbol value */
309
310 /* Maintain an array of referenced fundamental types for the current
311 compilation unit being read. For DWARF version 1, we have to construct
312 the fundamental types on the fly, since no information about the
313 fundamental types is supplied. Each such fundamental type is created by
314 calling a language dependent routine to create the type, and then a
315 pointer to that type is then placed in the array at the index specified
316 by it's FT_<TYPENAME> value. The array has a fixed size set by the
317 FT_NUM_MEMBERS compile time constant, which is the number of predefined
318 fundamental types gdb knows how to construct. */
319 static struct type *ftypes[FT_NUM_MEMBERS]; /* Fundamental types */
320
321 /* FIXME - set from bfd function */
322 static int bits_per_byte = 8;
323
324 /* Keep track of whether we have given a warning about not
325 handling DW_TAG_const_type dies. */
326 static int tag_const_warning_given = 0;
327
328 /* Keep track of whether we have given a warning about not
329 handling DW_TAG_volatile_type dies. */
330 static int tag_volatile_warning_given = 0;
331
332 /* Keep track of constant array bound warning. */
333 static int array_bound_warning_given = 0;
334
335 /* Remember the addr_size read from the dwarf.
336 If a target expects to link compilation units with differing address
337 sizes, gdb needs to be sure that the appropriate size is here for
338 whatever scope is currently getting read. */
339 static int address_size;
340
341 /* Externals references. */
342 extern int info_verbose; /* From main.c; nonzero => verbose */
343
344 /* local function prototypes */
345
346 static void dwarf2_locate_sections PARAMS ((bfd *, asection *, PTR));
347
348 static void dwarf2_build_psymtabs_easy PARAMS ((struct objfile *,
349 struct section_offsets *,
350 int));
351 static void dwarf2_build_psymtabs_hard PARAMS ((struct objfile *,
352 struct section_offsets *,
353 int));
354
355 static char *scan_partial_symbols PARAMS ((char *, struct objfile *,
356 CORE_ADDR *, CORE_ADDR *));
357
358 static void add_partial_symbol PARAMS ((struct partial_die_info *,
359 struct objfile *));
360
361 static void dwarf2_psymtab_to_symtab PARAMS ((struct partial_symtab *));
362
363 static void psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
364
365 static void add_die_to_symtab PARAMS ((struct die_info *, struct objfile *));
366
367 static char *dwarf2_read_section PARAMS ((bfd *, file_ptr, unsigned int));
368
369 static void dwarf2_read_abbrevs PARAMS ((bfd *, unsigned int));
370
371 static void dwarf2_empty_abbrev_table PARAMS ((void));
372
373 static struct abbrev_info *dwarf2_lookup_abbrev PARAMS ((unsigned int));
374
375 static char *read_partial_die PARAMS ((struct partial_die_info *,
376 bfd *, char *, int *));
377
378 static char *read_full_die PARAMS ((struct die_info **, bfd *, char *));
379
380 static unsigned int read_1_byte PARAMS ((bfd *, char *));
381
382 static unsigned int read_2_bytes PARAMS ((bfd *, char *));
383
384 static unsigned int read_4_bytes PARAMS ((bfd *, char *));
385
386 static unsigned int read_8_bytes PARAMS ((bfd *, char *));
387
388 static CORE_ADDR read_address PARAMS ((bfd *, char *));
389
390 static char *read_n_bytes PARAMS ((bfd *, char *, unsigned int));
391
392 static char *read_string PARAMS ((bfd *, char *, unsigned int *));
393
394 static unsigned int read_unsigned_leb128 PARAMS ((bfd *, char *,
395 unsigned int *));
396
397 static int read_signed_leb128 PARAMS ((bfd *, char *, unsigned int *));
398
399 static void set_cu_language PARAMS ((unsigned int));
400
401 static void record_minimal_symbol PARAMS ((char *, CORE_ADDR,
402 enum minimal_symbol_type,
403 struct objfile *));
404
405 static int convert_locdesc PARAMS ((struct dwarf_block *));
406
407 static struct attribute *dwarf_attr PARAMS ((struct die_info *,
408 unsigned int));
409
410 static void dwarf_decode_lines PARAMS ((unsigned int, bfd *));
411
412 static struct symbol *new_symbol PARAMS ((struct die_info * die, struct objfile * objfile));
413
414 static struct type *die_type PARAMS ((struct die_info * die, struct objfile * objfile));
415
416 static struct type *type_at_offset PARAMS ((unsigned int offset, struct objfile * objfile));
417
418 static struct type *tag_type_to_type PARAMS ((struct die_info * die, struct objfile * objfile));
419
420 static void read_type_die PARAMS ((struct die_info * die, struct objfile * objfile));
421
422 static void read_typedef PARAMS ((struct die_info * die, struct objfile * objfile));
423
424 static void read_base_type PARAMS ((struct die_info * die, struct objfile * objfile));
425
426 static void read_file_scope PARAMS ((struct die_info * die, struct objfile * objfile));
427
428 static void read_func_scope PARAMS ((struct die_info * die, struct objfile * objfile));
429
430 static void read_lexical_block_scope PARAMS ((struct die_info * die,
431 struct objfile * objfile));
432
433 static void read_structure_scope PARAMS ((struct die_info * die, struct objfile * objfile));
434
435 static void read_common_block PARAMS ((struct die_info * die, struct objfile * objfile));
436
437 static void read_enumeration PARAMS ((struct die_info * die, struct objfile * objfile));
438
439 static struct type * dwarf_base_type PARAMS ((int encoding, int size));
440
441 static CORE_ADDR decode_locdesc PARAMS ((struct dwarf_block *,
442 struct objfile *));
443
444 static char *create_name PARAMS ((char *, struct obstack *));
445
446 static void dwarf_read_array_type PARAMS ((struct die_info * die,
447 struct objfile * objfile));
448
449 static void read_tag_pointer_type PARAMS ((struct die_info * die,
450 struct objfile * objfile));
451
452 static void read_tag_const_type PARAMS ((struct die_info * die,
453 struct objfile * objfile));
454
455 static void read_tag_volatile_type PARAMS ((struct die_info * die,
456 struct objfile * objfile));
457
458 static void read_tag_string_type PARAMS ((struct die_info * die,
459 struct objfile * objfile));
460
461 static void read_subroutine_type PARAMS ((struct die_info * die,
462 struct objfile * objfile));
463
464 struct die_info *read_comp_unit PARAMS ((char *info_ptr, bfd * abfd));
465
466 static void free_die_list PARAMS ((struct die_info * dies));
467
468 static void process_die PARAMS ((struct die_info *, struct objfile *));
469
470 static char *dwarf_tag_name PARAMS ((unsigned tag));
471
472 static char *dwarf_attr_name PARAMS ((unsigned attr));
473
474 static char *dwarf_form_name PARAMS ((unsigned form));
475
476 static char *dwarf_stack_op_name PARAMS ((unsigned op));
477
478 static char *dwarf_bool_name PARAMS ((unsigned bool));
479
480 static char *dwarf_bool_name PARAMS ((unsigned tag));
481
482 static char *dwarf_type_encoding_name PARAMS ((unsigned enc));
483
484 static char *dwarf_cfi_name PARAMS ((unsigned cfi_opc));
485
486 struct die_info *copy_die PARAMS ((struct die_info *old_die));
487
488 struct die_info *sibling_die PARAMS ((struct die_info *die));
489
490 void dump_die PARAMS ((struct die_info *die));
491
492 void dump_die_list PARAMS ((struct die_info *dies));
493
494 void store_in_ref_table PARAMS ((unsigned int, struct die_info *));
495
496 struct die_info *follow_die_ref PARAMS ((unsigned int offset));
497
498 static struct type *dwarf2_fundamental_type PARAMS ((struct objfile *, int));
499
500 /* memory allocation interface */
501
502 static struct type *dwarf_alloc_type PARAMS ((struct objfile *));
503
504 static struct abbrev_info *dwarf_alloc_abbrev PARAMS ((void));
505
506 static struct dwarf_block *dwarf_alloc_block PARAMS ((void));
507
508 static struct die_info *dwarf_alloc_die PARAMS ((void));
509
510 /* Try to locate the sections we need for DWARF 2 debugging
511 information and return true if we have enough to do something. */
512
513 int
514 dwarf2_has_info (abfd)
515 bfd *abfd;
516 {
517 dwarf_info_offset = dwarf_abbrev_offset = dwarf_line_offset = 0;
518 bfd_map_over_sections (abfd, dwarf2_locate_sections, NULL);
519 if (dwarf_info_offset && dwarf_abbrev_offset && dwarf_line_offset)
520 {
521 return 1;
522 }
523 else
524 {
525 return 0;
526 }
527 }
528
529 /* This function is mapped across the sections and remembers the
530 offset and size of each of the debugging sections we are interested
531 in. */
532
533 static void
534 dwarf2_locate_sections (ignore_abfd, sectp, ignore_ptr)
535 bfd *ignore_abfd;
536 asection *sectp;
537 PTR ignore_ptr;
538 {
539 if (STREQ (sectp->name, INFO_SECTION))
540 {
541 dwarf_info_offset = sectp->filepos;
542 dwarf_info_size = bfd_get_section_size_before_reloc (sectp);
543 }
544 else if (STREQ (sectp->name, ABBREV_SECTION))
545 {
546 dwarf_abbrev_offset = sectp->filepos;
547 dwarf_abbrev_size = bfd_get_section_size_before_reloc (sectp);
548 }
549 else if (STREQ (sectp->name, LINE_SECTION))
550 {
551 dwarf_line_offset = sectp->filepos;
552 dwarf_line_size = bfd_get_section_size_before_reloc (sectp);
553 }
554 else if (STREQ (sectp->name, PUBNAMES_SECTION))
555 {
556 dwarf_pubnames_offset = sectp->filepos;
557 dwarf_pubnames_size = bfd_get_section_size_before_reloc (sectp);
558 }
559 else if (STREQ (sectp->name, ARANGES_SECTION))
560 {
561 dwarf_aranges_offset = sectp->filepos;
562 dwarf_aranges_size = bfd_get_section_size_before_reloc (sectp);
563 }
564 else if (STREQ (sectp->name, LOC_SECTION))
565 {
566 dwarf_loc_offset = sectp->filepos;
567 dwarf_loc_size = bfd_get_section_size_before_reloc (sectp);
568 }
569 else if (STREQ (sectp->name, MACINFO_SECTION))
570 {
571 dwarf_macinfo_offset = sectp->filepos;
572 dwarf_macinfo_size = bfd_get_section_size_before_reloc (sectp);
573 }
574 else if (STREQ (sectp->name, STR_SECTION))
575 {
576 dwarf_str_offset = sectp->filepos;
577 dwarf_str_size = bfd_get_section_size_before_reloc (sectp);
578 }
579 }
580
581 /* Build a partial symbol table. */
582
583 void
584 dwarf2_build_psymtabs (objfile, section_offsets, mainline)
585 struct objfile *objfile;
586 struct section_offsets *section_offsets;
587 int mainline;
588 {
589 bfd *abfd = objfile->obfd;
590
591 /* We definitely need the .debug_info, .debug_abbrev, and .debug_line
592 sections */
593
594 dwarf_info_buffer = dwarf2_read_section (abfd,
595 dwarf_info_offset,
596 dwarf_info_size);
597 dwarf_abbrev_buffer = dwarf2_read_section (abfd,
598 dwarf_abbrev_offset,
599 dwarf_abbrev_size);
600 dwarf_line_buffer = dwarf2_read_section (abfd,
601 dwarf_line_offset,
602 dwarf_line_size);
603
604 if (mainline || objfile->global_psymbols.size == 0 ||
605 objfile->static_psymbols.size == 0)
606 {
607 init_psymbol_list (objfile, 1024);
608 }
609
610 #if 0
611 if (dwarf_aranges_offset && dwarf_pubnames_offset)
612 {
613 /* Things are significanlty easier if we have .debug_aranges and
614 .debug_pubnames sections */
615
616 dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline);
617 }
618 else
619 #endif
620 /* only test this case for now */
621 {
622 /* In this case we have to work a bit harder */
623 dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline);
624 }
625 }
626
627 /* Build the partial symbol table from the information in the
628 .debug_pubnames and .debug_aranges sections. */
629
630 static void
631 dwarf2_build_psymtabs_easy (objfile, section_offsets, mainline)
632 struct objfile *objfile;
633 struct section_offsets *section_offsets;
634 int mainline;
635 {
636 bfd *abfd = objfile->obfd;
637 char *aranges_buffer, *pubnames_buffer;
638 char *aranges_ptr, *pubnames_ptr;
639 unsigned int entry_length, version, info_offset, info_size;
640
641 pubnames_buffer = dwarf2_read_section (abfd,
642 dwarf_pubnames_offset,
643 dwarf_pubnames_size);
644 pubnames_ptr = pubnames_buffer;
645 while ((pubnames_ptr - pubnames_buffer) < dwarf_pubnames_size)
646 {
647 entry_length = read_4_bytes (abfd, pubnames_ptr);
648 pubnames_ptr += 4;
649 version = read_1_byte (abfd, pubnames_ptr);
650 pubnames_ptr += 1;
651 info_offset = read_4_bytes (abfd, pubnames_ptr);
652 pubnames_ptr += 4;
653 info_size = read_4_bytes (abfd, pubnames_ptr);
654 pubnames_ptr += 4;
655 }
656
657 aranges_buffer = dwarf2_read_section (abfd,
658 dwarf_aranges_offset,
659 dwarf_aranges_size);
660
661 }
662
663 /* Build the partial symbol table by doing a quick pass through the
664 .debug_info and .debug_abbrev sections. */
665
666 static void
667 dwarf2_build_psymtabs_hard (objfile, section_offsets, mainline)
668 struct objfile *objfile;
669 struct section_offsets *section_offsets;
670 int mainline;
671 {
672 /* Instead of reading this into a big buffer, we should probably use
673 mmap() on architectures that support it. (FIXME) */
674 bfd *abfd = objfile->obfd;
675 char *info_ptr, *abbrev_ptr;
676 char *beg_of_comp_unit, *comp_unit_die_offset;
677 struct comp_unit_head cu_header;
678 struct partial_die_info comp_unit_die;
679 struct partial_symtab *pst;
680 struct cleanup *back_to;
681 int comp_unit_has_pc_info;
682 int has_pc_info;
683 CORE_ADDR lowpc, highpc;
684
685 comp_unit_die = zeroed_partial_die;
686 info_ptr = dwarf_info_buffer;
687 abbrev_ptr = dwarf_abbrev_buffer;
688
689 while ((info_ptr - dwarf_info_buffer)
690 + ((info_ptr - dwarf_info_buffer) % 4) < dwarf_info_size)
691 {
692 beg_of_comp_unit = info_ptr;
693 cu_header.length = read_4_bytes (abfd, info_ptr);
694 info_ptr += 4;
695 cu_header.version = read_2_bytes (abfd, info_ptr);
696 info_ptr += 2;
697 cu_header.abbrev_offset = read_4_bytes (abfd, info_ptr);
698 info_ptr += 4;
699 cu_header.addr_size = read_1_byte (abfd, info_ptr);
700 info_ptr += 1;
701 address_size = cu_header.addr_size;
702
703 if (cu_header.version != 2)
704 {
705 error ("Dwarf Error: wrong version in compilation unit header.");
706 return;
707 }
708
709 /* Read the abbrevs for this compilation unit into a table */
710 dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
711 back_to = make_cleanup (dwarf2_empty_abbrev_table, NULL);
712
713 /* Read the compilation unit die */
714 info_ptr = read_partial_die (&comp_unit_die, abfd,
715 info_ptr, &comp_unit_has_pc_info);
716
717 /* Set the language we're debugging */
718 set_cu_language (comp_unit_die.language);
719
720 /* Allocate a new partial symbol table structure */
721 pst = start_psymtab_common (objfile, section_offsets,
722 comp_unit_die.name,
723 comp_unit_die.lowpc,
724 objfile->global_psymbols.next,
725 objfile->static_psymbols.next);
726
727 /* Store offset in the .debug_info section of the comp_unit_die. */
728 pst->read_symtab_private = (char *)
729 (beg_of_comp_unit - dwarf_info_buffer);
730
731 /* Store the function that reads in the rest of the symbol table */
732 pst->read_symtab = dwarf2_psymtab_to_symtab;
733
734 /* Read the rest of the partial symbols from this comp unit */
735 info_ptr = scan_partial_symbols (info_ptr, objfile, &lowpc, &highpc);
736
737 /* If the compilation unit didn't have an explicit address range,
738 then use the information extracted from its child dies. */
739 if (!comp_unit_has_pc_info)
740 {
741 comp_unit_die.lowpc = lowpc;
742 comp_unit_die.highpc = highpc;
743 }
744 pst->textlow = comp_unit_die.lowpc;
745 pst->texthigh = comp_unit_die.highpc;
746
747 pst->n_global_syms = objfile->global_psymbols.next -
748 (objfile->global_psymbols.list + pst->globals_offset);
749 pst->n_static_syms = objfile->static_psymbols.next -
750 (objfile->static_psymbols.list + pst->statics_offset);
751 sort_pst_symbols (pst);
752
753 /* If there is already a psymtab or symtab for a file of this
754 name, remove it. (If there is a symtab, more drastic things
755 also happen.) This happens in VxWorks. */
756 free_named_symtabs (pst->filename);
757
758 info_ptr = beg_of_comp_unit + cu_header.length + 4;
759 }
760 do_cleanups (back_to);
761 }
762
763 /* Read in all interesting dies to the end of the compilation unit. */
764
765 static char *
766 scan_partial_symbols (info_ptr, objfile, lowpc, highpc)
767 char *info_ptr;
768 struct objfile *objfile;
769 CORE_ADDR *lowpc;
770 CORE_ADDR *highpc;
771 {
772 /* FIXME: This should free the attributes of the partial die structure
773 when it is done with them (is there a more efficient way
774 to do this). */
775 bfd *abfd = objfile->obfd;
776 struct partial_die_info pdi;
777 int nesting_level = 1; /* we've already read in comp_unit_die */
778 int has_pc_info;
779
780 pdi = zeroed_partial_die;
781 *lowpc = ((CORE_ADDR) -1);
782 *highpc = ((CORE_ADDR) 0);
783 do
784 {
785 info_ptr = read_partial_die (&pdi, abfd, info_ptr, &has_pc_info);
786 switch (pdi.tag)
787 {
788 case DW_TAG_subprogram:
789 case DW_TAG_variable:
790 case DW_TAG_typedef:
791 case DW_TAG_class_type:
792 case DW_TAG_structure_type:
793 case DW_TAG_union_type:
794 if (pdi.is_external || nesting_level == 1)
795 {
796 if (pdi.name)
797 {
798 add_partial_symbol (&pdi, objfile);
799 }
800 }
801 if (has_pc_info)
802 {
803 if (pdi.lowpc < *lowpc)
804 {
805 *lowpc = pdi.lowpc;
806 }
807 if (pdi.highpc > *lowpc)
808 {
809 *highpc = pdi.highpc;
810 }
811 }
812 }
813 if (pdi.has_children)
814 {
815 nesting_level++;
816 }
817 if (pdi.tag == 0)
818 {
819 nesting_level--;
820 }
821 }
822 while (nesting_level);
823 return info_ptr;
824 }
825
826 static void
827 add_partial_symbol (pdi, objfile)
828 struct partial_die_info *pdi;
829 struct objfile *objfile;
830 {
831 switch (pdi->tag)
832 {
833 case DW_TAG_subprogram:
834 if (pdi->is_external)
835 {
836 record_minimal_symbol (pdi->name, pdi->lowpc,
837 mst_text, objfile);
838 add_psymbol_to_list (pdi->name, strlen (pdi->name),
839 VAR_NAMESPACE, LOC_BLOCK,
840 &objfile->global_psymbols,
841 0, pdi->lowpc, cu_language, objfile);
842 }
843 else
844 {
845 add_psymbol_to_list (pdi->name, strlen (pdi->name),
846 VAR_NAMESPACE, LOC_BLOCK,
847 &objfile->static_psymbols,
848 0, pdi->lowpc, cu_language, objfile);
849 }
850 break;
851 case DW_TAG_variable:
852 if (pdi->is_external)
853 {
854 record_minimal_symbol (pdi->name, convert_locdesc (pdi->locdesc),
855 mst_data, objfile);
856 add_psymbol_to_list (pdi->name, strlen (pdi->name),
857 VAR_NAMESPACE, LOC_STATIC,
858 &objfile->global_psymbols,
859 0, 0, cu_language, objfile);
860 }
861 else
862 {
863 add_psymbol_to_list (pdi->name, strlen (pdi->name),
864 VAR_NAMESPACE, LOC_STATIC,
865 &objfile->static_psymbols,
866 0, 0, cu_language, objfile);
867 }
868 break;
869 case DW_TAG_typedef:
870 add_psymbol_to_list (pdi->name, strlen (pdi->name),
871 VAR_NAMESPACE, LOC_TYPEDEF,
872 &objfile->static_psymbols,
873 0, 0, cu_language, objfile);
874 break;
875 case DW_TAG_class_type:
876 case DW_TAG_structure_type:
877 case DW_TAG_union_type:
878 case DW_TAG_enumeration_type:
879 add_psymbol_to_list (pdi->name, strlen (pdi->name),
880 STRUCT_NAMESPACE, LOC_TYPEDEF,
881 &objfile->static_psymbols,
882 0, 0, cu_language, objfile);
883 if (cu_language == language_cplus)
884 {
885 /* For C++, these implicitly act as typedefs as well. */
886 add_psymbol_to_list (pdi->name, strlen (pdi->name),
887 VAR_NAMESPACE, LOC_TYPEDEF,
888 &objfile->static_psymbols,
889 0, 0, cu_language, objfile);
890 }
891 break;
892 }
893 }
894
895 /* Expand this partial symbol table into a full symbol table. */
896
897 static void
898 dwarf2_psymtab_to_symtab (pst)
899 struct partial_symtab *pst;
900 {
901 /* FIXME: This is barely more than a stub. */
902 if (pst != NULL)
903 {
904 if (pst->readin)
905 {
906 warning ("bug: psymtab for %s is already read in.", pst->filename);
907 }
908 else
909 {
910 psymtab_to_symtab_1 (pst);
911 }
912 }
913 }
914
915 static void
916 psymtab_to_symtab_1 (pst)
917 struct partial_symtab *pst;
918 {
919 struct objfile *objfile = pst->objfile;
920 bfd *abfd = objfile->obfd;
921 struct comp_unit_head cu_header;
922 struct die_info *dies;
923 struct attribute *attr;
924 unsigned long offset;
925 unsigned long int nesting_level;
926 CORE_ADDR highpc;
927 struct attribute *high_pc_attr;
928 struct die_info *child_die;
929 char *info_ptr;
930 struct context_stack *context;
931 struct symtab *symtab;
932 struct cleanup *abbrev_cleanup, *die_cleanup;
933
934 /* Get the offset of this compilation units debug info */
935 offset = (unsigned long) pst->read_symtab_private;
936 info_ptr = dwarf_info_buffer + offset;
937
938 /* read in the comp_unit header */
939 cu_header.length = read_4_bytes (abfd, info_ptr);
940 info_ptr += 4;
941 cu_header.version = read_2_bytes (abfd, info_ptr);
942 info_ptr += 2;
943 cu_header.abbrev_offset = read_4_bytes (abfd, info_ptr);
944 info_ptr += 4;
945 cu_header.addr_size = read_1_byte (abfd, info_ptr);
946 info_ptr += 1;
947
948 /* Read the abbrevs for this compilation unit */
949 dwarf2_read_abbrevs (abfd, cu_header.abbrev_offset);
950 abbrev_cleanup = make_cleanup (dwarf2_empty_abbrev_table, NULL);
951
952 dies = read_comp_unit (info_ptr, abfd);
953
954 die_cleanup = make_cleanup (free_die_list, dies);
955
956 /* Do line number decoding in read_file_scope () */
957 process_die (dies, objfile);
958
959 attr = dwarf_attr (dies, DW_AT_high_pc);
960 if (attr)
961 {
962 highpc = DW_ADDR (attr);
963 }
964 else
965 {
966 /* Some compilers don't define a DW_AT_high_pc attribute for
967 the compilation unit. If the DW_AT_high_pc is missing,
968 synthesize it, by scanning the DIE's below the compilation unit. */
969 highpc = 0;
970 if (dies->has_children)
971 {
972 child_die = dies->next;
973 while (child_die && child_die->tag)
974 {
975 if (child_die->tag == DW_TAG_subprogram)
976 {
977 high_pc_attr = dwarf_attr (child_die, DW_AT_high_pc);
978 if (high_pc_attr)
979 {
980 highpc = max (highpc, DW_ADDR (high_pc_attr));
981 }
982 }
983 child_die = sibling_die (child_die);
984 }
985 }
986 }
987
988 symtab = end_symtab (highpc, objfile, 0);
989 if (symtab != NULL)
990 {
991 symtab->language = cu_language;
992 }
993 pst->symtab = symtab;
994 pst->readin = 1;
995 if (info_verbose)
996 {
997 printf_filtered ("Sorting symbol table...");
998 wrap_here ("");
999 fflush (stdout);
1000 }
1001 sort_symtab_syms (pst->symtab);
1002 do_cleanups (abbrev_cleanup);
1003 }
1004
1005 /* Process a die and its children. */
1006
1007 static void
1008 process_die (die, objfile)
1009 struct die_info *die;
1010 struct objfile *objfile;
1011 {
1012 switch (die->tag)
1013 {
1014 case DW_TAG_padding:
1015 break;
1016 case DW_TAG_compile_unit:
1017 read_file_scope (die, objfile);
1018 break;
1019 case DW_TAG_subprogram:
1020 if (dwarf_attr (die, DW_AT_low_pc))
1021 {
1022 read_func_scope (die, objfile);
1023 }
1024 break;
1025 case DW_TAG_lexical_block:
1026 read_lexical_block_scope (die, objfile);
1027 break;
1028 case DW_TAG_class_type:
1029 case DW_TAG_structure_type:
1030 case DW_TAG_union_type:
1031 read_structure_scope (die, objfile);
1032 break;
1033 case DW_TAG_enumeration_type:
1034 read_enumeration (die, objfile);
1035 break;
1036 case DW_TAG_subroutine_type:
1037 read_subroutine_type (die, objfile);
1038 break;
1039 case DW_TAG_array_type:
1040 dwarf_read_array_type (die, objfile);
1041 break;
1042 case DW_TAG_pointer_type:
1043 read_tag_pointer_type (die, objfile);
1044 break;
1045 case DW_TAG_string_type:
1046 read_tag_string_type (die, objfile);
1047 break;
1048 case DW_TAG_base_type:
1049 read_base_type (die, objfile);
1050 break;
1051 case DW_TAG_common_block:
1052 read_common_block (die, objfile);
1053 break;
1054 case DW_TAG_common_inclusion:
1055 break;
1056 default:
1057 new_symbol (die, objfile);
1058 break;
1059 }
1060 }
1061
1062 static void
1063 read_file_scope (die, objfile)
1064 struct die_info *die;
1065 struct objfile *objfile;
1066 {
1067 unsigned int line_offset = 0;
1068 CORE_ADDR lowpc = ((CORE_ADDR) -1);
1069 CORE_ADDR highpc = ((CORE_ADDR) 0);
1070 struct attribute *attr, *low_pc_attr, *high_pc_attr;
1071 char *name = NULL;
1072 char *comp_dir = NULL;
1073 struct die_info *child_die;
1074 bfd *abfd = objfile->obfd;
1075
1076 low_pc_attr = dwarf_attr (die, DW_AT_low_pc);
1077 if (low_pc_attr)
1078 {
1079 lowpc = DW_ADDR (low_pc_attr);
1080 }
1081 high_pc_attr = dwarf_attr (die, DW_AT_high_pc);
1082 if (high_pc_attr)
1083 {
1084 highpc = DW_ADDR (high_pc_attr);
1085 }
1086 if (!low_pc_attr || !high_pc_attr)
1087 {
1088 if (die->has_children)
1089 {
1090 child_die = die->next;
1091 while (child_die && child_die->tag)
1092 {
1093 if (child_die->tag == DW_TAG_subprogram)
1094 {
1095 low_pc_attr = dwarf_attr (child_die, DW_AT_low_pc);
1096 if (low_pc_attr)
1097 {
1098 lowpc = min (lowpc, DW_ADDR (low_pc_attr));
1099 }
1100 high_pc_attr = dwarf_attr (child_die, DW_AT_high_pc);
1101 if (high_pc_attr)
1102 {
1103 highpc = max (highpc, DW_ADDR (high_pc_attr));
1104 }
1105 }
1106 child_die = sibling_die (child_die);
1107 }
1108 }
1109 }
1110
1111 attr = dwarf_attr (die, DW_AT_name);
1112 if (attr)
1113 {
1114 name = DW_STRING (attr);
1115 }
1116 attr = dwarf_attr (die, DW_AT_comp_dir);
1117 if (attr)
1118 {
1119 comp_dir = DW_STRING (attr);
1120 }
1121
1122 if (objfile->ei.entry_point >= lowpc &&
1123 objfile->ei.entry_point < highpc)
1124 {
1125 objfile->ei.entry_file_lowpc = lowpc;
1126 objfile->ei.entry_file_highpc = highpc;
1127 }
1128
1129 attr = dwarf_attr (die, DW_AT_language);
1130 if (attr)
1131 {
1132 set_cu_language (DW_UNSND (attr));
1133 }
1134
1135 #if 0
1136 /* FIXME:Do something here. */
1137 if (dip->at_producer != NULL)
1138 {
1139 handle_producer (dip->at_producer);
1140 }
1141 #endif
1142
1143 start_symtab (name, comp_dir, lowpc);
1144
1145 /* Decode line number information. */
1146 attr = dwarf_attr (die, DW_AT_stmt_list);
1147 if (!attr)
1148 {
1149 error (
1150 "Dwarf Error: No line number information for compilation unit: %s.",
1151 name);
1152 }
1153 line_offset = DW_UNSND (attr);
1154 dwarf_decode_lines (line_offset, abfd);
1155
1156 /* Process all dies in compilation unit. */
1157 if (die->has_children)
1158 {
1159 child_die = die->next;
1160 while (child_die && child_die->tag)
1161 {
1162 process_die (child_die, objfile);
1163 child_die = sibling_die (child_die);
1164 }
1165 }
1166 }
1167
1168 static void
1169 read_func_scope (die, objfile)
1170 struct die_info *die;
1171 struct objfile *objfile;
1172 {
1173 register struct context_stack *new;
1174 CORE_ADDR lowpc = 0;
1175 CORE_ADDR highpc = 0;
1176 struct die_info *child_die;
1177 struct attribute *attr;
1178 struct minimal_symbol *min_sym;
1179 char *name = NULL;
1180
1181 attr = dwarf_attr (die, DW_AT_name);
1182 if (attr)
1183 {
1184 name = DW_STRING (attr);
1185 }
1186
1187 attr = dwarf_attr (die, DW_AT_low_pc);
1188 if (attr)
1189 {
1190 lowpc = DW_ADDR (attr);
1191 }
1192
1193 attr = dwarf_attr (die, DW_AT_high_pc);
1194 if (attr)
1195 {
1196 highpc = DW_ADDR (attr);
1197 }
1198
1199 if (objfile->ei.entry_point >= lowpc &&
1200 objfile->ei.entry_point < highpc)
1201 {
1202 objfile->ei.entry_func_lowpc = lowpc;
1203 objfile->ei.entry_func_highpc = highpc;
1204 }
1205
1206 if (STREQ (name, "main")) /* FIXME: hardwired name */
1207 {
1208 objfile->ei.main_func_lowpc = lowpc;
1209 objfile->ei.main_func_highpc = highpc;
1210 }
1211 new = push_context (0, lowpc);
1212 new->name = new_symbol (die, objfile);
1213 list_in_scope = &local_symbols;
1214
1215 if (die->has_children)
1216 {
1217 child_die = die->next;
1218 while (child_die && child_die->tag)
1219 {
1220 process_die (child_die, objfile);
1221 child_die = sibling_die (child_die);
1222 }
1223 }
1224
1225 new = pop_context ();
1226 /* Make a block for the local symbols within. */
1227 finish_block (new->name, &local_symbols, new->old_blocks,
1228 lowpc, highpc, objfile);
1229 list_in_scope = &file_symbols;
1230 }
1231
1232 /* Process all the DIES contained within a lexical block scope. Start
1233 a new scope, process the dies, and then close the scope. */
1234
1235 static void
1236 read_lexical_block_scope (die, objfile)
1237 struct die_info *die;
1238 struct objfile *objfile;
1239 {
1240 register struct context_stack *new;
1241 CORE_ADDR lowpc = 0, highpc = 0;
1242 struct attribute *attr;
1243 struct die_info *child_die;
1244
1245 attr = dwarf_attr (die, DW_AT_low_pc);
1246 if (attr)
1247 {
1248 lowpc = DW_ADDR (attr);
1249 }
1250 attr = dwarf_attr (die, DW_AT_high_pc);
1251 if (attr)
1252 {
1253 highpc = DW_ADDR (attr);
1254 }
1255
1256 push_context (0, lowpc);
1257 if (die->has_children)
1258 {
1259 child_die = die->next;
1260 while (child_die && child_die->tag)
1261 {
1262 process_die (child_die, objfile);
1263 child_die = sibling_die (child_die);
1264 }
1265 }
1266 new = pop_context ();
1267
1268 if (local_symbols != NULL)
1269 {
1270 finish_block (0, &local_symbols, new->old_blocks, new->start_addr,
1271 highpc, objfile);
1272 }
1273 local_symbols = new->locals;
1274 }
1275
1276 /* Called when we find the DIE that starts a structure or union scope
1277 (definition) to process all dies that define the members of the
1278 structure or union.
1279
1280 NOTE: we need to call struct_type regardless of whether or not the
1281 DIE has an at_name attribute, since it might be an anonymous
1282 structure or union. This gets the type entered into our set of
1283 user defined types.
1284
1285 However, if the structure is incomplete (an opaque struct/union)
1286 then suppress creating a symbol table entry for it since gdb only
1287 wants to find the one with the complete definition. Note that if
1288 it is complete, we just call new_symbol, which does it's own
1289 checking about whether the struct/union is anonymous or not (and
1290 suppresses creating a symbol table entry itself). */
1291
1292 static void
1293 read_structure_scope (die, objfile)
1294 struct die_info *die;
1295 struct objfile *objfile;
1296 {
1297 struct type *type, *member_type;
1298 struct field *fields;
1299 struct die_info *child_die;
1300 struct attribute *attr;
1301 struct symbol *sym;
1302 int num_fields;
1303
1304 type = dwarf_alloc_type (objfile);
1305
1306 INIT_CPLUS_SPECIFIC (type);
1307 attr = dwarf_attr (die, DW_AT_name);
1308
1309 if (die->tag == DW_TAG_structure_type)
1310 {
1311 TYPE_CODE (type) = TYPE_CODE_STRUCT;
1312 if (attr)
1313 {
1314 TYPE_NAME (type) = obconcat (&objfile->type_obstack,
1315 "struct", " ", DW_STRING (attr));
1316 }
1317 }
1318 else
1319 {
1320 /* die->tag == DW_TAG_union_type */
1321 TYPE_CODE (type) = TYPE_CODE_UNION;
1322 if (attr)
1323 {
1324 TYPE_NAME (type) = obconcat (&objfile->type_obstack,
1325 "union", " ", DW_STRING (attr));
1326 }
1327 }
1328
1329 attr = dwarf_attr (die, DW_AT_byte_size);
1330 if (attr)
1331 {
1332 TYPE_LENGTH (type) = DW_UNSND (attr);
1333 }
1334 else
1335 {
1336 TYPE_LENGTH (type) = 0;
1337 }
1338
1339 /* We need to add the type field to the die immediately so we don't
1340 infinitely recurse when dealing with pointers to the structure
1341 type within the structure itself. */
1342 die->type = type;
1343
1344 num_fields = 0;
1345 fields = NULL;
1346 if (die->has_children)
1347 {
1348 child_die = die->next;
1349 while (child_die && child_die->tag)
1350 {
1351 if (child_die->tag != DW_TAG_member)
1352 {
1353 process_die (child_die, objfile);
1354 }
1355 else
1356 {
1357 if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
1358 {
1359 fields = (struct field *)
1360 xrealloc (fields,
1361 (num_fields + DW_FIELD_ALLOC_CHUNK)
1362 * sizeof (struct field));
1363 }
1364
1365 /* Get bit offset of field */
1366 attr = dwarf_attr (child_die, DW_AT_bit_offset);
1367 if (attr)
1368 {
1369 fields[num_fields].bitpos = DW_UNSND (attr);
1370 }
1371 else
1372 {
1373 fields[num_fields].bitpos = 0;
1374 }
1375 attr = dwarf_attr (child_die, DW_AT_data_member_location);
1376 if (attr)
1377 {
1378 fields[num_fields].bitpos +=
1379 decode_locdesc (DW_BLOCK (attr), objfile) * bits_per_byte;
1380 }
1381
1382 /* Get bit size of field (zero if none). */
1383 attr = dwarf_attr (child_die, DW_AT_bit_size);
1384 if (attr)
1385 {
1386 fields[num_fields].bitsize = DW_UNSND (attr);
1387 }
1388 else
1389 {
1390 fields[num_fields].bitsize = 0;
1391 }
1392
1393 /* Get type of member. */
1394 member_type = die_type (child_die, objfile);
1395 fields[num_fields].type = member_type;
1396
1397 /* Get name of member. */
1398 attr = dwarf_attr (child_die, DW_AT_name);
1399 if (attr)
1400 {
1401 fields[num_fields].name = obsavestring (DW_STRING (attr),
1402 strlen (DW_STRING (attr)),
1403 &objfile->type_obstack);
1404 #if 0
1405 fields[num_fields].name = strdup (DW_STRING (attr));
1406 #endif
1407 }
1408 num_fields++;
1409 }
1410 child_die = sibling_die (child_die);
1411 }
1412 type->nfields = num_fields;
1413 type->fields = fields;
1414 }
1415 else
1416 {
1417 /* No children, must be stub. */
1418 TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
1419 }
1420
1421 die->type = type;
1422 sym = new_symbol (die, objfile);
1423 if (sym != NULL)
1424 {
1425 SYMBOL_TYPE (sym) = type;
1426 }
1427 }
1428
1429 /* Given a pointer to a die which begins an enumeration, process all
1430 the dies that define the members of the enumeration.
1431
1432 This will be much nicer in draft 6 of the DWARF spec when our
1433 members will be dies instead squished into the DW_AT_element_list
1434 attribute.
1435
1436 NOTE: We reverse the order of the element list. */
1437
1438 static void
1439 read_enumeration (die, objfile)
1440 struct die_info *die;
1441 struct objfile *objfile;
1442 {
1443 struct die_info *child_die;
1444 struct type *type;
1445 struct field *fields;
1446 struct attribute *attr;
1447 struct symbol *sym;
1448 struct dwarf_block *blk;
1449 int num_fields;
1450 unsigned int size, bytes_read, i;
1451
1452 type = dwarf_alloc_type (objfile);
1453
1454 TYPE_CODE (type) = TYPE_CODE_ENUM;
1455 attr = dwarf_attr (die, DW_AT_name);
1456 if (attr)
1457 {
1458 TYPE_NAME (type) = obconcat (&objfile->type_obstack,
1459 "enum ", " ", DW_STRING (attr));
1460 }
1461
1462 attr = dwarf_attr (die, DW_AT_byte_size);
1463 if (attr)
1464 {
1465 TYPE_LENGTH (type) = DW_UNSND (attr);
1466 }
1467 else
1468 {
1469 TYPE_LENGTH (type) = 0;
1470 }
1471
1472 num_fields = 0;
1473 fields = NULL;
1474 if (die->has_children)
1475 {
1476 child_die = die->next;
1477 while (child_die && child_die->tag)
1478 {
1479 if (child_die->tag != DW_TAG_enumerator)
1480 {
1481 process_die (child_die, objfile);
1482 }
1483 else
1484 {
1485 if ((num_fields % DW_FIELD_ALLOC_CHUNK) == 0)
1486 {
1487 fields = (struct field *)
1488 xrealloc (fields,
1489 (num_fields + DW_FIELD_ALLOC_CHUNK)
1490 * sizeof (struct field));
1491 }
1492
1493 /* Handcraft a new symbol for this enum member. */
1494 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
1495 sizeof (struct symbol));
1496 memset (sym, 0, sizeof (struct symbol));
1497
1498 fields[num_fields].type = NULL;
1499 fields[num_fields].bitsize = 0;
1500 attr = dwarf_attr (child_die, DW_AT_name);
1501 if (attr)
1502 {
1503 fields[num_fields].name = strdup (DW_STRING (attr));
1504 SYMBOL_NAME (sym) = strdup (fields[num_fields].name);
1505 }
1506 attr = dwarf_attr (child_die, DW_AT_const_value);
1507 if (attr)
1508 {
1509 fields[num_fields].bitpos = DW_UNSND (attr);
1510 SYMBOL_VALUE (sym) = DW_UNSND (attr);
1511 }
1512
1513 #if 0
1514 SYMBOL_NAME (sym) = create_name (elist->str,
1515 &objfile->symbol_obstack);
1516 #endif
1517 SYMBOL_INIT_LANGUAGE_SPECIFIC (sym, cu_language);
1518 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1519 SYMBOL_CLASS (sym) = LOC_CONST;
1520 SYMBOL_TYPE (sym) = type;
1521 add_symbol_to_list (sym, list_in_scope);
1522
1523 num_fields++;
1524 }
1525
1526 child_die = sibling_die (child_die);
1527 }
1528 type->fields = fields;
1529 type->nfields = num_fields;
1530 }
1531 die->type = type;
1532 sym = new_symbol (die, objfile);
1533 if (sym != NULL)
1534 {
1535 SYMBOL_TYPE (sym) = type;
1536 }
1537 }
1538
1539 /* Extract all information from a DW_TAG_array_type DIE and put it in
1540 the DIE's type field. For now, this only handles one dimensional
1541 arrays. */
1542
1543 static void
1544 dwarf_read_array_type (die, objfile)
1545 struct die_info *die;
1546 struct objfile *objfile;
1547 {
1548 struct die_info *child_die;
1549 struct type *type, *element_type, *range_type, *index_type;
1550 struct attribute *attr;
1551 struct dwarf_block *blk;
1552 unsigned int size, i, type_form, bytes_read;
1553 unsigned int index_spec, lo_spec, hi_spec, type_ref;
1554 unsigned int low, high;
1555
1556 /* Return if we've already decoded this type. */
1557 if (die->type)
1558 {
1559 return;
1560 }
1561
1562 element_type = die_type (die, objfile);
1563
1564 low = 0;
1565 high = 1;
1566 if (cu_language == DW_LANG_Fortran77 || cu_language == DW_LANG_Fortran90)
1567 {
1568 /* FORTRAN implies a lower bound of 1, if not given. */
1569 low = 1;
1570 }
1571
1572 child_die = die->next;
1573 while (child_die && child_die->tag)
1574 {
1575 if (child_die->tag == DW_TAG_subrange_type)
1576 {
1577 index_type = die_type (child_die, objfile);
1578 attr = dwarf_attr (child_die, DW_AT_lower_bound);
1579 if (attr)
1580 {
1581 if (attr->form == DW_FORM_sdata)
1582 {
1583 low = DW_SND (attr);
1584 }
1585 else if (attr->form == DW_FORM_udata
1586 || attr->form == DW_FORM_data1
1587 || attr->form == DW_FORM_data2
1588 || attr->form == DW_FORM_data4)
1589 {
1590 low = DW_UNSND (attr);
1591 }
1592 else
1593 {
1594 if (!array_bound_warning_given)
1595 {
1596 warning ("Non-constant array bounds ignored.");
1597 array_bound_warning_given = 1;
1598 }
1599 #ifdef FORTRAN_HACK
1600 type = dwarf_alloc_type (objfile);
1601 TYPE_TARGET_TYPE (type) = element_type;
1602 TYPE_OBJFILE (type) = objfile;
1603 TYPE_LENGTH (type) = 4;
1604 TYPE_CODE (type) = TYPE_CODE_PTR;
1605 TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
1606 TYPE_POINTER_TYPE (element_type) = type;
1607 goto done;
1608 #else
1609 low = 0;
1610 #endif
1611 }
1612 }
1613 attr = dwarf_attr (child_die, DW_AT_upper_bound);
1614 if (attr)
1615 {
1616 if (attr->form == DW_FORM_sdata)
1617 {
1618 high = DW_SND (attr);
1619 }
1620 else if (attr->form == DW_FORM_udata
1621 || attr->form == DW_FORM_data1
1622 || attr->form == DW_FORM_data2
1623 || attr->form == DW_FORM_data4)
1624 {
1625 high = DW_UNSND (attr);
1626 }
1627 else
1628 {
1629 if (!array_bound_warning_given)
1630 {
1631 warning ("Non-constant array bounds ignored.");
1632 array_bound_warning_given = 1;
1633 }
1634 #ifdef FORTRAN_HACK
1635 type = dwarf_alloc_type (objfile);
1636 TYPE_TARGET_TYPE (type) = element_type;
1637 TYPE_OBJFILE (type) = objfile;
1638 TYPE_LENGTH (type) = 4;
1639 TYPE_CODE (type) = TYPE_CODE_PTR;
1640 TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
1641 TYPE_POINTER_TYPE (element_type) = type;
1642 goto done;
1643 #else
1644 high = 1;
1645 #endif
1646 }
1647 }
1648 }
1649 range_type = create_range_type (NULL, index_type, low, high);
1650 type = create_array_type (NULL, element_type, range_type);
1651 element_type = type;
1652 child_die = sibling_die (child_die);
1653 }
1654 done:
1655 /* Install the type in the die. */
1656 die->type = type;
1657 }
1658
1659 /* First cut: install each common block member as a global variable. */
1660
1661 static void
1662 read_common_block (die, objfile)
1663 struct die_info *die;
1664 struct objfile *objfile;
1665 {
1666 struct die_info *child_die;
1667 struct attribute *attr;
1668 struct symbol *sym;
1669 CORE_ADDR base;
1670
1671 attr = dwarf_attr (die, DW_AT_location);
1672 if (attr)
1673 {
1674 base = decode_locdesc (DW_BLOCK (attr), objfile);
1675 }
1676 if (die->has_children)
1677 {
1678 child_die = die->next;
1679 while (child_die && child_die->tag)
1680 {
1681 sym = new_symbol (child_die, objfile);
1682 attr = dwarf_attr (child_die, DW_AT_data_member_location);
1683 if (attr)
1684 {
1685 SYMBOL_VALUE_ADDRESS (sym) =
1686 base + decode_locdesc (DW_BLOCK (attr), objfile);
1687 add_symbol_to_list (sym, &global_symbols);
1688 }
1689 child_die = sibling_die (child_die);
1690 }
1691 }
1692 }
1693
1694 /* Extract all information from a DW_TAG_pointer_type DIE and add to
1695 the user defined type vector. */
1696
1697 static void
1698 read_tag_pointer_type (die, objfile)
1699 struct die_info *die;
1700 struct objfile *objfile;
1701 {
1702 struct type *type, *pointed_to_type;
1703 struct attribute *attr;
1704
1705 if (die->type)
1706 {
1707 return;
1708 }
1709
1710 pointed_to_type = die_type (die, objfile);
1711
1712 type = dwarf_alloc_type (objfile);
1713 TYPE_TARGET_TYPE (type) = pointed_to_type;
1714 TYPE_OBJFILE (type) = objfile;
1715 attr = dwarf_attr (die, DW_AT_byte_size);
1716 if (attr)
1717 {
1718 TYPE_LENGTH (type) = DW_UNSND (attr);
1719 }
1720 else
1721 {
1722 TYPE_LENGTH (type) = address_size;
1723 }
1724 TYPE_CODE (type) = TYPE_CODE_PTR;
1725 TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
1726
1727 TYPE_POINTER_TYPE (pointed_to_type) = type;
1728 die->type = type;
1729 }
1730
1731 static void
1732 read_tag_const_type (die, objfile)
1733 struct die_info *die;
1734 struct objfile *objfile;
1735 {
1736 if (die->type)
1737 {
1738 return;
1739 }
1740
1741 if (!tag_const_warning_given)
1742 {
1743 warning ("gdb ignores `const' qualifiers.");
1744 tag_const_warning_given = 1;
1745 }
1746
1747 die->type = die_type (die, objfile);
1748 }
1749
1750 static void
1751 read_tag_volatile_type (die, objfile)
1752 struct die_info *die;
1753 struct objfile *objfile;
1754 {
1755 if (die->type)
1756 {
1757 return;
1758 }
1759
1760 if (!tag_volatile_warning_given)
1761 {
1762 warning ("gdb ignores `volatile' qualifiers.");
1763 tag_volatile_warning_given = 1;
1764 }
1765
1766 die->type = die_type (die, objfile);
1767 }
1768
1769 /* Extract all information from a DW_TAG_string_type DIE and add to
1770 the user defined type vector. It isn't really a user defined type,
1771 but it behaves like one, with other DIE's using an AT_user_def_type
1772 attribute to reference it. */
1773
1774 static void
1775 read_tag_string_type (die, objfile)
1776 struct die_info *die;
1777 struct objfile *objfile;
1778 {
1779 struct type *type, *range_type, *index_type, *char_type;
1780 struct attribute *attr;
1781 unsigned int length;
1782
1783 if (die->type)
1784 {
1785 return;
1786 }
1787
1788 attr = dwarf_attr (die, DW_AT_string_length);
1789 if (attr)
1790 {
1791 length = DW_UNSND (attr);
1792 }
1793 else
1794 {
1795 length = 1;
1796 }
1797 index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
1798 range_type = create_range_type (NULL, index_type, 1, length);
1799 char_type = dwarf2_fundamental_type (objfile, FT_CHAR);
1800 type = create_string_type (char_type, range_type);
1801 die->type = type;
1802 }
1803
1804 /* Handle DIES due to C code like:
1805
1806 struct foo
1807 {
1808 int (*funcp)(int a, long l);
1809 int b;
1810 };
1811
1812 ('funcp' generates a DW_TAG_subroutine_type DIE)
1813
1814 NOTE: parameter DIES are currently ignored. See if gdb has a way to
1815 include this info in it's type system, and decode them if so. Is
1816 this what the type structure's "arg_types" field is for? (FIXME) */
1817
1818 static void
1819 read_subroutine_type (die, objfile)
1820 struct die_info *die;
1821 struct objfile *objfile;
1822 {
1823 struct type *type; /* Type that this function returns */
1824 struct type *ftype; /* Function that returns above type */
1825
1826 /* Decode the type that this subroutine returns */
1827 if (die->type)
1828 {
1829 return;
1830 }
1831 type = die_type (die, objfile);
1832 ftype = lookup_function_type (type);
1833
1834 TYPE_TARGET_TYPE (ftype) = type;
1835 TYPE_LENGTH (ftype) = 1;
1836 TYPE_CODE (ftype) = TYPE_CODE_FUNC;
1837 TYPE_OBJFILE (ftype) = objfile;
1838
1839 die->type = type;
1840 }
1841
1842 static void
1843 read_typedef (die, objfile)
1844 struct die_info *die;
1845 struct objfile *objfile;
1846 {
1847 struct type *type;
1848
1849 if (!die->type)
1850 {
1851 type = die_type (die, objfile);
1852 die->type = type;
1853 }
1854 }
1855
1856 /* Find a representation of a given base type and install
1857 it in the TYPE field of the die. */
1858
1859 static void
1860 read_base_type (die, objfile)
1861 struct die_info *die;
1862 struct objfile *objfile;
1863 {
1864 struct type *type;
1865 struct attribute *attr;
1866 int encoding = 0, size = 0;
1867
1868 /* If we've already decoded this die, this is a no-op. */
1869 if (die->type)
1870 {
1871 return;
1872 }
1873
1874 attr = dwarf_attr (die, DW_AT_encoding);
1875 if (attr)
1876 {
1877 encoding = DW_UNSND (attr);
1878 }
1879 attr = dwarf_attr (die, DW_AT_byte_size);
1880 if (attr)
1881 {
1882 size = DW_UNSND (attr);
1883 }
1884 type = dwarf_base_type (encoding, size);
1885 die->type = type;
1886 }
1887
1888 /* Read a whole compilation unit into a linked list of dies. */
1889
1890 struct die_info *
1891 read_comp_unit (info_ptr, abfd)
1892 char *info_ptr;
1893 bfd *abfd;
1894 {
1895 struct die_info *first_die, *last_die, *die;
1896 char *cur_ptr;
1897 int nesting_level;
1898
1899 cur_ptr = info_ptr;
1900 nesting_level = 0;
1901 first_die = last_die = NULL;
1902 do
1903 {
1904 cur_ptr = read_full_die (&die, abfd, cur_ptr);
1905 if (die->has_children)
1906 {
1907 nesting_level++;
1908 }
1909 if (die->tag == 0)
1910 {
1911 nesting_level--;
1912 }
1913
1914 die->next = NULL;
1915
1916 /* Enter die in reference hash table */
1917 store_in_ref_table (die->offset, die);
1918
1919 if (!first_die)
1920 {
1921 first_die = last_die = die;
1922 }
1923 else
1924 {
1925 last_die->next = die;
1926 last_die = die;
1927 }
1928 }
1929 while (nesting_level > 0);
1930 return first_die;
1931 }
1932
1933 /* Free a linked list of dies. */
1934
1935 static void
1936 free_die_list (dies)
1937 struct die_info *dies;
1938 {
1939 struct die_info *die, *next;
1940
1941 die = dies;
1942 while (die)
1943 {
1944 next = die->next;
1945 free (die->attrs);
1946 free (die);
1947 die = next;
1948 }
1949 }
1950
1951 /* Read the contents of the section at OFFSET and of size SIZE in the
1952 object file specified by ABFD into a buffer of bytes and return it. */
1953
1954 static char *
1955 dwarf2_read_section (abfd, offset, size)
1956 bfd * abfd;
1957 file_ptr offset;
1958 unsigned int size;
1959 {
1960 char *buf;
1961
1962 buf = xmalloc (size);
1963 if ((bfd_seek (abfd, offset, SEEK_SET) != 0) ||
1964 (bfd_read (buf, size, 1, abfd) != size))
1965 {
1966 free (buf);
1967 buf = NULL;
1968 error ("Dwarf Error: Can't read DWARF data from '%s'",
1969 bfd_get_filename (abfd));
1970 }
1971 return buf;
1972 }
1973
1974 /* In DWARF version 2, the description of the debugging information is
1975 stored in a separate .debug_abbrev section. Before we read any
1976 dies from a section we read in all abbreviations and install them
1977 in a hash table. */
1978
1979 static void
1980 dwarf2_read_abbrevs (abfd, offset)
1981 bfd * abfd;
1982 unsigned int offset;
1983 {
1984 char *abbrev_ptr;
1985 struct abbrev_info *cur_abbrev;
1986 unsigned int abbrev_number, bytes_read, abbrev_name;
1987 unsigned int abbrev_form, hash_number;
1988
1989 /* empty the table */
1990 dwarf2_empty_abbrev_table ();
1991
1992 abbrev_ptr = dwarf_abbrev_buffer + offset;
1993 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
1994 abbrev_ptr += bytes_read;
1995
1996 /* loop until we reach an abbrev number of 0 */
1997 while (abbrev_number)
1998 {
1999 cur_abbrev = dwarf_alloc_abbrev ();
2000
2001 /* read in abbrev header */
2002 cur_abbrev->number = abbrev_number;
2003 cur_abbrev->tag = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
2004 abbrev_ptr += bytes_read;
2005 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
2006 abbrev_ptr += 1;
2007
2008 /* now read in declarations */
2009 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
2010 abbrev_ptr += bytes_read;
2011 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
2012 abbrev_ptr += bytes_read;
2013 while (abbrev_name)
2014 {
2015 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
2016 {
2017 cur_abbrev->attrs = xrealloc (cur_abbrev->attrs,
2018 (cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK)
2019 * sizeof (struct attr_abbrev));
2020 }
2021 cur_abbrev->attrs[cur_abbrev->num_attrs].name = abbrev_name;
2022 cur_abbrev->attrs[cur_abbrev->num_attrs++].form = abbrev_form;
2023 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
2024 abbrev_ptr += bytes_read;
2025 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
2026 abbrev_ptr += bytes_read;
2027 }
2028
2029 hash_number = abbrev_number % ABBREV_HASH_SIZE;
2030 cur_abbrev->next = dwarf2_abbrevs[hash_number];
2031 dwarf2_abbrevs[hash_number] = cur_abbrev;
2032
2033 /* get next abbrev */
2034 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
2035 abbrev_ptr += bytes_read;
2036 }
2037 }
2038
2039 /* Empty the abbrev table for a new compilation unit. */
2040
2041 static void
2042 dwarf2_empty_abbrev_table ()
2043 {
2044 int i;
2045 struct abbrev_info *abbrev, *next;
2046
2047 for (i = 0; i < ABBREV_HASH_SIZE; ++i)
2048 {
2049 next = NULL;
2050 abbrev = dwarf2_abbrevs[i];
2051 while (abbrev)
2052 {
2053 next = abbrev->next;
2054 free (abbrev->attrs);
2055 free (abbrev);
2056 abbrev = next;
2057 }
2058 dwarf2_abbrevs[i] = NULL;
2059 }
2060 }
2061
2062 /* Lookup an abbrev_info structure in the abbrev hash table. */
2063
2064 static struct abbrev_info *
2065 dwarf2_lookup_abbrev (number)
2066 unsigned int number;
2067 {
2068 unsigned int hash_number;
2069 struct abbrev_info *abbrev;
2070
2071 hash_number = number % ABBREV_HASH_SIZE;
2072 abbrev = dwarf2_abbrevs[hash_number];
2073
2074 while (abbrev)
2075 {
2076 if (abbrev->number == number)
2077 return abbrev;
2078 else
2079 abbrev = abbrev->next;
2080 }
2081 return NULL;
2082 }
2083
2084 /* Read a minimal amount of information into the minimal die structure. */
2085
2086 static char *
2087 read_partial_die (part_die, abfd, info_ptr, has_pc_info)
2088 struct partial_die_info *part_die;
2089 bfd * abfd;
2090 char *info_ptr;
2091 int *has_pc_info;
2092 {
2093 unsigned int abbrev_number, bytes_read, i;
2094 struct abbrev_info *abbrev;
2095 char ebuf[256];
2096 int has_low_pc_attr = 0;
2097 int has_high_pc_attr = 0;
2098
2099 *has_pc_info = 0;
2100 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2101 info_ptr += bytes_read;
2102 if (!abbrev_number)
2103 {
2104 part_die->tag = 0;
2105 part_die->has_children = 0;
2106 part_die->abbrev = abbrev_number;
2107 return info_ptr;
2108 }
2109
2110 abbrev = dwarf2_lookup_abbrev (abbrev_number);
2111 if (!abbrev)
2112 {
2113 error ("Dwarf Error: Could not find abbrev number %d.", abbrev_number);
2114 }
2115 part_die->offset = info_ptr - dwarf_info_buffer;
2116 part_die->tag = abbrev->tag;
2117 part_die->has_children = abbrev->has_children;
2118 part_die->is_external = 0;
2119 part_die->abbrev = abbrev_number;
2120
2121 {
2122 char *str = "";
2123 struct dwarf_block *blk = 0;
2124 CORE_ADDR addr = ((CORE_ADDR) -1);
2125 unsigned int unsnd = ((unsigned int) -1);
2126 int snd = -1;
2127
2128 for (i = 0; i < abbrev->num_attrs; ++i)
2129 {
2130 /* read the correct type of data */
2131 switch (abbrev->attrs[i].form)
2132 {
2133 case DW_FORM_addr:
2134 addr = read_address (abfd, info_ptr);
2135 info_ptr += address_size;
2136 break;
2137 case DW_FORM_ref_addr:
2138 addr = read_address (abfd, info_ptr);
2139 info_ptr += address_size;
2140 break;
2141 case DW_FORM_block2:
2142 blk = dwarf_alloc_block ();
2143 blk->size = read_2_bytes (abfd, info_ptr);
2144 info_ptr += 2;
2145 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2146 info_ptr += blk->size;
2147 break;
2148 case DW_FORM_block4:
2149 blk = dwarf_alloc_block ();
2150 blk->size = read_4_bytes (abfd, info_ptr);
2151 info_ptr += 2;
2152 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2153 info_ptr += blk->size;
2154 break;
2155 case DW_FORM_data2:
2156 unsnd = read_2_bytes (abfd, info_ptr);
2157 info_ptr += 2;
2158 break;
2159 case DW_FORM_data4:
2160 unsnd = read_4_bytes (abfd, info_ptr);
2161 info_ptr += 4;
2162 break;
2163 case DW_FORM_data8:
2164 unsnd = read_8_bytes (abfd, info_ptr);
2165 info_ptr += 8;
2166 break;
2167 case DW_FORM_string:
2168 str = read_string (abfd, info_ptr, &bytes_read);
2169 info_ptr += bytes_read;
2170 break;
2171 case DW_FORM_block:
2172 blk = dwarf_alloc_block ();
2173 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2174 info_ptr += bytes_read;
2175 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2176 info_ptr += blk->size;
2177 break;
2178 case DW_FORM_block1:
2179 blk = dwarf_alloc_block ();
2180 blk->size = read_1_byte (abfd, info_ptr);
2181 info_ptr += 1;
2182 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2183 info_ptr += blk->size;
2184 break;
2185 case DW_FORM_data1:
2186 unsnd = read_1_byte (abfd, info_ptr);
2187 info_ptr += 1;
2188 break;
2189 case DW_FORM_ref1:
2190 unsnd = read_1_byte (abfd, info_ptr);
2191 info_ptr += 1;
2192 break;
2193 case DW_FORM_ref2:
2194 unsnd = read_2_bytes (abfd, info_ptr);
2195 info_ptr += 2;
2196 break;
2197 case DW_FORM_ref4:
2198 unsnd = read_4_bytes (abfd, info_ptr);
2199 info_ptr += 4;
2200 break;
2201 case DW_FORM_ref_udata:
2202 unsnd = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2203 info_ptr += bytes_read;
2204 break;
2205 case DW_FORM_flag:
2206 unsnd = read_1_byte (abfd, info_ptr);
2207 info_ptr += 1;
2208 break;
2209 case DW_FORM_sdata:
2210 snd = read_signed_leb128 (abfd, info_ptr, &bytes_read);
2211 info_ptr += bytes_read;
2212 break;
2213 case DW_FORM_udata:
2214 unsnd = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2215 info_ptr += bytes_read;
2216 break;
2217 case DW_FORM_indirect:
2218 default:
2219 sprintf (ebuf,
2220 "Dwarf Error: Cannot handle %s in DWARF reader.",
2221 dwarf_form_name (abbrev->attrs[i].form));
2222 error (ebuf);
2223 }
2224
2225 /* store the data if it is of an attribute we want to keep in a
2226 partial symbol table */
2227 switch (abbrev->attrs[i].name)
2228 {
2229 case DW_AT_name:
2230 part_die->name = str;
2231 break;
2232 case DW_AT_low_pc:
2233 has_low_pc_attr = 1;
2234 part_die->lowpc = addr;
2235 break;
2236 case DW_AT_high_pc:
2237 has_high_pc_attr = 1;
2238 part_die->highpc = addr;
2239 break;
2240 case DW_AT_location:
2241 part_die->locdesc = blk;
2242 break;
2243 case DW_AT_language:
2244 part_die->language = unsnd;
2245 break;
2246 case DW_AT_external:
2247 part_die->is_external = unsnd;
2248 }
2249 }
2250 }
2251 *has_pc_info = has_low_pc_attr && has_high_pc_attr;
2252 return info_ptr;
2253 }
2254
2255 /* Read the die from the .debug_info section buffer. And set diep to
2256 point to a newly allocated die with its information. */
2257
2258 static char *
2259 read_full_die (diep, abfd, info_ptr)
2260 struct die_info **diep;
2261 bfd *abfd;
2262 char *info_ptr;
2263 {
2264 unsigned int abbrev_number, bytes_read, i, offset;
2265 struct abbrev_info *abbrev;
2266 struct die_info *die;
2267 char ebuf[256];
2268
2269 offset = info_ptr - dwarf_info_buffer;
2270 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2271 info_ptr += bytes_read;
2272 if (!abbrev_number)
2273 {
2274 die = dwarf_alloc_die ();
2275 die->tag = 0;
2276 die->abbrev = abbrev_number;
2277 die->type = NULL;
2278 *diep = die;
2279 return info_ptr;
2280 }
2281
2282 abbrev = dwarf2_lookup_abbrev (abbrev_number);
2283 if (!abbrev)
2284 {
2285 error ("Dwarf Error: could not find abbrev number %d.", abbrev_number);
2286 }
2287 die = dwarf_alloc_die ();
2288 die->offset = offset;
2289 die->tag = abbrev->tag;
2290 die->has_children = abbrev->has_children;
2291 die->abbrev = abbrev_number;
2292 die->type = NULL;
2293
2294 die->num_attrs = abbrev->num_attrs;
2295 die->attrs = xmalloc (die->num_attrs * sizeof (struct attribute));
2296
2297 {
2298 char *str;
2299 struct dwarf_block *blk;
2300 unsigned long addr;
2301 unsigned int unsnd;
2302 int snd;
2303
2304 for (i = 0; i < abbrev->num_attrs; ++i)
2305 {
2306 /* read the correct type of data */
2307
2308 die->attrs[i].name = abbrev->attrs[i].name;
2309 die->attrs[i].form = abbrev->attrs[i].form;
2310
2311 switch (abbrev->attrs[i].form)
2312 {
2313 case DW_FORM_addr:
2314 case DW_FORM_ref_addr:
2315 die->attrs[i].u.addr = read_address (abfd, info_ptr);
2316 info_ptr += address_size;
2317 break;
2318 case DW_FORM_block2:
2319 blk = dwarf_alloc_block ();
2320 blk->size = read_2_bytes (abfd, info_ptr);
2321 info_ptr += 2;
2322 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2323 info_ptr += blk->size;
2324 die->attrs[i].u.blk = blk;
2325 break;
2326 case DW_FORM_block4:
2327 blk = dwarf_alloc_block ();
2328 blk->size = read_4_bytes (abfd, info_ptr);
2329 info_ptr += 2;
2330 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2331 info_ptr += blk->size;
2332 die->attrs[i].u.blk = blk;
2333 break;
2334 case DW_FORM_data2:
2335 die->attrs[i].u.unsnd = read_2_bytes (abfd, info_ptr);
2336 info_ptr += 2;
2337 break;
2338 case DW_FORM_data4:
2339 die->attrs[i].u.unsnd = read_4_bytes (abfd, info_ptr);
2340 info_ptr += 4;
2341 break;
2342 case DW_FORM_data8:
2343 die->attrs[i].u.unsnd = read_8_bytes (abfd, info_ptr);
2344 info_ptr += 8;
2345 break;
2346 case DW_FORM_string:
2347 die->attrs[i].u.str = read_string (abfd, info_ptr, &bytes_read);
2348 info_ptr += bytes_read;
2349 break;
2350 case DW_FORM_block:
2351 blk = dwarf_alloc_block ();
2352 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2353 info_ptr += bytes_read;
2354 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2355 info_ptr += blk->size;
2356 die->attrs[i].u.blk = blk;
2357 break;
2358 case DW_FORM_block1:
2359 blk = dwarf_alloc_block ();
2360 blk->size = read_1_byte (abfd, info_ptr);
2361 info_ptr += 1;
2362 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
2363 info_ptr += blk->size;
2364 die->attrs[i].u.blk = blk;
2365 break;
2366 case DW_FORM_data1:
2367 die->attrs[i].u.unsnd = read_1_byte (abfd, info_ptr);
2368 info_ptr += 1;
2369 break;
2370 case DW_FORM_ref1:
2371 die->attrs[i].u.unsnd = read_1_byte (abfd, info_ptr);
2372 info_ptr += 1;
2373 break;
2374 case DW_FORM_ref2:
2375 die->attrs[i].u.unsnd = read_2_bytes (abfd, info_ptr);
2376 info_ptr += 2;
2377 break;
2378 case DW_FORM_ref4:
2379 die->attrs[i].u.unsnd = read_4_bytes (abfd, info_ptr);
2380 info_ptr += 4;
2381 break;
2382 case DW_FORM_ref_udata:
2383 die->attrs[i].u.unsnd = read_unsigned_leb128 (abfd,
2384 info_ptr,
2385 &bytes_read);
2386 info_ptr += bytes_read;
2387 break;
2388 case DW_FORM_flag:
2389 die->attrs[i].u.unsnd = read_1_byte (abfd, info_ptr);
2390 info_ptr += 1;
2391 break;
2392 case DW_FORM_sdata:
2393 die->attrs[i].u.snd = read_signed_leb128 (abfd,
2394 info_ptr,
2395 &bytes_read);
2396 info_ptr += bytes_read;
2397 break;
2398 case DW_FORM_udata:
2399 die->attrs[i].u.unsnd = read_unsigned_leb128 (abfd,
2400 info_ptr,
2401 &bytes_read);
2402 info_ptr += bytes_read;
2403 break;
2404 case DW_FORM_indirect:
2405 default:
2406 sprintf (ebuf,
2407 "Dwarf Error: Cannot handle %s in DWARF reader.",
2408 dwarf_form_name (abbrev->attrs[i].form));
2409 error (ebuf);
2410 }
2411
2412 }
2413 }
2414 *diep = die;
2415 return info_ptr;
2416 }
2417
2418 /* read dwarf information from a buffer */
2419
2420 static unsigned int
2421 read_1_byte (abfd, buf)
2422 bfd *abfd;
2423 char *buf;
2424 {
2425 return bfd_get_8 (abfd, (bfd_byte *) buf);
2426 }
2427
2428 static unsigned int
2429 read_2_bytes (abfd, buf)
2430 bfd *abfd;
2431 char *buf;
2432 {
2433 return bfd_get_16 (abfd, (bfd_byte *) buf);
2434 }
2435
2436 static unsigned int
2437 read_4_bytes (abfd, buf)
2438 bfd *abfd;
2439 char *buf;
2440 {
2441 return bfd_get_32 (abfd, (bfd_byte *) buf);
2442 }
2443
2444 static unsigned int
2445 read_8_bytes (abfd, buf)
2446 bfd *abfd;
2447 char *buf;
2448 {
2449 return bfd_get_64 (abfd, (bfd_byte *) buf);
2450 }
2451
2452 static CORE_ADDR
2453 read_address (abfd, buf)
2454 bfd *abfd;
2455 char *buf;
2456 {
2457 CORE_ADDR retval = 0;
2458
2459 if (address_size == 4)
2460 {
2461 retval = bfd_get_32 (abfd, (bfd_byte *) buf);
2462 } else { /* *THE* alternative is 8, right? */
2463 retval = bfd_get_64 (abfd, (bfd_byte *) buf);
2464 }
2465 return retval;
2466 }
2467
2468 static char *
2469 read_n_bytes (abfd, buf, size)
2470 bfd * abfd;
2471 char *buf;
2472 unsigned int size;
2473 {
2474 char *ret;
2475 unsigned int i;
2476
2477 ret = xmalloc (size);
2478 for (i = 0; i < size; ++i)
2479 {
2480 ret[i] = bfd_get_8 (abfd, (bfd_byte *) buf);
2481 buf++;
2482 }
2483 return ret;
2484 }
2485
2486 /* FIXME : hardwired string size limit */
2487
2488 static char *
2489 read_string (abfd, buf, bytes_read_ptr)
2490 bfd *abfd;
2491 char *buf;
2492 unsigned int *bytes_read_ptr;
2493 {
2494 char ret_buf[DWARF2_MAX_STRING_SIZE], *ret, byte;
2495 unsigned int i;
2496
2497 i = 0;
2498 do
2499 {
2500 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
2501 buf++;
2502 ret_buf[i++] = byte;
2503 }
2504 while (byte);
2505 if (i == 1)
2506 {
2507 *bytes_read_ptr = 1;
2508 return NULL;
2509 }
2510 ret = xmalloc (i);
2511 strncpy (ret, ret_buf, i);
2512 *bytes_read_ptr = i;
2513 return ret;
2514 }
2515
2516 static unsigned int
2517 read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
2518 bfd *abfd;
2519 char *buf;
2520 unsigned int *bytes_read_ptr;
2521 {
2522 unsigned int result, num_read;
2523 int i, shift;
2524 unsigned char byte;
2525
2526 result = 0;
2527 shift = 0;
2528 num_read = 0;
2529 i = 0;
2530 while (1)
2531 {
2532 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
2533 buf++;
2534 num_read++;
2535 result |= ((byte & 127) << shift);
2536 if ((byte & 128) == 0)
2537 {
2538 break;
2539 }
2540 shift += 7;
2541 }
2542 *bytes_read_ptr = num_read;
2543 return result;
2544 }
2545
2546 static int
2547 read_signed_leb128 (abfd, buf, bytes_read_ptr)
2548 bfd *abfd;
2549 char *buf;
2550 unsigned int *bytes_read_ptr;
2551 {
2552 int result;
2553 int i, shift, size, num_read;
2554 unsigned char byte;
2555
2556 result = 0;
2557 shift = 0;
2558 size = 32;
2559 num_read = 0;
2560 i = 0;
2561 while (1)
2562 {
2563 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
2564 buf++;
2565 num_read++;
2566 result |= ((byte & 127) << shift);
2567 shift += 7;
2568 if ((byte & 128) == 0)
2569 {
2570 break;
2571 }
2572 }
2573 if ((shift < size) && (byte & 0x40))
2574 {
2575 result |= -(1 << shift);
2576 }
2577 *bytes_read_ptr = num_read;
2578 return result;
2579 }
2580
2581 static void
2582 set_cu_language (lang)
2583 unsigned int lang;
2584 {
2585 switch (lang)
2586 {
2587 case DW_LANG_C89:
2588 case DW_LANG_C:
2589 case DW_LANG_Fortran77:
2590 cu_language = language_c;
2591 break;
2592 case DW_LANG_C_plus_plus:
2593 cu_language = language_cplus;
2594 break;
2595 case DW_LANG_Ada83:
2596 case DW_LANG_Cobol74:
2597 case DW_LANG_Cobol85:
2598 #if 0
2599 case DW_LANG_Fortran77: /* moved up top for now */
2600 #endif
2601 case DW_LANG_Fortran90:
2602 case DW_LANG_Pascal83:
2603 case DW_LANG_Modula2:
2604 default:
2605 cu_language = language_unknown;
2606 break;
2607 }
2608 cu_language_defn = language_def (cu_language);
2609 }
2610
2611 static void
2612 record_minimal_symbol (name, address, ms_type, objfile)
2613 char *name;
2614 CORE_ADDR address;
2615 enum minimal_symbol_type ms_type;
2616 struct objfile *objfile;
2617 {
2618 name = obsavestring (name, strlen (name), &objfile->symbol_obstack);
2619 prim_record_minimal_symbol (name, address, ms_type, objfile);
2620 }
2621
2622 /* Converts a location description into gdb form. */
2623
2624 static int
2625 convert_locdesc (blk)
2626 struct dwarf_block *blk;
2627 {
2628 /* FIXME : this is only a stub! */
2629 return 0;
2630 }
2631
2632 /* Return the named attribute or NULL if not there. */
2633
2634 static struct attribute *
2635 dwarf_attr (die, name)
2636 struct die_info *die;
2637 unsigned int name;
2638 {
2639 unsigned int i;
2640
2641 for (i = 0; i < die->num_attrs; ++i)
2642 {
2643 if (die->attrs[i].name == name)
2644 {
2645 return &die->attrs[i];
2646 }
2647 }
2648 return NULL;
2649 }
2650
2651 /* Decode the line number information for the compilation unit whose
2652 line number info is at OFFSET in the .debug_line section. */
2653
2654 struct filenames
2655 {
2656 int num_files;
2657 struct fileinfo
2658 {
2659 char *name;
2660 unsigned int dir;
2661 unsigned int time;
2662 unsigned int size;
2663 }
2664 *files;
2665 };
2666
2667 struct directories
2668 {
2669 int num_dirs;
2670 char **dirs;
2671 };
2672
2673 static void
2674 dwarf_decode_lines (offset, abfd)
2675 unsigned int offset;
2676 bfd *abfd;
2677 {
2678 char *line_ptr;
2679 struct line_head lh;
2680 struct cleanup *back_to;
2681 unsigned int i, bytes_read;
2682 char *cur_file, *cur_dir;
2683 unsigned char op_code, extended_op, adj_opcode;
2684
2685 #define FILE_ALLOC_CHUNK 5
2686 #define DIR_ALLOC_CHUNK 5
2687
2688 struct filenames files;
2689 struct directories dirs;
2690
2691 /* state machine registers */
2692 unsigned int address = 0;
2693 unsigned int file = 1;
2694 unsigned int line = 1;
2695 unsigned int column = 0;
2696 int is_stmt; /* initialized below */
2697 int basic_block = 0;
2698 int beg_of_comp_unit = 0; /* is this right? */
2699 int end_sequence = 0;
2700
2701 files.num_files = 0;
2702 files.files = NULL;
2703
2704 dirs.num_dirs = 0;
2705 dirs.dirs = NULL;
2706
2707 line_ptr = dwarf_line_buffer + offset;
2708
2709 /* read in the prologue */
2710 lh.total_length = read_4_bytes (abfd, line_ptr);
2711 line_ptr += 4;
2712 lh.version = read_2_bytes (abfd, line_ptr);
2713 line_ptr += 2;
2714 lh.prologue_length = read_4_bytes (abfd, line_ptr);
2715 line_ptr += 4;
2716 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
2717 line_ptr += 1;
2718 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
2719 is_stmt = lh.default_is_stmt;
2720 line_ptr += 1;
2721 lh.line_base = read_1_byte (abfd, line_ptr);
2722 line_ptr += 1;
2723 lh.line_range = read_1_byte (abfd, line_ptr);
2724 line_ptr += 1;
2725 lh.opcode_base = read_1_byte (abfd, line_ptr);
2726 line_ptr += 1;
2727 lh.standard_opcode_lengths = (unsigned char *)
2728 xmalloc (lh.opcode_base * sizeof (unsigned char));
2729 back_to = make_cleanup (free, lh.standard_opcode_lengths);
2730
2731 lh.standard_opcode_lengths[0] = 1;
2732 for (i = 1; i < lh.opcode_base; ++i)
2733 {
2734 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
2735 line_ptr += 1;
2736 }
2737
2738 /* Read directory table */
2739 while (cur_dir = read_string (abfd, line_ptr, &bytes_read))
2740 {
2741 line_ptr += bytes_read;
2742 if ((dirs.num_dirs % DIR_ALLOC_CHUNK) == 0)
2743 {
2744 dirs.dirs = xrealloc (dirs.dirs,
2745 (dirs.num_dirs + DIR_ALLOC_CHUNK) * sizeof (char *));
2746 }
2747 dirs.dirs[dirs.num_dirs++] = cur_dir;
2748 }
2749 line_ptr += bytes_read;
2750
2751 /* Read file name table */
2752 while (cur_file = read_string (abfd, line_ptr, &bytes_read))
2753 {
2754 line_ptr += bytes_read;
2755 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
2756 {
2757 files.files = xrealloc (files.files,
2758 (files.num_files + FILE_ALLOC_CHUNK) * sizeof (struct fileinfo));
2759 }
2760 files.files[files.num_files].name = cur_file;
2761 files.files[files.num_files].dir = read_unsigned_leb128 (abfd,
2762 line_ptr, &bytes_read);
2763 line_ptr += bytes_read;
2764 files.files[files.num_files].time = read_unsigned_leb128 (abfd,
2765 line_ptr, &bytes_read);
2766 line_ptr += bytes_read;
2767 files.files[files.num_files].size = read_unsigned_leb128 (abfd,
2768 line_ptr, &bytes_read);
2769 line_ptr += bytes_read;
2770 files.num_files++;
2771 }
2772 line_ptr += bytes_read;
2773
2774 /* Decode the table. */
2775 if (lh.total_length - (lh.prologue_length + 4 + 2) >= 4)
2776 do
2777 {
2778 op_code = read_1_byte (abfd, line_ptr);
2779 line_ptr += 1;
2780 switch (op_code)
2781 {
2782 case DW_LNS_extended_op:
2783 line_ptr += 1; /* ignore length */
2784 extended_op = read_1_byte (abfd, line_ptr);
2785 line_ptr += 1;
2786 switch (extended_op)
2787 {
2788 case DW_LNE_end_sequence:
2789 end_sequence = 1;
2790 record_line (current_subfile, line, address);
2791 return; /* return! */
2792 break;
2793 case DW_LNE_set_address:
2794 address = read_address (abfd, line_ptr);
2795 line_ptr += address_size;
2796 break;
2797 case DW_LNE_define_file:
2798 cur_file = read_string (abfd, line_ptr, &bytes_read);
2799 line_ptr += bytes_read;
2800 if ((files.num_files % FILE_ALLOC_CHUNK) == 0)
2801 {
2802 files.files = xrealloc (files.files,
2803 (files.num_files + FILE_ALLOC_CHUNK)
2804 * sizeof (struct fileinfo));
2805 }
2806 files.files[files.num_files].name = cur_file;
2807 files.files[files.num_files].dir = read_unsigned_leb128 (
2808 abfd, line_ptr, &bytes_read);
2809 line_ptr += bytes_read;
2810 files.files[files.num_files].time = read_unsigned_leb128 (abfd,
2811 line_ptr, &bytes_read);
2812 line_ptr += bytes_read;
2813 files.files[files.num_files].size = read_unsigned_leb128 (abfd,
2814 line_ptr, &bytes_read);
2815 line_ptr += bytes_read;
2816 break;
2817 default:
2818 error ("Dwarf Error: Mangled .debug_line section.");
2819 return;
2820 }
2821 break;
2822 case DW_LNS_copy:
2823 record_line (current_subfile, line, address);
2824 basic_block = 0;
2825 break;
2826 case DW_LNS_advance_pc:
2827 address += lh.minimum_instruction_length
2828 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
2829 line_ptr += bytes_read;
2830 break;
2831 case DW_LNS_advance_line:
2832 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
2833 line_ptr += bytes_read;
2834 break;
2835 case DW_LNS_set_file:
2836 /* The file table is 0 based and the references are 1
2837 based, thus the subtraction of `1' at the end of the
2838 next line */
2839 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read) - 1;
2840 start_subfile (files.files[file].name,
2841 (files.files[file].dir ?
2842 dirs.dirs[files.files[file].dir] : 0));
2843 line_ptr += bytes_read;
2844 break;
2845 case DW_LNS_set_column:
2846 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
2847 line_ptr += bytes_read;
2848 break;
2849 case DW_LNS_negate_stmt:
2850 is_stmt = (!is_stmt);
2851 break;
2852 case DW_LNS_set_basic_block:
2853 basic_block = 1;
2854 break;
2855 case DW_LNS_const_add_pc:
2856 address += (255 - lh.opcode_base) / lh.line_range;
2857 break;
2858 case DW_LNS_fixed_advance_pc:
2859 address += read_2_bytes (abfd, line_ptr);
2860 line_ptr += 2;
2861 break;
2862 default: /* special operand */
2863 adj_opcode = op_code - lh.opcode_base;
2864 address += (adj_opcode / lh.line_range)
2865 * lh.minimum_instruction_length;
2866 line += lh.line_base + (adj_opcode % lh.line_range);
2867 /* append row to matrix using current values */
2868 record_line (current_subfile, line, address);
2869 basic_block = 1;
2870 }
2871 }
2872 while (1);
2873 do_cleanups (back_to);
2874 }
2875
2876 /* Given a pointer to a DWARF information entry, figure out if we need
2877 to make a symbol table entry for it, and if so, create a new entry
2878 and return a pointer to it. */
2879
2880 static struct symbol *
2881 new_symbol (die, objfile)
2882 struct die_info *die;
2883 struct objfile *objfile;
2884 {
2885 struct symbol *sym = NULL;
2886 struct attribute *attr = NULL;
2887 struct attribute *attr2 = NULL;
2888 CORE_ADDR addr;
2889
2890 attr = dwarf_attr (die, DW_AT_name);
2891 if (attr)
2892 {
2893 #if 0
2894 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
2895 sizeof (struct symbol));
2896 #endif
2897 sym = (struct symbol *) xmalloc (sizeof (struct symbol));
2898 memset (sym, 0, sizeof (struct symbol));
2899 #if 0
2900 SYMBOL_NAME (sym) = create_name (DW_STRING (attr),
2901 &objfile->symbol_obstack);
2902 #endif
2903 SYMBOL_NAME (sym) = strdup (DW_STRING (attr));
2904 /* default assumptions */
2905 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2906 SYMBOL_CLASS (sym) = LOC_STATIC;
2907 SYMBOL_TYPE (sym) = die_type (die, objfile);
2908
2909 /* If this symbol is from a C++ compilation, then attempt to
2910 cache the demangled form for future reference. This is a
2911 typical time versus space tradeoff, that was decided in favor
2912 of time because it sped up C++ symbol lookups by a factor of
2913 about 20. */
2914
2915 SYMBOL_LANGUAGE (sym) = cu_language;
2916 SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
2917 switch (die->tag)
2918 {
2919 case DW_TAG_label:
2920 attr = dwarf_attr (die, DW_AT_low_pc);
2921 if (attr)
2922 {
2923 SYMBOL_VALUE_ADDRESS (sym) = DW_ADDR (attr);
2924 }
2925 SYMBOL_CLASS (sym) = LOC_LABEL;
2926 break;
2927 case DW_TAG_subprogram:
2928 attr = dwarf_attr (die, DW_AT_low_pc);
2929 if (attr)
2930 {
2931 SYMBOL_VALUE_ADDRESS (sym) = DW_ADDR (attr);
2932 }
2933 SYMBOL_TYPE (sym) = make_function_type (die_type (die, objfile),
2934 NULL);
2935 SYMBOL_CLASS (sym) = LOC_BLOCK;
2936 attr2 = dwarf_attr (die, DW_AT_external);
2937 if (attr2 && (DW_UNSND (attr2) != 0))
2938 {
2939 add_symbol_to_list (sym, &global_symbols);
2940 }
2941 else
2942 {
2943 add_symbol_to_list (sym, list_in_scope);
2944 }
2945 break;
2946 case DW_TAG_variable:
2947 attr = dwarf_attr (die, DW_AT_location);
2948 if (attr)
2949 {
2950 attr2 = dwarf_attr (die, DW_AT_external);
2951 if (attr2 && (DW_UNSND (attr2) != 0))
2952 {
2953 SYMBOL_VALUE_ADDRESS (sym) =
2954 decode_locdesc (DW_BLOCK (attr), objfile);
2955 add_symbol_to_list (sym, &global_symbols);
2956 SYMBOL_CLASS (sym) = LOC_STATIC;
2957 SYMBOL_VALUE_ADDRESS (sym) += baseaddr;
2958 }
2959 else
2960 {
2961 SYMBOL_VALUE (sym) = addr =
2962 decode_locdesc (DW_BLOCK (attr), objfile);
2963 add_symbol_to_list (sym, list_in_scope);
2964 if (isreg)
2965 {
2966 SYMBOL_CLASS (sym) = LOC_REGISTER;
2967 }
2968 else if (offreg)
2969 {
2970 SYMBOL_CLASS (sym) = LOC_LOCAL;
2971 }
2972 else
2973 {
2974 SYMBOL_CLASS (sym) = LOC_STATIC;
2975 SYMBOL_VALUE_ADDRESS (sym) = addr + baseaddr;
2976 }
2977 }
2978 }
2979 break;
2980 case DW_TAG_formal_parameter:
2981 attr = dwarf_attr (die, DW_AT_location);
2982 if (attr != NULL)
2983 {
2984 SYMBOL_VALUE (sym) = decode_locdesc (DW_BLOCK (attr), objfile);
2985 }
2986 add_symbol_to_list (sym, list_in_scope);
2987 if (isreg)
2988 {
2989 SYMBOL_CLASS (sym) = LOC_REGPARM;
2990 }
2991 else
2992 {
2993 SYMBOL_CLASS (sym) = LOC_ARG;
2994 }
2995 break;
2996 case DW_TAG_unspecified_parameters:
2997 /* From varargs functions; gdb doesn't seem to have any
2998 interest in this information, so just ignore it for now.
2999 (FIXME?) */
3000 break;
3001 case DW_TAG_class_type:
3002 case DW_TAG_structure_type:
3003 case DW_TAG_union_type:
3004 case DW_TAG_enumeration_type:
3005 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
3006 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
3007 add_symbol_to_list (sym, list_in_scope);
3008 break;
3009 case DW_TAG_typedef:
3010 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
3011 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
3012 add_symbol_to_list (sym, list_in_scope);
3013 break;
3014 default:
3015 /* Not a tag we recognize. Hopefully we aren't processing
3016 trash data, but since we must specifically ignore things
3017 we don't recognize, there is nothing else we should do at
3018 this point. */
3019 break;
3020 }
3021 }
3022 return (sym);
3023 }
3024
3025 /* Return the type of the die in question using its DW_AT_type attribute. */
3026
3027 static struct type *
3028 die_type (die, objfile)
3029 struct die_info *die;
3030 struct objfile *objfile;
3031 {
3032 struct type *type;
3033 struct attribute *attr, *type_attr;
3034 struct die_info *type_die;
3035 unsigned int size = 0, encoding = 0, ref;
3036
3037 type_attr = dwarf_attr (die, DW_AT_type);
3038 if (!type_attr)
3039 {
3040 type = dwarf_base_type (0, 0);
3041 return type;
3042 }
3043 else
3044 {
3045 ref = DW_UNSND (type_attr);
3046 type_die = follow_die_ref (ref);
3047 if (!type_die)
3048 {
3049 error ("Dwarf Error: Cannot find referent at offset %d.", ref);
3050 return NULL;
3051 }
3052 }
3053 type = tag_type_to_type (type_die, objfile);
3054 if (!type)
3055 {
3056 error ("Dwarf Error: Problem turning type die at offset into gdb type:");
3057 dump_die (type_die);
3058 }
3059 return type;
3060 }
3061
3062 static struct type *
3063 type_at_offset (offset, objfile)
3064 unsigned int offset;
3065 struct objfile *objfile;
3066 {
3067 struct die_info *die;
3068 struct type *type;
3069
3070 die = follow_die_ref (offset);
3071 if (!die)
3072 {
3073 error ("Dwarf Error: Cannot find type referent at offset %d.", offset);
3074 return NULL;
3075 }
3076 type = tag_type_to_type (die, objfile);
3077 return type;
3078 }
3079
3080 static struct type *
3081 tag_type_to_type (die, objfile)
3082 struct die_info *die;
3083 struct objfile *objfile;
3084 {
3085 if (die->type)
3086 {
3087 return die->type;
3088 }
3089 else
3090 {
3091 read_type_die (die, objfile);
3092 if (!die->type)
3093 {
3094 dump_die (die);
3095 error ("Dwarf Error: Cannot find type of die:");
3096 }
3097 return die->type;
3098 }
3099 }
3100
3101 static void
3102 read_type_die (die, objfile)
3103 struct die_info *die;
3104 struct objfile *objfile;
3105 {
3106 switch (die->tag)
3107 {
3108 case DW_TAG_class_type:
3109 case DW_TAG_structure_type:
3110 case DW_TAG_union_type:
3111 read_structure_scope (die, objfile);
3112 break;
3113 case DW_TAG_enumeration_type:
3114 read_enumeration (die, objfile);
3115 break;
3116 case DW_TAG_subroutine_type:
3117 read_subroutine_type (die, objfile);
3118 break;
3119 case DW_TAG_array_type:
3120 dwarf_read_array_type (die, objfile);
3121 break;
3122 case DW_TAG_pointer_type:
3123 read_tag_pointer_type (die, objfile);
3124 break;
3125 case DW_TAG_const_type:
3126 read_tag_const_type (die, objfile);
3127 break;
3128 case DW_TAG_volatile_type:
3129 read_tag_volatile_type (die, objfile);
3130 break;
3131 case DW_TAG_string_type:
3132 read_tag_string_type (die, objfile);
3133 break;
3134 case DW_TAG_typedef:
3135 read_typedef (die, objfile);
3136 break;
3137 case DW_TAG_base_type:
3138 read_base_type (die, objfile);
3139 break;
3140 case DW_TAG_padding:
3141 case DW_TAG_compile_unit:
3142 case DW_TAG_subprogram:
3143 case DW_TAG_lexical_block:
3144 default:
3145 break;
3146 }
3147 }
3148
3149 static struct type *
3150 dwarf_base_type (encoding, size)
3151 int encoding;
3152 int size;
3153 {
3154 /* FIXME - this should not produce a new (struct type *)
3155 every time. It should cache base types. */
3156 struct type *type;
3157 switch (encoding)
3158 {
3159 case DW_ATE_address:
3160 type = dwarf2_fundamental_type (current_objfile, FT_VOID);
3161 return type;
3162 case DW_ATE_boolean:
3163 type = dwarf2_fundamental_type (current_objfile, FT_BOOLEAN);
3164 return type;
3165 case DW_ATE_complex_float:
3166 if (size == 16)
3167 {
3168 type = dwarf2_fundamental_type (current_objfile, FT_DBL_PREC_COMPLEX);
3169 }
3170 else
3171 {
3172 type = dwarf2_fundamental_type (current_objfile, FT_COMPLEX);
3173 }
3174 return type;
3175 case DW_ATE_float:
3176 if (size == 8)
3177 {
3178 type = dwarf2_fundamental_type (current_objfile, FT_DBL_PREC_FLOAT);
3179 }
3180 else
3181 {
3182 type = dwarf2_fundamental_type (current_objfile, FT_FLOAT);
3183 }
3184 return type;
3185 case DW_ATE_signed:
3186 switch (size)
3187 {
3188 case 1:
3189 type = dwarf2_fundamental_type (current_objfile, FT_SIGNED_CHAR);
3190 break;
3191 case 2:
3192 type = dwarf2_fundamental_type (current_objfile, FT_SIGNED_SHORT);
3193 break;
3194 default:
3195 case 4:
3196 type = dwarf2_fundamental_type (current_objfile, FT_SIGNED_INTEGER);
3197 break;
3198 }
3199 return type;
3200 case DW_ATE_signed_char:
3201 type = dwarf2_fundamental_type (current_objfile, FT_SIGNED_CHAR);
3202 return type;
3203 case DW_ATE_unsigned:
3204 switch (size)
3205 {
3206 case 1:
3207 type = dwarf2_fundamental_type (current_objfile, FT_UNSIGNED_CHAR);
3208 break;
3209 case 2:
3210 type = dwarf2_fundamental_type (current_objfile, FT_SIGNED_SHORT);
3211 break;
3212 default:
3213 case 4:
3214 type = dwarf2_fundamental_type (current_objfile, FT_UNSIGNED_INTEGER);
3215 break;
3216 }
3217 return type;
3218 case DW_ATE_unsigned_char:
3219 type = dwarf2_fundamental_type (current_objfile, FT_UNSIGNED_CHAR);
3220 return type;
3221 default:
3222 type = dwarf2_fundamental_type (current_objfile, FT_SIGNED_INTEGER);
3223 return type;
3224 }
3225 }
3226
3227 /* Given a pointer to a string and a pointer to an obstack, allocates
3228 a fresh copy of the string on the specified obstack. */
3229
3230 static char *
3231 create_name (name, obstackp)
3232 char *name;
3233 struct obstack *obstackp;
3234 {
3235 int length;
3236 char *newname;
3237
3238 length = strlen (name) + 1;
3239 newname = (char *) obstack_alloc (obstackp, length);
3240 strcpy (newname, name);
3241 return (newname);
3242 }
3243
3244 struct die_info *
3245 copy_die (old_die)
3246 struct die_info *old_die;
3247 {
3248 struct die_info *new_die;
3249 int i, num_attrs;
3250
3251 new_die = (struct die_info *) xmalloc (sizeof (struct die_info));
3252 memset (new_die, 0, sizeof (struct die_info));
3253
3254 new_die->tag = old_die->tag;
3255 new_die->has_children = old_die->has_children;
3256 new_die->abbrev = old_die->abbrev;
3257 new_die->offset = old_die->offset;
3258 new_die->type = NULL;
3259
3260 num_attrs = old_die->num_attrs;
3261 new_die->num_attrs = num_attrs;
3262 new_die->attrs = (struct attribute *)
3263 xmalloc (num_attrs * sizeof (struct attribute));
3264
3265 for (i = 0; i < old_die->num_attrs; ++i)
3266 {
3267 new_die->attrs[i].name = old_die->attrs[i].name;
3268 new_die->attrs[i].form = old_die->attrs[i].form;
3269 new_die->attrs[i].u.addr = old_die->attrs[i].u.addr;
3270 }
3271
3272 new_die->next = NULL;
3273 return new_die;
3274 }
3275
3276 /* Return sibling of die, NULL if no sibling. */
3277
3278 struct die_info *
3279 sibling_die (die)
3280 struct die_info *die;
3281 {
3282 struct die_info *new;
3283 int nesting_level = 0;
3284
3285 if (!die->has_children)
3286 {
3287 if (die->next && (die->next->tag == 0))
3288 {
3289 return NULL;
3290 }
3291 else
3292 {
3293 return die->next;
3294 }
3295 }
3296 else
3297 {
3298 do
3299 {
3300 if (die->has_children)
3301 {
3302 nesting_level++;
3303 }
3304 if (die->tag == 0)
3305 {
3306 nesting_level--;
3307 }
3308 die = die->next;
3309 }
3310 while (nesting_level);
3311 if (die && (die->tag == 0))
3312 {
3313 return NULL;
3314 }
3315 else
3316 {
3317 return die;
3318 }
3319 }
3320 }
3321
3322 /* Convert a DIE tag into its string name. */
3323
3324 static char *
3325 dwarf_tag_name (tag)
3326 register unsigned tag;
3327 {
3328 switch (tag)
3329 {
3330 case DW_TAG_padding:
3331 return "DW_TAG_padding";
3332 case DW_TAG_array_type:
3333 return "DW_TAG_array_type";
3334 case DW_TAG_class_type:
3335 return "DW_TAG_class_type";
3336 case DW_TAG_entry_point:
3337 return "DW_TAG_entry_point";
3338 case DW_TAG_enumeration_type:
3339 return "DW_TAG_enumeration_type";
3340 case DW_TAG_formal_parameter:
3341 return "DW_TAG_formal_parameter";
3342 case DW_TAG_imported_declaration:
3343 return "DW_TAG_imported_declaration";
3344 case DW_TAG_label:
3345 return "DW_TAG_label";
3346 case DW_TAG_lexical_block:
3347 return "DW_TAG_lexical_block";
3348 case DW_TAG_member:
3349 return "DW_TAG_member";
3350 case DW_TAG_pointer_type:
3351 return "DW_TAG_pointer_type";
3352 case DW_TAG_reference_type:
3353 return "DW_TAG_reference_type";
3354 case DW_TAG_compile_unit:
3355 return "DW_TAG_compile_unit";
3356 case DW_TAG_string_type:
3357 return "DW_TAG_string_type";
3358 case DW_TAG_structure_type:
3359 return "DW_TAG_structure_type";
3360 case DW_TAG_subroutine_type:
3361 return "DW_TAG_subroutine_type";
3362 case DW_TAG_typedef:
3363 return "DW_TAG_typedef";
3364 case DW_TAG_union_type:
3365 return "DW_TAG_union_type";
3366 case DW_TAG_unspecified_parameters:
3367 return "DW_TAG_unspecified_parameters";
3368 case DW_TAG_variant:
3369 return "DW_TAG_variant";
3370 case DW_TAG_common_block:
3371 return "DW_TAG_common_block";
3372 case DW_TAG_common_inclusion:
3373 return "DW_TAG_common_inclusion";
3374 case DW_TAG_inheritance:
3375 return "DW_TAG_inheritance";
3376 case DW_TAG_inlined_subroutine:
3377 return "DW_TAG_inlined_subroutine";
3378 case DW_TAG_module:
3379 return "DW_TAG_module";
3380 case DW_TAG_ptr_to_member_type:
3381 return "DW_TAG_ptr_to_member_type";
3382 case DW_TAG_set_type:
3383 return "DW_TAG_set_type";
3384 case DW_TAG_subrange_type:
3385 return "DW_TAG_subrange_type";
3386 case DW_TAG_with_stmt:
3387 return "DW_TAG_with_stmt";
3388 case DW_TAG_access_declaration:
3389 return "DW_TAG_access_declaration";
3390 case DW_TAG_base_type:
3391 return "DW_TAG_base_type";
3392 case DW_TAG_catch_block:
3393 return "DW_TAG_catch_block";
3394 case DW_TAG_const_type:
3395 return "DW_TAG_const_type";
3396 case DW_TAG_constant:
3397 return "DW_TAG_constant";
3398 case DW_TAG_enumerator:
3399 return "DW_TAG_enumerator";
3400 case DW_TAG_file_type:
3401 return "DW_TAG_file_type";
3402 case DW_TAG_friend:
3403 return "DW_TAG_friend";
3404 case DW_TAG_namelist:
3405 return "DW_TAG_namelist";
3406 case DW_TAG_namelist_item:
3407 return "DW_TAG_namelist_item";
3408 case DW_TAG_packed_type:
3409 return "DW_TAG_packed_type";
3410 case DW_TAG_subprogram:
3411 return "DW_TAG_subprogram";
3412 case DW_TAG_template_type_param:
3413 return "DW_TAG_template_type_param";
3414 case DW_TAG_template_value_param:
3415 return "DW_TAG_template_value_param";
3416 case DW_TAG_thrown_type:
3417 return "DW_TAG_thrown_type";
3418 case DW_TAG_try_block:
3419 return "DW_TAG_try_block";
3420 case DW_TAG_variant_part:
3421 return "DW_TAG_variant_part";
3422 case DW_TAG_variable:
3423 return "DW_TAG_variable";
3424 case DW_TAG_volatile_type:
3425 return "DW_TAG_volatile_type";
3426 case DW_TAG_MIPS_loop:
3427 return "DW_TAG_MIPS_loop";
3428 case DW_TAG_format_label:
3429 return "DW_TAG_format_label";
3430 case DW_TAG_function_template:
3431 return "DW_TAG_function_template";
3432 case DW_TAG_class_template:
3433 return "DW_TAG_class_template";
3434 default:
3435 return "DW_TAG_<unknown>";
3436 }
3437 }
3438
3439 /* Convert a DWARF attribute code into its string name. */
3440
3441 static char *
3442 dwarf_attr_name (attr)
3443 register unsigned attr;
3444 {
3445 switch (attr)
3446 {
3447 case DW_AT_sibling:
3448 return "DW_AT_sibling";
3449 case DW_AT_location:
3450 return "DW_AT_location";
3451 case DW_AT_name:
3452 return "DW_AT_name";
3453 case DW_AT_ordering:
3454 return "DW_AT_ordering";
3455 case DW_AT_subscr_data:
3456 return "DW_AT_subscr_data";
3457 case DW_AT_byte_size:
3458 return "DW_AT_byte_size";
3459 case DW_AT_bit_offset:
3460 return "DW_AT_bit_offset";
3461 case DW_AT_bit_size:
3462 return "DW_AT_bit_size";
3463 case DW_AT_element_list:
3464 return "DW_AT_element_list";
3465 case DW_AT_stmt_list:
3466 return "DW_AT_stmt_list";
3467 case DW_AT_low_pc:
3468 return "DW_AT_low_pc";
3469 case DW_AT_high_pc:
3470 return "DW_AT_high_pc";
3471 case DW_AT_language:
3472 return "DW_AT_language";
3473 case DW_AT_member:
3474 return "DW_AT_member";
3475 case DW_AT_discr:
3476 return "DW_AT_discr";
3477 case DW_AT_discr_value:
3478 return "DW_AT_discr_value";
3479 case DW_AT_visibility:
3480 return "DW_AT_visibility";
3481 case DW_AT_import:
3482 return "DW_AT_import";
3483 case DW_AT_string_length:
3484 return "DW_AT_string_length";
3485 case DW_AT_common_reference:
3486 return "DW_AT_common_reference";
3487 case DW_AT_comp_dir:
3488 return "DW_AT_comp_dir";
3489 case DW_AT_const_value:
3490 return "DW_AT_const_value";
3491 case DW_AT_containing_type:
3492 return "DW_AT_containing_type";
3493 case DW_AT_default_value:
3494 return "DW_AT_default_value";
3495 case DW_AT_inline:
3496 return "DW_AT_inline";
3497 case DW_AT_is_optional:
3498 return "DW_AT_is_optional";
3499 case DW_AT_lower_bound:
3500 return "DW_AT_lower_bound";
3501 case DW_AT_producer:
3502 return "DW_AT_producer";
3503 case DW_AT_prototyped:
3504 return "DW_AT_prototyped";
3505 case DW_AT_return_addr:
3506 return "DW_AT_return_addr";
3507 case DW_AT_start_scope:
3508 return "DW_AT_start_scope";
3509 case DW_AT_stride_size:
3510 return "DW_AT_stride_size";
3511 case DW_AT_upper_bound:
3512 return "DW_AT_upper_bound";
3513 case DW_AT_abstract_origin:
3514 return "DW_AT_abstract_origin";
3515 case DW_AT_accessibility:
3516 return "DW_AT_accessibility";
3517 case DW_AT_address_class:
3518 return "DW_AT_address_class";
3519 case DW_AT_artificial:
3520 return "DW_AT_artificial";
3521 case DW_AT_base_types:
3522 return "DW_AT_base_types";
3523 case DW_AT_calling_convention:
3524 return "DW_AT_calling_convention";
3525 case DW_AT_count:
3526 return "DW_AT_count";
3527 case DW_AT_data_member_location:
3528 return "DW_AT_data_member_location";
3529 case DW_AT_decl_column:
3530 return "DW_AT_decl_column";
3531 case DW_AT_decl_file:
3532 return "DW_AT_decl_file";
3533 case DW_AT_decl_line:
3534 return "DW_AT_decl_line";
3535 case DW_AT_declaration:
3536 return "DW_AT_declaration";
3537 case DW_AT_discr_list:
3538 return "DW_AT_discr_list";
3539 case DW_AT_encoding:
3540 return "DW_AT_encoding";
3541 case DW_AT_external:
3542 return "DW_AT_external";
3543 case DW_AT_frame_base:
3544 return "DW_AT_frame_base";
3545 case DW_AT_friend:
3546 return "DW_AT_friend";
3547 case DW_AT_identifier_case:
3548 return "DW_AT_identifier_case";
3549 case DW_AT_macro_info:
3550 return "DW_AT_macro_info";
3551 case DW_AT_namelist_items:
3552 return "DW_AT_namelist_items";
3553 case DW_AT_priority:
3554 return "DW_AT_priority";
3555 case DW_AT_segment:
3556 return "DW_AT_segment";
3557 case DW_AT_specification:
3558 return "DW_AT_specification";
3559 case DW_AT_static_link:
3560 return "DW_AT_static_link";
3561 case DW_AT_type:
3562 return "DW_AT_type";
3563 case DW_AT_use_location:
3564 return "DW_AT_use_location";
3565 case DW_AT_variable_parameter:
3566 return "DW_AT_variable_parameter";
3567 case DW_AT_virtuality:
3568 return "DW_AT_virtuality";
3569 case DW_AT_vtable_elem_location:
3570 return "DW_AT_vtable_elem_location";
3571
3572 #ifdef MIPS
3573 case DW_AT_MIPS_fde:
3574 return "DW_AT_MIPS_fde";
3575 case DW_AT_MIPS_loop_begin:
3576 return "DW_AT_MIPS_loop_begin";
3577 case DW_AT_MIPS_tail_loop_begin:
3578 return "DW_AT_MIPS_tail_loop_begin";
3579 case DW_AT_MIPS_epilog_begin:
3580 return "DW_AT_MIPS_epilog_begin";
3581 case DW_AT_MIPS_loop_unroll_factor:
3582 return "DW_AT_MIPS_loop_unroll_factor";
3583 case DW_AT_MIPS_software_pipeline_depth:
3584 return "DW_AT_MIPS_software_pipeline_depth";
3585 case DW_AT_MIPS_linkage_name:
3586 return "DW_AT_MIPS_linkage_name";
3587 #endif
3588
3589 case DW_AT_sf_names:
3590 return "DW_AT_sf_names";
3591 case DW_AT_src_info:
3592 return "DW_AT_src_info";
3593 case DW_AT_mac_info:
3594 return "DW_AT_mac_info";
3595 case DW_AT_src_coords:
3596 return "DW_AT_src_coords";
3597 case DW_AT_body_begin:
3598 return "DW_AT_body_begin";
3599 case DW_AT_body_end:
3600 return "DW_AT_body_end";
3601 default:
3602 return "DW_AT_<unknown>";
3603 }
3604 }
3605
3606 /* Convert a DWARF value form code into its string name. */
3607
3608 static char *
3609 dwarf_form_name (form)
3610 register unsigned form;
3611 {
3612 switch (form)
3613 {
3614 case DW_FORM_addr:
3615 return "DW_FORM_addr";
3616 case DW_FORM_block2:
3617 return "DW_FORM_block2";
3618 case DW_FORM_block4:
3619 return "DW_FORM_block4";
3620 case DW_FORM_data2:
3621 return "DW_FORM_data2";
3622 case DW_FORM_data4:
3623 return "DW_FORM_data4";
3624 case DW_FORM_data8:
3625 return "DW_FORM_data8";
3626 case DW_FORM_string:
3627 return "DW_FORM_string";
3628 case DW_FORM_block:
3629 return "DW_FORM_block";
3630 case DW_FORM_block1:
3631 return "DW_FORM_block1";
3632 case DW_FORM_data1:
3633 return "DW_FORM_data1";
3634 case DW_FORM_flag:
3635 return "DW_FORM_flag";
3636 case DW_FORM_sdata:
3637 return "DW_FORM_sdata";
3638 case DW_FORM_strp:
3639 return "DW_FORM_strp";
3640 case DW_FORM_udata:
3641 return "DW_FORM_udata";
3642 case DW_FORM_ref_addr:
3643 return "DW_FORM_ref_addr";
3644 case DW_FORM_ref1:
3645 return "DW_FORM_ref1";
3646 case DW_FORM_ref2:
3647 return "DW_FORM_ref2";
3648 case DW_FORM_ref4:
3649 return "DW_FORM_ref4";
3650 case DW_FORM_ref8:
3651 return "DW_FORM_ref8";
3652 case DW_FORM_ref_udata:
3653 return "DW_FORM_ref_udata";
3654 case DW_FORM_indirect:
3655 return "DW_FORM_indirect";
3656 default:
3657 return "DW_FORM_<unknown>";
3658 }
3659 }
3660
3661 /* Convert a DWARF stack opcode into its string name. */
3662
3663 static char *
3664 dwarf_stack_op_name (op)
3665 register unsigned op;
3666 {
3667 switch (op)
3668 {
3669 case DW_OP_addr:
3670 return "DW_OP_addr";
3671 case DW_OP_deref:
3672 return "DW_OP_deref";
3673 case DW_OP_const1u:
3674 return "DW_OP_const1u";
3675 case DW_OP_const1s:
3676 return "DW_OP_const1s";
3677 case DW_OP_const2u:
3678 return "DW_OP_const2u";
3679 case DW_OP_const2s:
3680 return "DW_OP_const2s";
3681 case DW_OP_const4u:
3682 return "DW_OP_const4u";
3683 case DW_OP_const4s:
3684 return "DW_OP_const4s";
3685 case DW_OP_const8u:
3686 return "DW_OP_const8u";
3687 case DW_OP_const8s:
3688 return "DW_OP_const8s";
3689 case DW_OP_constu:
3690 return "DW_OP_constu";
3691 case DW_OP_consts:
3692 return "DW_OP_consts";
3693 case DW_OP_dup:
3694 return "DW_OP_dup";
3695 case DW_OP_drop:
3696 return "DW_OP_drop";
3697 case DW_OP_over:
3698 return "DW_OP_over";
3699 case DW_OP_pick:
3700 return "DW_OP_pick";
3701 case DW_OP_swap:
3702 return "DW_OP_swap";
3703 case DW_OP_rot:
3704 return "DW_OP_rot";
3705 case DW_OP_xderef:
3706 return "DW_OP_xderef";
3707 case DW_OP_abs:
3708 return "DW_OP_abs";
3709 case DW_OP_and:
3710 return "DW_OP_and";
3711 case DW_OP_div:
3712 return "DW_OP_div";
3713 case DW_OP_minus:
3714 return "DW_OP_minus";
3715 case DW_OP_mod:
3716 return "DW_OP_mod";
3717 case DW_OP_mul:
3718 return "DW_OP_mul";
3719 case DW_OP_neg:
3720 return "DW_OP_neg";
3721 case DW_OP_not:
3722 return "DW_OP_not";
3723 case DW_OP_or:
3724 return "DW_OP_or";
3725 case DW_OP_plus:
3726 return "DW_OP_plus";
3727 case DW_OP_plus_uconst:
3728 return "DW_OP_plus_uconst";
3729 case DW_OP_shl:
3730 return "DW_OP_shl";
3731 case DW_OP_shr:
3732 return "DW_OP_shr";
3733 case DW_OP_shra:
3734 return "DW_OP_shra";
3735 case DW_OP_xor:
3736 return "DW_OP_xor";
3737 case DW_OP_bra:
3738 return "DW_OP_bra";
3739 case DW_OP_eq:
3740 return "DW_OP_eq";
3741 case DW_OP_ge:
3742 return "DW_OP_ge";
3743 case DW_OP_gt:
3744 return "DW_OP_gt";
3745 case DW_OP_le:
3746 return "DW_OP_le";
3747 case DW_OP_lt:
3748 return "DW_OP_lt";
3749 case DW_OP_ne:
3750 return "DW_OP_ne";
3751 case DW_OP_skip:
3752 return "DW_OP_skip";
3753 case DW_OP_lit0:
3754 return "DW_OP_lit0";
3755 case DW_OP_lit1:
3756 return "DW_OP_lit1";
3757 case DW_OP_lit2:
3758 return "DW_OP_lit2";
3759 case DW_OP_lit3:
3760 return "DW_OP_lit3";
3761 case DW_OP_lit4:
3762 return "DW_OP_lit4";
3763 case DW_OP_lit5:
3764 return "DW_OP_lit5";
3765 case DW_OP_lit6:
3766 return "DW_OP_lit6";
3767 case DW_OP_lit7:
3768 return "DW_OP_lit7";
3769 case DW_OP_lit8:
3770 return "DW_OP_lit8";
3771 case DW_OP_lit9:
3772 return "DW_OP_lit9";
3773 case DW_OP_lit10:
3774 return "DW_OP_lit10";
3775 case DW_OP_lit11:
3776 return "DW_OP_lit11";
3777 case DW_OP_lit12:
3778 return "DW_OP_lit12";
3779 case DW_OP_lit13:
3780 return "DW_OP_lit13";
3781 case DW_OP_lit14:
3782 return "DW_OP_lit14";
3783 case DW_OP_lit15:
3784 return "DW_OP_lit15";
3785 case DW_OP_lit16:
3786 return "DW_OP_lit16";
3787 case DW_OP_lit17:
3788 return "DW_OP_lit17";
3789 case DW_OP_lit18:
3790 return "DW_OP_lit18";
3791 case DW_OP_lit19:
3792 return "DW_OP_lit19";
3793 case DW_OP_lit20:
3794 return "DW_OP_lit20";
3795 case DW_OP_lit21:
3796 return "DW_OP_lit21";
3797 case DW_OP_lit22:
3798 return "DW_OP_lit22";
3799 case DW_OP_lit23:
3800 return "DW_OP_lit23";
3801 case DW_OP_lit24:
3802 return "DW_OP_lit24";
3803 case DW_OP_lit25:
3804 return "DW_OP_lit25";
3805 case DW_OP_lit26:
3806 return "DW_OP_lit26";
3807 case DW_OP_lit27:
3808 return "DW_OP_lit27";
3809 case DW_OP_lit28:
3810 return "DW_OP_lit28";
3811 case DW_OP_lit29:
3812 return "DW_OP_lit29";
3813 case DW_OP_lit30:
3814 return "DW_OP_lit30";
3815 case DW_OP_lit31:
3816 return "DW_OP_lit31";
3817 case DW_OP_reg0:
3818 return "DW_OP_reg0";
3819 case DW_OP_reg1:
3820 return "DW_OP_reg1";
3821 case DW_OP_reg2:
3822 return "DW_OP_reg2";
3823 case DW_OP_reg3:
3824 return "DW_OP_reg3";
3825 case DW_OP_reg4:
3826 return "DW_OP_reg4";
3827 case DW_OP_reg5:
3828 return "DW_OP_reg5";
3829 case DW_OP_reg6:
3830 return "DW_OP_reg6";
3831 case DW_OP_reg7:
3832 return "DW_OP_reg7";
3833 case DW_OP_reg8:
3834 return "DW_OP_reg8";
3835 case DW_OP_reg9:
3836 return "DW_OP_reg9";
3837 case DW_OP_reg10:
3838 return "DW_OP_reg10";
3839 case DW_OP_reg11:
3840 return "DW_OP_reg11";
3841 case DW_OP_reg12:
3842 return "DW_OP_reg12";
3843 case DW_OP_reg13:
3844 return "DW_OP_reg13";
3845 case DW_OP_reg14:
3846 return "DW_OP_reg14";
3847 case DW_OP_reg15:
3848 return "DW_OP_reg15";
3849 case DW_OP_reg16:
3850 return "DW_OP_reg16";
3851 case DW_OP_reg17:
3852 return "DW_OP_reg17";
3853 case DW_OP_reg18:
3854 return "DW_OP_reg18";
3855 case DW_OP_reg19:
3856 return "DW_OP_reg19";
3857 case DW_OP_reg20:
3858 return "DW_OP_reg20";
3859 case DW_OP_reg21:
3860 return "DW_OP_reg21";
3861 case DW_OP_reg22:
3862 return "DW_OP_reg22";
3863 case DW_OP_reg23:
3864 return "DW_OP_reg23";
3865 case DW_OP_reg24:
3866 return "DW_OP_reg24";
3867 case DW_OP_reg25:
3868 return "DW_OP_reg25";
3869 case DW_OP_reg26:
3870 return "DW_OP_reg26";
3871 case DW_OP_reg27:
3872 return "DW_OP_reg27";
3873 case DW_OP_reg28:
3874 return "DW_OP_reg28";
3875 case DW_OP_reg29:
3876 return "DW_OP_reg29";
3877 case DW_OP_reg30:
3878 return "DW_OP_reg30";
3879 case DW_OP_reg31:
3880 return "DW_OP_reg31";
3881 case DW_OP_breg0:
3882 return "DW_OP_breg0";
3883 case DW_OP_breg1:
3884 return "DW_OP_breg1";
3885 case DW_OP_breg2:
3886 return "DW_OP_breg2";
3887 case DW_OP_breg3:
3888 return "DW_OP_breg3";
3889 case DW_OP_breg4:
3890 return "DW_OP_breg4";
3891 case DW_OP_breg5:
3892 return "DW_OP_breg5";
3893 case DW_OP_breg6:
3894 return "DW_OP_breg6";
3895 case DW_OP_breg7:
3896 return "DW_OP_breg7";
3897 case DW_OP_breg8:
3898 return "DW_OP_breg8";
3899 case DW_OP_breg9:
3900 return "DW_OP_breg9";
3901 case DW_OP_breg10:
3902 return "DW_OP_breg10";
3903 case DW_OP_breg11:
3904 return "DW_OP_breg11";
3905 case DW_OP_breg12:
3906 return "DW_OP_breg12";
3907 case DW_OP_breg13:
3908 return "DW_OP_breg13";
3909 case DW_OP_breg14:
3910 return "DW_OP_breg14";
3911 case DW_OP_breg15:
3912 return "DW_OP_breg15";
3913 case DW_OP_breg16:
3914 return "DW_OP_breg16";
3915 case DW_OP_breg17:
3916 return "DW_OP_breg17";
3917 case DW_OP_breg18:
3918 return "DW_OP_breg18";
3919 case DW_OP_breg19:
3920 return "DW_OP_breg19";
3921 case DW_OP_breg20:
3922 return "DW_OP_breg20";
3923 case DW_OP_breg21:
3924 return "DW_OP_breg21";
3925 case DW_OP_breg22:
3926 return "DW_OP_breg22";
3927 case DW_OP_breg23:
3928 return "DW_OP_breg23";
3929 case DW_OP_breg24:
3930 return "DW_OP_breg24";
3931 case DW_OP_breg25:
3932 return "DW_OP_breg25";
3933 case DW_OP_breg26:
3934 return "DW_OP_breg26";
3935 case DW_OP_breg27:
3936 return "DW_OP_breg27";
3937 case DW_OP_breg28:
3938 return "DW_OP_breg28";
3939 case DW_OP_breg29:
3940 return "DW_OP_breg29";
3941 case DW_OP_breg30:
3942 return "DW_OP_breg30";
3943 case DW_OP_breg31:
3944 return "DW_OP_breg31";
3945 case DW_OP_regx:
3946 return "DW_OP_regx";
3947 case DW_OP_fbreg:
3948 return "DW_OP_fbreg";
3949 case DW_OP_bregx:
3950 return "DW_OP_bregx";
3951 case DW_OP_piece:
3952 return "DW_OP_piece";
3953 case DW_OP_deref_size:
3954 return "DW_OP_deref_size";
3955 case DW_OP_xderef_size:
3956 return "DW_OP_xderef_size";
3957 case DW_OP_nop:
3958 return "DW_OP_nop";
3959 default:
3960 return "OP_<unknown>";
3961 }
3962 }
3963
3964 static char *
3965 dwarf_bool_name (bool)
3966 unsigned bool;
3967 {
3968 if (bool)
3969 return "TRUE";
3970 else
3971 return "FALSE";
3972 }
3973
3974 /* Convert a DWARF type code into its string name. */
3975
3976 static char *
3977 dwarf_type_encoding_name (enc)
3978 register unsigned enc;
3979 {
3980 switch (enc)
3981 {
3982 case DW_ATE_address:
3983 return "DW_ATE_address";
3984 case DW_ATE_boolean:
3985 return "DW_ATE_boolean";
3986 case DW_ATE_complex_float:
3987 return "DW_ATE_complex_float";
3988 case DW_ATE_float:
3989 return "DW_ATE_float";
3990 case DW_ATE_signed:
3991 return "DW_ATE_signed";
3992 case DW_ATE_signed_char:
3993 return "DW_ATE_signed_char";
3994 case DW_ATE_unsigned:
3995 return "DW_ATE_unsigned";
3996 case DW_ATE_unsigned_char:
3997 return "DW_ATE_unsigned_char";
3998 default:
3999 return "DW_ATE_<unknown>";
4000 }
4001 }
4002
4003 /* Convert a DWARF call frame info operation to its string name. */
4004
4005 static char *
4006 dwarf_cfi_name (cfi_opc)
4007 register unsigned cfi_opc;
4008 {
4009 switch (cfi_opc)
4010 {
4011 case DW_CFA_advance_loc:
4012 return "DW_CFA_advance_loc";
4013 case DW_CFA_offset:
4014 return "DW_CFA_offset";
4015 case DW_CFA_restore:
4016 return "DW_CFA_restore";
4017 case DW_CFA_nop:
4018 return "DW_CFA_nop";
4019 case DW_CFA_set_loc:
4020 return "DW_CFA_set_loc";
4021 case DW_CFA_advance_loc1:
4022 return "DW_CFA_advance_loc1";
4023 case DW_CFA_advance_loc2:
4024 return "DW_CFA_advance_loc2";
4025 case DW_CFA_advance_loc4:
4026 return "DW_CFA_advance_loc4";
4027 case DW_CFA_offset_extended:
4028 return "DW_CFA_offset_extended";
4029 case DW_CFA_restore_extended:
4030 return "DW_CFA_restore_extended";
4031 case DW_CFA_undefined:
4032 return "DW_CFA_undefined";
4033 case DW_CFA_same_value:
4034 return "DW_CFA_same_value";
4035 case DW_CFA_register:
4036 return "DW_CFA_register";
4037 case DW_CFA_remember_state:
4038 return "DW_CFA_remember_state";
4039 case DW_CFA_restore_state:
4040 return "DW_CFA_restore_state";
4041 case DW_CFA_def_cfa:
4042 return "DW_CFA_def_cfa";
4043 case DW_CFA_def_cfa_register:
4044 return "DW_CFA_def_cfa_register";
4045 case DW_CFA_def_cfa_offset:
4046 return "DW_CFA_def_cfa_offset";
4047 /* SGI/MIPS specific */
4048 case DW_CFA_MIPS_advance_loc8:
4049 return "DW_CFA_MIPS_advance_loc8";
4050 default:
4051 return "DW_CFA_<unknown>";
4052 }
4053 }
4054
4055 void
4056 dump_die (die)
4057 struct die_info *die;
4058 {
4059 int i;
4060
4061 fprintf (stderr, "Die: %s (abbrev = %d, offset = %d)\n",
4062 dwarf_tag_name (die->tag), die->abbrev, die->offset);
4063 fprintf (stderr, "\thas children: %s\n",
4064 dwarf_bool_name (die->has_children));
4065
4066 fprintf (stderr, "\tattributes:\n");
4067 for (i = 0; i < die->num_attrs; ++i)
4068 {
4069 fprintf (stderr, "\t\t%s (%s) ",
4070 dwarf_attr_name (die->attrs[i].name),
4071 dwarf_form_name (die->attrs[i].form));
4072 switch (die->attrs[i].form)
4073 {
4074 case DW_FORM_ref_addr:
4075 case DW_FORM_addr:
4076 fprintf (stderr, sizeof (CORE_ADDR) > sizeof (long) ?
4077 "address: 0x%LLx" : "address: 0x%x",
4078 die->attrs[i].u.addr);
4079 break;
4080 case DW_FORM_block2:
4081 case DW_FORM_block4:
4082 case DW_FORM_block:
4083 case DW_FORM_block1:
4084 fprintf (stderr, "block: size %d",
4085 die->attrs[i].u.blk->size);
4086 break;
4087 case DW_FORM_data1:
4088 case DW_FORM_data2:
4089 case DW_FORM_data4:
4090 case DW_FORM_ref1:
4091 case DW_FORM_ref2:
4092 case DW_FORM_ref4:
4093 case DW_FORM_udata:
4094 case DW_FORM_sdata:
4095 fprintf (stderr, "constant: %d", die->attrs[i].u.unsnd);
4096 break;
4097 case DW_FORM_string:
4098 fprintf (stderr, "string: \"%s\"", die->attrs[i].u.str);
4099 break;
4100 case DW_FORM_flag:
4101 if (die->attrs[i].u.unsnd)
4102 fprintf (stderr, "flag: TRUE");
4103 else
4104 fprintf (stderr, "flag: FALSE");
4105 break;
4106 case DW_FORM_strp: /* we do not support separate string
4107 section yet */
4108 case DW_FORM_indirect: /* we do not handle indirect yet */
4109 case DW_FORM_data8: /* we do not have 64 bit quantities */
4110 error ("Dwarf Error: Unsupported attribute form: %d.",
4111 die->attrs[i].form);
4112 }
4113 fprintf (stderr, "\n");
4114 }
4115 }
4116
4117 void
4118 dump_die_list (die)
4119 struct die_info *die;
4120 {
4121 while (die)
4122 {
4123 dump_die (die);
4124 die = die->next;
4125 }
4126 }
4127
4128 void
4129 store_in_ref_table (offset, die)
4130 unsigned int offset;
4131 struct die_info *die;
4132 {
4133 int h;
4134 struct die_info *old;
4135
4136 h = (offset % REF_HASH_SIZE);
4137 old = die_ref_table[h];
4138 die->next_ref = old;
4139 die_ref_table[h] = die;
4140 }
4141
4142 struct die_info *
4143 follow_die_ref (offset)
4144 unsigned int offset;
4145 {
4146 struct die_info *die;
4147 int h;
4148
4149 h = (offset % REF_HASH_SIZE);
4150 die = die_ref_table[h];
4151 while (die)
4152 {
4153 if (die->offset == offset)
4154 {
4155 return die;
4156 }
4157 die = die->next_ref;
4158 }
4159 return NULL;
4160 }
4161
4162 static struct type *
4163 dwarf2_fundamental_type (objfile, typeid)
4164 struct objfile *objfile;
4165 int typeid;
4166 {
4167 if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
4168 {
4169 error ("Dwarf Error: internal error - invalid fundamental type id %d.",
4170 typeid);
4171 }
4172
4173 /* Look for this particular type in the fundamental type vector. If
4174 one is not found, create and install one appropriate for the
4175 current language and the current target machine. */
4176
4177 if (ftypes[typeid] == NULL)
4178 {
4179 ftypes[typeid] = cu_language_defn->la_fund_type (objfile, typeid);
4180 }
4181
4182 return (ftypes[typeid]);
4183 }
4184
4185 /* Decode simple location descriptions.
4186 There are three cases:
4187 An address: return the address.
4188 An address relative to frame pointer: return the offset.
4189 A register: return register number and set isreg to true.
4190 A constant followed by plus: return the constant. */
4191
4192 static CORE_ADDR
4193 decode_locdesc (blk, objfile)
4194 struct dwarf_block *blk;
4195 struct objfile *objfile;
4196 {
4197 int i, snd;
4198 int size = blk->size;
4199 char *data = blk->data;
4200 unsigned int bytes_read, unsnd;
4201 unsigned char op;
4202 union
4203 {
4204 CORE_ADDR addr;
4205 char bytes[sizeof (CORE_ADDR)];
4206 }
4207 u;
4208
4209 i = 0;
4210 isreg = 0;
4211 offreg = 0;
4212
4213 /* FIXME: handle more general forms of location descriptors. */
4214 while (i < size)
4215 {
4216 op = data[i++];
4217 switch (op)
4218 {
4219 case DW_OP_reg0:
4220 isreg = 1;
4221 return 0;
4222 case DW_OP_reg1:
4223 isreg = 1;
4224 return 1;
4225 case DW_OP_reg2:
4226 isreg = 1;
4227 return 2;
4228 case DW_OP_reg3:
4229 isreg = 1;
4230 return 3;
4231 case DW_OP_reg4:
4232 isreg = 1;
4233 return 4;
4234 case DW_OP_reg5:
4235 isreg = 1;
4236 return 5;
4237 case DW_OP_reg6:
4238 isreg = 1;
4239 return 6;
4240 case DW_OP_reg7:
4241 isreg = 1;
4242 return 7;
4243 case DW_OP_reg8:
4244 isreg = 1;
4245 return 8;
4246 case DW_OP_reg9:
4247 isreg = 1;
4248 return 9;
4249 case DW_OP_reg10:
4250 isreg = 1;
4251 return 10;
4252 case DW_OP_reg11:
4253 isreg = 1;
4254 return 11;
4255 case DW_OP_reg12:
4256 isreg = 1;
4257 return 12;
4258 case DW_OP_reg13:
4259 isreg = 1;
4260 return 13;
4261 case DW_OP_reg14:
4262 isreg = 1;
4263 return 14;
4264 case DW_OP_reg15:
4265 isreg = 1;
4266 return 15;
4267 case DW_OP_reg16:
4268 isreg = 1;
4269 return 16;
4270 case DW_OP_reg17:
4271 isreg = 1;
4272 return 17;
4273 case DW_OP_reg18:
4274 isreg = 1;
4275 return 18;
4276 case DW_OP_reg19:
4277 isreg = 1;
4278 return 19;
4279 case DW_OP_reg20:
4280 isreg = 1;
4281 return 20;
4282 case DW_OP_reg21:
4283 isreg = 1;
4284 return 21;
4285 case DW_OP_reg22:
4286 isreg = 1;
4287 return 22;
4288 case DW_OP_reg23:
4289 isreg = 1;
4290 return 23;
4291 case DW_OP_reg24:
4292 isreg = 1;
4293 return 24;
4294 case DW_OP_reg25:
4295 isreg = 1;
4296 return 25;
4297 case DW_OP_reg26:
4298 isreg = 1;
4299 return 26;
4300 case DW_OP_reg27:
4301 isreg = 1;
4302 return 27;
4303 case DW_OP_reg28:
4304 isreg = 1;
4305 return 28;
4306 case DW_OP_reg29:
4307 isreg = 1;
4308 return 29;
4309 case DW_OP_reg30:
4310 isreg = 1;
4311 return 30;
4312 case DW_OP_reg31:
4313 isreg = 1;
4314 return 31;
4315
4316 case DW_OP_regx:
4317 isreg = 1;
4318 unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
4319 i += bytes_read;
4320 #if defined(HARRIS_TARGET) && defined(_M88K)
4321 /* The Harris 88110 gdb ports have long kept their special reg
4322 numbers between their gp-regs and their x-regs. This is
4323 not how our dwarf is generated. Punt. */
4324 return unsnd + 6;
4325 #else
4326 return unsnd;
4327 #endif
4328
4329 case DW_OP_fbreg:
4330 case DW_OP_breg31:
4331 offreg = 1;
4332 snd = read_signed_leb128 (NULL, (data + i), &bytes_read);
4333 i += bytes_read;
4334 return snd;
4335
4336 case DW_OP_addr:
4337 isreg = 0;
4338 return read_address (objfile->obfd, &data[i]);
4339
4340 case DW_OP_constu:
4341 unsnd = read_unsigned_leb128 (NULL, (data + i), &bytes_read);
4342 i += bytes_read;
4343 break;
4344
4345 case DW_OP_plus:
4346 return unsnd;
4347
4348 }
4349 }
4350 return 0;
4351 }
4352
4353 /* memory allocation interface */
4354
4355 static struct type *
4356 dwarf_alloc_type (objfile)
4357 struct objfile *objfile;
4358 {
4359 struct type *type;
4360
4361 type = (struct type *) xmalloc (sizeof (struct type));
4362 memset (type, 0, sizeof (struct type));
4363
4364 #if 0
4365 type = alloc_type (objfile);
4366 #endif
4367
4368 return (type);
4369 }
4370
4371 static struct abbrev_info *
4372 dwarf_alloc_abbrev ()
4373 {
4374 struct abbrev_info *abbrev;
4375
4376 abbrev = xmalloc (sizeof (struct abbrev_info));
4377 memset (abbrev, 0, sizeof (struct abbrev_info));
4378 return (abbrev);
4379 }
4380
4381 static struct dwarf_block *
4382 dwarf_alloc_block ()
4383 {
4384 struct dwarf_block *blk;
4385
4386 blk = (struct dwarf_block *) xmalloc (sizeof (struct dwarf_block));
4387 return (blk);
4388 }
4389
4390 static struct die_info *
4391 dwarf_alloc_die ()
4392 {
4393 struct die_info *die;
4394
4395 die = (struct die_info *) xmalloc (sizeof (struct die_info));
4396 memset (die, 0, sizeof (struct die_info));
4397 return (die);
4398 }
This page took 0.141932 seconds and 4 git commands to generate.