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