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