gdb-2.8
[deliverable/binutils-gdb.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.134193 seconds and 4 git commands to generate.