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