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