]> Git Repo - binutils.git/blob - gdb/dbxread.c
gdb-2.8
[binutils.git] / gdb / dbxread.c
1 /* Read dbx symbol tables and convert to internal format, for GDB.
2    Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
3
4 GDB is distributed in the hope that it will be useful, but WITHOUT ANY
5 WARRANTY.  No author or distributor accepts responsibility to anyone
6 for the consequences of using it or for whether it serves any
7 particular purpose or works at all, unless he says so in writing.
8 Refer to the GDB General Public License for full details.
9
10 Everyone is granted permission to copy, modify and redistribute GDB,
11 but only under the conditions described in the GDB General Public
12 License.  A copy of this license is supposed to have been given to you
13 along with GDB so you can know your rights and responsibilities.  It
14 should be in a file named COPYING.  Among other things, the copyright
15 notice and this notice must be preserved on all copies.
16
17 In other words, go ahead and share GDB, but don't try to stop
18 anyone else from sharing it farther.  Help stamp out software hoarding!
19 */
20 \f
21 #include "param.h"
22
23 #ifdef READ_DBX_FORMAT
24
25 #include <a.out.h>
26 #include <stab.h>
27 #include <stdio.h>
28 #include <obstack.h>
29 #include <sys/param.h>
30 #include <sys/file.h>
31 #include <sys/stat.h>
32 #include "defs.h"
33 #include "initialize.h"
34 #include "symtab.h"
35
36 static void add_symbol_to_list ();
37 static void read_dbx_symtab ();
38 static void process_one_symbol ();
39 static struct type *read_type ();
40 static struct type *read_range_type ();
41 static struct type *read_enum_type ();
42 static struct type *read_struct_type ();
43 static long read_number ();
44 static void finish_block ();
45 static struct blockvector *make_blockvector ();
46 static struct symbol *define_symbol ();
47 static void start_subfile ();
48 static int hashname ();
49 static void hash_symsegs ();
50
51 extern struct symtab *read_symsegs ();
52 extern void free_all_symtabs ();
53
54 /* Macro for number of symbol table entries (in usual a.out format).
55    Some machines override this definition.  */
56 #ifndef NUMBER_OF_SYMBOLS
57 #define NUMBER_OF_SYMBOLS (hdr.a_syms / sizeof (struct nlist))
58 #endif
59
60 /* Macro for file-offset of symbol table (in usual a.out format).  */
61 #ifndef SYMBOL_TABLE_OFFSET
62 #define SYMBOL_TABLE_OFFSET N_SYMOFF (hdr)
63 #endif
64
65 /* Macro for file-offset of string table (in usual a.out format).  */
66 #ifndef STRING_TABLE_OFFSET
67 #define STRING_TABLE_OFFSET (N_SYMOFF (hdr) + hdr.a_syms)
68 #endif
69
70 /* Macro to store the length of the string table data in INTO.  */
71 #ifndef READ_STRING_TABLE_SIZE
72 #define READ_STRING_TABLE_SIZE(INTO)            \
73 { val = myread (desc, &INTO, sizeof INTO);      \
74   if (val < 0) perror_with_name (name); }
75 #endif
76
77 /* Macro to declare variables to hold the file's header data.  */
78 #ifndef DECLARE_FILE_HEADERS
79 #define DECLARE_FILE_HEADERS  struct exec hdr
80 #endif
81
82 /* Macro to read the header data from descriptor DESC and validate it.
83    NAME is the file name, for error messages.  */
84 #ifndef READ_FILE_HEADERS
85 #define READ_FILE_HEADERS(DESC, NAME)           \
86 { val = myread (DESC, &hdr, sizeof hdr);        \
87   if (val < 0) perror_with_name (NAME);         \
88   if (N_BADMAG (hdr))                           \
89     error ("File \"%s\" not in executable format.", NAME); }
90 #endif
91 \f
92 START_FILE
93
94 /* Chain of symtabs made from reading the file's symsegs.
95    These symtabs do not go into symtab_list themselves,
96    but the information is copied from them when appropriate
97    to make the symtabs that will exist permanently.  */
98
99 static struct symtab *symseg_chain;
100
101 /* Symseg symbol table for the file whose data we are now processing.
102    It is one of those in symseg_chain.  Or 0, for a compilation that
103    has no symseg.  */
104
105 static struct symtab *current_symseg;
106
107 /* Name of source file whose symbol data we are now processing.
108    This comes from a symbol of type N_SO.  */
109
110 static char *last_source_file;
111
112 /* Core address of start of text of current source file.
113    This too comes from the N_SO symbol.  */
114
115 static CORE_ADDR last_source_start_addr;
116
117 /* End of the text segment of the executable file,
118    as found in the symbol _etext.  */
119
120 static CORE_ADDR end_of_text_addr;
121
122 /* The list of sub-source-files within the current individual compilation.
123    Each file gets its own symtab with its own linetable and associated info,
124    but they all share one blockvector.  */
125
126 struct subfile
127 {
128   struct subfile *next;
129   char *name;
130   struct linetable *line_vector;
131   int line_vector_length;
132   int line_vector_index;
133   int prev_line_number;
134 };
135
136 static struct subfile *subfiles;
137
138 static struct subfile *current_subfile;
139
140 /* Count symbols as they are processed, for error messages.  */
141
142 static int symnum;
143
144 /* Vector of types defined so far, indexed by their dbx type numbers.
145    (In newer sun systems, dbx uses a pair of numbers in parens,
146     as in "(SUBFILENUM,NUMWITHINSUBFILE)".  Then these numbers must be
147     translated through the type_translations hash table to get
148     the index into the type vector.)  */
149
150 static struct typevector *type_vector;
151
152 /* Number of elements allocated for type_vector currently.  */
153
154 static int type_vector_length;
155
156 /* Vector of line number information.  */
157
158 static struct linetable *line_vector;
159
160 /* Index of next entry to go in line_vector_index.  */
161
162 static int line_vector_index;
163
164 /* Last line number recorded in the line vector.  */
165
166 static int prev_line_number;
167
168 /* Number of elements allocated for line_vector currently.  */
169
170 static int line_vector_length;
171
172 /* Hash table of global symbols whose values are not known yet.
173    They are chained thru the SYMBOL_VALUE, since we don't
174    have the correct data for that slot yet.  */
175
176 #define HASHSIZE 127
177 static struct symbol *global_sym_chain[HASHSIZE];
178
179 /* Record the symbols defined for each context in a list.
180    We don't create a struct block for the context until we
181    know how long to make it.  */
182
183 #define PENDINGSIZE 100
184
185 struct pending
186 {
187   struct pending *next;
188   int nsyms;
189   struct symbol *symbol[PENDINGSIZE];
190 };
191
192 /* List of free `struct pending' structures for reuse.  */
193 struct pending *free_pendings;
194
195 /* Here are the three lists that symbols are put on.  */
196
197 struct pending *file_symbols;   /* static at top level, and types */
198
199 struct pending *global_symbols; /* global functions and variables */
200
201 struct pending *local_symbols;  /* everything local to lexical context */
202
203 /* Stack representing unclosed lexical contexts
204    (that will become blocks, eventually).  */
205
206 struct context_stack
207 {
208   struct pending *locals;
209   struct pending_block *old_blocks;
210   struct symbol *name;
211   CORE_ADDR start_addr;
212   int depth;
213 };
214
215 struct context_stack *context_stack;
216
217 /* Index of first unused entry in context stack.  */
218 int context_stack_depth;
219
220 /* Currently allocated size of context stack.  */
221
222 int context_stack_size;
223
224 /* Nonzero if within a function (so symbols should be local,
225    if nothing says specifically).  */
226
227 int within_function;
228
229 /* List of blocks already made (lexical contexts already closed).
230    This is used at the end to make the blockvector.  */
231
232 struct pending_block
233 {
234   struct pending_block *next;
235   struct block *block;
236 };
237
238 struct pending_block *pending_blocks;
239
240 extern CORE_ADDR first_object_file_end; /* From blockframe.c */
241
242 /* File name symbols were loaded from.  */
243
244 static char *symfile;
245
246 static int
247 xxmalloc (n)
248 {
249   int v = malloc (n);
250   if (v == 0)
251     abort ();
252   return v;
253 }
254
255 /* Make a copy of the string at PTR with SIZE characters in the symbol obstack
256    (and add a null character at the end in the copy).
257    Returns the address of the copy.  */
258
259 static char *
260 obsavestring (ptr, size)
261      char *ptr;
262      int size;
263 {
264   register char *p = (char *) obstack_alloc (symbol_obstack, size + 1);
265   /* Open-coded bcopy--saves function call time.
266      These strings are usually short.  */
267   {
268     register char *p1 = ptr;
269     register char *p2 = p;
270     char *end = ptr + size;
271     while (p1 != end)
272       *p2++ = *p1++;
273   }
274   p[size] = 0;
275   return p;
276 }
277
278 /* Concatenate strings S1, S2 and S3; return the new string.
279    Space is found in the symbol_obstack.  */
280
281 static char *
282 obconcat (s1, s2, s3)
283      char *s1, *s2, *s3;
284 {
285   register int len = strlen (s1) + strlen (s2) + strlen (s3) + 1;
286   register char *val = (char *) obstack_alloc (symbol_obstack, len);
287   strcpy (val, s1);
288   strcat (val, s2);
289   strcat (val, s3);
290   return val;
291 }
292 \f
293 /* Support for Sun changes to dbx symbol format */
294
295 /* For each identified header file, we have a table of types defined
296    in that header file.
297
298    header_files maps header file names to their type tables.
299    It is a vector of n_header_files elements.
300    Each element describes one header file.
301    It contains a vector of types.
302
303    Sometimes it can happen that the same header file produces
304    different results when included in different places.
305    This can result from conditionals or from different
306    things done before including the file.
307    When this happens, there are multiple entries for the file in this table,
308    one entry for each distinct set of results.
309    The entries are distinguished by the INSTANCE field.
310    The INSTANCE field appears in the N_BINCL and N_EXCL symbol table and is
311    used to match header-file references to their corresponding data.  */
312
313 struct header_file
314 {
315   char *name;                   /* Name of header file */
316   int instance;                 /* Numeric code distinguishing instances
317                                    of one header file that produced
318                                    different results when included.
319                                    It comes from the N_BINCL or N_EXCL.  */
320   struct type **vector;         /* Pointer to vector of types */
321   int length;                   /* Allocated length (# elts) of that vector */
322 };
323
324 static struct header_file *header_files;
325
326 static int n_header_files;
327
328 static int n_allocated_header_files;
329
330 /* Within each object file, various header files are assigned numbers.
331    A type is defined or referred to with a pair of numbers
332    (FILENUM,TYPENUM) where FILENUM is the number of the header file
333    and TYPENUM is the number within that header file.
334    TYPENUM is the index within the vector of types for that header file.
335
336    FILENUM == 1 is special; it refers to the main source of the object file,
337    and not to any header file.  FILENUM != 1 is interpreted by looking it up
338    in the following table, which contains indices in header_files.  */
339
340 static int *this_object_header_files;
341
342 static int n_this_object_header_files;
343
344 static int n_allocated_this_object_header_files;
345
346 /* When a header file is getting special overriding definitions
347    for one source file, record here the header_files index
348    of its normal definition vector.
349    At other times, this is -1.  */
350
351 static int header_file_prev_index;
352
353 /* At the start of reading dbx symbols, allocate our tables.  */
354
355 static void
356 init_header_files ()
357 {
358   n_allocated_header_files = 10;
359   header_files = (struct header_file *) xxmalloc (10 * sizeof (struct header_file));
360   n_header_files = 0;
361
362   n_allocated_this_object_header_files = 10;
363   this_object_header_files = (int *) xxmalloc (10 * sizeof (int));
364 }
365
366 /* At the end of reading dbx symbols, free our tables.  */
367
368 static void
369 free_header_files ()
370 {
371   register int i;
372   for (i = 0; i < n_header_files; i++)
373     free (header_files[i].name);
374   free (header_files);
375   free (this_object_header_files);
376 }
377
378 /* Called at the start of each object file's symbols.
379    Clear out the mapping of header file numbers to header files.  */
380
381 static void
382 new_object_header_files ()
383 {
384   /* Leave FILENUM of 0 free for builtin types and this file's types.  */
385   n_this_object_header_files = 1;
386   header_file_prev_index = -1;
387 }
388
389 /* Add header file number I for this object file
390    at the next successive FILENUM.  */
391
392 static void
393 add_this_object_header_file (i)
394      int i;
395 {
396   if (n_this_object_header_files == n_allocated_this_object_header_files)
397     {
398       n_allocated_this_object_header_files *= 2;
399       this_object_header_files
400         = (int *) xrealloc (this_object_header_files,
401                             n_allocated_this_object_header_files * sizeof (int));
402     }
403
404   this_object_header_files[n_this_object_header_files++] = i;
405 }
406
407 /* Add to this file an "old" header file, one already seen in
408    a previous object file.  NAME is the header file's name.
409    INSTANCE is its instance code, to select among multiple
410    symbol tables for the same header file.  */
411
412 static void
413 add_old_header_file (name, instance)
414      char *name;
415      int instance;
416 {
417   register struct header_file *p = header_files;
418   register int i;
419
420   for (i = 0; i < n_header_files; i++)
421     if (!strcmp (p[i].name, name) && instance == p[i].instance)
422       {
423         add_this_object_header_file (i);
424         return;
425       }
426   error ("Invalid symbol data: \"repeated\" header file that hasn't been seen before, at symtab pos %d.",
427          symnum);
428 }
429
430 /* Add to this file a "new" header file: definitions for its types follow.
431    NAME is the header file's name.
432    Most often this happens only once for each distinct header file,
433    but not necessarily.  If it happens more than once, INSTANCE has
434    a different value each time, and references to the header file
435    use INSTANCE values to select among them.
436
437    dbx output contains "begin" and "end" markers for each new header file,
438    but at this level we just need to know which files there have been;
439    so we record the file when its "begin" is seen and ignore the "end".  */
440
441 static void
442 add_new_header_file (name, instance)
443      char *name;
444      int instance;
445 {
446   register int i;
447   register struct header_file *p = header_files;
448   header_file_prev_index = -1;
449
450 #if 0
451   /* This code was used before I knew about the instance codes.
452      My first hypothesis is that it is not necessary now
453      that instance codes are handled.  */
454
455   /* Has this header file a previous definition?
456      If so, make a new entry anyway so that this use in this source file
457      gets a separate entry.  Later source files get the old entry.
458      Record here the index of the old entry, so that any type indices
459      not previously defined can get defined in the old entry as
460      well as in the new one.  */
461
462   for (i = 0; i < n_header_files; i++)
463     if (!strcmp (p[i].name, name))
464       {
465         header_file_prev_index = i;
466       }
467
468 #endif
469
470   /* Make sure there is room for one more header file.  */
471
472   if (n_header_files == n_allocated_header_files)
473     {
474       n_allocated_header_files *= 2;
475       header_files
476         = (struct header_file *) xrealloc (header_files, n_allocated_header_files * sizeof (struct header_file));
477     }
478
479   /* Create an entry for this header file.  */
480
481   i = n_header_files++;
482   header_files[i].name = name;
483   header_files[i].instance = instance;
484   header_files[i].length = 10;
485   header_files[i].vector
486     = (struct type **) xxmalloc (10 * sizeof (struct type *));
487   bzero (header_files[i].vector, 10 * sizeof (struct type *));
488
489   add_this_object_header_file (i);
490 }
491
492 /* Look up a dbx type-number pair.  Return the address of the slot
493    where the type for that number-pair is stored.
494    The number-pair is in TYPENUMS.
495
496    This can be used for finding the type associated with that pair
497    or for associating a new type with the pair.  */
498
499 static struct type **
500 dbx_lookup_type (typenums)
501      int typenums[2];
502 {
503   register int filenum = typenums[0], index = typenums[1];
504
505   if (filenum < 0 || filenum >= n_this_object_header_files)
506     error ("Invalid symbol data: type number (%d,%d) out of range at symtab pos %d.",
507            filenum, index, symnum);
508
509   if (filenum == 0)
510     {
511       /* Type is defined outside of header files.
512          Find it in this object file's type vector.  */
513       if (index >= type_vector_length)
514         {
515           type_vector_length *= 2;
516           type_vector = (struct typevector *)
517             xrealloc (type_vector, sizeof (struct typevector) + type_vector_length * sizeof (struct type *));
518           bzero (&type_vector->type[type_vector_length / 2],
519                  type_vector_length * sizeof (struct type *) / 2);
520         }
521       return &type_vector->type[index];
522     }
523   else
524     {
525       register int real_filenum = this_object_header_files[filenum];
526       register struct header_file *f;
527
528       if (real_filenum >= n_header_files)
529         abort ();
530
531       f = &header_files[real_filenum];
532
533       if (index >= f->length)
534         {
535           f->length *= 2;
536           f->vector = (struct type **)
537             xrealloc (f->vector, f->length * sizeof (struct type *));
538           bzero (&f->vector[f->length / 2],
539                  f->length * sizeof (struct type *) / 2);
540         }
541       return &f->vector[index];
542     }
543 }
544
545 /* Make sure there is a type allocated for type numbers TYPENUMS
546    and return the type object.
547    This can create an empty (zeroed) type object.  */
548
549 static struct type *
550 dbx_alloc_type (typenums)
551      int typenums[2];
552 {
553   register struct type **type_addr = dbx_lookup_type (typenums);
554   register struct type *type = *type_addr;
555
556   /* If we are referring to a type not known at all yet,
557      allocate an empty type for it.
558      We will fill it in later if we find out how.  */
559   if (type == 0)
560     {
561       type = (struct type *) obstack_alloc (symbol_obstack,
562                                             sizeof (struct type));
563       bzero (type, sizeof (struct type));
564       *type_addr = type;
565     }
566   return type;
567 }
568
569 #if 0
570 static struct type **
571 explicit_lookup_type (real_filenum, index)
572      int real_filenum, index;
573 {
574   register struct header_file *f = &header_files[real_filenum];
575
576   if (index >= f->length)
577     {
578       f->length *= 2;
579       f->vector = (struct type **)
580         xrealloc (f->vector, f->length * sizeof (struct type *));
581       bzero (&f->vector[f->length / 2],
582              f->length * sizeof (struct type *) / 2);
583     }
584   return &f->vector[index];
585 }
586 #endif
587 \f
588 /* maintain the lists of symbols and blocks */
589
590 /* Add a symbol to one of the lists of symbols.  */
591 static void
592 add_symbol_to_list (symbol, listhead)
593      struct symbol *symbol;
594      struct pending **listhead;
595 {
596   /* We keep PENDINGSIZE symbols in each link of the list.
597      If we don't have a link with room in it, add a new link.  */
598   if (*listhead == 0 || (*listhead)->nsyms == PENDINGSIZE)
599     {
600       register struct pending *link;
601       if (free_pendings)
602         {
603           link = free_pendings;
604           free_pendings = link->next;
605         }
606       else
607         link = (struct pending *) xxmalloc (sizeof (struct pending));
608
609       link->next = *listhead;
610       *listhead = link;
611       link->nsyms = 0;
612     }
613
614   (*listhead)->symbol[(*listhead)->nsyms++] = symbol;
615 }
616
617 /* At end of reading syms, or in case of quit,
618    really free as many `struct pending's as we can easily find.  */
619
620 static void
621 really_free_pendings ()
622 {
623   struct pending *next, *next1;
624   struct pending_block *bnext, *bnext1;
625
626   for (next = free_pendings; next; next = next1)
627     {
628       next1 = next->next;
629       free (next);
630     }
631   free_pendings = 0;
632
633   for (bnext = pending_blocks; bnext; bnext = bnext1)
634     {
635       bnext1 = bnext->next;
636       free (bnext);
637     }
638   pending_blocks = 0;
639
640   for (next = file_symbols; next; next = next1)
641     {
642       next1 = next->next;
643       free (next);
644     }
645   for (next = global_symbols; next; next = next1)
646     {
647       next1 = next->next;
648       free (next);
649     }
650 }
651
652 /* Take one of the lists of symbols and make a block from it.
653    Keep the order the symbols have in the list (reversed from the input file).
654    Put the block on the list of pending blocks.  */
655
656 static void
657 finish_block (symbol, listhead, old_blocks, start, end)
658      struct symbol *symbol;
659      struct pending **listhead;
660      struct pending_block *old_blocks;
661      CORE_ADDR start, end;
662 {
663   register struct pending *next, *next1;
664   register struct block *block;
665   register struct pending_block *pblock;
666   struct pending_block *opblock;
667   register int i;
668
669   /* Count the length of the list of symbols.  */
670
671   for (next = *listhead, i = 0; next; i += next->nsyms, next = next->next);
672
673   block = (struct block *) obstack_alloc (symbol_obstack,
674                                           sizeof (struct block) + (i - 1) * sizeof (struct symbol *));
675
676   /* Copy the symbols into the block.  */
677
678   BLOCK_NSYMS (block) = i;
679   for (next = *listhead; next; next = next->next)
680     {
681       register int j;
682       for (j = next->nsyms - 1; j >= 0; j--)
683         BLOCK_SYM (block, --i) = next->symbol[j];
684     }
685
686   BLOCK_START (block) = start;
687   BLOCK_END (block) = end;
688   BLOCK_SUPERBLOCK (block) = 0; /* Filled in when containing block is made */
689
690   /* Put the block in as the value of the symbol that names it.  */
691
692   if (symbol)
693     {
694       SYMBOL_BLOCK_VALUE (symbol) = block;
695       BLOCK_FUNCTION (block) = symbol;
696     }
697   else
698     BLOCK_FUNCTION (block) = 0;
699
700   /* Now "free" the links of the list, and empty the list.  */
701
702   for (next = *listhead; next; next = next1)
703     {
704       next1 = next->next;
705       next->next = free_pendings;
706       free_pendings = next;
707     }
708   *listhead = 0;
709
710   /* Install this block as the superblock
711      of all blocks made since the start of this scope
712      that don't have superblocks yet.  */
713
714   opblock = 0;
715   for (pblock = pending_blocks; pblock != old_blocks; pblock = pblock->next)
716     {
717       if (BLOCK_SUPERBLOCK (pblock->block) == 0)
718         BLOCK_SUPERBLOCK (pblock->block) = block;
719       opblock = pblock;
720     }
721
722   /* Record this block on the list of all blocks in the file.
723      Put it after opblock, or at the beginning if opblock is 0.
724      This puts the block in the list after all its subblocks.  */
725
726   /* Allocate in the symbol_obstack to save time.
727      It wastes a little space.  */
728   pblock = (struct pending_block *) obstack_alloc (symbol_obstack,
729                                                    sizeof (struct pending_block));
730   pblock->block = block;
731   if (opblock)
732     {
733       pblock->next = opblock->next;
734       opblock->next = pblock;
735     }
736   else
737     {
738       pblock->next = pending_blocks;
739       pending_blocks = pblock;
740     }
741 }
742
743 static struct blockvector *
744 make_blockvector ()
745 {
746   register struct pending_block *next, *next1;
747   register struct blockvector *blockvector;
748   register int i;
749
750   /* Count the length of the list of blocks.  */
751
752   for (next = pending_blocks, i = 0; next; next = next->next, i++);
753
754   blockvector = (struct blockvector *) obstack_alloc (symbol_obstack, sizeof (struct blockvector) + (i - 1) * sizeof (struct block *));
755
756   /* Copy the blocks into the blockvector.
757      This is done in reverse order, which happens to put
758      the blocks into the proper order (ascending starting address).
759      finish_block has hair to insert each block into the list
760      after its subblocks in order to make sure this is true.  */
761
762   BLOCKVECTOR_NBLOCKS (blockvector) = i;
763   for (next = pending_blocks; next; next = next->next)
764     BLOCKVECTOR_BLOCK (blockvector, --i) = next->block;
765
766 #if 0 /* Now we make the links in the obstack, so don't free them.  */
767   /* Now free the links of the list, and empty the list.  */
768
769   for (next = pending_blocks; next; next = next1)
770     {
771       next1 = next->next;
772       free (next);
773     }
774 #endif
775   pending_blocks = 0;
776
777   return blockvector;
778 }
779 \f
780 /* Manage the vector of line numbers.  */
781
782 static
783 record_line (line, pc)
784      int line;
785      CORE_ADDR pc;
786 {
787   /* Ignore the dummy line number in libg.o */
788
789   if (line == 0xffff)
790     return;
791
792   /* Make sure line vector is big enough.  */
793
794   if (line_vector_index + 1 >= line_vector_length)
795     {
796       line_vector_length *= 2;
797       line_vector = (struct linetable *)
798         xrealloc (line_vector,
799                   sizeof (struct linetable) + line_vector_length * sizeof (int));
800       current_subfile->line_vector = line_vector;
801     }
802
803   /* If this line is not continguous with previous one recorded,
804      record a line-number entry for it.  */
805   if (line != prev_line_number + 1)
806     line_vector->item[line_vector_index++] = - line;
807   prev_line_number = line;
808
809   /* Record the core address of the line.  */
810   line_vector->item[line_vector_index++] = pc;
811 }
812 \f
813 /* Start a new symtab for a new source file.
814    This is called when a dbx symbol of type N_SO is seen;
815    it indicates the start of data for one original source file.  */
816
817 static void
818 start_symtab (name, start_addr)
819      char *name;
820      CORE_ADDR start_addr;
821 {
822   register struct symtab *s;
823
824   last_source_file = name;
825   last_source_start_addr = start_addr;
826   file_symbols = 0;
827   global_symbols = 0;
828   within_function = 0;
829
830   /* Context stack is initially empty, with room for 10 levels.  */
831   context_stack
832     = (struct context_stack *) xxmalloc (10 * sizeof (struct context_stack));
833   context_stack_size = 10;
834   context_stack_depth = 0;
835
836   new_object_header_files ();
837
838   for (s = symseg_chain; s; s = s->next)
839     if (s->ldsymoff == symnum * sizeof (struct nlist))
840       break;
841   current_symseg = s;
842   if (s != 0)
843     return;
844
845   type_vector_length = 160;
846   type_vector = (struct typevector *) xxmalloc (sizeof (struct typevector) + type_vector_length * sizeof (struct type *));
847   bzero (type_vector->type, type_vector_length * sizeof (struct type *));
848
849   /* Initialize the list of sub source files with one entry
850      for this file (the top-level source file).  */
851
852   subfiles = 0;
853   current_subfile = 0;
854   start_subfile (name);
855 }
856
857 /* Handle an N_SOL symbol, which indicates the start of
858    code that came from an included (or otherwise merged-in)
859    source file with a different name.  */
860
861 static void
862 start_subfile (name)
863      char *name;
864 {
865   register struct subfile *subfile;
866
867   /* Save the current subfile's line vector data.  */
868
869   if (current_subfile)
870     {
871       current_subfile->line_vector_index = line_vector_index;
872       current_subfile->line_vector_length = line_vector_length;
873       current_subfile->prev_line_number = prev_line_number;
874     }
875
876   /* See if this subfile is already known as a subfile of the
877      current main source file.  */
878
879   for (subfile = subfiles; subfile; subfile = subfile->next)
880     {
881       if (!strcmp (subfile->name, name))
882         {
883           line_vector = subfile->line_vector;
884           line_vector_index = subfile->line_vector_index;
885           line_vector_length = subfile->line_vector_length;
886           prev_line_number = subfile->prev_line_number;
887           current_subfile = subfile;
888           return;
889         }
890     }
891
892   /* This subfile is not known.  Add an entry for it.  */
893
894   line_vector_index = 0;
895   line_vector_length = 1000;
896   prev_line_number = -2;        /* Force first line number to be explicit */
897   line_vector = (struct linetable *)
898     xxmalloc (sizeof (struct linetable) + line_vector_length * sizeof (int));
899
900   /* Make an entry for this subfile in the list of all subfiles
901      of the current main source file.  */
902
903   subfile = (struct subfile *) xxmalloc (sizeof (struct subfile));
904   subfile->next = subfiles;
905   subfile->name = savestring (name, strlen (name));
906   subfile->line_vector = line_vector;
907   subfiles = subfile;
908   current_subfile = subfile;
909 }
910
911 /* Finish the symbol definitions for one main source file,
912    close off all the lexical contexts for that file
913    (creating struct block's for them), then make the struct symtab
914    for that file and put it in the list of all such.
915
916    END_ADDR is the address of the end of the file's text.  */
917
918 static void
919 end_symtab (end_addr)
920      CORE_ADDR end_addr;
921 {
922   register struct symtab *symtab;
923   register struct blockvector *blockvector;
924   register struct subfile *subfile;
925   register struct linetable *lv;
926   struct subfile *nextsub;
927
928   if (current_symseg != 0)
929     {
930       last_source_file = 0;
931       current_symseg = 0;
932       return;
933     }
934
935   /* Finish the lexical context of the last function in the file;
936      pop the context stack.  */
937
938   if (context_stack_depth > 0)
939     {
940       register struct context_stack *cstk;
941       context_stack_depth--;
942       cstk = &context_stack[context_stack_depth];
943       /* Make a block for the local symbols within.  */
944       finish_block (cstk->name, &local_symbols, cstk->old_blocks,
945                     cstk->start_addr, end_addr);
946     }
947
948   /* Finish defining all the blocks of this symtab.  */
949   finish_block (0, &file_symbols, 0, last_source_start_addr, end_addr);
950   finish_block (0, &global_symbols, 0, last_source_start_addr, end_addr);
951   blockvector = make_blockvector ();
952
953   current_subfile->line_vector_index = line_vector_index;
954
955   /* Now create the symtab objects proper, one for each subfile.  */
956   /* (The main file is one of them.)  */
957
958   for (subfile = subfiles; subfile; subfile = nextsub)
959     {
960       symtab = (struct symtab *) xxmalloc (sizeof (struct symtab));
961       symtab->free_ptr = 0;
962
963       /* Fill in its components.  */
964       symtab->blockvector = blockvector;
965       type_vector->length = type_vector_length;
966       symtab->typevector = type_vector;
967       symtab->free_code = free_linetable;
968       if (subfile->next == 0)
969         symtab->free_ptr = (char *) type_vector;
970
971       symtab->filename = subfile->name;
972       lv = subfile->line_vector;
973       lv->nitems = subfile->line_vector_index;
974       symtab->linetable = (struct linetable *)
975         xrealloc (lv, sizeof (struct linetable) + lv->nitems * sizeof (int));
976       symtab->nlines = 0;
977       symtab->line_charpos = 0;
978
979       /* Link the new symtab into the list of such.  */
980       symtab->next = symtab_list;
981       symtab_list = symtab;
982
983       nextsub = subfile->next;
984       free (subfile);
985     }
986
987   type_vector = 0;
988   type_vector_length = -1;
989   line_vector = 0;
990   line_vector_length = -1;
991   last_source_file = 0;
992 }
993 \f
994 #ifdef N_BINCL
995
996 /* Handle the N_BINCL and N_EINCL symbol types
997    that act like N_SOL for switching source files
998    (different subfiles, as we call them) within one object file,
999    but using a stack rather than in an arbitrary order.  */
1000
1001 struct subfile_stack
1002 {
1003   struct subfile_stack *next;
1004   char *name;
1005   int prev_index;
1006 };
1007
1008 struct subfile_stack *subfile_stack;
1009
1010 static void
1011 push_subfile ()
1012 {
1013   register struct subfile_stack *tem
1014     = (struct subfile_stack *) xxmalloc (sizeof (struct subfile_stack));
1015
1016   tem->next = subfile_stack;
1017   subfile_stack = tem;
1018   if (current_subfile == 0 || current_subfile->name == 0)
1019     abort ();
1020   tem->name = current_subfile->name;
1021   tem->prev_index = header_file_prev_index;
1022 }
1023
1024 static char *
1025 pop_subfile ()
1026 {
1027   register char *name;
1028   register struct subfile_stack *link = subfile_stack;
1029
1030   if (link == 0)
1031     abort ();
1032
1033   name = link->name;
1034   subfile_stack = link->next;
1035   header_file_prev_index = link->prev_index;
1036   free (link);
1037
1038   return name;
1039 }
1040 #endif /* Have N_BINCL */
1041 \f
1042 /* Accumulate the misc functions in bunches of 127.
1043    At the end, copy them all into one newly allocated structure.  */
1044
1045 #define MISC_BUNCH_SIZE 127
1046
1047 struct misc_bunch
1048 {
1049   struct misc_bunch *next;
1050   struct misc_function contents[MISC_BUNCH_SIZE];
1051 };
1052
1053 /* Bunch currently being filled up.
1054    The next field points to chain of filled bunches.  */
1055
1056 static struct misc_bunch *misc_bunch;
1057
1058 /* Number of slots filled in current bunch.  */
1059
1060 static int misc_bunch_index;
1061
1062 /* Total number of misc functions recorded so far.  */
1063
1064 static int misc_count;
1065
1066 static void
1067 init_misc_functions ()
1068 {
1069   misc_count = 0;
1070   misc_bunch = 0;
1071   misc_bunch_index = MISC_BUNCH_SIZE;
1072 }
1073
1074 static void
1075 record_misc_function (name, address)
1076      char *name;
1077      CORE_ADDR address;
1078 {
1079   register struct misc_bunch *new;
1080
1081   if (misc_bunch_index == MISC_BUNCH_SIZE)
1082     {
1083       new = (struct misc_bunch *) xxmalloc (sizeof (struct misc_bunch));
1084       misc_bunch_index = 0;
1085       new->next = misc_bunch;
1086       misc_bunch = new;
1087     }
1088   misc_bunch->contents[misc_bunch_index].name = name;
1089   misc_bunch->contents[misc_bunch_index].address = address;
1090   misc_bunch_index++;
1091   misc_count++;
1092 }
1093
1094 static int
1095 compare_misc_functions (fn1, fn2)
1096      struct misc_function *fn1, *fn2;
1097 {
1098   /* Return a signed result based on unsigned comparisons
1099      so that we sort into unsigned numeric order.  */
1100   if (fn1->address < fn2->address)
1101     return -1;
1102   if (fn1->address > fn2->address)
1103     return 1;
1104   return 0;
1105 }
1106
1107 static void
1108 discard_misc_bunches ()
1109 {
1110   register struct misc_bunch *next;
1111
1112   while (misc_bunch)
1113     {
1114       next = misc_bunch->next;
1115       free (misc_bunch);
1116       misc_bunch = next;
1117     }
1118 }
1119
1120 static void
1121 condense_misc_bunches ()
1122 {
1123   register int i, j;
1124   register struct misc_bunch *bunch;
1125 #ifdef NAMES_HAVE_UNDERSCORE
1126   int offset = 1;
1127 #else
1128   int offset = 0;
1129 #endif
1130
1131   misc_function_vector
1132     = (struct misc_function *)
1133       xxmalloc (misc_count * sizeof (struct misc_function));
1134
1135   j = 0;
1136   bunch = misc_bunch;
1137   while (bunch)
1138     {
1139       for (i = 0; i < misc_bunch_index; i++)
1140         {
1141           misc_function_vector[j] = bunch->contents[i];
1142           misc_function_vector[j].name
1143             = obconcat (misc_function_vector[j].name
1144                         + (misc_function_vector[j].name[0] == '_' ? offset : 0),
1145                         "", "");
1146           j++;
1147         }
1148       bunch = bunch->next;
1149       misc_bunch_index = MISC_BUNCH_SIZE;
1150     }
1151
1152   misc_function_count = j;
1153
1154   /* Sort the misc functions by address.  */
1155
1156   qsort (misc_function_vector, j, sizeof (struct misc_function),
1157          compare_misc_functions);
1158 }
1159 \f
1160 /* Call sort_syms to sort alphabetically
1161    the symbols of each block of each symtab.  */
1162
1163 static int
1164 compare_symbols (s1, s2)
1165      struct symbol **s1, **s2;
1166 {
1167   register int namediff;
1168
1169   /* Compare the initial characters.  */
1170   namediff = SYMBOL_NAME (*s1)[0] - SYMBOL_NAME (*s2)[0];
1171   if (namediff != 0) return namediff;
1172
1173   /* If they match, compare the rest of the names.  */
1174   namediff = strcmp (SYMBOL_NAME (*s1), SYMBOL_NAME (*s2));
1175   if (namediff != 0) return namediff;
1176
1177   /* For symbols of the same name, registers should come first.  */
1178   return ((SYMBOL_CLASS (*s2) == LOC_REGISTER)
1179           - (SYMBOL_CLASS (*s1) == LOC_REGISTER));
1180 }
1181
1182 static void
1183 sort_syms ()
1184 {
1185   register struct symtab *s;
1186   int i, nbl;
1187   register struct blockvector *bv;
1188   register struct block *b;
1189
1190   for (s = symtab_list; s; s = s->next)
1191     {
1192       bv = BLOCKVECTOR (s);
1193       nbl = BLOCKVECTOR_NBLOCKS (bv);
1194       for (i = 0; i < nbl; i++)
1195         {
1196           b = BLOCKVECTOR_BLOCK (bv, i);
1197           if (BLOCK_SHOULD_SORT (b))
1198             qsort (&BLOCK_SYM (b, 0), BLOCK_NSYMS (b),
1199                    sizeof (struct symbol *), compare_symbols);
1200           else
1201             {
1202               int lastindex = BLOCK_NSYMS (b) - 1;
1203               register int j;
1204               for (j = (lastindex - 1) / 2; j >= 0; j--)
1205                 {
1206                   register struct symbol *sym;
1207                   sym = BLOCK_SYM (b, j);
1208                   BLOCK_SYM (b, j) = BLOCK_SYM (b, lastindex - j);
1209                   BLOCK_SYM (b, lastindex - j) = sym;
1210                 }
1211             }
1212         }
1213     }
1214 }
1215 \f
1216 /* This is the symbol-file command.  Read the file, analyze its symbols,
1217    and add a struct symtab to symtab_list.  */
1218
1219 void
1220 symbol_file_command (name)
1221      char *name;
1222 {
1223   register int desc;
1224   DECLARE_FILE_HEADERS;
1225   struct nlist *nlist;
1226   char *stringtab;
1227   long buffer;
1228   register int val;
1229   extern void close ();
1230   struct cleanup *old_chain;
1231   struct symtab *symseg;
1232   struct stat statbuf;
1233
1234   dont_repeat ();
1235
1236   if (name == 0)
1237     {
1238       if (symtab_list && !query ("Discard symbol table? ", 0))
1239         error ("Not confirmed.");
1240       free_all_symtabs ();
1241       return;
1242     }
1243
1244   if (symtab_list && !query ("Load new symbol table from \"%s\"? ", name))
1245     error ("Not confirmed.");
1246
1247   {
1248     char *absolute_name;
1249     desc = openp (getenv ("PATH"), 1, name, O_RDONLY, 0, &absolute_name);
1250     if (desc < 0)
1251       perror_with_name (name);
1252     else
1253       name = absolute_name;
1254   }
1255
1256   old_chain = make_cleanup (close, desc);
1257   make_cleanup (free_current_contents, &name);
1258
1259   READ_FILE_HEADERS (desc, name);
1260
1261   if (NUMBER_OF_SYMBOLS == 0)
1262     {
1263       if (symfile)
1264         free (symfile);
1265       symfile = 0;
1266       free_all_symtabs ();
1267       printf ("%s has no symbol-table; symbols discarded.\n", name);
1268       fflush (stdout);
1269       return;
1270     }
1271
1272   printf ("Reading symbol data from %s...", name);
1273   fflush (stdout);
1274
1275   /* Now read the string table, all at once.  */
1276   val = lseek (desc, STRING_TABLE_OFFSET, 0);
1277   if (val < 0)
1278     perror_with_name (name);
1279   stat (name, &statbuf);
1280   READ_STRING_TABLE_SIZE (buffer);
1281   if (buffer >= 0 && buffer < statbuf.st_size)
1282     stringtab = (char *) alloca (buffer);
1283   else
1284     stringtab = NULL;
1285   if (stringtab == NULL)
1286     error ("ridiculous string table size: %d bytes", name, buffer);
1287
1288   bcopy (&buffer, stringtab, sizeof buffer);
1289   val = myread (desc, stringtab + sizeof buffer, buffer - sizeof buffer);
1290   if (val < 0)
1291     perror_with_name (name);
1292
1293   /* Throw away the old symbol table.  */
1294
1295   if (symfile)
1296     free (symfile);
1297   symfile = 0;
1298   free_all_symtabs ();
1299
1300   /* Empty the hash table of global syms looking for values.  */
1301   bzero (global_sym_chain, sizeof global_sym_chain);
1302
1303 #ifdef READ_GDB_SYMSEGS
1304   /* That puts us at the symsegs.  Read them.  */
1305   symseg_chain = read_symsegs (desc, name);
1306   hash_symsegs ();
1307
1308   /* Free the symtabs made by read_symsegs, but not their contents,
1309      which have been copied into symtabs on symtab_list.  */
1310   for (symseg = symseg_chain; symseg; symseg = symseg->next)
1311     {
1312       int i;
1313       struct sourcevector *sv = (struct sourcevector *) symseg->linetable;
1314
1315       for (i = 0; i < sv->length; i++)
1316         {
1317           int j;
1318           struct source *source = sv->source[i];
1319           struct symtab *sp1
1320             = (struct symtab *) xxmalloc (sizeof (struct symtab));
1321
1322           bcopy (symseg, sp1, sizeof (struct symtab));
1323           sp1->filename = savestring (source->name, strlen (source->name));
1324           sp1->linetable = &source->contents;
1325           sp1->free_code = free_nothing;
1326           sp1->free_ptr = (i == 0) ? (char *) symseg : 0;
1327
1328           sp1->next = symtab_list;
1329           symtab_list = sp1;
1330         }
1331     }
1332 #else
1333   /* Where people are using the 4.2 ld program, must not check for
1334      symsegs, because that ld puts randonm garbage at the end of
1335      the output file and that would trigger an error message.  */
1336   symseg_chain = 0;
1337 #endif
1338
1339   /* Position to read the symbol table.  Do not read it all at once. */
1340   val = lseek (desc, SYMBOL_TABLE_OFFSET, 0);
1341   if (val < 0)
1342     perror_with_name (name);
1343
1344   init_misc_functions ();
1345   make_cleanup (discard_misc_bunches, 0);
1346   init_header_files ();
1347   make_cleanup (free_header_files, 0);
1348   free_pendings = 0;
1349   pending_blocks = 0;
1350   file_symbols = 0;
1351   global_symbols = 0;
1352   make_cleanup (really_free_pendings, 0);
1353
1354   /* Now that the symbol table data of the executable file are all in core,
1355      process them and define symbols accordingly.  Closes desc.  */
1356
1357   read_dbx_symtab (desc, stringtab, NUMBER_OF_SYMBOLS);
1358   close (desc);
1359
1360   /* Sort symbols alphabetically within each block.  */
1361
1362   sort_syms ();
1363
1364   /* Go over the misc functions and install them in vector.  */
1365
1366   condense_misc_bunches ();
1367
1368   /* Don't allow char * to have a typename (else would get caddr_t.)  */
1369
1370   TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
1371
1372   /* Make a default for file to list.  */
1373
1374   select_source_symtab (symtab_list);
1375
1376   symfile = savestring (name, strlen (name));
1377
1378   do_cleanups (old_chain);
1379
1380   /* Free the symtabs made by read_symsegs, but not their contents,
1381      which have been copied into symtabs on symtab_list.  */
1382   while (symseg_chain)
1383     {
1384       register struct symtab *s = symseg_chain->next;
1385       free (symseg_chain);
1386       symseg_chain = s;
1387     }
1388
1389   printf ("done.\n");
1390   fflush (stdout);
1391 }
1392
1393 /* Return name of file symbols were loaded from, or 0 if none..  */
1394
1395 char *
1396 get_sym_file ()
1397 {
1398   return symfile;
1399 }
1400 \f
1401 /* Buffer for reading the symbol table entries.  */
1402 static struct nlist symbuf[2048];
1403 static int symbuf_idx;
1404 static int symbuf_end;
1405
1406 /* I/O descriptor for reading the symbol table.  */
1407 static int symtab_input_desc;
1408
1409 /* The address of the string table
1410    of the object file we are reading (as copied into core).  */
1411 static char *stringtab_global;
1412
1413 /* Refill the symbol table input buffer
1414    and set the variables that control fetching entries from it.
1415    Reports an error if no data available.
1416    This function can read past the end of the symbol table
1417    (into the string table) but this does no harm.  */
1418
1419 static int
1420 fill_symbuf ()
1421 {
1422   int nbytes = myread (symtab_input_desc, symbuf, sizeof (symbuf));
1423   if (nbytes <= 0)
1424     error ("error or end of file reading symbol table");
1425   symbuf_end = nbytes / sizeof (struct nlist);
1426   symbuf_idx = 0;
1427   return 1;
1428 }
1429
1430 /* dbx allows the text of a symbol name to be continued into the
1431    next symbol name!  When such a continuation is encountered
1432    (a \ at the end of the text of a name)
1433    call this function to get the continuation.  */
1434
1435 static char *
1436 next_symbol_text ()
1437 {
1438   if (symbuf_idx == symbuf_end)
1439     fill_symbuf ();
1440   symnum++;
1441   return symbuf[symbuf_idx++].n_un.n_strx + stringtab_global;
1442 }
1443 \f
1444 /* Given pointers to a a.out symbol table in core containing  dbx style data,
1445    analyze them and create struct symtab's describing the symbols.
1446    NLISTLEN is the number of symbols in the symbol table.
1447    We read them one at a time using stdio.
1448    All symbol names are given as offsets relative to STRINGTAB.  */
1449
1450 static void
1451 read_dbx_symtab (desc, stringtab, nlistlen)
1452      int desc;
1453      register char *stringtab;
1454      register int nlistlen;
1455 {
1456   register char *namestring;
1457   register struct symbol *sym, *prev;
1458   int hash;
1459   int num_object_files = 0;
1460   struct cleanup *old_chain;
1461
1462 #ifdef N_BINCL
1463   subfile_stack = 0;
1464 #endif
1465
1466   old_chain = make_cleanup (free_all_symtabs, 0);
1467   stringtab_global = stringtab;
1468   last_source_file = 0;
1469
1470 #ifdef END_OF_TEXT_DEFAULT
1471   end_of_text_addr = END_OF_TEXT_DEFAULT;
1472 #endif
1473
1474   symtab_input_desc = desc;
1475   symbuf_end = symbuf_idx = 0;
1476
1477   for (symnum = 0; symnum < nlistlen; symnum++)
1478     {
1479       struct nlist *bufp;
1480       int type;
1481
1482       QUIT;     /* allow this to be interruptable */
1483       if (symbuf_idx == symbuf_end)
1484         fill_symbuf ();
1485       bufp = &symbuf[symbuf_idx++];
1486       type = bufp->n_type;
1487       namestring = bufp->n_un.n_strx ? bufp->n_un.n_strx + stringtab : "";
1488
1489       if (type & N_STAB)
1490         process_one_symbol (type, bufp->n_desc,
1491                             bufp->n_value, namestring);
1492       /* A static text symbol whose name ends in ".o"
1493          or begins with "-l" means the start of another object file.
1494          So end the symtab of the source file we have been processing.
1495          This is how we avoid counting the libraries as part
1496          or the last source file.
1497          Also this way we find end of first object file (crt0).  */
1498       else if (
1499 #ifdef N_NBTEXT
1500                (type == N_NBTEXT)
1501 #else
1502                (type == N_TEXT)
1503 #endif
1504                && (!strcmp (namestring + strlen (namestring) - 2, ".o")
1505                ||  !strncmp (namestring, "-l", 2)))
1506         {
1507           if (num_object_files++ == 1)
1508             first_object_file_end = bufp->n_value;
1509           if (last_source_file)
1510             end_symtab (bufp->n_value);
1511         }
1512       else if (type & N_EXT || type == N_TEXT
1513 #ifdef N_NBTEXT
1514                || type == N_NBTEXT
1515 #endif
1516                )
1517         {
1518           int used_up = 0;
1519
1520           /* Record the location of _etext.  */
1521           if (type == (N_TEXT | N_EXT)
1522               && !strcmp (namestring, "_etext"))
1523             end_of_text_addr = bufp->n_value;
1524
1525           /* Global symbol: see if we came across a dbx definition
1526              for a corresponding symbol.  If so, store the value.
1527              Remove syms from the chain when their values are stored,
1528              but search the whole chain, as there may be several syms
1529              from different files with the same name.  */
1530           if (type & N_EXT)
1531             {
1532               prev = 0;
1533 #ifdef NAMES_HAVE_UNDERSCORE
1534               hash = hashname (namestring + 1);
1535 #else /* not NAMES_HAVE_UNDERSCORE */
1536               hash = hashname (namestring);
1537 #endif /* not NAMES_HAVE_UNDERSCORE */
1538               for (sym = global_sym_chain[hash];
1539                    sym;)
1540                 {
1541                   if (
1542 #ifdef NAMES_HAVE_UNDERSCORE
1543                       *namestring == '_'
1544                       && namestring[1] == SYMBOL_NAME (sym)[0]
1545                       &&
1546                       !strcmp (namestring + 2, SYMBOL_NAME (sym) + 1)
1547 #else /* NAMES_HAVE_UNDERSCORE */
1548                       namestring[0] == SYMBOL_NAME (sym)[0]
1549                       &&
1550                       !strcmp (namestring + 1, SYMBOL_NAME (sym) + 1)
1551 #endif /* NAMES_HAVE_UNDERSCORE */
1552                       )
1553                     {
1554                       if (prev)
1555                         SYMBOL_VALUE (prev) = SYMBOL_VALUE (sym);
1556                       else
1557                         global_sym_chain[hash]
1558                           = (struct symbol *) SYMBOL_VALUE (sym);
1559                       SYMBOL_VALUE (sym) = bufp->n_value;
1560                       if (prev)
1561                         sym = (struct symbol *) SYMBOL_VALUE (prev);
1562                       else
1563                         sym = global_sym_chain[hash];
1564
1565                       used_up = 1;
1566                     }
1567                   else
1568                     {
1569                       prev = sym;
1570                       sym = (struct symbol *) SYMBOL_VALUE (sym);
1571                     }
1572                 }
1573             }
1574
1575           /* Defined global or text symbol: record as a misc function
1576              if it didn't give its address to a debugger symbol above.  */
1577           if (type <= (N_TYPE | N_EXT)
1578               && type != N_EXT
1579               && ! used_up)
1580             record_misc_function (namestring, bufp->n_value);
1581         }
1582     }
1583
1584   if (last_source_file)
1585     end_symtab (end_of_text_addr);
1586
1587   discard_cleanups (old_chain);
1588 }
1589
1590 static int
1591 hashname (name)
1592      char *name;
1593 {
1594   register char *p = name;
1595   register int total = p[0];
1596   register int c;
1597
1598   c = p[1];
1599   total += c << 2;
1600   if (c)
1601     {
1602       c = p[2];
1603       total += c << 4;
1604       if (c)
1605         total += p[3] << 6;
1606     }
1607
1608   /* Ensure result is positive.  */
1609   if (total < 0) total += (1000 << 6);
1610   return total % HASHSIZE;
1611 }
1612
1613 /* Put all appropriate global symbols in the symseg data
1614    onto the hash chains so that their addresses will be stored
1615    when seen later in loader global symbols.  */
1616
1617 static void
1618 hash_symsegs ()
1619 {
1620   /* Look at each symbol in each block in each symseg symtab.  */
1621   struct symtab *s;
1622   for (s = symseg_chain; s; s = s->next)
1623     {
1624       register int n;
1625       for (n = BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s)) - 1; n >= 0; n--)
1626         {
1627           register struct block *b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), n);
1628           register int i;
1629           for (i = BLOCK_NSYMS (b) - 1; i >= 0; i--)
1630             {
1631               register struct symbol *sym = BLOCK_SYM (b, i);
1632
1633               /* Put the symbol on a chain if its value is an address
1634                  that is figured out by the loader.  */
1635
1636               if (SYMBOL_CLASS (sym) == LOC_EXTERNAL)
1637                 {
1638                   register int hash = hashname (SYMBOL_NAME (sym));
1639                   SYMBOL_VALUE (sym) = (int) global_sym_chain[hash];
1640                   global_sym_chain[hash] = sym;
1641                   SYMBOL_CLASS (sym) = LOC_STATIC;
1642                 }
1643             }
1644         }
1645     }
1646 }
1647 \f
1648 static void
1649 process_one_symbol (type, desc, value, name)
1650      int type, desc;
1651      CORE_ADDR value;
1652      char *name;
1653 {
1654   register struct context_stack *new;
1655
1656   /* Something is wrong if we see real data before
1657      seeing a source file name.  */
1658
1659   if (last_source_file == 0 && type != N_SO)
1660     {
1661 #ifdef N_NSYMS
1662       /* This code is used on Ultrix; ignore this sym.  */
1663       if (type == N_NSYMS)
1664         return;
1665 #endif
1666
1667       if (type == N_ENTRY)
1668         /* This code appears in libraries on Gould machines.  */
1669         return;
1670       error ("Invalid symbol data: does not start by identifying a source file.");
1671     }
1672
1673   switch (type)
1674     {
1675     case N_FUN:
1676     case N_FNAME:
1677       /* Either of these types of symbols indicates the start of
1678          a new function.  We must process its "name" normally for dbx,
1679          but also record the start of a new lexical context, and possibly
1680          also the end of the lexical context for the previous function.  */
1681       
1682       within_function = 1;
1683       if (context_stack_depth > 0)
1684         {
1685           new = &context_stack[--context_stack_depth];
1686           /* Make a block for the local symbols within.  */
1687           finish_block (new->name, &local_symbols, new->old_blocks,
1688                         new->start_addr, value);
1689         }
1690       /* Stack must be empty now.  */
1691       if (context_stack_depth != 0)
1692         error ("Invalid symbol data: unmatched N_LBRAC before symtab pos %d.",
1693                symnum);
1694
1695       new = &context_stack[context_stack_depth++];
1696       new->old_blocks = pending_blocks;
1697       new->start_addr = value;
1698       new->name = define_symbol (value, name, desc);
1699       local_symbols = 0;
1700       break;
1701
1702     case N_LBRAC:
1703       /* This "symbol" just indicates the start of an inner lexical
1704          context within a function.  */
1705
1706       if (context_stack_depth == context_stack_size)
1707         {
1708           context_stack_size *= 2;
1709           context_stack
1710             = (struct context_stack *) xrealloc (context_stack,
1711                                                  context_stack_size
1712                                                  * sizeof (struct context_stack));
1713         }
1714
1715       new = &context_stack[context_stack_depth++];
1716       new->depth = desc;
1717       new->locals = local_symbols;
1718       new->old_blocks = pending_blocks;
1719       new->start_addr = value;
1720       new->name = 0;
1721       local_symbols = 0;
1722       break;
1723
1724     case N_RBRAC:
1725       /* This "symbol" just indicates the end of an inner lexical
1726          context that was started with N_RBRAC.  */
1727       new = &context_stack[--context_stack_depth];
1728       if (desc != new->depth)
1729         error ("Invalid symbol data: N_LBRAC/N_RBRAC symbol mismatch, symtab pos %d.", symnum);
1730       local_symbols = new->locals;
1731
1732       /* If this is not the outermost LBRAC...RBRAC pair in the
1733          function, its local symbols preceded it, and are the ones
1734          just recovered from the context stack.  Defined the block for them.
1735
1736          If this is the outermost LBRAC...RBRAC pair, there is no
1737          need to do anything; leave the symbols that preceded it
1738          to be attached to the function's own block.  */
1739       if (local_symbols && context_stack_depth > 1)
1740         {
1741           /* Muzzle a compiler bug that makes end > start.  */
1742           if (new->start_addr > value)
1743             new->start_addr = value;
1744           /* Make a block for the local symbols within.  */
1745           finish_block (0, &local_symbols, new->old_blocks,
1746                         new->start_addr + last_source_start_addr,
1747                         value + last_source_start_addr);
1748         }
1749       break;
1750
1751     case N_FN:
1752       /* This kind of symbol supposedly indicates the start
1753          of an object file.  In fact this type does not appear.  */
1754       break;
1755
1756     case N_SO:
1757       /* This type of symbol indicates the start of data
1758          for one source file.
1759          Finish the symbol table of the previous source file
1760          (if any) and start accumulating a new symbol table.  */
1761       if (last_source_file)
1762         end_symtab (value);
1763       start_symtab (name, value);
1764       break;
1765
1766     case N_SOL:
1767       /* This type of symbol indicates the start of data for
1768          a sub-source-file, one whose contents were copied or
1769          included in the compilation of the main source file
1770          (whose name was given in the N_SO symbol.)  */
1771       start_subfile (name);
1772       break;
1773
1774 #ifdef N_BINCL
1775     case N_BINCL:
1776       push_subfile ();
1777       add_new_header_file (name, value);
1778       start_subfile (name);
1779       break;
1780
1781     case N_EINCL:
1782       start_subfile (pop_subfile ());
1783       break;
1784
1785     case N_EXCL:
1786       add_old_header_file (name, value);
1787       break;
1788 #endif /* have N_BINCL */
1789
1790     case N_SLINE:
1791       /* This type of "symbol" really just records
1792          one line-number -- core-address correspondence.
1793          Enter it in the line list for this symbol table.  */
1794       record_line (desc, value);
1795       break;
1796
1797     case N_BCOMM:
1798     case N_ECOMM:
1799     case N_ECOML:
1800     case N_LENG:
1801       break;
1802
1803     default:
1804       if (name)
1805         define_symbol (value, name, desc);
1806     }
1807 }
1808 \f
1809 static struct symbol *
1810 define_symbol (value, string, desc)
1811      int value;
1812      char *string;
1813      int desc;
1814 {
1815   register struct symbol *sym
1816     = (struct symbol *) obstack_alloc (symbol_obstack, sizeof (struct symbol));
1817   char *p = (char *) index (string, ':');
1818   int deftype;
1819   register int i;
1820
1821   /* Ignore syms with empty names.  */
1822   if (string[0] == 0)
1823     return 0;
1824
1825   SYMBOL_NAME (sym)
1826     = (char *) obstack_alloc (symbol_obstack, ((p - string) + 1));
1827   /* Open-coded bcopy--saves function call time.  */
1828   {
1829     register char *p1 = string;
1830     register char *p2 = SYMBOL_NAME (sym);
1831     while (p1 != p)
1832       *p2++ = *p1++;
1833     *p2++ = '\0';
1834   }
1835   p++;
1836   /* Determine the type of name being defined.  */
1837   if ((*p >= '0' && *p <= '9') || *p == '(')
1838     deftype = 'l';
1839   else
1840     deftype = *p++;
1841
1842   /* c is a special case, not followed by a type-number.
1843      SYMBOL:c=iVALUE for an integer constant symbol.
1844      SYMBOL:c=rVALUE for a floating constant symbol.  */
1845   if (deftype == 'c')
1846     {
1847       if (*p++ != '=')
1848         error ("Invalid symbol data at symtab pos %d.", symnum);
1849       switch (*p++)
1850         {
1851         case 'r':
1852           {
1853             double d = atof (p);
1854             char *value;
1855
1856             SYMBOL_TYPE (sym) = builtin_type_double;
1857             value = (char *) obstack_alloc (symbol_obstack, sizeof (double));
1858             bcopy (&d, value, sizeof (double));
1859             SYMBOL_VALUE_BYTES (sym) = value;
1860             SYMBOL_CLASS (sym) = LOC_CONST;
1861           }
1862           break;
1863         case 'i':
1864           {
1865             SYMBOL_TYPE (sym) = builtin_type_int;
1866             SYMBOL_VALUE (sym) = atoi (p);
1867             SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
1868           }
1869           break;
1870         default:
1871           error ("Invalid symbol data at symtab pos %d.", symnum);
1872         }
1873       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1874       add_symbol_to_list (sym, &file_symbols);
1875       return sym;
1876     }
1877
1878   /* Now usually comes a number that says which data type,
1879      and possibly more stuff to define the type
1880      (all of which is handled by read_type)  */
1881
1882   if (deftype == 'p' && *p == 'F')
1883     /* pF is a two-letter code that means a function parameter in Fortran.
1884        The type-number specifies the type of the return value.
1885        Translate it into a pointer-to-function type.  */
1886     {
1887       p++;
1888       SYMBOL_TYPE (sym)
1889         = lookup_pointer_type (lookup_function_type (read_type (&p)));
1890     }
1891   else
1892     {
1893       struct type *type = read_type (&p);
1894
1895       if ((deftype == 'F' || deftype == 'f')
1896           && TYPE_CODE (type) != TYPE_CODE_FUNC)
1897         SYMBOL_TYPE (sym) = lookup_function_type (type);
1898       else
1899         SYMBOL_TYPE (sym) = type;
1900     }
1901
1902   switch (deftype)
1903     {
1904     case 'f':
1905       SYMBOL_CLASS (sym) = LOC_BLOCK;
1906       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1907       add_symbol_to_list (sym, &file_symbols);
1908       break;
1909
1910     case 'F':
1911       SYMBOL_CLASS (sym) = LOC_BLOCK;
1912       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1913       add_symbol_to_list (sym, &global_symbols);
1914       break;
1915
1916     case 'G':
1917       /* For a class G (global) symbol, it appears that the
1918          value is not correct.  It is necessary to search for the
1919          corresponding linker definition to find the value.
1920          These definitions appear at the end of the namelist.  */
1921       i = hashname (SYMBOL_NAME (sym));
1922       SYMBOL_VALUE (sym) = (int) global_sym_chain[i];
1923       global_sym_chain[i] = sym;
1924       SYMBOL_CLASS (sym) = LOC_STATIC;
1925       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1926       add_symbol_to_list (sym, &global_symbols);
1927       break;
1928
1929       /* This case is faked by a conditional above,
1930          when there is no code letter in the dbx data.
1931          Dbx data never actually contains 'l'.  */
1932     case 'l':
1933       SYMBOL_CLASS (sym) = LOC_LOCAL;
1934       SYMBOL_VALUE (sym) = value;
1935       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1936       add_symbol_to_list (sym, &local_symbols);
1937       break;
1938
1939     case 'p':
1940       SYMBOL_CLASS (sym) = LOC_ARG;
1941       SYMBOL_VALUE (sym) = value;
1942       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1943       add_symbol_to_list (sym, &local_symbols);
1944       /* DESC == 0 implies compiled with GCC.
1945          In this case, if it says `short', believe it.  */
1946       if (desc == 0)
1947         break;
1948       /* If PCC says a parameter is a short or a char,
1949          it is really an int.  */
1950       if (SYMBOL_TYPE (sym) == builtin_type_char
1951           || SYMBOL_TYPE (sym) == builtin_type_short)
1952         SYMBOL_TYPE (sym) = builtin_type_int;
1953       else if (SYMBOL_TYPE (sym) == builtin_type_unsigned_char
1954                || SYMBOL_TYPE (sym) == builtin_type_unsigned_short)
1955         SYMBOL_TYPE (sym) = builtin_type_unsigned_int;
1956       break;
1957
1958     case 'r':
1959       SYMBOL_CLASS (sym) = LOC_REGISTER;
1960       SYMBOL_VALUE (sym) = value;
1961       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1962       add_symbol_to_list (sym, &local_symbols);
1963       break;
1964
1965     case 'S':
1966       /* Static symbol at top level of file */
1967       SYMBOL_CLASS (sym) = LOC_STATIC;
1968       SYMBOL_VALUE (sym) = value;
1969       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1970       add_symbol_to_list (sym, &file_symbols);
1971       break;
1972
1973     case 't':
1974       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1975       SYMBOL_VALUE (sym) = value;
1976       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1977       if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0
1978           && (TYPE_FLAGS (SYMBOL_TYPE (sym)) & TYPE_FLAG_PERM) == 0)
1979         TYPE_NAME (SYMBOL_TYPE (sym)) =
1980           obsavestring (SYMBOL_NAME (sym),
1981                         strlen (SYMBOL_NAME (sym)));
1982       add_symbol_to_list (sym, &file_symbols);
1983       break;
1984
1985     case 'T':
1986       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1987       SYMBOL_VALUE (sym) = value;
1988       SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
1989       if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0
1990           && (TYPE_FLAGS (SYMBOL_TYPE (sym)) & TYPE_FLAG_PERM) == 0)
1991         TYPE_NAME (SYMBOL_TYPE (sym))
1992           = obconcat ("",
1993                       (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_ENUM
1994                        ? "enum "
1995                        : (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT
1996                           ? "struct " : "union ")),
1997                       SYMBOL_NAME (sym));
1998       add_symbol_to_list (sym, &file_symbols);
1999       break;
2000
2001     case 'V':
2002     case 'v':
2003       /* Static symbol of local scope */
2004       SYMBOL_CLASS (sym) = LOC_STATIC;
2005       SYMBOL_VALUE (sym) = value;
2006       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2007       add_symbol_to_list (sym, &local_symbols);
2008       break;
2009
2010     default:
2011       error ("Invalid symbol data: unknown symbol-type code `%c' at symtab pos %d.", deftype, symnum);
2012     }
2013   return sym;
2014 }
2015 \f
2016 /* Read a number by which a type is referred to in dbx data,
2017    or perhaps read a pair (FILENUM, TYPENUM) in parentheses.
2018    Just a single number N is equivalent to (0,N).
2019    Return the two numbers by storing them in the vector TYPENUMS.
2020    TYPENUMS will then be used as an argument to dbx_lookup_type.  */
2021
2022 static void
2023 read_type_number (pp, typenums)
2024      register char **pp;
2025      register int *typenums;
2026 {
2027   if (**pp == '(')
2028     {
2029       (*pp)++;
2030       typenums[0] = read_number (pp, ',');
2031       typenums[1] = read_number (pp, ')');
2032     }
2033   else
2034     {
2035       typenums[0] = 0;
2036       typenums[1] = read_number (pp, 0);
2037     }
2038 }
2039
2040 /* Read a dbx type reference or definition;
2041    return the type that is meant.
2042    This can be just a number, in which case it references
2043    a type already defined and placed in type_vector.
2044    Or the number can be followed by an =, in which case
2045    it means to define a new type according to the text that
2046    follows the =.  */
2047
2048 static
2049 struct type *
2050 read_type (pp)
2051      register char **pp;
2052 {
2053   register struct type *type = 0;
2054   register int n;
2055   struct type *type1;
2056   int typenums[2];
2057   int xtypenums[2];
2058
2059   read_type_number (pp, typenums);
2060
2061   /* Detect random reference to type not yet defined.
2062      Allocate a type object but leave it zeroed.  */
2063   if (**pp != '=')
2064     return dbx_alloc_type (typenums);
2065
2066   *pp += 2;
2067   switch ((*pp)[-1])
2068     {
2069     case 'x':
2070       type = dbx_alloc_type (typenums);
2071       /* Set the type code according to the following letter.  */
2072       switch ((*pp)[0])
2073         {
2074         case 's':
2075           TYPE_CODE (type) = TYPE_CODE_STRUCT;
2076           break;
2077         case 'u':
2078           TYPE_CODE (type) = TYPE_CODE_UNION;
2079           break;
2080         case 'e':
2081           TYPE_CODE (type) = TYPE_CODE_ENUM;
2082           break;
2083         }
2084       /* Skip the name the cross-ref points to.  */
2085       *pp = (char *) index (*pp, ',');
2086       /* Just allocate the type and leave it zero if nothing known */
2087       return dbx_alloc_type (typenums);
2088
2089     case '0':
2090     case '1':
2091     case '2':
2092     case '3':
2093     case '4':
2094     case '5':
2095     case '6':
2096     case '7':
2097     case '8':
2098     case '9':
2099     case '(':
2100       (*pp)--;
2101       read_type_number (pp, xtypenums);
2102       type = *dbx_lookup_type (xtypenums);
2103       if (type == 0)
2104         type = builtin_type_void;
2105       *dbx_lookup_type (typenums) = type;
2106       break;
2107       
2108     case '*':
2109       type = dbx_alloc_type (typenums);
2110       smash_to_pointer_type (type, read_type (pp));
2111       break;
2112
2113     case 'f':
2114       type = dbx_alloc_type (typenums);
2115       smash_to_function_type (type, read_type (pp));
2116       break;
2117
2118     case 'r':
2119       type = read_range_type (pp, typenums);
2120       *dbx_lookup_type (typenums) = type;
2121       break;
2122
2123     case 'e':
2124       type = dbx_alloc_type (typenums);
2125       type = read_enum_type (pp, type);
2126       *dbx_lookup_type (typenums) = type;
2127       break;
2128
2129     case 's':
2130       type = dbx_alloc_type (typenums);
2131       type = read_struct_type (pp, type);
2132       break;
2133
2134     case 'u':
2135       type = dbx_alloc_type (typenums);
2136       type = read_struct_type (pp, type);
2137       TYPE_CODE (type) = TYPE_CODE_UNION;
2138       break;
2139
2140     case 'a':
2141       /* Define an array type.  */
2142       type = dbx_alloc_type (typenums);
2143
2144       /* dbx expresses array types in terms of a range type for the index,
2145          and that range type is specified right inside the array type spec
2146          making ar1;MIN;MAX;VALTYPE  */
2147       if (!strncmp (*pp, "r1;0;", 5))
2148         (*pp) += 5;
2149       else if (!strncmp (*pp, "r(0,1);0;", 9))
2150         (*pp) += 9;
2151       else break;
2152
2153       TYPE_CODE (type) = TYPE_CODE_ARRAY;
2154       /* In Fortran, an upper bound may be T... meaning a parameter specifies
2155          the length of the data.  In this case, just pretend the bound is 1.
2156          This happens only for array parameters, which are really passed
2157          as pointers anyway, and we will translate them into such.  */
2158       if (**pp == 'T')
2159         {
2160           n = 1;
2161           while (**pp != ';')
2162             (*pp)++;
2163         }
2164       else
2165         n = read_number (pp, ';') + 1;
2166       TYPE_TARGET_TYPE (type) = read_type (pp);
2167       TYPE_LENGTH (type) = TYPE_LENGTH (TYPE_TARGET_TYPE (type)) * n;
2168       break;
2169
2170     default:
2171       error ("Invalid symbol data: unrecognized type-code `%c' at symtab pos %d.",
2172              (*pp)[-1], symnum);
2173     }
2174
2175   if (type == 0)
2176     abort ();
2177
2178 #if 0
2179   /* If this is an overriding temporary alteration for a header file's
2180      contents, and this type number is unknown in the global definition,
2181      put this type into the global definition at this type number.  */
2182   if (header_file_prev_index >= 0)
2183     {
2184       register struct type **tp
2185         = explicit_lookup_type (header_file_prev_index, typenums[1]);
2186       if (*tp == 0)
2187         *tp = type;
2188     }
2189 #endif
2190   return type;
2191 }
2192 \f
2193 /* This page contains subroutines of read_type.  */
2194
2195 /* Read the description of a structure (or union type)
2196    and return an object describing the type.  */
2197
2198 static struct type *
2199 read_struct_type (pp, type)
2200      char **pp;
2201      register struct type *type;
2202 {
2203   struct nextfield
2204     {
2205       struct nextfield *next;
2206       struct field field;
2207     };
2208
2209   register struct nextfield *list = 0;
2210   struct nextfield *new;
2211   int totalsize;
2212   char *name;
2213   register char *p;
2214   int nfields = 0;
2215   register int n;
2216
2217   TYPE_CODE (type) = TYPE_CODE_STRUCT;
2218
2219   /* First comes the total size in bytes.  */
2220
2221   TYPE_LENGTH (type) = read_number (pp, 0);
2222
2223   /* Now come the fields, as NAME:TYPENUM,BITPOS,BITSIZE; for each one.
2224      At the end, we see a semicolon instead of a field.  */
2225
2226   while (**pp != ';')
2227     {
2228       /* Check for and handle cretinous dbx symbol name continuation!  */
2229       if (**pp == '\\')
2230         *pp = next_symbol_text ();
2231
2232       /* Get space to record the next field's data.  */
2233       new = (struct nextfield *) alloca (sizeof (struct nextfield));
2234       new->next = list;
2235       list = new;
2236
2237       /* Read the data.  */
2238       p = *pp;
2239       while (*p != ':') p++;
2240       list->field.name = obsavestring (*pp, p - *pp);
2241       *pp = p + 1;
2242       list->field.type = read_type (pp);
2243       if (**pp != ',')
2244         error ("Invalid symbol data: bad structure-type format at symtab pos %d.",
2245                symnum);
2246       (*pp)++;                  /* Skip the comma.  */
2247       list->field.bitpos = read_number (pp, ',');
2248       list->field.bitsize = read_number (pp, ';');
2249       /* Detect an unpacked field and mark it as such.
2250          dbx gives a bit size for all fields.
2251          Note that forward refs cannot be packed,
2252          and treat enums as if they had the width of ints.  */
2253       if (TYPE_CODE (list->field.type) != TYPE_CODE_INT
2254           && TYPE_CODE (list->field.type) != TYPE_CODE_ENUM)
2255         list->field.bitsize = 0;
2256       if ((list->field.bitsize == 8 * TYPE_LENGTH (list->field.type)
2257            || (TYPE_CODE (list->field.type) == TYPE_CODE_ENUM
2258                && list->field.bitsize == 8 * TYPE_LENGTH (builtin_type_int)))
2259           &&
2260           list->field.bitpos % 8 == 0)
2261         list->field.bitsize = 0;
2262       nfields++;
2263     }
2264
2265   (*pp)++;                      /* Skip the terminating ';'.  */
2266
2267   /* Now create the vector of fields, and record how big it is.  */
2268
2269   TYPE_NFIELDS (type) = nfields;
2270   TYPE_FIELDS (type) = (struct field *) obstack_alloc (symbol_obstack,
2271                                                        sizeof (struct field) * nfields);
2272
2273   /* Copy the saved-up fields into the field vector.  */
2274
2275   for (n = nfields; list; list = list->next)
2276     TYPE_FIELD (type, --n) = list->field;
2277
2278   return type;
2279 }
2280
2281 /* Read a definition of an enumeration type,
2282    and create and return a suitable type object.
2283    Also defines the symbols that represent the values of the type.  */
2284
2285 static struct type *
2286 read_enum_type (pp, type)
2287      register char **pp;
2288      register struct type *type;
2289 {
2290   register char *p;
2291   char *name;
2292   register long n;
2293   register struct symbol *sym;
2294   int nsyms = 0;
2295   struct pending **symlist;
2296   struct pending *osyms, *syms;
2297   int o_nsyms;
2298
2299   if (within_function)
2300     symlist = &local_symbols;
2301   else
2302     symlist = &file_symbols;
2303   osyms = *symlist;
2304   o_nsyms = osyms ? osyms->nsyms : 0;
2305
2306   /* Read the value-names and their values.
2307      The input syntax is NAME:VALUE,NAME:VALUE, and so on.
2308      A semicolon instead of a NAME means the end.  */
2309   while (**pp && **pp != ';')
2310     {
2311       /* Check for and handle cretinous dbx symbol name continuation!  */
2312       if (**pp == '\\')
2313         *pp = next_symbol_text ();
2314
2315       p = *pp;
2316       while (*p != ':') p++;
2317       name = obsavestring (*pp, p - *pp);
2318       *pp = p + 1;
2319       n = read_number (pp, ',');
2320       
2321       sym = (struct symbol *) obstack_alloc (symbol_obstack, sizeof (struct symbol));
2322       bzero (sym, sizeof (struct symbol));
2323       SYMBOL_NAME (sym) = name;
2324       SYMBOL_CLASS (sym) = LOC_CONST;
2325       SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2326       SYMBOL_VALUE (sym) = n;
2327       add_symbol_to_list (sym, symlist);
2328       nsyms++;
2329     }
2330
2331   (*pp)++;                      /* Skip the semicolon.  */
2332
2333   /* Now fill in the fields of the type-structure.  */
2334
2335   TYPE_LENGTH (type) = sizeof (int);
2336   TYPE_CODE (type) = TYPE_CODE_ENUM;
2337   TYPE_NFIELDS (type) = nsyms;
2338   TYPE_FIELDS (type) = (struct field *) obstack_alloc (symbol_obstack, sizeof (struct field) * nsyms);
2339
2340   /* Find the symbols for the values and put them into the type.
2341      The symbols can be found in the symlist that we put them on
2342      to cause them to be defined.  osyms contains the old value
2343      of that symlist; everything up to there was defined by us.  */
2344
2345   for (syms = *symlist, n = nsyms; syms; syms = syms->next)
2346     {
2347       int j = 0;
2348       if (syms == osyms)
2349         j = o_nsyms;
2350       for (; j < syms->nsyms; j++)
2351         {
2352           struct symbol *sym = syms->symbol[j];
2353           SYMBOL_TYPE (sym) = type;
2354           TYPE_FIELD_NAME (type, --n) = SYMBOL_NAME (sym);
2355           TYPE_FIELD_VALUE (type, n) = SYMBOL_VALUE (sym);
2356           TYPE_FIELD_BITPOS (type, n) = 0;
2357           TYPE_FIELD_BITSIZE (type, n) = 0;
2358         }
2359       if (syms == osyms)
2360         break;
2361     }
2362
2363   return type;
2364 }
2365   
2366 static struct type *
2367 read_range_type (pp, typenums)
2368      char **pp;
2369      int typenums[2];
2370 {
2371   char *errp = *pp;
2372   int rangenums[2];
2373   int n1, n2, n3;
2374
2375   /* First comes a type we are a subrange of.
2376      In practice it is usually 0, 1 or the type being defined.  */
2377   read_type_number (pp, rangenums);
2378   n1 = rangenums[1];
2379
2380   /* A semicolon should now follow; skip it.  */
2381   if (**pp == ';')
2382     (*pp)++;
2383
2384   /* The remaining two operands are usually lower and upper bounds
2385      of the range.  But in some special cases they mean something else.  */
2386   n2 = read_number (pp, ';');
2387   n3 = read_number (pp, ';');
2388
2389   /* A type defined as a subrange of itself, with bounds both 0, is void.  */
2390   if (rangenums[0] == typenums[0] && rangenums[1] == typenums[1]
2391       && n2 == 0 && n3 == 0)
2392     return builtin_type_void;
2393
2394   /* If n3 is zero and n2 is not, we want a floating type,
2395      and n2 is the width in bytes.
2396
2397      Fortran programs appear to use this for complex types also,
2398      and they give no way to distinguish between double and single-complex!
2399      We don't have complex types, so we would lose on all fortran files!
2400      So return type `double' for all of those.  It won't work right
2401      for the complex values, but at least it makes the file loadable.  */
2402
2403   if (n3 == 0 && n2 > 0)
2404     {
2405       if (n2 == sizeof (float))
2406         return builtin_type_float;
2407       return builtin_type_double;
2408     }
2409
2410   /* If the upper bound is -1, it must really be an unsigned int.  */
2411
2412   else if (n2 == 0 && n3 == -1)
2413     {
2414       if (sizeof (int) == sizeof (long))
2415         return builtin_type_unsigned_int;
2416       else
2417         return builtin_type_unsigned_long;
2418     }
2419
2420   /* Detect unsigned subranges of int.  Int is normally 1.
2421      Note that `char' is usually given bounds of 0 to 127,
2422      and would therefore appear unsigned; but it is described
2423      as a subrange of itself, so we reject it here.  */
2424
2425   else if (n2 == 0 && n1 == 1)
2426     {
2427       /* an unsigned type */
2428       if (n3 == (1 << (8 * sizeof (int))) - 1)
2429         return builtin_type_unsigned_int;
2430       if (n3 == (1 << (8 * sizeof (short))) - 1)
2431         return builtin_type_unsigned_short;
2432       if (n3 == (1 << (8 * sizeof (char))) - 1)
2433         return builtin_type_unsigned_char;
2434     }
2435   else
2436     {
2437       /* a signed type */
2438       if (n3 == (1 << (8 * sizeof (int) - 1)) - 1)
2439         return builtin_type_int;
2440       if (n3 == (1 << (8 * sizeof (long) - 1)) - 1)
2441          return builtin_type_long;
2442       if (n3 == (1 << (8 * sizeof (short) - 1)) - 1)
2443         return builtin_type_short;
2444       if (n3 == (1 << (8 * sizeof (char) - 1)) - 1)
2445         return builtin_type_char;
2446     }
2447   error ("Invalid symbol data: range type spec %s at symtab pos %d.",
2448          errp - 1, symnum);
2449 }
2450
2451 /* Read a number from the string pointed to by *PP.
2452    The value of *PP is advanced over the number.
2453    If END is nonzero, the character that ends the
2454    number must match END, or an error happens;
2455    and that character is skipped if it does match.
2456    If END is zero, *PP is left pointing to that character.  */
2457
2458 static long
2459 read_number (pp, end)
2460      char **pp;
2461      int end;
2462 {
2463   register char *p = *pp;
2464   register long n = 0;
2465   register int c;
2466   int sign = 1;
2467
2468   /* Handle an optional leading minus sign.  */
2469
2470   if (*p == '-')
2471     {
2472       sign = -1;
2473       p++;
2474     }
2475
2476   /* Read the digits, as far as they go.  */
2477
2478   while ((c = *p++) >= '0' && c <= '9')
2479     {
2480       n *= 10;
2481       n += c - '0';
2482     }
2483   if (end)
2484     {
2485       if (c != end)
2486         error ("Invalid symbol data: invalid character \\%03o at symbol pos %d.", c, symnum);
2487     }
2488   else
2489     --p;
2490
2491   *pp = p;
2492   return n * sign;
2493 }
2494
2495 static
2496 initialize ()
2497 {
2498   symfile = 0;
2499
2500   add_com ("symbol-file", class_files, symbol_file_command,
2501            "Load symbol table (in dbx format) from executable file FILE.");
2502 }
2503
2504 END_FILE
2505
2506 #endif /* READ_DBX_FORMAT */
This page took 0.156633 seconds and 4 git commands to generate.