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