]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/dwarfread.c
* Makefile.in (HFILES): Add nm-i386sco.h.
[thirdparty/binutils-gdb.git] / gdb / dwarfread.c
1 /* DWARF debugging format support for GDB.
2 Copyright (C) 1991, 1992 Free Software Foundation, Inc.
3 Written by Fred Fish at Cygnus Support. Portions based on dbxread.c,
4 mipsread.c, coffread.c, and dwarfread.c from a Data General SVR4 gdb port.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
21
22 /*
23
24 FIXME: Figure out how to get the frame pointer register number in the
25 execution environment of the target. Remove R_FP kludge
26
27 FIXME: Add generation of dependencies list to partial symtab code.
28
29 FIXME: Resolve minor differences between what information we put in the
30 partial symbol table and what dbxread puts in. For example, we don't yet
31 put enum constants there. And dbxread seems to invent a lot of typedefs
32 we never see. Use the new printpsym command to see the partial symbol table
33 contents.
34
35 FIXME: Figure out a better way to tell gdb about the name of the function
36 contain the user's entry point (I.E. main())
37
38 FIXME: See other FIXME's and "ifdef 0" scattered throughout the code for
39 other things to work on, if you get bored. :-)
40
41 */
42
43 #include "defs.h"
44 #include "bfd.h"
45 #include "symtab.h"
46 #include "gdbtypes.h"
47 #include "symfile.h"
48 #include "objfiles.h"
49 #include "libbfd.h" /* FIXME Secret Internal BFD stuff (bfd_read) */
50 #include "elf/dwarf.h"
51 #include "buildsym.h"
52 #include "demangle.h"
53
54 #include <varargs.h>
55 #include <fcntl.h>
56 #include <string.h>
57 #include <sys/types.h>
58 #ifndef NO_SYS_FILE
59 #include <sys/file.h>
60 #endif
61
62 /* FIXME -- convert this to SEEK_SET a la POSIX, move to config files. */
63 #ifndef L_SET
64 #define L_SET 0
65 #endif
66
67 #ifdef MAINTENANCE /* Define to 1 to compile in some maintenance stuff */
68 #define SQUAWK(stuff) dwarfwarn stuff
69 #else
70 #define SQUAWK(stuff)
71 #endif
72
73 #ifndef R_FP /* FIXME */
74 #define R_FP 14 /* Kludge to get frame pointer register number */
75 #endif
76
77 typedef unsigned int DIE_REF; /* Reference to a DIE */
78
79 #ifndef GCC_PRODUCER
80 #define GCC_PRODUCER "GNU C "
81 #endif
82
83 #ifndef GPLUS_PRODUCER
84 #define GPLUS_PRODUCER "GNU C++ "
85 #endif
86
87 #ifndef LCC_PRODUCER
88 #define LCC_PRODUCER "NCR C/C++"
89 #endif
90
91 #ifndef CFRONT_PRODUCER
92 #define CFRONT_PRODUCER "CFRONT " /* A wild a** guess... */
93 #endif
94
95 #define STREQ(a,b) (strcmp(a,b)==0)
96 #define STREQN(a,b,n) (strncmp(a,b,n)==0)
97
98 /* Flags to target_to_host() that tell whether or not the data object is
99 expected to be signed. Used, for example, when fetching a signed
100 integer in the target environment which is used as a signed integer
101 in the host environment, and the two environments have different sized
102 ints. In this case, *somebody* has to sign extend the smaller sized
103 int. */
104
105 #define GET_UNSIGNED 0 /* No sign extension required */
106 #define GET_SIGNED 1 /* Sign extension required */
107
108 /* Defines for things which are specified in the document "DWARF Debugging
109 Information Format" published by UNIX International, Programming Languages
110 SIG. These defines are based on revision 1.0.0, Jan 20, 1992. */
111
112 #define SIZEOF_DIE_LENGTH 4
113 #define SIZEOF_DIE_TAG 2
114 #define SIZEOF_ATTRIBUTE 2
115 #define SIZEOF_FORMAT_SPECIFIER 1
116 #define SIZEOF_FMT_FT 2
117 #define SIZEOF_LINETBL_LENGTH 4
118 #define SIZEOF_LINETBL_LINENO 4
119 #define SIZEOF_LINETBL_STMT 2
120 #define SIZEOF_LINETBL_DELTA 4
121 #define SIZEOF_LOC_ATOM_CODE 1
122
123 #define FORM_FROM_ATTR(attr) ((attr) & 0xF) /* Implicitly specified */
124
125 /* Macros that return the sizes of various types of data in the target
126 environment.
127
128 FIXME: Currently these are just compile time constants (as they are in
129 other parts of gdb as well). They need to be able to get the right size
130 either from the bfd or possibly from the DWARF info. It would be nice if
131 the DWARF producer inserted DIES that describe the fundamental types in
132 the target environment into the DWARF info, similar to the way dbx stabs
133 producers produce information about their fundamental types. */
134
135 #define TARGET_FT_POINTER_SIZE(objfile) (TARGET_PTR_BIT / TARGET_CHAR_BIT)
136 #define TARGET_FT_LONG_SIZE(objfile) (TARGET_LONG_BIT / TARGET_CHAR_BIT)
137
138 /* The Amiga SVR4 header file <dwarf.h> defines AT_element_list as a
139 FORM_BLOCK2, and this is the value emitted by the AT&T compiler.
140 However, the Issue 2 DWARF specification from AT&T defines it as
141 a FORM_BLOCK4, as does the latest specification from UI/PLSIG.
142 For backwards compatibility with the AT&T compiler produced executables
143 we define AT_short_element_list for this variant. */
144
145 #define AT_short_element_list (0x00f0|FORM_BLOCK2)
146
147 /* External variables referenced. */
148
149 extern int info_verbose; /* From main.c; nonzero => verbose */
150 extern char *warning_pre_print; /* From utils.c */
151
152 /* The DWARF debugging information consists of two major pieces,
153 one is a block of DWARF Information Entries (DIE's) and the other
154 is a line number table. The "struct dieinfo" structure contains
155 the information for a single DIE, the one currently being processed.
156
157 In order to make it easier to randomly access the attribute fields
158 of the current DIE, which are specifically unordered within the DIE,
159 each DIE is scanned and an instance of the "struct dieinfo"
160 structure is initialized.
161
162 Initialization is done in two levels. The first, done by basicdieinfo(),
163 just initializes those fields that are vital to deciding whether or not
164 to use this DIE, how to skip past it, etc. The second, done by the
165 function completedieinfo(), fills in the rest of the information.
166
167 Attributes which have block forms are not interpreted at the time
168 the DIE is scanned, instead we just save pointers to the start
169 of their value fields.
170
171 Some fields have a flag <name>_p that is set when the value of the
172 field is valid (I.E. we found a matching attribute in the DIE). Since
173 we may want to test for the presence of some attributes in the DIE,
174 such as AT_low_pc, without restricting the values of the field,
175 we need someway to note that we found such an attribute.
176
177 */
178
179 typedef char BLOCK;
180
181 struct dieinfo {
182 char * die; /* Pointer to the raw DIE data */
183 unsigned long die_length; /* Length of the raw DIE data */
184 DIE_REF die_ref; /* Offset of this DIE */
185 unsigned short die_tag; /* Tag for this DIE */
186 unsigned long at_padding;
187 unsigned long at_sibling;
188 BLOCK * at_location;
189 char * at_name;
190 unsigned short at_fund_type;
191 BLOCK * at_mod_fund_type;
192 unsigned long at_user_def_type;
193 BLOCK * at_mod_u_d_type;
194 unsigned short at_ordering;
195 BLOCK * at_subscr_data;
196 unsigned long at_byte_size;
197 unsigned short at_bit_offset;
198 unsigned long at_bit_size;
199 BLOCK * at_element_list;
200 unsigned long at_stmt_list;
201 unsigned long at_low_pc;
202 unsigned long at_high_pc;
203 unsigned long at_language;
204 unsigned long at_member;
205 unsigned long at_discr;
206 BLOCK * at_discr_value;
207 BLOCK * at_string_length;
208 char * at_comp_dir;
209 char * at_producer;
210 unsigned long at_start_scope;
211 unsigned long at_stride_size;
212 unsigned long at_src_info;
213 char * at_prototyped;
214 unsigned int has_at_low_pc:1;
215 unsigned int has_at_stmt_list:1;
216 unsigned int has_at_byte_size:1;
217 unsigned int short_element_list:1;
218 };
219
220 static int diecount; /* Approximate count of dies for compilation unit */
221 static struct dieinfo *curdie; /* For warnings and such */
222
223 static char *dbbase; /* Base pointer to dwarf info */
224 static int dbsize; /* Size of dwarf info in bytes */
225 static int dbroff; /* Relative offset from start of .debug section */
226 static char *lnbase; /* Base pointer to line section */
227 static int isreg; /* Kludge to identify register variables */
228 static int offreg; /* Kludge to identify basereg references */
229
230 /* This value is added to each symbol value. FIXME: Generalize to
231 the section_offsets structure used by dbxread. */
232 static CORE_ADDR baseaddr; /* Add to each symbol value */
233
234 /* The section offsets used in the current psymtab or symtab. FIXME,
235 only used to pass one value (baseaddr) at the moment. */
236 static struct section_offsets *base_section_offsets;
237
238 /* Each partial symbol table entry contains a pointer to private data for the
239 read_symtab() function to use when expanding a partial symbol table entry
240 to a full symbol table entry. For DWARF debugging info, this data is
241 contained in the following structure and macros are provided for easy
242 access to the members given a pointer to a partial symbol table entry.
243
244 dbfoff Always the absolute file offset to the start of the ".debug"
245 section for the file containing the DIE's being accessed.
246
247 dbroff Relative offset from the start of the ".debug" access to the
248 first DIE to be accessed. When building the partial symbol
249 table, this value will be zero since we are accessing the
250 entire ".debug" section. When expanding a partial symbol
251 table entry, this value will be the offset to the first
252 DIE for the compilation unit containing the symbol that
253 triggers the expansion.
254
255 dblength The size of the chunk of DIE's being examined, in bytes.
256
257 lnfoff The absolute file offset to the line table fragment. Ignored
258 when building partial symbol tables, but used when expanding
259 them, and contains the absolute file offset to the fragment
260 of the ".line" section containing the line numbers for the
261 current compilation unit.
262 */
263
264 struct dwfinfo {
265 file_ptr dbfoff; /* Absolute file offset to start of .debug section */
266 int dbroff; /* Relative offset from start of .debug section */
267 int dblength; /* Size of the chunk of DIE's being examined */
268 file_ptr lnfoff; /* Absolute file offset to line table fragment */
269 };
270
271 #define DBFOFF(p) (((struct dwfinfo *)((p)->read_symtab_private))->dbfoff)
272 #define DBROFF(p) (((struct dwfinfo *)((p)->read_symtab_private))->dbroff)
273 #define DBLENGTH(p) (((struct dwfinfo *)((p)->read_symtab_private))->dblength)
274 #define LNFOFF(p) (((struct dwfinfo *)((p)->read_symtab_private))->lnfoff)
275
276 /* The generic symbol table building routines have separate lists for
277 file scope symbols and all all other scopes (local scopes). So
278 we need to select the right one to pass to add_symbol_to_list().
279 We do it by keeping a pointer to the correct list in list_in_scope.
280
281 FIXME: The original dwarf code just treated the file scope as the first
282 local scope, and all other local scopes as nested local scopes, and worked
283 fine. Check to see if we really need to distinguish these in buildsym.c */
284
285 struct pending **list_in_scope = &file_symbols;
286
287 /* DIES which have user defined types or modified user defined types refer to
288 other DIES for the type information. Thus we need to associate the offset
289 of a DIE for a user defined type with a pointer to the type information.
290
291 Originally this was done using a simple but expensive algorithm, with an
292 array of unsorted structures, each containing an offset/type-pointer pair.
293 This array was scanned linearly each time a lookup was done. The result
294 was that gdb was spending over half it's startup time munging through this
295 array of pointers looking for a structure that had the right offset member.
296
297 The second attempt used the same array of structures, but the array was
298 sorted using qsort each time a new offset/type was recorded, and a binary
299 search was used to find the type pointer for a given DIE offset. This was
300 even slower, due to the overhead of sorting the array each time a new
301 offset/type pair was entered.
302
303 The third attempt uses a fixed size array of type pointers, indexed by a
304 value derived from the DIE offset. Since the minimum DIE size is 4 bytes,
305 we can divide any DIE offset by 4 to obtain a unique index into this fixed
306 size array. Since each element is a 4 byte pointer, it takes exactly as
307 much memory to hold this array as to hold the DWARF info for a given
308 compilation unit. But it gets freed as soon as we are done with it. */
309
310 static struct type **utypes; /* Pointer to array of user type pointers */
311 static int numutypes; /* Max number of user type pointers */
312
313 /* Record the language for the compilation unit which is currently being
314 processed. We know it once we have seen the TAG_compile_unit DIE,
315 and we need it while processing the DIE's for that compilation unit.
316 It is eventually saved in the symtab structure, but we don't finalize
317 the symtab struct until we have processed all the DIE's for the
318 compilation unit. */
319
320 static enum language cu_language;
321
322 /* Forward declarations of static functions so we don't have to worry
323 about ordering within this file. */
324
325 static int
326 attribute_size PARAMS ((unsigned int));
327
328 static unsigned long
329 target_to_host PARAMS ((char *, int, int, struct objfile *));
330
331 static void
332 add_enum_psymbol PARAMS ((struct dieinfo *, struct objfile *));
333
334 static void
335 handle_producer PARAMS ((char *));
336
337 static void
338 read_file_scope PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
339
340 static void
341 read_func_scope PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
342
343 static void
344 read_lexical_block_scope PARAMS ((struct dieinfo *, char *, char *,
345 struct objfile *));
346
347 static void
348 dwarfwarn ();
349
350 static void
351 scan_partial_symbols PARAMS ((char *, char *, struct objfile *));
352
353 static void
354 scan_compilation_units PARAMS ((char *, char *, file_ptr,
355 file_ptr, struct objfile *));
356
357 static void
358 add_partial_symbol PARAMS ((struct dieinfo *, struct objfile *));
359
360 static void
361 init_psymbol_list PARAMS ((struct objfile *, int));
362
363 static void
364 basicdieinfo PARAMS ((struct dieinfo *, char *, struct objfile *));
365
366 static void
367 completedieinfo PARAMS ((struct dieinfo *, struct objfile *));
368
369 static void
370 dwarf_psymtab_to_symtab PARAMS ((struct partial_symtab *));
371
372 static void
373 psymtab_to_symtab_1 PARAMS ((struct partial_symtab *));
374
375 static struct symtab *
376 read_ofile_symtab PARAMS ((struct partial_symtab *));
377
378 static void
379 process_dies PARAMS ((char *, char *, struct objfile *));
380
381 static void
382 read_structure_scope PARAMS ((struct dieinfo *, char *, char *,
383 struct objfile *));
384
385 static struct type *
386 decode_array_element_type PARAMS ((char *));
387
388 static struct type *
389 decode_subscr_data PARAMS ((char *, char *));
390
391 static void
392 dwarf_read_array_type PARAMS ((struct dieinfo *));
393
394 static void
395 read_tag_pointer_type PARAMS ((struct dieinfo *dip));
396
397 static void
398 read_subroutine_type PARAMS ((struct dieinfo *, char *, char *));
399
400 static void
401 read_enumeration PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
402
403 static struct type *
404 struct_type PARAMS ((struct dieinfo *, char *, char *, struct objfile *));
405
406 static struct type *
407 enum_type PARAMS ((struct dieinfo *, struct objfile *));
408
409 static void
410 decode_line_numbers PARAMS ((char *));
411
412 static struct type *
413 decode_die_type PARAMS ((struct dieinfo *));
414
415 static struct type *
416 decode_mod_fund_type PARAMS ((char *));
417
418 static struct type *
419 decode_mod_u_d_type PARAMS ((char *));
420
421 static struct type *
422 decode_modified_type PARAMS ((char *, unsigned int, int));
423
424 static struct type *
425 decode_fund_type PARAMS ((unsigned int));
426
427 static char *
428 create_name PARAMS ((char *, struct obstack *));
429
430 static struct type *
431 lookup_utype PARAMS ((DIE_REF));
432
433 static struct type *
434 alloc_utype PARAMS ((DIE_REF, struct type *));
435
436 static struct symbol *
437 new_symbol PARAMS ((struct dieinfo *, struct objfile *));
438
439 static void
440 synthesize_typedef PARAMS ((struct dieinfo *, struct objfile *,
441 struct type *));
442
443 static int
444 locval PARAMS ((char *));
445
446 static void
447 record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type,
448 struct objfile *));
449
450 static void
451 set_cu_language PARAMS ((struct dieinfo *));
452
453 /*
454
455 LOCAL FUNCTION
456
457 set_cu_language -- set local copy of language for compilation unit
458
459 SYNOPSIS
460
461 void
462 set_cu_language (struct dieinfo *dip)
463
464 DESCRIPTION
465
466 Decode the language attribute for a compilation unit DIE and
467 remember what the language was. We use this at various times
468 when processing DIE's for a given compilation unit.
469
470 RETURNS
471
472 No return value.
473
474 */
475
476 static void
477 set_cu_language (dip)
478 struct dieinfo *dip;
479 {
480 switch (dip -> at_language)
481 {
482 case LANG_C89:
483 case LANG_C:
484 cu_language = language_c;
485 break;
486 case LANG_C_PLUS_PLUS:
487 cu_language = language_cplus;
488 break;
489 case LANG_ADA83:
490 case LANG_COBOL74:
491 case LANG_COBOL85:
492 case LANG_FORTRAN77:
493 case LANG_FORTRAN90:
494 case LANG_PASCAL83:
495 case LANG_MODULA2:
496 default:
497 cu_language = language_unknown;
498 break;
499 }
500 }
501
502 /*
503
504 GLOBAL FUNCTION
505
506 dwarf_build_psymtabs -- build partial symtabs from DWARF debug info
507
508 SYNOPSIS
509
510 void dwarf_build_psymtabs (struct objfile *objfile,
511 struct section_offsets *section_offsets,
512 int mainline, file_ptr dbfoff, unsigned int dbfsize,
513 file_ptr lnoffset, unsigned int lnsize)
514
515 DESCRIPTION
516
517 This function is called upon to build partial symtabs from files
518 containing DIE's (Dwarf Information Entries) and DWARF line numbers.
519
520 It is passed a bfd* containing the DIES
521 and line number information, the corresponding filename for that
522 file, a base address for relocating the symbols, a flag indicating
523 whether or not this debugging information is from a "main symbol
524 table" rather than a shared library or dynamically linked file,
525 and file offset/size pairs for the DIE information and line number
526 information.
527
528 RETURNS
529
530 No return value.
531
532 */
533
534 void
535 dwarf_build_psymtabs (objfile, section_offsets, mainline, dbfoff, dbfsize,
536 lnoffset, lnsize)
537 struct objfile *objfile;
538 struct section_offsets *section_offsets;
539 int mainline;
540 file_ptr dbfoff;
541 unsigned int dbfsize;
542 file_ptr lnoffset;
543 unsigned int lnsize;
544 {
545 bfd *abfd = objfile->obfd;
546 struct cleanup *back_to;
547
548 current_objfile = objfile;
549 dbsize = dbfsize;
550 dbbase = xmalloc (dbsize);
551 dbroff = 0;
552 if ((bfd_seek (abfd, dbfoff, L_SET) != 0) ||
553 (bfd_read (dbbase, dbsize, 1, abfd) != dbsize))
554 {
555 free (dbbase);
556 error ("can't read DWARF data from '%s'", bfd_get_filename (abfd));
557 }
558 back_to = make_cleanup (free, dbbase);
559
560 /* If we are reinitializing, or if we have never loaded syms yet, init.
561 Since we have no idea how many DIES we are looking at, we just guess
562 some arbitrary value. */
563
564 if (mainline || objfile -> global_psymbols.size == 0 ||
565 objfile -> static_psymbols.size == 0)
566 {
567 init_psymbol_list (objfile, 1024);
568 }
569
570 /* Save the relocation factor where everybody can see it. */
571
572 base_section_offsets = section_offsets;
573 baseaddr = ANOFFSET (section_offsets, 0);
574
575 /* Follow the compilation unit sibling chain, building a partial symbol
576 table entry for each one. Save enough information about each compilation
577 unit to locate the full DWARF information later. */
578
579 scan_compilation_units (dbbase, dbbase + dbsize, dbfoff, lnoffset, objfile);
580
581 do_cleanups (back_to);
582 current_objfile = NULL;
583 }
584
585
586 /*
587
588 LOCAL FUNCTION
589
590 record_minimal_symbol -- add entry to gdb's minimal symbol table
591
592 SYNOPSIS
593
594 static void record_minimal_symbol (char *name, CORE_ADDR address,
595 enum minimal_symbol_type ms_type,
596 struct objfile *objfile)
597
598 DESCRIPTION
599
600 Given a pointer to the name of a symbol that should be added to the
601 minimal symbol table, and the address associated with that
602 symbol, records this information for later use in building the
603 minimal symbol table.
604
605 */
606
607 static void
608 record_minimal_symbol (name, address, ms_type, objfile)
609 char *name;
610 CORE_ADDR address;
611 enum minimal_symbol_type ms_type;
612 struct objfile *objfile;
613 {
614 name = obsavestring (name, strlen (name), &objfile -> symbol_obstack);
615 prim_record_minimal_symbol (name, address, ms_type);
616 }
617
618 /*
619
620 LOCAL FUNCTION
621
622 dwarfwarn -- issue a DWARF related warning
623
624 DESCRIPTION
625
626 Issue warnings about DWARF related things that aren't serious enough
627 to warrant aborting with an error, but should not be ignored either.
628 This includes things like detectable corruption in DIE's, missing
629 DIE's, unimplemented features, etc.
630
631 In general, running across tags or attributes that we don't recognize
632 is not considered to be a problem and we should not issue warnings
633 about such.
634
635 NOTES
636
637 We mostly follow the example of the error() routine, but without
638 returning to command level. It is arguable about whether warnings
639 should be issued at all, and if so, where they should go (stdout or
640 stderr).
641
642 We assume that curdie is valid and contains at least the basic
643 information for the DIE where the problem was noticed.
644 */
645
646 static void
647 dwarfwarn (va_alist)
648 va_dcl
649 {
650 va_list ap;
651 char *fmt;
652
653 va_start (ap);
654 fmt = va_arg (ap, char *);
655 warning_setup ();
656 fprintf (stderr, "warning: DWARF ref 0x%x: ", curdie -> die_ref);
657 if (curdie -> at_name)
658 {
659 fprintf (stderr, "'%s': ", curdie -> at_name);
660 }
661 vfprintf (stderr, fmt, ap);
662 fprintf (stderr, "\n");
663 fflush (stderr);
664 va_end (ap);
665 }
666
667 /*
668
669 LOCAL FUNCTION
670
671 read_lexical_block_scope -- process all dies in a lexical block
672
673 SYNOPSIS
674
675 static void read_lexical_block_scope (struct dieinfo *dip,
676 char *thisdie, char *enddie)
677
678 DESCRIPTION
679
680 Process all the DIES contained within a lexical block scope.
681 Start a new scope, process the dies, and then close the scope.
682
683 */
684
685 static void
686 read_lexical_block_scope (dip, thisdie, enddie, objfile)
687 struct dieinfo *dip;
688 char *thisdie;
689 char *enddie;
690 struct objfile *objfile;
691 {
692 register struct context_stack *new;
693
694 push_context (0, dip -> at_low_pc);
695 process_dies (thisdie + dip -> die_length, enddie, objfile);
696 new = pop_context ();
697 if (local_symbols != NULL)
698 {
699 finish_block (0, &local_symbols, new -> old_blocks, new -> start_addr,
700 dip -> at_high_pc, objfile);
701 }
702 local_symbols = new -> locals;
703 }
704
705 /*
706
707 LOCAL FUNCTION
708
709 lookup_utype -- look up a user defined type from die reference
710
711 SYNOPSIS
712
713 static type *lookup_utype (DIE_REF die_ref)
714
715 DESCRIPTION
716
717 Given a DIE reference, lookup the user defined type associated with
718 that DIE, if it has been registered already. If not registered, then
719 return NULL. Alloc_utype() can be called to register an empty
720 type for this reference, which will be filled in later when the
721 actual referenced DIE is processed.
722 */
723
724 static struct type *
725 lookup_utype (die_ref)
726 DIE_REF die_ref;
727 {
728 struct type *type = NULL;
729 int utypeidx;
730
731 utypeidx = (die_ref - dbroff) / 4;
732 if ((utypeidx < 0) || (utypeidx >= numutypes))
733 {
734 dwarfwarn ("reference to DIE (0x%x) outside compilation unit", die_ref);
735 }
736 else
737 {
738 type = *(utypes + utypeidx);
739 }
740 return (type);
741 }
742
743
744 /*
745
746 LOCAL FUNCTION
747
748 alloc_utype -- add a user defined type for die reference
749
750 SYNOPSIS
751
752 static type *alloc_utype (DIE_REF die_ref, struct type *utypep)
753
754 DESCRIPTION
755
756 Given a die reference DIE_REF, and a possible pointer to a user
757 defined type UTYPEP, register that this reference has a user
758 defined type and either use the specified type in UTYPEP or
759 make a new empty type that will be filled in later.
760
761 We should only be called after calling lookup_utype() to verify that
762 there is not currently a type registered for DIE_REF.
763 */
764
765 static struct type *
766 alloc_utype (die_ref, utypep)
767 DIE_REF die_ref;
768 struct type *utypep;
769 {
770 struct type **typep;
771 int utypeidx;
772
773 utypeidx = (die_ref - dbroff) / 4;
774 typep = utypes + utypeidx;
775 if ((utypeidx < 0) || (utypeidx >= numutypes))
776 {
777 utypep = lookup_fundamental_type (current_objfile, FT_INTEGER);
778 dwarfwarn ("reference to DIE (0x%x) outside compilation unit", die_ref);
779 }
780 else if (*typep != NULL)
781 {
782 utypep = *typep;
783 SQUAWK (("internal error: dup user type allocation"));
784 }
785 else
786 {
787 if (utypep == NULL)
788 {
789 utypep = alloc_type (current_objfile);
790 }
791 *typep = utypep;
792 }
793 return (utypep);
794 }
795
796 /*
797
798 LOCAL FUNCTION
799
800 decode_die_type -- return a type for a specified die
801
802 SYNOPSIS
803
804 static struct type *decode_die_type (struct dieinfo *dip)
805
806 DESCRIPTION
807
808 Given a pointer to a die information structure DIP, decode the
809 type of the die and return a pointer to the decoded type. All
810 dies without specific types default to type int.
811 */
812
813 static struct type *
814 decode_die_type (dip)
815 struct dieinfo *dip;
816 {
817 struct type *type = NULL;
818
819 if (dip -> at_fund_type != 0)
820 {
821 type = decode_fund_type (dip -> at_fund_type);
822 }
823 else if (dip -> at_mod_fund_type != NULL)
824 {
825 type = decode_mod_fund_type (dip -> at_mod_fund_type);
826 }
827 else if (dip -> at_user_def_type)
828 {
829 if ((type = lookup_utype (dip -> at_user_def_type)) == NULL)
830 {
831 type = alloc_utype (dip -> at_user_def_type, NULL);
832 }
833 }
834 else if (dip -> at_mod_u_d_type)
835 {
836 type = decode_mod_u_d_type (dip -> at_mod_u_d_type);
837 }
838 else
839 {
840 type = lookup_fundamental_type (current_objfile, FT_INTEGER);
841 }
842 return (type);
843 }
844
845 /*
846
847 LOCAL FUNCTION
848
849 struct_type -- compute and return the type for a struct or union
850
851 SYNOPSIS
852
853 static struct type *struct_type (struct dieinfo *dip, char *thisdie,
854 char *enddie, struct objfile *objfile)
855
856 DESCRIPTION
857
858 Given pointer to a die information structure for a die which
859 defines a union or structure (and MUST define one or the other),
860 and pointers to the raw die data that define the range of dies which
861 define the members, compute and return the user defined type for the
862 structure or union.
863 */
864
865 static struct type *
866 struct_type (dip, thisdie, enddie, objfile)
867 struct dieinfo *dip;
868 char *thisdie;
869 char *enddie;
870 struct objfile *objfile;
871 {
872 struct type *type;
873 struct nextfield {
874 struct nextfield *next;
875 struct field field;
876 };
877 struct nextfield *list = NULL;
878 struct nextfield *new;
879 int nfields = 0;
880 int n;
881 char *tpart1;
882 struct dieinfo mbr;
883 char *nextdie;
884 int anonymous_size;
885
886 if ((type = lookup_utype (dip -> die_ref)) == NULL)
887 {
888 /* No forward references created an empty type, so install one now */
889 type = alloc_utype (dip -> die_ref, NULL);
890 }
891 INIT_CPLUS_SPECIFIC(type);
892 switch (dip -> die_tag)
893 {
894 case TAG_class_type:
895 TYPE_CODE (type) = TYPE_CODE_CLASS;
896 tpart1 = "class";
897 break;
898 case TAG_structure_type:
899 TYPE_CODE (type) = TYPE_CODE_STRUCT;
900 tpart1 = "struct";
901 break;
902 case TAG_union_type:
903 TYPE_CODE (type) = TYPE_CODE_UNION;
904 tpart1 = "union";
905 break;
906 default:
907 /* Should never happen */
908 TYPE_CODE (type) = TYPE_CODE_UNDEF;
909 tpart1 = "???";
910 SQUAWK (("missing class, structure, or union tag"));
911 break;
912 }
913 /* Some compilers try to be helpful by inventing "fake" names for
914 anonymous enums, structures, and unions, like "~0fake" or ".0fake".
915 Thanks, but no thanks... */
916 if (dip -> at_name != NULL
917 && *dip -> at_name != '~'
918 && *dip -> at_name != '.')
919 {
920 TYPE_NAME (type) = obconcat (&objfile -> type_obstack,
921 tpart1, " ", dip -> at_name);
922 }
923 /* Use whatever size is known. Zero is a valid size. We might however
924 wish to check has_at_byte_size to make sure that some byte size was
925 given explicitly, but DWARF doesn't specify that explicit sizes of
926 zero have to present, so complaining about missing sizes should
927 probably not be the default. */
928 TYPE_LENGTH (type) = dip -> at_byte_size;
929 thisdie += dip -> die_length;
930 while (thisdie < enddie)
931 {
932 basicdieinfo (&mbr, thisdie, objfile);
933 completedieinfo (&mbr, objfile);
934 if (mbr.die_length <= SIZEOF_DIE_LENGTH)
935 {
936 break;
937 }
938 else if (mbr.at_sibling != 0)
939 {
940 nextdie = dbbase + mbr.at_sibling - dbroff;
941 }
942 else
943 {
944 nextdie = thisdie + mbr.die_length;
945 }
946 switch (mbr.die_tag)
947 {
948 case TAG_member:
949 /* Get space to record the next field's data. */
950 new = (struct nextfield *) alloca (sizeof (struct nextfield));
951 new -> next = list;
952 list = new;
953 /* Save the data. */
954 list -> field.name =
955 obsavestring (mbr.at_name, strlen (mbr.at_name),
956 &objfile -> type_obstack);
957 list -> field.type = decode_die_type (&mbr);
958 list -> field.bitpos = 8 * locval (mbr.at_location);
959 /* Handle bit fields. */
960 list -> field.bitsize = mbr.at_bit_size;
961 #if BITS_BIG_ENDIAN
962 /* For big endian bits, the at_bit_offset gives the additional
963 bit offset from the MSB of the containing anonymous object to
964 the MSB of the field. We don't have to do anything special
965 since we don't need to know the size of the anonymous object. */
966 list -> field.bitpos += mbr.at_bit_offset;
967 #else
968 /* For little endian bits, we need to have a non-zero at_bit_size,
969 so that we know we are in fact dealing with a bitfield. Compute
970 the bit offset to the MSB of the anonymous object, subtract off
971 the number of bits from the MSB of the field to the MSB of the
972 object, and then subtract off the number of bits of the field
973 itself. The result is the bit offset of the LSB of the field. */
974 if (mbr.at_bit_size > 0)
975 {
976 if (mbr.has_at_byte_size)
977 {
978 /* The size of the anonymous object containing the bit field
979 is explicit, so use the indicated size (in bytes). */
980 anonymous_size = mbr.at_byte_size;
981 }
982 else
983 {
984 /* The size of the anonymous object containing the bit field
985 matches the size of an object of the bit field's type.
986 DWARF allows at_byte_size to be left out in such cases,
987 as a debug information size optimization. */
988 anonymous_size = TYPE_LENGTH (list -> field.type);
989 }
990 list -> field.bitpos +=
991 anonymous_size * 8 - mbr.at_bit_offset - mbr.at_bit_size;
992 }
993 #endif
994 nfields++;
995 break;
996 default:
997 process_dies (thisdie, nextdie, objfile);
998 break;
999 }
1000 thisdie = nextdie;
1001 }
1002 /* Now create the vector of fields, and record how big it is. We may
1003 not even have any fields, if this DIE was generated due to a reference
1004 to an anonymous structure or union. In this case, TYPE_FLAG_STUB is
1005 set, which clues gdb in to the fact that it needs to search elsewhere
1006 for the full structure definition. */
1007 if (nfields == 0)
1008 {
1009 TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
1010 }
1011 else
1012 {
1013 TYPE_NFIELDS (type) = nfields;
1014 TYPE_FIELDS (type) = (struct field *)
1015 TYPE_ALLOC (type, sizeof (struct field) * nfields);
1016 /* Copy the saved-up fields into the field vector. */
1017 for (n = nfields; list; list = list -> next)
1018 {
1019 TYPE_FIELD (type, --n) = list -> field;
1020 }
1021 }
1022 return (type);
1023 }
1024
1025 /*
1026
1027 LOCAL FUNCTION
1028
1029 read_structure_scope -- process all dies within struct or union
1030
1031 SYNOPSIS
1032
1033 static void read_structure_scope (struct dieinfo *dip,
1034 char *thisdie, char *enddie, struct objfile *objfile)
1035
1036 DESCRIPTION
1037
1038 Called when we find the DIE that starts a structure or union
1039 scope (definition) to process all dies that define the members
1040 of the structure or union. DIP is a pointer to the die info
1041 struct for the DIE that names the structure or union.
1042
1043 NOTES
1044
1045 Note that we need to call struct_type regardless of whether or not
1046 the DIE has an at_name attribute, since it might be an anonymous
1047 structure or union. This gets the type entered into our set of
1048 user defined types.
1049
1050 However, if the structure is incomplete (an opaque struct/union)
1051 then suppress creating a symbol table entry for it since gdb only
1052 wants to find the one with the complete definition. Note that if
1053 it is complete, we just call new_symbol, which does it's own
1054 checking about whether the struct/union is anonymous or not (and
1055 suppresses creating a symbol table entry itself).
1056
1057 */
1058
1059 static void
1060 read_structure_scope (dip, thisdie, enddie, objfile)
1061 struct dieinfo *dip;
1062 char *thisdie;
1063 char *enddie;
1064 struct objfile *objfile;
1065 {
1066 struct type *type;
1067 struct symbol *sym;
1068
1069 type = struct_type (dip, thisdie, enddie, objfile);
1070 if (!(TYPE_FLAGS (type) & TYPE_FLAG_STUB))
1071 {
1072 sym = new_symbol (dip, objfile);
1073 if (sym != NULL)
1074 {
1075 SYMBOL_TYPE (sym) = type;
1076 if (cu_language == language_cplus)
1077 {
1078 synthesize_typedef (dip, objfile, type);
1079 }
1080 }
1081 }
1082 }
1083
1084 /*
1085
1086 LOCAL FUNCTION
1087
1088 decode_array_element_type -- decode type of the array elements
1089
1090 SYNOPSIS
1091
1092 static struct type *decode_array_element_type (char *scan, char *end)
1093
1094 DESCRIPTION
1095
1096 As the last step in decoding the array subscript information for an
1097 array DIE, we need to decode the type of the array elements. We are
1098 passed a pointer to this last part of the subscript information and
1099 must return the appropriate type. If the type attribute is not
1100 recognized, just warn about the problem and return type int.
1101 */
1102
1103 static struct type *
1104 decode_array_element_type (scan)
1105 char *scan;
1106 {
1107 struct type *typep;
1108 DIE_REF die_ref;
1109 unsigned short attribute;
1110 unsigned short fundtype;
1111 int nbytes;
1112
1113 attribute = target_to_host (scan, SIZEOF_ATTRIBUTE, GET_UNSIGNED,
1114 current_objfile);
1115 scan += SIZEOF_ATTRIBUTE;
1116 if ((nbytes = attribute_size (attribute)) == -1)
1117 {
1118 SQUAWK (("bad array element type attribute 0x%x", attribute));
1119 typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
1120 }
1121 else
1122 {
1123 switch (attribute)
1124 {
1125 case AT_fund_type:
1126 fundtype = target_to_host (scan, nbytes, GET_UNSIGNED,
1127 current_objfile);
1128 typep = decode_fund_type (fundtype);
1129 break;
1130 case AT_mod_fund_type:
1131 typep = decode_mod_fund_type (scan);
1132 break;
1133 case AT_user_def_type:
1134 die_ref = target_to_host (scan, nbytes, GET_UNSIGNED,
1135 current_objfile);
1136 if ((typep = lookup_utype (die_ref)) == NULL)
1137 {
1138 typep = alloc_utype (die_ref, NULL);
1139 }
1140 break;
1141 case AT_mod_u_d_type:
1142 typep = decode_mod_u_d_type (scan);
1143 break;
1144 default:
1145 SQUAWK (("bad array element type attribute 0x%x", attribute));
1146 typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
1147 break;
1148 }
1149 }
1150 return (typep);
1151 }
1152
1153 /*
1154
1155 LOCAL FUNCTION
1156
1157 decode_subscr_data -- decode array subscript and element type data
1158
1159 SYNOPSIS
1160
1161 static struct type *decode_subscr_data (char *scan, char *end)
1162
1163 DESCRIPTION
1164
1165 The array subscripts and the data type of the elements of an
1166 array are described by a list of data items, stored as a block
1167 of contiguous bytes. There is a data item describing each array
1168 dimension, and a final data item describing the element type.
1169 The data items are ordered the same as their appearance in the
1170 source (I.E. leftmost dimension first, next to leftmost second,
1171 etc).
1172
1173 We are passed a pointer to the start of the block of bytes
1174 containing the data items, and a pointer to the first byte past
1175 the data. This function decodes the data and returns a type.
1176
1177 BUGS
1178 FIXME: This code only implements the forms currently used
1179 by the AT&T and GNU C compilers.
1180
1181 The end pointer is supplied for error checking, maybe we should
1182 use it for that...
1183 */
1184
1185 static struct type *
1186 decode_subscr_data (scan, end)
1187 char *scan;
1188 char *end;
1189 {
1190 struct type *typep = NULL;
1191 struct type *nexttype;
1192 unsigned int format;
1193 unsigned short fundtype;
1194 unsigned long lowbound;
1195 unsigned long highbound;
1196 int nbytes;
1197
1198 format = target_to_host (scan, SIZEOF_FORMAT_SPECIFIER, GET_UNSIGNED,
1199 current_objfile);
1200 scan += SIZEOF_FORMAT_SPECIFIER;
1201 switch (format)
1202 {
1203 case FMT_ET:
1204 typep = decode_array_element_type (scan);
1205 break;
1206 case FMT_FT_C_C:
1207 fundtype = target_to_host (scan, SIZEOF_FMT_FT, GET_UNSIGNED,
1208 current_objfile);
1209 scan += SIZEOF_FMT_FT;
1210 if (fundtype != FT_integer && fundtype != FT_signed_integer
1211 && fundtype != FT_unsigned_integer)
1212 {
1213 SQUAWK (("array subscripts must be integral types, not type 0x%x",
1214 fundtype));
1215 }
1216 else
1217 {
1218 nbytes = TARGET_FT_LONG_SIZE (current_objfile);
1219 lowbound = target_to_host (scan, nbytes, GET_UNSIGNED,
1220 current_objfile);
1221 scan += nbytes;
1222 highbound = target_to_host (scan, nbytes, GET_UNSIGNED,
1223 current_objfile);
1224 scan += nbytes;
1225 nexttype = decode_subscr_data (scan, end);
1226 if (nexttype != NULL)
1227 {
1228 typep = alloc_type (current_objfile);
1229 TYPE_CODE (typep) = TYPE_CODE_ARRAY;
1230 TYPE_LENGTH (typep) = TYPE_LENGTH (nexttype);
1231 TYPE_LENGTH (typep) *= (highbound - lowbound) + 1;
1232 TYPE_TARGET_TYPE (typep) = nexttype;
1233 }
1234 }
1235 break;
1236 case FMT_FT_C_X:
1237 case FMT_FT_X_C:
1238 case FMT_FT_X_X:
1239 case FMT_UT_C_C:
1240 case FMT_UT_C_X:
1241 case FMT_UT_X_C:
1242 case FMT_UT_X_X:
1243 SQUAWK (("array subscript format 0x%x not handled yet", format));
1244 break;
1245 default:
1246 SQUAWK (("unknown array subscript format %x", format));
1247 break;
1248 }
1249 return (typep);
1250 }
1251
1252 /*
1253
1254 LOCAL FUNCTION
1255
1256 dwarf_read_array_type -- read TAG_array_type DIE
1257
1258 SYNOPSIS
1259
1260 static void dwarf_read_array_type (struct dieinfo *dip)
1261
1262 DESCRIPTION
1263
1264 Extract all information from a TAG_array_type DIE and add to
1265 the user defined type vector.
1266 */
1267
1268 static void
1269 dwarf_read_array_type (dip)
1270 struct dieinfo *dip;
1271 {
1272 struct type *type;
1273 struct type *utype;
1274 char *sub;
1275 char *subend;
1276 unsigned short blocksz;
1277 int nbytes;
1278
1279 if (dip -> at_ordering != ORD_row_major)
1280 {
1281 /* FIXME: Can gdb even handle column major arrays? */
1282 SQUAWK (("array not row major; not handled correctly"));
1283 }
1284 if ((sub = dip -> at_subscr_data) != NULL)
1285 {
1286 nbytes = attribute_size (AT_subscr_data);
1287 blocksz = target_to_host (sub, nbytes, GET_UNSIGNED, current_objfile);
1288 subend = sub + nbytes + blocksz;
1289 sub += nbytes;
1290 type = decode_subscr_data (sub, subend);
1291 if (type == NULL)
1292 {
1293 if ((utype = lookup_utype (dip -> die_ref)) == NULL)
1294 {
1295 utype = alloc_utype (dip -> die_ref, NULL);
1296 }
1297 TYPE_CODE (utype) = TYPE_CODE_ARRAY;
1298 TYPE_TARGET_TYPE (utype) =
1299 lookup_fundamental_type (current_objfile, FT_INTEGER);
1300 TYPE_LENGTH (utype) = 1 * TYPE_LENGTH (TYPE_TARGET_TYPE (utype));
1301 }
1302 else
1303 {
1304 if ((utype = lookup_utype (dip -> die_ref)) == NULL)
1305 {
1306 alloc_utype (dip -> die_ref, type);
1307 }
1308 else
1309 {
1310 TYPE_CODE (utype) = TYPE_CODE_ARRAY;
1311 TYPE_LENGTH (utype) = TYPE_LENGTH (type);
1312 TYPE_TARGET_TYPE (utype) = TYPE_TARGET_TYPE (type);
1313 }
1314 }
1315 }
1316 }
1317
1318 /*
1319
1320 LOCAL FUNCTION
1321
1322 read_tag_pointer_type -- read TAG_pointer_type DIE
1323
1324 SYNOPSIS
1325
1326 static void read_tag_pointer_type (struct dieinfo *dip)
1327
1328 DESCRIPTION
1329
1330 Extract all information from a TAG_pointer_type DIE and add to
1331 the user defined type vector.
1332 */
1333
1334 static void
1335 read_tag_pointer_type (dip)
1336 struct dieinfo *dip;
1337 {
1338 struct type *type;
1339 struct type *utype;
1340
1341 type = decode_die_type (dip);
1342 if ((utype = lookup_utype (dip -> die_ref)) == NULL)
1343 {
1344 utype = lookup_pointer_type (type);
1345 alloc_utype (dip -> die_ref, utype);
1346 }
1347 else
1348 {
1349 TYPE_TARGET_TYPE (utype) = type;
1350 TYPE_POINTER_TYPE (type) = utype;
1351
1352 /* We assume the machine has only one representation for pointers! */
1353 /* FIXME: This confuses host<->target data representations, and is a
1354 poor assumption besides. */
1355
1356 TYPE_LENGTH (utype) = sizeof (char *);
1357 TYPE_CODE (utype) = TYPE_CODE_PTR;
1358 }
1359 }
1360
1361 /*
1362
1363 LOCAL FUNCTION
1364
1365 read_subroutine_type -- process TAG_subroutine_type dies
1366
1367 SYNOPSIS
1368
1369 static void read_subroutine_type (struct dieinfo *dip, char thisdie,
1370 char *enddie)
1371
1372 DESCRIPTION
1373
1374 Handle DIES due to C code like:
1375
1376 struct foo {
1377 int (*funcp)(int a, long l); (Generates TAG_subroutine_type DIE)
1378 int b;
1379 };
1380
1381 NOTES
1382
1383 The parameter DIES are currently ignored. See if gdb has a way to
1384 include this info in it's type system, and decode them if so. Is
1385 this what the type structure's "arg_types" field is for? (FIXME)
1386 */
1387
1388 static void
1389 read_subroutine_type (dip, thisdie, enddie)
1390 struct dieinfo *dip;
1391 char *thisdie;
1392 char *enddie;
1393 {
1394 struct type *type; /* Type that this function returns */
1395 struct type *ftype; /* Function that returns above type */
1396
1397 /* Decode the type that this subroutine returns */
1398
1399 type = decode_die_type (dip);
1400
1401 /* Check to see if we already have a partially constructed user
1402 defined type for this DIE, from a forward reference. */
1403
1404 if ((ftype = lookup_utype (dip -> die_ref)) == NULL)
1405 {
1406 /* This is the first reference to one of these types. Make
1407 a new one and place it in the user defined types. */
1408 ftype = lookup_function_type (type);
1409 alloc_utype (dip -> die_ref, ftype);
1410 }
1411 else
1412 {
1413 /* We have an existing partially constructed type, so bash it
1414 into the correct type. */
1415 TYPE_TARGET_TYPE (ftype) = type;
1416 TYPE_FUNCTION_TYPE (type) = ftype;
1417 TYPE_LENGTH (ftype) = 1;
1418 TYPE_CODE (ftype) = TYPE_CODE_FUNC;
1419 }
1420 }
1421
1422 /*
1423
1424 LOCAL FUNCTION
1425
1426 read_enumeration -- process dies which define an enumeration
1427
1428 SYNOPSIS
1429
1430 static void read_enumeration (struct dieinfo *dip, char *thisdie,
1431 char *enddie, struct objfile *objfile)
1432
1433 DESCRIPTION
1434
1435 Given a pointer to a die which begins an enumeration, process all
1436 the dies that define the members of the enumeration.
1437
1438 NOTES
1439
1440 Note that we need to call enum_type regardless of whether or not we
1441 have a symbol, since we might have an enum without a tag name (thus
1442 no symbol for the tagname).
1443 */
1444
1445 static void
1446 read_enumeration (dip, thisdie, enddie, objfile)
1447 struct dieinfo *dip;
1448 char *thisdie;
1449 char *enddie;
1450 struct objfile *objfile;
1451 {
1452 struct type *type;
1453 struct symbol *sym;
1454
1455 type = enum_type (dip, objfile);
1456 sym = new_symbol (dip, objfile);
1457 if (sym != NULL)
1458 {
1459 SYMBOL_TYPE (sym) = type;
1460 if (cu_language == language_cplus)
1461 {
1462 synthesize_typedef (dip, objfile, type);
1463 }
1464 }
1465 }
1466
1467 /*
1468
1469 LOCAL FUNCTION
1470
1471 enum_type -- decode and return a type for an enumeration
1472
1473 SYNOPSIS
1474
1475 static type *enum_type (struct dieinfo *dip, struct objfile *objfile)
1476
1477 DESCRIPTION
1478
1479 Given a pointer to a die information structure for the die which
1480 starts an enumeration, process all the dies that define the members
1481 of the enumeration and return a type pointer for the enumeration.
1482
1483 At the same time, for each member of the enumeration, create a
1484 symbol for it with namespace VAR_NAMESPACE and class LOC_CONST,
1485 and give it the type of the enumeration itself.
1486
1487 NOTES
1488
1489 Note that the DWARF specification explicitly mandates that enum
1490 constants occur in reverse order from the source program order,
1491 for "consistency" and because this ordering is easier for many
1492 compilers to generate. (Draft 6, sec 3.8.5, Enumeration type
1493 Entries). Because gdb wants to see the enum members in program
1494 source order, we have to ensure that the order gets reversed while
1495 we are processing them.
1496 */
1497
1498 static struct type *
1499 enum_type (dip, objfile)
1500 struct dieinfo *dip;
1501 struct objfile *objfile;
1502 {
1503 struct type *type;
1504 struct nextfield {
1505 struct nextfield *next;
1506 struct field field;
1507 };
1508 struct nextfield *list = NULL;
1509 struct nextfield *new;
1510 int nfields = 0;
1511 int n;
1512 char *scan;
1513 char *listend;
1514 unsigned short blocksz;
1515 struct symbol *sym;
1516 int nbytes;
1517
1518 if ((type = lookup_utype (dip -> die_ref)) == NULL)
1519 {
1520 /* No forward references created an empty type, so install one now */
1521 type = alloc_utype (dip -> die_ref, NULL);
1522 }
1523 TYPE_CODE (type) = TYPE_CODE_ENUM;
1524 /* Some compilers try to be helpful by inventing "fake" names for
1525 anonymous enums, structures, and unions, like "~0fake" or ".0fake".
1526 Thanks, but no thanks... */
1527 if (dip -> at_name != NULL
1528 && *dip -> at_name != '~'
1529 && *dip -> at_name != '.')
1530 {
1531 TYPE_NAME (type) = obconcat (&objfile -> type_obstack, "enum",
1532 " ", dip -> at_name);
1533 }
1534 if (dip -> at_byte_size != 0)
1535 {
1536 TYPE_LENGTH (type) = dip -> at_byte_size;
1537 }
1538 if ((scan = dip -> at_element_list) != NULL)
1539 {
1540 if (dip -> short_element_list)
1541 {
1542 nbytes = attribute_size (AT_short_element_list);
1543 }
1544 else
1545 {
1546 nbytes = attribute_size (AT_element_list);
1547 }
1548 blocksz = target_to_host (scan, nbytes, GET_UNSIGNED, objfile);
1549 listend = scan + nbytes + blocksz;
1550 scan += nbytes;
1551 while (scan < listend)
1552 {
1553 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1554 new -> next = list;
1555 list = new;
1556 list -> field.type = NULL;
1557 list -> field.bitsize = 0;
1558 list -> field.bitpos =
1559 target_to_host (scan, TARGET_FT_LONG_SIZE (objfile), GET_SIGNED,
1560 objfile);
1561 scan += TARGET_FT_LONG_SIZE (objfile);
1562 list -> field.name = obsavestring (scan, strlen (scan),
1563 &objfile -> type_obstack);
1564 scan += strlen (scan) + 1;
1565 nfields++;
1566 /* Handcraft a new symbol for this enum member. */
1567 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
1568 sizeof (struct symbol));
1569 memset (sym, 0, sizeof (struct symbol));
1570 SYMBOL_NAME (sym) = create_name (list -> field.name,
1571 &objfile->symbol_obstack);
1572 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1573 SYMBOL_CLASS (sym) = LOC_CONST;
1574 SYMBOL_TYPE (sym) = type;
1575 SYMBOL_VALUE (sym) = list -> field.bitpos;
1576 add_symbol_to_list (sym, list_in_scope);
1577 }
1578 /* Now create the vector of fields, and record how big it is. This is
1579 where we reverse the order, by pulling the members off the list in
1580 reverse order from how they were inserted. If we have no fields
1581 (this is apparently possible in C++) then skip building a field
1582 vector. */
1583 if (nfields > 0)
1584 {
1585 TYPE_NFIELDS (type) = nfields;
1586 TYPE_FIELDS (type) = (struct field *)
1587 obstack_alloc (&objfile->symbol_obstack, sizeof (struct field) * nfields);
1588 /* Copy the saved-up fields into the field vector. */
1589 for (n = 0; (n < nfields) && (list != NULL); list = list -> next)
1590 {
1591 TYPE_FIELD (type, n++) = list -> field;
1592 }
1593 }
1594 }
1595 return (type);
1596 }
1597
1598 /*
1599
1600 LOCAL FUNCTION
1601
1602 read_func_scope -- process all dies within a function scope
1603
1604 DESCRIPTION
1605
1606 Process all dies within a given function scope. We are passed
1607 a die information structure pointer DIP for the die which
1608 starts the function scope, and pointers into the raw die data
1609 that define the dies within the function scope.
1610
1611 For now, we ignore lexical block scopes within the function.
1612 The problem is that AT&T cc does not define a DWARF lexical
1613 block scope for the function itself, while gcc defines a
1614 lexical block scope for the function. We need to think about
1615 how to handle this difference, or if it is even a problem.
1616 (FIXME)
1617 */
1618
1619 static void
1620 read_func_scope (dip, thisdie, enddie, objfile)
1621 struct dieinfo *dip;
1622 char *thisdie;
1623 char *enddie;
1624 struct objfile *objfile;
1625 {
1626 register struct context_stack *new;
1627
1628 if (objfile -> ei.entry_point >= dip -> at_low_pc &&
1629 objfile -> ei.entry_point < dip -> at_high_pc)
1630 {
1631 objfile -> ei.entry_func_lowpc = dip -> at_low_pc;
1632 objfile -> ei.entry_func_highpc = dip -> at_high_pc;
1633 }
1634 if (STREQ (dip -> at_name, "main")) /* FIXME: hardwired name */
1635 {
1636 objfile -> ei.main_func_lowpc = dip -> at_low_pc;
1637 objfile -> ei.main_func_highpc = dip -> at_high_pc;
1638 }
1639 new = push_context (0, dip -> at_low_pc);
1640 new -> name = new_symbol (dip, objfile);
1641 list_in_scope = &local_symbols;
1642 process_dies (thisdie + dip -> die_length, enddie, objfile);
1643 new = pop_context ();
1644 /* Make a block for the local symbols within. */
1645 finish_block (new -> name, &local_symbols, new -> old_blocks,
1646 new -> start_addr, dip -> at_high_pc, objfile);
1647 list_in_scope = &file_symbols;
1648 }
1649
1650
1651 /*
1652
1653 LOCAL FUNCTION
1654
1655 handle_producer -- process the AT_producer attribute
1656
1657 DESCRIPTION
1658
1659 Perform any operations that depend on finding a particular
1660 AT_producer attribute.
1661
1662 */
1663
1664 static void
1665 handle_producer (producer)
1666 char *producer;
1667 {
1668
1669 /* If this compilation unit was compiled with g++ or gcc, then set the
1670 processing_gcc_compilation flag. */
1671
1672 processing_gcc_compilation =
1673 STREQN (producer, GPLUS_PRODUCER, strlen (GPLUS_PRODUCER))
1674 || STREQN (producer, GCC_PRODUCER, strlen (GCC_PRODUCER));
1675
1676 /* Select a demangling style if we can identify the producer and if
1677 the current style is auto. We leave the current style alone if it
1678 is not auto. We also leave the demangling style alone if we find a
1679 gcc (cc1) producer, as opposed to a g++ (cc1plus) producer. */
1680
1681 #if 1 /* Works, but is experimental. -fnf */
1682 if (AUTO_DEMANGLING)
1683 {
1684 if (STREQN (producer, GPLUS_PRODUCER, strlen (GPLUS_PRODUCER)))
1685 {
1686 set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
1687 }
1688 else if (STREQN (producer, LCC_PRODUCER, strlen (LCC_PRODUCER)))
1689 {
1690 set_demangling_style (LUCID_DEMANGLING_STYLE_STRING);
1691 }
1692 else if (STREQN (producer, CFRONT_PRODUCER, strlen (CFRONT_PRODUCER)))
1693 {
1694 set_demangling_style (CFRONT_DEMANGLING_STYLE_STRING);
1695 }
1696 }
1697 #endif
1698 }
1699
1700
1701 /*
1702
1703 LOCAL FUNCTION
1704
1705 read_file_scope -- process all dies within a file scope
1706
1707 DESCRIPTION
1708
1709 Process all dies within a given file scope. We are passed a
1710 pointer to the die information structure for the die which
1711 starts the file scope, and pointers into the raw die data which
1712 mark the range of dies within the file scope.
1713
1714 When the partial symbol table is built, the file offset for the line
1715 number table for each compilation unit is saved in the partial symbol
1716 table entry for that compilation unit. As the symbols for each
1717 compilation unit are read, the line number table is read into memory
1718 and the variable lnbase is set to point to it. Thus all we have to
1719 do is use lnbase to access the line number table for the current
1720 compilation unit.
1721 */
1722
1723 static void
1724 read_file_scope (dip, thisdie, enddie, objfile)
1725 struct dieinfo *dip;
1726 char *thisdie;
1727 char *enddie;
1728 struct objfile *objfile;
1729 {
1730 struct cleanup *back_to;
1731 struct symtab *symtab;
1732
1733 if (objfile -> ei.entry_point >= dip -> at_low_pc &&
1734 objfile -> ei.entry_point < dip -> at_high_pc)
1735 {
1736 objfile -> ei.entry_file_lowpc = dip -> at_low_pc;
1737 objfile -> ei.entry_file_highpc = dip -> at_high_pc;
1738 }
1739 set_cu_language (dip);
1740 if (dip -> at_producer != NULL)
1741 {
1742 handle_producer (dip -> at_producer);
1743 }
1744 numutypes = (enddie - thisdie) / 4;
1745 utypes = (struct type **) xmalloc (numutypes * sizeof (struct type *));
1746 back_to = make_cleanup (free, utypes);
1747 memset (utypes, 0, numutypes * sizeof (struct type *));
1748 start_symtab (dip -> at_name, dip -> at_comp_dir, dip -> at_low_pc);
1749 decode_line_numbers (lnbase);
1750 process_dies (thisdie + dip -> die_length, enddie, objfile);
1751 symtab = end_symtab (dip -> at_high_pc, 0, 0, objfile);
1752 if (symtab != NULL)
1753 {
1754 symtab -> language = cu_language;
1755 }
1756 do_cleanups (back_to);
1757 utypes = NULL;
1758 numutypes = 0;
1759 }
1760
1761 /*
1762
1763 LOCAL FUNCTION
1764
1765 process_dies -- process a range of DWARF Information Entries
1766
1767 SYNOPSIS
1768
1769 static void process_dies (char *thisdie, char *enddie,
1770 struct objfile *objfile)
1771
1772 DESCRIPTION
1773
1774 Process all DIE's in a specified range. May be (and almost
1775 certainly will be) called recursively.
1776 */
1777
1778 static void
1779 process_dies (thisdie, enddie, objfile)
1780 char *thisdie;
1781 char *enddie;
1782 struct objfile *objfile;
1783 {
1784 char *nextdie;
1785 struct dieinfo di;
1786
1787 while (thisdie < enddie)
1788 {
1789 basicdieinfo (&di, thisdie, objfile);
1790 if (di.die_length < SIZEOF_DIE_LENGTH)
1791 {
1792 break;
1793 }
1794 else if (di.die_tag == TAG_padding)
1795 {
1796 nextdie = thisdie + di.die_length;
1797 }
1798 else
1799 {
1800 completedieinfo (&di, objfile);
1801 if (di.at_sibling != 0)
1802 {
1803 nextdie = dbbase + di.at_sibling - dbroff;
1804 }
1805 else
1806 {
1807 nextdie = thisdie + di.die_length;
1808 }
1809 switch (di.die_tag)
1810 {
1811 case TAG_compile_unit:
1812 read_file_scope (&di, thisdie, nextdie, objfile);
1813 break;
1814 case TAG_global_subroutine:
1815 case TAG_subroutine:
1816 if (di.has_at_low_pc)
1817 {
1818 read_func_scope (&di, thisdie, nextdie, objfile);
1819 }
1820 break;
1821 case TAG_lexical_block:
1822 read_lexical_block_scope (&di, thisdie, nextdie, objfile);
1823 break;
1824 case TAG_class_type:
1825 case TAG_structure_type:
1826 case TAG_union_type:
1827 read_structure_scope (&di, thisdie, nextdie, objfile);
1828 break;
1829 case TAG_enumeration_type:
1830 read_enumeration (&di, thisdie, nextdie, objfile);
1831 break;
1832 case TAG_subroutine_type:
1833 read_subroutine_type (&di, thisdie, nextdie);
1834 break;
1835 case TAG_array_type:
1836 dwarf_read_array_type (&di);
1837 break;
1838 case TAG_pointer_type:
1839 read_tag_pointer_type (&di);
1840 break;
1841 default:
1842 new_symbol (&di, objfile);
1843 break;
1844 }
1845 }
1846 thisdie = nextdie;
1847 }
1848 }
1849
1850 /*
1851
1852 LOCAL FUNCTION
1853
1854 decode_line_numbers -- decode a line number table fragment
1855
1856 SYNOPSIS
1857
1858 static void decode_line_numbers (char *tblscan, char *tblend,
1859 long length, long base, long line, long pc)
1860
1861 DESCRIPTION
1862
1863 Translate the DWARF line number information to gdb form.
1864
1865 The ".line" section contains one or more line number tables, one for
1866 each ".line" section from the objects that were linked.
1867
1868 The AT_stmt_list attribute for each TAG_source_file entry in the
1869 ".debug" section contains the offset into the ".line" section for the
1870 start of the table for that file.
1871
1872 The table itself has the following structure:
1873
1874 <table length><base address><source statement entry>
1875 4 bytes 4 bytes 10 bytes
1876
1877 The table length is the total size of the table, including the 4 bytes
1878 for the length information.
1879
1880 The base address is the address of the first instruction generated
1881 for the source file.
1882
1883 Each source statement entry has the following structure:
1884
1885 <line number><statement position><address delta>
1886 4 bytes 2 bytes 4 bytes
1887
1888 The line number is relative to the start of the file, starting with
1889 line 1.
1890
1891 The statement position either -1 (0xFFFF) or the number of characters
1892 from the beginning of the line to the beginning of the statement.
1893
1894 The address delta is the difference between the base address and
1895 the address of the first instruction for the statement.
1896
1897 Note that we must copy the bytes from the packed table to our local
1898 variables before attempting to use them, to avoid alignment problems
1899 on some machines, particularly RISC processors.
1900
1901 BUGS
1902
1903 Does gdb expect the line numbers to be sorted? They are now by
1904 chance/luck, but are not required to be. (FIXME)
1905
1906 The line with number 0 is unused, gdb apparently can discover the
1907 span of the last line some other way. How? (FIXME)
1908 */
1909
1910 static void
1911 decode_line_numbers (linetable)
1912 char *linetable;
1913 {
1914 char *tblscan;
1915 char *tblend;
1916 unsigned long length;
1917 unsigned long base;
1918 unsigned long line;
1919 unsigned long pc;
1920
1921 if (linetable != NULL)
1922 {
1923 tblscan = tblend = linetable;
1924 length = target_to_host (tblscan, SIZEOF_LINETBL_LENGTH, GET_UNSIGNED,
1925 current_objfile);
1926 tblscan += SIZEOF_LINETBL_LENGTH;
1927 tblend += length;
1928 base = target_to_host (tblscan, TARGET_FT_POINTER_SIZE (objfile),
1929 GET_UNSIGNED, current_objfile);
1930 tblscan += TARGET_FT_POINTER_SIZE (objfile);
1931 base += baseaddr;
1932 while (tblscan < tblend)
1933 {
1934 line = target_to_host (tblscan, SIZEOF_LINETBL_LINENO, GET_UNSIGNED,
1935 current_objfile);
1936 tblscan += SIZEOF_LINETBL_LINENO + SIZEOF_LINETBL_STMT;
1937 pc = target_to_host (tblscan, SIZEOF_LINETBL_DELTA, GET_UNSIGNED,
1938 current_objfile);
1939 tblscan += SIZEOF_LINETBL_DELTA;
1940 pc += base;
1941 if (line != 0)
1942 {
1943 record_line (current_subfile, line, pc);
1944 }
1945 }
1946 }
1947 }
1948
1949 /*
1950
1951 LOCAL FUNCTION
1952
1953 locval -- compute the value of a location attribute
1954
1955 SYNOPSIS
1956
1957 static int locval (char *loc)
1958
1959 DESCRIPTION
1960
1961 Given pointer to a string of bytes that define a location, compute
1962 the location and return the value.
1963
1964 When computing values involving the current value of the frame pointer,
1965 the value zero is used, which results in a value relative to the frame
1966 pointer, rather than the absolute value. This is what GDB wants
1967 anyway.
1968
1969 When the result is a register number, the global isreg flag is set,
1970 otherwise it is cleared. This is a kludge until we figure out a better
1971 way to handle the problem. Gdb's design does not mesh well with the
1972 DWARF notion of a location computing interpreter, which is a shame
1973 because the flexibility goes unused.
1974
1975 NOTES
1976
1977 Note that stack[0] is unused except as a default error return.
1978 Note that stack overflow is not yet handled.
1979 */
1980
1981 static int
1982 locval (loc)
1983 char *loc;
1984 {
1985 unsigned short nbytes;
1986 unsigned short locsize;
1987 auto long stack[64];
1988 int stacki;
1989 char *end;
1990 long regno;
1991 int loc_atom_code;
1992 int loc_value_size;
1993
1994 nbytes = attribute_size (AT_location);
1995 locsize = target_to_host (loc, nbytes, GET_UNSIGNED, current_objfile);
1996 loc += nbytes;
1997 end = loc + locsize;
1998 stacki = 0;
1999 stack[stacki] = 0;
2000 isreg = 0;
2001 offreg = 0;
2002 loc_value_size = TARGET_FT_LONG_SIZE (current_objfile);
2003 while (loc < end)
2004 {
2005 loc_atom_code = target_to_host (loc, SIZEOF_LOC_ATOM_CODE, GET_UNSIGNED,
2006 current_objfile);
2007 loc += SIZEOF_LOC_ATOM_CODE;
2008 switch (loc_atom_code)
2009 {
2010 case 0:
2011 /* error */
2012 loc = end;
2013 break;
2014 case OP_REG:
2015 /* push register (number) */
2016 stack[++stacki] = target_to_host (loc, loc_value_size,
2017 GET_UNSIGNED, current_objfile);
2018 loc += loc_value_size;
2019 isreg = 1;
2020 break;
2021 case OP_BASEREG:
2022 /* push value of register (number) */
2023 /* Actually, we compute the value as if register has 0 */
2024 offreg = 1;
2025 regno = target_to_host (loc, loc_value_size, GET_UNSIGNED,
2026 current_objfile);
2027 loc += loc_value_size;
2028 if (regno == R_FP)
2029 {
2030 stack[++stacki] = 0;
2031 }
2032 else
2033 {
2034 stack[++stacki] = 0;
2035 SQUAWK (("BASEREG %d not handled!", regno));
2036 }
2037 break;
2038 case OP_ADDR:
2039 /* push address (relocated address) */
2040 stack[++stacki] = target_to_host (loc, loc_value_size,
2041 GET_UNSIGNED, current_objfile);
2042 loc += loc_value_size;
2043 break;
2044 case OP_CONST:
2045 /* push constant (number) FIXME: signed or unsigned! */
2046 stack[++stacki] = target_to_host (loc, loc_value_size,
2047 GET_SIGNED, current_objfile);
2048 loc += loc_value_size;
2049 break;
2050 case OP_DEREF2:
2051 /* pop, deref and push 2 bytes (as a long) */
2052 SQUAWK (("OP_DEREF2 address 0x%x not handled", stack[stacki]));
2053 break;
2054 case OP_DEREF4: /* pop, deref and push 4 bytes (as a long) */
2055 SQUAWK (("OP_DEREF4 address 0x%x not handled", stack[stacki]));
2056 break;
2057 case OP_ADD: /* pop top 2 items, add, push result */
2058 stack[stacki - 1] += stack[stacki];
2059 stacki--;
2060 break;
2061 }
2062 }
2063 return (stack[stacki]);
2064 }
2065
2066 /*
2067
2068 LOCAL FUNCTION
2069
2070 read_ofile_symtab -- build a full symtab entry from chunk of DIE's
2071
2072 SYNOPSIS
2073
2074 static struct symtab *read_ofile_symtab (struct partial_symtab *pst)
2075
2076 DESCRIPTION
2077
2078 When expanding a partial symbol table entry to a full symbol table
2079 entry, this is the function that gets called to read in the symbols
2080 for the compilation unit.
2081
2082 Returns a pointer to the newly constructed symtab (which is now
2083 the new first one on the objfile's symtab list).
2084 */
2085
2086 static struct symtab *
2087 read_ofile_symtab (pst)
2088 struct partial_symtab *pst;
2089 {
2090 struct cleanup *back_to;
2091 unsigned long lnsize;
2092 file_ptr foffset;
2093 bfd *abfd;
2094 char lnsizedata[SIZEOF_LINETBL_LENGTH];
2095
2096 abfd = pst -> objfile -> obfd;
2097 current_objfile = pst -> objfile;
2098
2099 /* Allocate a buffer for the entire chunk of DIE's for this compilation
2100 unit, seek to the location in the file, and read in all the DIE's. */
2101
2102 diecount = 0;
2103 dbsize = DBLENGTH (pst);
2104 dbbase = xmalloc (dbsize);
2105 dbroff = DBROFF(pst);
2106 foffset = DBFOFF(pst) + dbroff;
2107 base_section_offsets = pst->section_offsets;
2108 baseaddr = ANOFFSET (pst->section_offsets, 0);
2109 if (bfd_seek (abfd, foffset, L_SET) ||
2110 (bfd_read (dbbase, dbsize, 1, abfd) != dbsize))
2111 {
2112 free (dbbase);
2113 error ("can't read DWARF data");
2114 }
2115 back_to = make_cleanup (free, dbbase);
2116
2117 /* If there is a line number table associated with this compilation unit
2118 then read the size of this fragment in bytes, from the fragment itself.
2119 Allocate a buffer for the fragment and read it in for future
2120 processing. */
2121
2122 lnbase = NULL;
2123 if (LNFOFF (pst))
2124 {
2125 if (bfd_seek (abfd, LNFOFF (pst), L_SET) ||
2126 (bfd_read ((PTR) lnsizedata, sizeof (lnsizedata), 1, abfd) !=
2127 sizeof (lnsizedata)))
2128 {
2129 error ("can't read DWARF line number table size");
2130 }
2131 lnsize = target_to_host (lnsizedata, SIZEOF_LINETBL_LENGTH,
2132 GET_UNSIGNED, pst -> objfile);
2133 lnbase = xmalloc (lnsize);
2134 if (bfd_seek (abfd, LNFOFF (pst), L_SET) ||
2135 (bfd_read (lnbase, lnsize, 1, abfd) != lnsize))
2136 {
2137 free (lnbase);
2138 error ("can't read DWARF line numbers");
2139 }
2140 make_cleanup (free, lnbase);
2141 }
2142
2143 process_dies (dbbase, dbbase + dbsize, pst -> objfile);
2144 do_cleanups (back_to);
2145 current_objfile = NULL;
2146 return (pst -> objfile -> symtabs);
2147 }
2148
2149 /*
2150
2151 LOCAL FUNCTION
2152
2153 psymtab_to_symtab_1 -- do grunt work for building a full symtab entry
2154
2155 SYNOPSIS
2156
2157 static void psymtab_to_symtab_1 (struct partial_symtab *pst)
2158
2159 DESCRIPTION
2160
2161 Called once for each partial symbol table entry that needs to be
2162 expanded into a full symbol table entry.
2163
2164 */
2165
2166 static void
2167 psymtab_to_symtab_1 (pst)
2168 struct partial_symtab *pst;
2169 {
2170 int i;
2171 struct cleanup *old_chain;
2172
2173 if (pst != NULL)
2174 {
2175 if (pst->readin)
2176 {
2177 warning ("psymtab for %s already read in. Shouldn't happen.",
2178 pst -> filename);
2179 }
2180 else
2181 {
2182 /* Read in all partial symtabs on which this one is dependent */
2183 for (i = 0; i < pst -> number_of_dependencies; i++)
2184 {
2185 if (!pst -> dependencies[i] -> readin)
2186 {
2187 /* Inform about additional files that need to be read in. */
2188 if (info_verbose)
2189 {
2190 fputs_filtered (" ", stdout);
2191 wrap_here ("");
2192 fputs_filtered ("and ", stdout);
2193 wrap_here ("");
2194 printf_filtered ("%s...",
2195 pst -> dependencies[i] -> filename);
2196 wrap_here ("");
2197 fflush (stdout); /* Flush output */
2198 }
2199 psymtab_to_symtab_1 (pst -> dependencies[i]);
2200 }
2201 }
2202 if (DBLENGTH (pst)) /* Otherwise it's a dummy */
2203 {
2204 buildsym_init ();
2205 old_chain = make_cleanup (really_free_pendings, 0);
2206 pst -> symtab = read_ofile_symtab (pst);
2207 if (info_verbose)
2208 {
2209 printf_filtered ("%d DIE's, sorting...", diecount);
2210 wrap_here ("");
2211 fflush (stdout);
2212 }
2213 sort_symtab_syms (pst -> symtab);
2214 do_cleanups (old_chain);
2215 }
2216 pst -> readin = 1;
2217 }
2218 }
2219 }
2220
2221 /*
2222
2223 LOCAL FUNCTION
2224
2225 dwarf_psymtab_to_symtab -- build a full symtab entry from partial one
2226
2227 SYNOPSIS
2228
2229 static void dwarf_psymtab_to_symtab (struct partial_symtab *pst)
2230
2231 DESCRIPTION
2232
2233 This is the DWARF support entry point for building a full symbol
2234 table entry from a partial symbol table entry. We are passed a
2235 pointer to the partial symbol table entry that needs to be expanded.
2236
2237 */
2238
2239 static void
2240 dwarf_psymtab_to_symtab (pst)
2241 struct partial_symtab *pst;
2242 {
2243
2244 if (pst != NULL)
2245 {
2246 if (pst -> readin)
2247 {
2248 warning ("psymtab for %s already read in. Shouldn't happen.",
2249 pst -> filename);
2250 }
2251 else
2252 {
2253 if (DBLENGTH (pst) || pst -> number_of_dependencies)
2254 {
2255 /* Print the message now, before starting serious work, to avoid
2256 disconcerting pauses. */
2257 if (info_verbose)
2258 {
2259 printf_filtered ("Reading in symbols for %s...",
2260 pst -> filename);
2261 fflush (stdout);
2262 }
2263
2264 psymtab_to_symtab_1 (pst);
2265
2266 #if 0 /* FIXME: Check to see what dbxread is doing here and see if
2267 we need to do an equivalent or is this something peculiar to
2268 stabs/a.out format.
2269 Match with global symbols. This only needs to be done once,
2270 after all of the symtabs and dependencies have been read in.
2271 */
2272 scan_file_globals (pst -> objfile);
2273 #endif
2274
2275 /* Finish up the verbose info message. */
2276 if (info_verbose)
2277 {
2278 printf_filtered ("done.\n");
2279 fflush (stdout);
2280 }
2281 }
2282 }
2283 }
2284 }
2285
2286 /*
2287
2288 LOCAL FUNCTION
2289
2290 init_psymbol_list -- initialize storage for partial symbols
2291
2292 SYNOPSIS
2293
2294 static void init_psymbol_list (struct objfile *objfile, int total_symbols)
2295
2296 DESCRIPTION
2297
2298 Initializes storage for all of the partial symbols that will be
2299 created by dwarf_build_psymtabs and subsidiaries.
2300 */
2301
2302 static void
2303 init_psymbol_list (objfile, total_symbols)
2304 struct objfile *objfile;
2305 int total_symbols;
2306 {
2307 /* Free any previously allocated psymbol lists. */
2308
2309 if (objfile -> global_psymbols.list)
2310 {
2311 mfree (objfile -> md, (PTR)objfile -> global_psymbols.list);
2312 }
2313 if (objfile -> static_psymbols.list)
2314 {
2315 mfree (objfile -> md, (PTR)objfile -> static_psymbols.list);
2316 }
2317
2318 /* Current best guess is that there are approximately a twentieth
2319 of the total symbols (in a debugging file) are global or static
2320 oriented symbols */
2321
2322 objfile -> global_psymbols.size = total_symbols / 10;
2323 objfile -> static_psymbols.size = total_symbols / 10;
2324 objfile -> global_psymbols.next =
2325 objfile -> global_psymbols.list = (struct partial_symbol *)
2326 xmmalloc (objfile -> md, objfile -> global_psymbols.size
2327 * sizeof (struct partial_symbol));
2328 objfile -> static_psymbols.next =
2329 objfile -> static_psymbols.list = (struct partial_symbol *)
2330 xmmalloc (objfile -> md, objfile -> static_psymbols.size
2331 * sizeof (struct partial_symbol));
2332 }
2333
2334 /*
2335
2336 LOCAL FUNCTION
2337
2338 add_enum_psymbol -- add enumeration members to partial symbol table
2339
2340 DESCRIPTION
2341
2342 Given pointer to a DIE that is known to be for an enumeration,
2343 extract the symbolic names of the enumeration members and add
2344 partial symbols for them.
2345 */
2346
2347 static void
2348 add_enum_psymbol (dip, objfile)
2349 struct dieinfo *dip;
2350 struct objfile *objfile;
2351 {
2352 char *scan;
2353 char *listend;
2354 unsigned short blocksz;
2355 int nbytes;
2356
2357 if ((scan = dip -> at_element_list) != NULL)
2358 {
2359 if (dip -> short_element_list)
2360 {
2361 nbytes = attribute_size (AT_short_element_list);
2362 }
2363 else
2364 {
2365 nbytes = attribute_size (AT_element_list);
2366 }
2367 blocksz = target_to_host (scan, nbytes, GET_UNSIGNED, objfile);
2368 scan += nbytes;
2369 listend = scan + blocksz;
2370 while (scan < listend)
2371 {
2372 scan += TARGET_FT_LONG_SIZE (objfile);
2373 ADD_PSYMBOL_TO_LIST (scan, strlen (scan), VAR_NAMESPACE, LOC_CONST,
2374 objfile -> static_psymbols, 0);
2375 scan += strlen (scan) + 1;
2376 }
2377 }
2378 }
2379
2380 /*
2381
2382 LOCAL FUNCTION
2383
2384 add_partial_symbol -- add symbol to partial symbol table
2385
2386 DESCRIPTION
2387
2388 Given a DIE, if it is one of the types that we want to
2389 add to a partial symbol table, finish filling in the die info
2390 and then add a partial symbol table entry for it.
2391
2392 NOTES
2393
2394 The caller must ensure that the DIE has a valid name attribute.
2395 */
2396
2397 static void
2398 add_partial_symbol (dip, objfile)
2399 struct dieinfo *dip;
2400 struct objfile *objfile;
2401 {
2402 switch (dip -> die_tag)
2403 {
2404 case TAG_global_subroutine:
2405 record_minimal_symbol (dip -> at_name, dip -> at_low_pc, mst_text,
2406 objfile);
2407 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2408 VAR_NAMESPACE, LOC_BLOCK,
2409 objfile -> global_psymbols,
2410 dip -> at_low_pc);
2411 break;
2412 case TAG_global_variable:
2413 record_minimal_symbol (dip -> at_name, locval (dip -> at_location),
2414 mst_data, objfile);
2415 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2416 VAR_NAMESPACE, LOC_STATIC,
2417 objfile -> global_psymbols,
2418 0);
2419 break;
2420 case TAG_subroutine:
2421 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2422 VAR_NAMESPACE, LOC_BLOCK,
2423 objfile -> static_psymbols,
2424 dip -> at_low_pc);
2425 break;
2426 case TAG_local_variable:
2427 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2428 VAR_NAMESPACE, LOC_STATIC,
2429 objfile -> static_psymbols,
2430 0);
2431 break;
2432 case TAG_typedef:
2433 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2434 VAR_NAMESPACE, LOC_TYPEDEF,
2435 objfile -> static_psymbols,
2436 0);
2437 break;
2438 case TAG_class_type:
2439 case TAG_structure_type:
2440 case TAG_union_type:
2441 case TAG_enumeration_type:
2442 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2443 STRUCT_NAMESPACE, LOC_TYPEDEF,
2444 objfile -> static_psymbols,
2445 0);
2446 if (cu_language == language_cplus)
2447 {
2448 /* For C++, these implicitly act as typedefs as well. */
2449 ADD_PSYMBOL_TO_LIST (dip -> at_name, strlen (dip -> at_name),
2450 VAR_NAMESPACE, LOC_TYPEDEF,
2451 objfile -> static_psymbols,
2452 0);
2453 }
2454 break;
2455 }
2456 }
2457
2458 /*
2459
2460 LOCAL FUNCTION
2461
2462 scan_partial_symbols -- scan DIE's within a single compilation unit
2463
2464 DESCRIPTION
2465
2466 Process the DIE's within a single compilation unit, looking for
2467 interesting DIE's that contribute to the partial symbol table entry
2468 for this compilation unit.
2469
2470 NOTES
2471
2472 There are some DIE's that may appear both at file scope and within
2473 the scope of a function. We are only interested in the ones at file
2474 scope, and the only way to tell them apart is to keep track of the
2475 scope. For example, consider the test case:
2476
2477 static int i;
2478 main () { int j; }
2479
2480 for which the relevant DWARF segment has the structure:
2481
2482 0x51:
2483 0x23 global subrtn sibling 0x9b
2484 name main
2485 fund_type FT_integer
2486 low_pc 0x800004cc
2487 high_pc 0x800004d4
2488
2489 0x74:
2490 0x23 local var sibling 0x97
2491 name j
2492 fund_type FT_integer
2493 location OP_BASEREG 0xe
2494 OP_CONST 0xfffffffc
2495 OP_ADD
2496 0x97:
2497 0x4
2498
2499 0x9b:
2500 0x1d local var sibling 0xb8
2501 name i
2502 fund_type FT_integer
2503 location OP_ADDR 0x800025dc
2504
2505 0xb8:
2506 0x4
2507
2508 We want to include the symbol 'i' in the partial symbol table, but
2509 not the symbol 'j'. In essence, we want to skip all the dies within
2510 the scope of a TAG_global_subroutine DIE.
2511
2512 Don't attempt to add anonymous structures or unions since they have
2513 no name. Anonymous enumerations however are processed, because we
2514 want to extract their member names (the check for a tag name is
2515 done later).
2516
2517 Also, for variables and subroutines, check that this is the place
2518 where the actual definition occurs, rather than just a reference
2519 to an external.
2520 */
2521
2522 static void
2523 scan_partial_symbols (thisdie, enddie, objfile)
2524 char *thisdie;
2525 char *enddie;
2526 struct objfile *objfile;
2527 {
2528 char *nextdie;
2529 char *temp;
2530 struct dieinfo di;
2531
2532 while (thisdie < enddie)
2533 {
2534 basicdieinfo (&di, thisdie, objfile);
2535 if (di.die_length < SIZEOF_DIE_LENGTH)
2536 {
2537 break;
2538 }
2539 else
2540 {
2541 nextdie = thisdie + di.die_length;
2542 /* To avoid getting complete die information for every die, we
2543 only do it (below) for the cases we are interested in. */
2544 switch (di.die_tag)
2545 {
2546 case TAG_global_subroutine:
2547 case TAG_subroutine:
2548 completedieinfo (&di, objfile);
2549 if (di.at_name && (di.has_at_low_pc || di.at_location))
2550 {
2551 add_partial_symbol (&di, objfile);
2552 /* If there is a sibling attribute, adjust the nextdie
2553 pointer to skip the entire scope of the subroutine.
2554 Apply some sanity checking to make sure we don't
2555 overrun or underrun the range of remaining DIE's */
2556 if (di.at_sibling != 0)
2557 {
2558 temp = dbbase + di.at_sibling - dbroff;
2559 if ((temp < thisdie) || (temp >= enddie))
2560 {
2561 dwarfwarn ("reference to DIE (0x%x) outside compilation unit", di.at_sibling);
2562 }
2563 else
2564 {
2565 nextdie = temp;
2566 }
2567 }
2568 }
2569 break;
2570 case TAG_global_variable:
2571 case TAG_local_variable:
2572 completedieinfo (&di, objfile);
2573 if (di.at_name && (di.has_at_low_pc || di.at_location))
2574 {
2575 add_partial_symbol (&di, objfile);
2576 }
2577 break;
2578 case TAG_typedef:
2579 case TAG_class_type:
2580 case TAG_structure_type:
2581 case TAG_union_type:
2582 completedieinfo (&di, objfile);
2583 if (di.at_name)
2584 {
2585 add_partial_symbol (&di, objfile);
2586 }
2587 break;
2588 case TAG_enumeration_type:
2589 completedieinfo (&di, objfile);
2590 if (di.at_name)
2591 {
2592 add_partial_symbol (&di, objfile);
2593 }
2594 add_enum_psymbol (&di, objfile);
2595 break;
2596 }
2597 }
2598 thisdie = nextdie;
2599 }
2600 }
2601
2602 /*
2603
2604 LOCAL FUNCTION
2605
2606 scan_compilation_units -- build a psymtab entry for each compilation
2607
2608 DESCRIPTION
2609
2610 This is the top level dwarf parsing routine for building partial
2611 symbol tables.
2612
2613 It scans from the beginning of the DWARF table looking for the first
2614 TAG_compile_unit DIE, and then follows the sibling chain to locate
2615 each additional TAG_compile_unit DIE.
2616
2617 For each TAG_compile_unit DIE it creates a partial symtab structure,
2618 calls a subordinate routine to collect all the compilation unit's
2619 global DIE's, file scope DIEs, typedef DIEs, etc, and then links the
2620 new partial symtab structure into the partial symbol table. It also
2621 records the appropriate information in the partial symbol table entry
2622 to allow the chunk of DIE's and line number table for this compilation
2623 unit to be located and re-read later, to generate a complete symbol
2624 table entry for the compilation unit.
2625
2626 Thus it effectively partitions up a chunk of DIE's for multiple
2627 compilation units into smaller DIE chunks and line number tables,
2628 and associates them with a partial symbol table entry.
2629
2630 NOTES
2631
2632 If any compilation unit has no line number table associated with
2633 it for some reason (a missing at_stmt_list attribute, rather than
2634 just one with a value of zero, which is valid) then we ensure that
2635 the recorded file offset is zero so that the routine which later
2636 reads line number table fragments knows that there is no fragment
2637 to read.
2638
2639 RETURNS
2640
2641 Returns no value.
2642
2643 */
2644
2645 static void
2646 scan_compilation_units (thisdie, enddie, dbfoff, lnoffset, objfile)
2647 char *thisdie;
2648 char *enddie;
2649 file_ptr dbfoff;
2650 file_ptr lnoffset;
2651 struct objfile *objfile;
2652 {
2653 char *nextdie;
2654 struct dieinfo di;
2655 struct partial_symtab *pst;
2656 int culength;
2657 int curoff;
2658 file_ptr curlnoffset;
2659
2660 while (thisdie < enddie)
2661 {
2662 basicdieinfo (&di, thisdie, objfile);
2663 if (di.die_length < SIZEOF_DIE_LENGTH)
2664 {
2665 break;
2666 }
2667 else if (di.die_tag != TAG_compile_unit)
2668 {
2669 nextdie = thisdie + di.die_length;
2670 }
2671 else
2672 {
2673 completedieinfo (&di, objfile);
2674 set_cu_language (&di);
2675 if (di.at_sibling != 0)
2676 {
2677 nextdie = dbbase + di.at_sibling - dbroff;
2678 }
2679 else
2680 {
2681 nextdie = thisdie + di.die_length;
2682 }
2683 curoff = thisdie - dbbase;
2684 culength = nextdie - thisdie;
2685 curlnoffset = di.has_at_stmt_list ? lnoffset + di.at_stmt_list : 0;
2686
2687 /* First allocate a new partial symbol table structure */
2688
2689 pst = start_psymtab_common (objfile, base_section_offsets,
2690 di.at_name, di.at_low_pc,
2691 objfile -> global_psymbols.next,
2692 objfile -> static_psymbols.next);
2693
2694 pst -> texthigh = di.at_high_pc;
2695 pst -> read_symtab_private = (char *)
2696 obstack_alloc (&objfile -> psymbol_obstack,
2697 sizeof (struct dwfinfo));
2698 DBFOFF (pst) = dbfoff;
2699 DBROFF (pst) = curoff;
2700 DBLENGTH (pst) = culength;
2701 LNFOFF (pst) = curlnoffset;
2702 pst -> read_symtab = dwarf_psymtab_to_symtab;
2703
2704 /* Now look for partial symbols */
2705
2706 scan_partial_symbols (thisdie + di.die_length, nextdie, objfile);
2707
2708 pst -> n_global_syms = objfile -> global_psymbols.next -
2709 (objfile -> global_psymbols.list + pst -> globals_offset);
2710 pst -> n_static_syms = objfile -> static_psymbols.next -
2711 (objfile -> static_psymbols.list + pst -> statics_offset);
2712 sort_pst_symbols (pst);
2713 /* If there is already a psymtab or symtab for a file of this name,
2714 remove it. (If there is a symtab, more drastic things also
2715 happen.) This happens in VxWorks. */
2716 free_named_symtabs (pst -> filename);
2717 }
2718 thisdie = nextdie;
2719 }
2720 }
2721
2722 /*
2723
2724 LOCAL FUNCTION
2725
2726 new_symbol -- make a symbol table entry for a new symbol
2727
2728 SYNOPSIS
2729
2730 static struct symbol *new_symbol (struct dieinfo *dip,
2731 struct objfile *objfile)
2732
2733 DESCRIPTION
2734
2735 Given a pointer to a DWARF information entry, figure out if we need
2736 to make a symbol table entry for it, and if so, create a new entry
2737 and return a pointer to it.
2738 */
2739
2740 static struct symbol *
2741 new_symbol (dip, objfile)
2742 struct dieinfo *dip;
2743 struct objfile *objfile;
2744 {
2745 struct symbol *sym = NULL;
2746
2747 if (dip -> at_name != NULL)
2748 {
2749 sym = (struct symbol *) obstack_alloc (&objfile -> symbol_obstack,
2750 sizeof (struct symbol));
2751 memset (sym, 0, sizeof (struct symbol));
2752 SYMBOL_NAME (sym) = create_name (dip -> at_name,
2753 &objfile->symbol_obstack);
2754 /* default assumptions */
2755 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2756 SYMBOL_CLASS (sym) = LOC_STATIC;
2757 SYMBOL_TYPE (sym) = decode_die_type (dip);
2758 switch (dip -> die_tag)
2759 {
2760 case TAG_label:
2761 SYMBOL_VALUE (sym) = dip -> at_low_pc;
2762 SYMBOL_CLASS (sym) = LOC_LABEL;
2763 break;
2764 case TAG_global_subroutine:
2765 case TAG_subroutine:
2766 SYMBOL_VALUE (sym) = dip -> at_low_pc;
2767 SYMBOL_TYPE (sym) = lookup_function_type (SYMBOL_TYPE (sym));
2768 SYMBOL_CLASS (sym) = LOC_BLOCK;
2769 if (dip -> die_tag == TAG_global_subroutine)
2770 {
2771 add_symbol_to_list (sym, &global_symbols);
2772 }
2773 else
2774 {
2775 add_symbol_to_list (sym, list_in_scope);
2776 }
2777 break;
2778 case TAG_global_variable:
2779 if (dip -> at_location != NULL)
2780 {
2781 SYMBOL_VALUE (sym) = locval (dip -> at_location);
2782 add_symbol_to_list (sym, &global_symbols);
2783 SYMBOL_CLASS (sym) = LOC_STATIC;
2784 SYMBOL_VALUE (sym) += baseaddr;
2785 }
2786 break;
2787 case TAG_local_variable:
2788 if (dip -> at_location != NULL)
2789 {
2790 SYMBOL_VALUE (sym) = locval (dip -> at_location);
2791 add_symbol_to_list (sym, list_in_scope);
2792 if (isreg)
2793 {
2794 SYMBOL_CLASS (sym) = LOC_REGISTER;
2795 }
2796 else if (offreg)
2797 {
2798 SYMBOL_CLASS (sym) = LOC_LOCAL;
2799 }
2800 else
2801 {
2802 SYMBOL_CLASS (sym) = LOC_STATIC;
2803 SYMBOL_VALUE (sym) += baseaddr;
2804 }
2805 }
2806 break;
2807 case TAG_formal_parameter:
2808 if (dip -> at_location != NULL)
2809 {
2810 SYMBOL_VALUE (sym) = locval (dip -> at_location);
2811 }
2812 add_symbol_to_list (sym, list_in_scope);
2813 if (isreg)
2814 {
2815 SYMBOL_CLASS (sym) = LOC_REGPARM;
2816 }
2817 else
2818 {
2819 SYMBOL_CLASS (sym) = LOC_ARG;
2820 }
2821 break;
2822 case TAG_unspecified_parameters:
2823 /* From varargs functions; gdb doesn't seem to have any interest in
2824 this information, so just ignore it for now. (FIXME?) */
2825 break;
2826 case TAG_class_type:
2827 case TAG_structure_type:
2828 case TAG_union_type:
2829 case TAG_enumeration_type:
2830 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2831 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
2832 add_symbol_to_list (sym, list_in_scope);
2833 break;
2834 case TAG_typedef:
2835 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2836 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2837 add_symbol_to_list (sym, list_in_scope);
2838 break;
2839 default:
2840 /* Not a tag we recognize. Hopefully we aren't processing trash
2841 data, but since we must specifically ignore things we don't
2842 recognize, there is nothing else we should do at this point. */
2843 break;
2844 }
2845 }
2846 return (sym);
2847 }
2848
2849 /*
2850
2851 LOCAL FUNCTION
2852
2853 synthesize_typedef -- make a symbol table entry for a "fake" typedef
2854
2855 SYNOPSIS
2856
2857 static void synthesize_typedef (struct dieinfo *dip,
2858 struct objfile *objfile,
2859 struct type *type);
2860
2861 DESCRIPTION
2862
2863 Given a pointer to a DWARF information entry, synthesize a typedef
2864 for the name in the DIE, using the specified type.
2865
2866 This is used for C++ class, structs, unions, and enumerations to
2867 set up the tag name as a type.
2868
2869 */
2870
2871 static void
2872 synthesize_typedef (dip, objfile, type)
2873 struct dieinfo *dip;
2874 struct objfile *objfile;
2875 struct type *type;
2876 {
2877 struct symbol *sym = NULL;
2878
2879 if (dip -> at_name != NULL)
2880 {
2881 sym = (struct symbol *)
2882 obstack_alloc (&objfile -> symbol_obstack, sizeof (struct symbol));
2883 memset (sym, 0, sizeof (struct symbol));
2884 SYMBOL_NAME (sym) = create_name (dip -> at_name,
2885 &objfile->symbol_obstack);
2886 SYMBOL_TYPE (sym) = type;
2887 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2888 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2889 add_symbol_to_list (sym, list_in_scope);
2890 }
2891 }
2892
2893 /*
2894
2895 LOCAL FUNCTION
2896
2897 decode_mod_fund_type -- decode a modified fundamental type
2898
2899 SYNOPSIS
2900
2901 static struct type *decode_mod_fund_type (char *typedata)
2902
2903 DESCRIPTION
2904
2905 Decode a block of data containing a modified fundamental
2906 type specification. TYPEDATA is a pointer to the block,
2907 which starts with a length containing the size of the rest
2908 of the block. At the end of the block is a fundmental type
2909 code value that gives the fundamental type. Everything
2910 in between are type modifiers.
2911
2912 We simply compute the number of modifiers and call the general
2913 function decode_modified_type to do the actual work.
2914 */
2915
2916 static struct type *
2917 decode_mod_fund_type (typedata)
2918 char *typedata;
2919 {
2920 struct type *typep = NULL;
2921 unsigned short modcount;
2922 int nbytes;
2923
2924 /* Get the total size of the block, exclusive of the size itself */
2925
2926 nbytes = attribute_size (AT_mod_fund_type);
2927 modcount = target_to_host (typedata, nbytes, GET_UNSIGNED, current_objfile);
2928 typedata += nbytes;
2929
2930 /* Deduct the size of the fundamental type bytes at the end of the block. */
2931
2932 modcount -= attribute_size (AT_fund_type);
2933
2934 /* Now do the actual decoding */
2935
2936 typep = decode_modified_type (typedata, modcount, AT_mod_fund_type);
2937 return (typep);
2938 }
2939
2940 /*
2941
2942 LOCAL FUNCTION
2943
2944 decode_mod_u_d_type -- decode a modified user defined type
2945
2946 SYNOPSIS
2947
2948 static struct type *decode_mod_u_d_type (char *typedata)
2949
2950 DESCRIPTION
2951
2952 Decode a block of data containing a modified user defined
2953 type specification. TYPEDATA is a pointer to the block,
2954 which consists of a two byte length, containing the size
2955 of the rest of the block. At the end of the block is a
2956 four byte value that gives a reference to a user defined type.
2957 Everything in between are type modifiers.
2958
2959 We simply compute the number of modifiers and call the general
2960 function decode_modified_type to do the actual work.
2961 */
2962
2963 static struct type *
2964 decode_mod_u_d_type (typedata)
2965 char *typedata;
2966 {
2967 struct type *typep = NULL;
2968 unsigned short modcount;
2969 int nbytes;
2970
2971 /* Get the total size of the block, exclusive of the size itself */
2972
2973 nbytes = attribute_size (AT_mod_u_d_type);
2974 modcount = target_to_host (typedata, nbytes, GET_UNSIGNED, current_objfile);
2975 typedata += nbytes;
2976
2977 /* Deduct the size of the reference type bytes at the end of the block. */
2978
2979 modcount -= attribute_size (AT_user_def_type);
2980
2981 /* Now do the actual decoding */
2982
2983 typep = decode_modified_type (typedata, modcount, AT_mod_u_d_type);
2984 return (typep);
2985 }
2986
2987 /*
2988
2989 LOCAL FUNCTION
2990
2991 decode_modified_type -- decode modified user or fundamental type
2992
2993 SYNOPSIS
2994
2995 static struct type *decode_modified_type (char *modifiers,
2996 unsigned short modcount, int mtype)
2997
2998 DESCRIPTION
2999
3000 Decode a modified type, either a modified fundamental type or
3001 a modified user defined type. MODIFIERS is a pointer to the
3002 block of bytes that define MODCOUNT modifiers. Immediately
3003 following the last modifier is a short containing the fundamental
3004 type or a long containing the reference to the user defined
3005 type. Which one is determined by MTYPE, which is either
3006 AT_mod_fund_type or AT_mod_u_d_type to indicate what modified
3007 type we are generating.
3008
3009 We call ourself recursively to generate each modified type,`
3010 until MODCOUNT reaches zero, at which point we have consumed
3011 all the modifiers and generate either the fundamental type or
3012 user defined type. When the recursion unwinds, each modifier
3013 is applied in turn to generate the full modified type.
3014
3015 NOTES
3016
3017 If we find a modifier that we don't recognize, and it is not one
3018 of those reserved for application specific use, then we issue a
3019 warning and simply ignore the modifier.
3020
3021 BUGS
3022
3023 We currently ignore MOD_const and MOD_volatile. (FIXME)
3024
3025 */
3026
3027 static struct type *
3028 decode_modified_type (modifiers, modcount, mtype)
3029 char *modifiers;
3030 unsigned int modcount;
3031 int mtype;
3032 {
3033 struct type *typep = NULL;
3034 unsigned short fundtype;
3035 DIE_REF die_ref;
3036 char modifier;
3037 int nbytes;
3038
3039 if (modcount == 0)
3040 {
3041 switch (mtype)
3042 {
3043 case AT_mod_fund_type:
3044 nbytes = attribute_size (AT_fund_type);
3045 fundtype = target_to_host (modifiers, nbytes, GET_UNSIGNED,
3046 current_objfile);
3047 typep = decode_fund_type (fundtype);
3048 break;
3049 case AT_mod_u_d_type:
3050 nbytes = attribute_size (AT_user_def_type);
3051 die_ref = target_to_host (modifiers, nbytes, GET_UNSIGNED,
3052 current_objfile);
3053 if ((typep = lookup_utype (die_ref)) == NULL)
3054 {
3055 typep = alloc_utype (die_ref, NULL);
3056 }
3057 break;
3058 default:
3059 SQUAWK (("botched modified type decoding (mtype 0x%x)", mtype));
3060 typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
3061 break;
3062 }
3063 }
3064 else
3065 {
3066 modifier = *modifiers++;
3067 typep = decode_modified_type (modifiers, --modcount, mtype);
3068 switch (modifier)
3069 {
3070 case MOD_pointer_to:
3071 typep = lookup_pointer_type (typep);
3072 break;
3073 case MOD_reference_to:
3074 typep = lookup_reference_type (typep);
3075 break;
3076 case MOD_const:
3077 SQUAWK (("type modifier 'const' ignored")); /* FIXME */
3078 break;
3079 case MOD_volatile:
3080 SQUAWK (("type modifier 'volatile' ignored")); /* FIXME */
3081 break;
3082 default:
3083 if (!(MOD_lo_user <= (unsigned char) modifier
3084 && (unsigned char) modifier <= MOD_hi_user))
3085 {
3086 SQUAWK (("unknown type modifier %u",
3087 (unsigned char) modifier));
3088 }
3089 break;
3090 }
3091 }
3092 return (typep);
3093 }
3094
3095 /*
3096
3097 LOCAL FUNCTION
3098
3099 decode_fund_type -- translate basic DWARF type to gdb base type
3100
3101 DESCRIPTION
3102
3103 Given an integer that is one of the fundamental DWARF types,
3104 translate it to one of the basic internal gdb types and return
3105 a pointer to the appropriate gdb type (a "struct type *").
3106
3107 NOTES
3108
3109 If we encounter a fundamental type that we are unprepared to
3110 deal with, and it is not in the range of those types defined
3111 as application specific types, then we issue a warning and
3112 treat the type as an "int".
3113 */
3114
3115 static struct type *
3116 decode_fund_type (fundtype)
3117 unsigned int fundtype;
3118 {
3119 struct type *typep = NULL;
3120
3121 switch (fundtype)
3122 {
3123
3124 case FT_void:
3125 typep = lookup_fundamental_type (current_objfile, FT_VOID);
3126 break;
3127
3128 case FT_boolean: /* Was FT_set in AT&T version */
3129 typep = lookup_fundamental_type (current_objfile, FT_BOOLEAN);
3130 break;
3131
3132 case FT_pointer: /* (void *) */
3133 typep = lookup_fundamental_type (current_objfile, FT_VOID);
3134 typep = lookup_pointer_type (typep);
3135 break;
3136
3137 case FT_char:
3138 typep = lookup_fundamental_type (current_objfile, FT_CHAR);
3139 break;
3140
3141 case FT_signed_char:
3142 typep = lookup_fundamental_type (current_objfile, FT_SIGNED_CHAR);
3143 break;
3144
3145 case FT_unsigned_char:
3146 typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_CHAR);
3147 break;
3148
3149 case FT_short:
3150 typep = lookup_fundamental_type (current_objfile, FT_SHORT);
3151 break;
3152
3153 case FT_signed_short:
3154 typep = lookup_fundamental_type (current_objfile, FT_SIGNED_SHORT);
3155 break;
3156
3157 case FT_unsigned_short:
3158 typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_SHORT);
3159 break;
3160
3161 case FT_integer:
3162 typep = lookup_fundamental_type (current_objfile, FT_INTEGER);
3163 break;
3164
3165 case FT_signed_integer:
3166 typep = lookup_fundamental_type (current_objfile, FT_SIGNED_INTEGER);
3167 break;
3168
3169 case FT_unsigned_integer:
3170 typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_INTEGER);
3171 break;
3172
3173 case FT_long:
3174 typep = lookup_fundamental_type (current_objfile, FT_LONG);
3175 break;
3176
3177 case FT_signed_long:
3178 typep = lookup_fundamental_type (current_objfile, FT_SIGNED_LONG);
3179 break;
3180
3181 case FT_unsigned_long:
3182 typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_LONG);
3183 break;
3184
3185 case FT_long_long:
3186 typep = lookup_fundamental_type (current_objfile, FT_LONG_LONG);
3187 break;
3188
3189 case FT_signed_long_long:
3190 typep = lookup_fundamental_type (current_objfile, FT_SIGNED_LONG_LONG);
3191 break;
3192
3193 case FT_unsigned_long_long:
3194 typep = lookup_fundamental_type (current_objfile, FT_UNSIGNED_LONG_LONG);
3195 break;
3196
3197 case FT_float:
3198 typep = lookup_fundamental_type (current_objfile, FT_FLOAT);
3199 break;
3200
3201 case FT_dbl_prec_float:
3202 typep = lookup_fundamental_type (current_objfile, FT_DBL_PREC_FLOAT);
3203 break;
3204
3205 case FT_ext_prec_float:
3206 typep = lookup_fundamental_type (current_objfile, FT_EXT_PREC_FLOAT);
3207 break;
3208
3209 case FT_complex:
3210 typep = lookup_fundamental_type (current_objfile, FT_COMPLEX);
3211 break;
3212
3213 case FT_dbl_prec_complex:
3214 typep = lookup_fundamental_type (current_objfile, FT_DBL_PREC_COMPLEX);
3215 break;
3216
3217 case FT_ext_prec_complex:
3218 typep = lookup_fundamental_type (current_objfile, FT_EXT_PREC_COMPLEX);
3219 break;
3220
3221 }
3222
3223 if ((typep == NULL) && !(FT_lo_user <= fundtype && fundtype <= FT_hi_user))
3224 {
3225 SQUAWK (("unexpected fundamental type 0x%x", fundtype));
3226 typep = lookup_fundamental_type (current_objfile, FT_VOID);
3227 }
3228
3229 return (typep);
3230 }
3231
3232 /*
3233
3234 LOCAL FUNCTION
3235
3236 create_name -- allocate a fresh copy of a string on an obstack
3237
3238 DESCRIPTION
3239
3240 Given a pointer to a string and a pointer to an obstack, allocates
3241 a fresh copy of the string on the specified obstack.
3242
3243 */
3244
3245 static char *
3246 create_name (name, obstackp)
3247 char *name;
3248 struct obstack *obstackp;
3249 {
3250 int length;
3251 char *newname;
3252
3253 length = strlen (name) + 1;
3254 newname = (char *) obstack_alloc (obstackp, length);
3255 strcpy (newname, name);
3256 return (newname);
3257 }
3258
3259 /*
3260
3261 LOCAL FUNCTION
3262
3263 basicdieinfo -- extract the minimal die info from raw die data
3264
3265 SYNOPSIS
3266
3267 void basicdieinfo (char *diep, struct dieinfo *dip,
3268 struct objfile *objfile)
3269
3270 DESCRIPTION
3271
3272 Given a pointer to raw DIE data, and a pointer to an instance of a
3273 die info structure, this function extracts the basic information
3274 from the DIE data required to continue processing this DIE, along
3275 with some bookkeeping information about the DIE.
3276
3277 The information we absolutely must have includes the DIE tag,
3278 and the DIE length. If we need the sibling reference, then we
3279 will have to call completedieinfo() to process all the remaining
3280 DIE information.
3281
3282 Note that since there is no guarantee that the data is properly
3283 aligned in memory for the type of access required (indirection
3284 through anything other than a char pointer), and there is no
3285 guarantee that it is in the same byte order as the gdb host,
3286 we call a function which deals with both alignment and byte
3287 swapping issues. Possibly inefficient, but quite portable.
3288
3289 We also take care of some other basic things at this point, such
3290 as ensuring that the instance of the die info structure starts
3291 out completely zero'd and that curdie is initialized for use
3292 in error reporting if we have a problem with the current die.
3293
3294 NOTES
3295
3296 All DIE's must have at least a valid length, thus the minimum
3297 DIE size is SIZEOF_DIE_LENGTH. In order to have a valid tag, the
3298 DIE size must be at least SIZEOF_DIE_TAG larger, otherwise they
3299 are forced to be TAG_padding DIES.
3300
3301 Padding DIES must be at least SIZEOF_DIE_LENGTH in length, implying
3302 that if a padding DIE is used for alignment and the amount needed is
3303 less than SIZEOF_DIE_LENGTH, then the padding DIE has to be big
3304 enough to align to the next alignment boundry.
3305
3306 We do some basic sanity checking here, such as verifying that the
3307 length of the die would not cause it to overrun the recorded end of
3308 the buffer holding the DIE info. If we find a DIE that is either
3309 too small or too large, we force it's length to zero which should
3310 cause the caller to take appropriate action.
3311 */
3312
3313 static void
3314 basicdieinfo (dip, diep, objfile)
3315 struct dieinfo *dip;
3316 char *diep;
3317 struct objfile *objfile;
3318 {
3319 curdie = dip;
3320 memset (dip, 0, sizeof (struct dieinfo));
3321 dip -> die = diep;
3322 dip -> die_ref = dbroff + (diep - dbbase);
3323 dip -> die_length = target_to_host (diep, SIZEOF_DIE_LENGTH, GET_UNSIGNED,
3324 objfile);
3325 if ((dip -> die_length < SIZEOF_DIE_LENGTH) ||
3326 ((diep + dip -> die_length) > (dbbase + dbsize)))
3327 {
3328 dwarfwarn ("malformed DIE, bad length (%d bytes)", dip -> die_length);
3329 dip -> die_length = 0;
3330 }
3331 else if (dip -> die_length < (SIZEOF_DIE_LENGTH + SIZEOF_DIE_TAG))
3332 {
3333 dip -> die_tag = TAG_padding;
3334 }
3335 else
3336 {
3337 diep += SIZEOF_DIE_LENGTH;
3338 dip -> die_tag = target_to_host (diep, SIZEOF_DIE_TAG, GET_UNSIGNED,
3339 objfile);
3340 }
3341 }
3342
3343 /*
3344
3345 LOCAL FUNCTION
3346
3347 completedieinfo -- finish reading the information for a given DIE
3348
3349 SYNOPSIS
3350
3351 void completedieinfo (struct dieinfo *dip, struct objfile *objfile)
3352
3353 DESCRIPTION
3354
3355 Given a pointer to an already partially initialized die info structure,
3356 scan the raw DIE data and finish filling in the die info structure
3357 from the various attributes found.
3358
3359 Note that since there is no guarantee that the data is properly
3360 aligned in memory for the type of access required (indirection
3361 through anything other than a char pointer), and there is no
3362 guarantee that it is in the same byte order as the gdb host,
3363 we call a function which deals with both alignment and byte
3364 swapping issues. Possibly inefficient, but quite portable.
3365
3366 NOTES
3367
3368 Each time we are called, we increment the diecount variable, which
3369 keeps an approximate count of the number of dies processed for
3370 each compilation unit. This information is presented to the user
3371 if the info_verbose flag is set.
3372
3373 */
3374
3375 static void
3376 completedieinfo (dip, objfile)
3377 struct dieinfo *dip;
3378 struct objfile *objfile;
3379 {
3380 char *diep; /* Current pointer into raw DIE data */
3381 char *end; /* Terminate DIE scan here */
3382 unsigned short attr; /* Current attribute being scanned */
3383 unsigned short form; /* Form of the attribute */
3384 int nbytes; /* Size of next field to read */
3385
3386 diecount++;
3387 diep = dip -> die;
3388 end = diep + dip -> die_length;
3389 diep += SIZEOF_DIE_LENGTH + SIZEOF_DIE_TAG;
3390 while (diep < end)
3391 {
3392 attr = target_to_host (diep, SIZEOF_ATTRIBUTE, GET_UNSIGNED, objfile);
3393 diep += SIZEOF_ATTRIBUTE;
3394 if ((nbytes = attribute_size (attr)) == -1)
3395 {
3396 SQUAWK (("unknown attribute length, skipped remaining attributes"));;
3397 diep = end;
3398 continue;
3399 }
3400 switch (attr)
3401 {
3402 case AT_fund_type:
3403 dip -> at_fund_type = target_to_host (diep, nbytes, GET_UNSIGNED,
3404 objfile);
3405 break;
3406 case AT_ordering:
3407 dip -> at_ordering = target_to_host (diep, nbytes, GET_UNSIGNED,
3408 objfile);
3409 break;
3410 case AT_bit_offset:
3411 dip -> at_bit_offset = target_to_host (diep, nbytes, GET_UNSIGNED,
3412 objfile);
3413 break;
3414 case AT_sibling:
3415 dip -> at_sibling = target_to_host (diep, nbytes, GET_UNSIGNED,
3416 objfile);
3417 break;
3418 case AT_stmt_list:
3419 dip -> at_stmt_list = target_to_host (diep, nbytes, GET_UNSIGNED,
3420 objfile);
3421 dip -> has_at_stmt_list = 1;
3422 break;
3423 case AT_low_pc:
3424 dip -> at_low_pc = target_to_host (diep, nbytes, GET_UNSIGNED,
3425 objfile);
3426 dip -> at_low_pc += baseaddr;
3427 dip -> has_at_low_pc = 1;
3428 break;
3429 case AT_high_pc:
3430 dip -> at_high_pc = target_to_host (diep, nbytes, GET_UNSIGNED,
3431 objfile);
3432 dip -> at_high_pc += baseaddr;
3433 break;
3434 case AT_language:
3435 dip -> at_language = target_to_host (diep, nbytes, GET_UNSIGNED,
3436 objfile);
3437 break;
3438 case AT_user_def_type:
3439 dip -> at_user_def_type = target_to_host (diep, nbytes,
3440 GET_UNSIGNED, objfile);
3441 break;
3442 case AT_byte_size:
3443 dip -> at_byte_size = target_to_host (diep, nbytes, GET_UNSIGNED,
3444 objfile);
3445 dip -> has_at_byte_size = 1;
3446 break;
3447 case AT_bit_size:
3448 dip -> at_bit_size = target_to_host (diep, nbytes, GET_UNSIGNED,
3449 objfile);
3450 break;
3451 case AT_member:
3452 dip -> at_member = target_to_host (diep, nbytes, GET_UNSIGNED,
3453 objfile);
3454 break;
3455 case AT_discr:
3456 dip -> at_discr = target_to_host (diep, nbytes, GET_UNSIGNED,
3457 objfile);
3458 break;
3459 case AT_location:
3460 dip -> at_location = diep;
3461 break;
3462 case AT_mod_fund_type:
3463 dip -> at_mod_fund_type = diep;
3464 break;
3465 case AT_subscr_data:
3466 dip -> at_subscr_data = diep;
3467 break;
3468 case AT_mod_u_d_type:
3469 dip -> at_mod_u_d_type = diep;
3470 break;
3471 case AT_element_list:
3472 dip -> at_element_list = diep;
3473 dip -> short_element_list = 0;
3474 break;
3475 case AT_short_element_list:
3476 dip -> at_element_list = diep;
3477 dip -> short_element_list = 1;
3478 break;
3479 case AT_discr_value:
3480 dip -> at_discr_value = diep;
3481 break;
3482 case AT_string_length:
3483 dip -> at_string_length = diep;
3484 break;
3485 case AT_name:
3486 dip -> at_name = diep;
3487 break;
3488 case AT_comp_dir:
3489 /* For now, ignore any "hostname:" portion, since gdb doesn't
3490 know how to deal with it. (FIXME). */
3491 dip -> at_comp_dir = strrchr (diep, ':');
3492 if (dip -> at_comp_dir != NULL)
3493 {
3494 dip -> at_comp_dir++;
3495 }
3496 else
3497 {
3498 dip -> at_comp_dir = diep;
3499 }
3500 break;
3501 case AT_producer:
3502 dip -> at_producer = diep;
3503 break;
3504 case AT_start_scope:
3505 dip -> at_start_scope = target_to_host (diep, nbytes, GET_UNSIGNED,
3506 objfile);
3507 break;
3508 case AT_stride_size:
3509 dip -> at_stride_size = target_to_host (diep, nbytes, GET_UNSIGNED,
3510 objfile);
3511 break;
3512 case AT_src_info:
3513 dip -> at_src_info = target_to_host (diep, nbytes, GET_UNSIGNED,
3514 objfile);
3515 break;
3516 case AT_prototyped:
3517 dip -> at_prototyped = diep;
3518 break;
3519 default:
3520 /* Found an attribute that we are unprepared to handle. However
3521 it is specifically one of the design goals of DWARF that
3522 consumers should ignore unknown attributes. As long as the
3523 form is one that we recognize (so we know how to skip it),
3524 we can just ignore the unknown attribute. */
3525 break;
3526 }
3527 form = FORM_FROM_ATTR (attr);
3528 switch (form)
3529 {
3530 case FORM_DATA2:
3531 diep += 2;
3532 break;
3533 case FORM_DATA4:
3534 case FORM_REF:
3535 diep += 4;
3536 break;
3537 case FORM_DATA8:
3538 diep += 8;
3539 break;
3540 case FORM_ADDR:
3541 diep += TARGET_FT_POINTER_SIZE (objfile);
3542 break;
3543 case FORM_BLOCK2:
3544 diep += 2 + target_to_host (diep, nbytes, GET_UNSIGNED, objfile);
3545 break;
3546 case FORM_BLOCK4:
3547 diep += 4 + target_to_host (diep, nbytes, GET_UNSIGNED, objfile);
3548 break;
3549 case FORM_STRING:
3550 diep += strlen (diep) + 1;
3551 break;
3552 default:
3553 SQUAWK (("unknown attribute form (0x%x)", form));
3554 SQUAWK (("unknown attribute length, skipped remaining attributes"));;
3555 diep = end;
3556 break;
3557 }
3558 }
3559 }
3560
3561 /*
3562
3563 LOCAL FUNCTION
3564
3565 target_to_host -- swap in target data to host
3566
3567 SYNOPSIS
3568
3569 target_to_host (char *from, int nbytes, int signextend,
3570 struct objfile *objfile)
3571
3572 DESCRIPTION
3573
3574 Given pointer to data in target format in FROM, a byte count for
3575 the size of the data in NBYTES, a flag indicating whether or not
3576 the data is signed in SIGNEXTEND, and a pointer to the current
3577 objfile in OBJFILE, convert the data to host format and return
3578 the converted value.
3579
3580 NOTES
3581
3582 FIXME: If we read data that is known to be signed, and expect to
3583 use it as signed data, then we need to explicitly sign extend the
3584 result until the bfd library is able to do this for us.
3585
3586 */
3587
3588 static unsigned long
3589 target_to_host (from, nbytes, signextend, objfile)
3590 char *from;
3591 int nbytes;
3592 int signextend; /* FIXME: Unused */
3593 struct objfile *objfile;
3594 {
3595 unsigned long rtnval;
3596
3597 switch (nbytes)
3598 {
3599 case 8:
3600 rtnval = bfd_get_64 (objfile -> obfd, (bfd_byte *) from);
3601 break;
3602 case 4:
3603 rtnval = bfd_get_32 (objfile -> obfd, (bfd_byte *) from);
3604 break;
3605 case 2:
3606 rtnval = bfd_get_16 (objfile -> obfd, (bfd_byte *) from);
3607 break;
3608 case 1:
3609 rtnval = bfd_get_8 (objfile -> obfd, (bfd_byte *) from);
3610 break;
3611 default:
3612 dwarfwarn ("no bfd support for %d byte data object", nbytes);
3613 rtnval = 0;
3614 break;
3615 }
3616 return (rtnval);
3617 }
3618
3619 /*
3620
3621 LOCAL FUNCTION
3622
3623 attribute_size -- compute size of data for a DWARF attribute
3624
3625 SYNOPSIS
3626
3627 static int attribute_size (unsigned int attr)
3628
3629 DESCRIPTION
3630
3631 Given a DWARF attribute in ATTR, compute the size of the first
3632 piece of data associated with this attribute and return that
3633 size.
3634
3635 Returns -1 for unrecognized attributes.
3636
3637 */
3638
3639 static int
3640 attribute_size (attr)
3641 unsigned int attr;
3642 {
3643 int nbytes; /* Size of next data for this attribute */
3644 unsigned short form; /* Form of the attribute */
3645
3646 form = FORM_FROM_ATTR (attr);
3647 switch (form)
3648 {
3649 case FORM_STRING: /* A variable length field is next */
3650 nbytes = 0;
3651 break;
3652 case FORM_DATA2: /* Next 2 byte field is the data itself */
3653 case FORM_BLOCK2: /* Next 2 byte field is a block length */
3654 nbytes = 2;
3655 break;
3656 case FORM_DATA4: /* Next 4 byte field is the data itself */
3657 case FORM_BLOCK4: /* Next 4 byte field is a block length */
3658 case FORM_REF: /* Next 4 byte field is a DIE offset */
3659 nbytes = 4;
3660 break;
3661 case FORM_DATA8: /* Next 8 byte field is the data itself */
3662 nbytes = 8;
3663 break;
3664 case FORM_ADDR: /* Next field size is target sizeof(void *) */
3665 nbytes = TARGET_FT_POINTER_SIZE (objfile);
3666 break;
3667 default:
3668 SQUAWK (("unknown attribute form (0x%x)", form));
3669 nbytes = -1;
3670 break;
3671 }
3672 return (nbytes);
3673 }