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