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