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