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