* coffread.c: Re-work a lot of the coff-specific stuff to use stuff
[platform/upstream/binutils.git] / gdb / coffread.c
1 /* Read coff symbol tables and convert to internal format, for GDB.
2    Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu).
3    Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993
4    Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
21
22 #include "defs.h"
23 #include "symtab.h"
24 #include "gdbtypes.h"
25 #include "breakpoint.h"
26 #include "bfd.h"
27 #include "symfile.h"
28 #include "objfiles.h"
29 #include "buildsym.h"
30 #include "complaints.h"
31 #include <obstack.h>
32
33 #include <string.h>
34
35 #include "libbfd.h"             /* FIXME secret internal data from BFD */
36 #include "coff/internal.h"      /* Internal format of COFF symbols in BFD */
37 #include "libcoff.h"            /* FIXME secret internal data from BFD */
38
39 /* Translate an external name string into a user-visible name.  */
40 #define EXTERNAL_NAME(string, abfd) \
41         (string[0] == bfd_get_symbol_leading_char(abfd)? string+1: string)
42
43 /* To be an sdb debug type, type must have at least a basic or primary
44    derived type.  Using this rather than checking against T_NULL is
45    said to prevent core dumps if we try to operate on Michael Bloom
46    dbx-in-coff file.  */
47
48 #define SDB_TYPE(type) (BTYPE(type) | (type & N_TMASK))
49
50 /*
51  * Convert from an sdb register number to an internal gdb register number.
52  * This should be defined in tm.h, if REGISTER_NAMES is not set up
53  * to map one to one onto the sdb register numbers.
54  */
55 #ifndef SDB_REG_TO_REGNUM
56 # define SDB_REG_TO_REGNUM(value)     (value)
57 #endif
58
59 /* Core address of start and end of text of current source file.
60    This comes from a ".text" symbol where x_nlinno > 0.  */
61
62 static CORE_ADDR cur_src_start_addr;
63 static CORE_ADDR cur_src_end_addr;
64
65 /* Core address of the end of the first object file.  */
66 static CORE_ADDR first_object_file_end;
67
68 /* The addresses of the symbol table stream and number of symbols
69    of the object file we are reading (as copied into core).  */
70
71 static FILE *nlist_stream_global;
72 static int nlist_nsyms_global;
73
74 /* Vector of line number information.  */
75
76 static struct linetable *line_vector;
77
78 /* Index of next entry to go in line_vector_index.  */
79
80 static int line_vector_index;
81
82 /* Last line number recorded in the line vector.  */
83
84 static int prev_line_number;
85
86 /* Number of elements allocated for line_vector currently.  */
87
88 static int line_vector_length;
89
90 /* Pointers to scratch storage, used for reading raw symbols and auxents.  */
91
92 static char *temp_sym;
93 static char *temp_aux;
94
95 /* Local variables that hold the shift and mask values for the
96    COFF file that we are currently reading.  These come back to us
97    from BFD, and are referenced by their macro names, as well as
98    internally to the BTYPE, ISPTR, ISFCN, ISARY, ISTAG, and DECREF
99    macros from ../internalcoff.h .  */
100
101 static unsigned local_n_btmask;
102 static unsigned local_n_btshft;
103 static unsigned local_n_tmask;
104 static unsigned local_n_tshift;
105
106 #define N_BTMASK        local_n_btmask
107 #define N_BTSHFT        local_n_btshft
108 #define N_TMASK         local_n_tmask
109 #define N_TSHIFT        local_n_tshift
110  
111 /* Local variables that hold the sizes in the file of various COFF structures.
112    (We only need to know this to read them from the file -- BFD will then
113    translate the data in them, into `internal_xxx' structs in the right
114    byte order, alignment, etc.)  */
115
116 static unsigned local_linesz;
117 static unsigned local_symesz;
118 static unsigned local_auxesz;
119
120
121 /* Chain of typedefs of pointers to empty struct/union types.
122    They are chained thru the SYMBOL_VALUE_CHAIN.  */
123
124 static struct symbol *opaque_type_chain[HASHSIZE];
125
126 #if 0
127 /* The type of the function we are currently reading in.  This is
128    used by define_symbol to record the type of arguments to a function. */
129
130 struct type *in_function_type;
131 #endif
132
133 struct pending_block *pending_blocks;
134
135 /* Complaints about various problems in the file being read  */
136
137 struct complaint ef_complaint = 
138   {"Unmatched .ef symbol(s) ignored starting at symnum %d", 0, 0};
139
140 struct complaint bf_no_aux_complaint =
141   {"`.bf' symbol %d has no aux entry", 0, 0};
142
143 struct complaint ef_no_aux_complaint =
144   {"`.ef' symbol %d has no aux entry", 0, 0};
145
146 struct complaint lineno_complaint =
147   {"Line number pointer %d lower than start of line numbers", 0, 0};
148
149 struct complaint unexpected_type_complaint =
150   {"Unexpected type for symbol %s", 0, 0};
151
152 struct complaint bad_sclass_complaint =
153   {"Bad n_sclass for symbol %s", 0, 0};
154
155 struct complaint misordered_blocks_complaint =
156   {"Blocks out of order at address %x", 0, 0};
157
158 struct complaint tagndx_bad_complaint =
159   {"Symbol table entry for %s has bad tagndx value", 0, 0};
160
161 struct complaint eb_complaint = 
162   {"Mismatched .eb symbol ignored starting at symnum %d", 0, 0};
163
164 /* Simplified internal version of coff symbol table information */
165
166 struct coff_symbol {
167   char *c_name;
168   int c_symnum;         /* symbol number of this entry */
169   int c_naux;           /* 0 if syment only, 1 if syment + auxent, etc */
170   long c_value;
171   int c_sclass;
172   int c_secnum;
173   unsigned int c_type;
174 };
175
176 static struct type *
177 coff_read_struct_type PARAMS ((int, int, int));
178
179 static struct type *
180 decode_base_type PARAMS ((struct coff_symbol *, unsigned int,
181                           union internal_auxent *));
182
183 static struct type *
184 decode_type PARAMS ((struct coff_symbol *, unsigned int,
185                      union internal_auxent *));
186
187 static struct type *
188 decode_function_type PARAMS ((struct coff_symbol *, unsigned int,
189                               union internal_auxent *));
190
191 static struct type *
192 coff_read_enum_type PARAMS ((int, int, int));
193
194 static struct symbol *
195 process_coff_symbol PARAMS ((struct coff_symbol *, union internal_auxent *,
196                              struct objfile *));
197
198 static void
199 patch_opaque_types PARAMS ((struct symtab *));
200
201 static void
202 patch_type PARAMS ((struct type *, struct type *));
203
204 static void
205 enter_linenos PARAMS ((long, int, int));
206
207 static void
208 free_linetab PARAMS ((void));
209
210 static int
211 init_lineno PARAMS ((int, long, int));
212
213 static char *
214 getfilename PARAMS ((union internal_auxent *));
215
216 static char *
217 getsymname PARAMS ((struct internal_syment *));
218
219 static void
220 free_stringtab PARAMS ((void));
221
222 static int
223 init_stringtab PARAMS ((int, long));
224
225 static void
226 read_one_sym PARAMS ((struct coff_symbol *, struct internal_syment *,
227                       union internal_auxent *));
228
229 static void
230 read_coff_symtab PARAMS ((long, int, struct objfile *));
231
232 static void
233 find_linenos PARAMS ((bfd *, sec_ptr, PTR));
234
235 static void
236 coff_symfile_init PARAMS ((struct objfile *));
237
238 static void
239 coff_new_init PARAMS ((struct objfile *));
240
241 static void
242 coff_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
243
244 static void
245 coff_symfile_finish PARAMS ((struct objfile *));
246
247 static void
248 record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type));
249
250 static void
251 coff_end_symtab PARAMS ((struct objfile *));
252
253 static void
254 complete_symtab PARAMS ((char *, CORE_ADDR, unsigned int));
255
256 static void
257 coff_start_symtab PARAMS ((void));
258
259 static void
260 coff_record_line PARAMS ((int, CORE_ADDR));
261
262 static struct type *
263 coff_alloc_type PARAMS ((int));
264
265 static struct type **
266 coff_lookup_type PARAMS ((int));
267
268 \f
269 /* Look up a coff type-number index.  Return the address of the slot
270    where the type for that index is stored.
271    The type-number is in INDEX. 
272
273    This can be used for finding the type associated with that index
274    or for associating a new type with the index.  */
275
276 static struct type **
277 coff_lookup_type (index)
278      register int index;
279 {
280   if (index >= type_vector_length)
281     {
282       int old_vector_length = type_vector_length;
283
284       type_vector_length *= 2;
285       if (index /* is still */ >= type_vector_length) {
286         type_vector_length = index * 2;
287       }
288       type_vector = (struct type **)
289         xrealloc ((char *) type_vector,
290                   type_vector_length * sizeof (struct type *));
291       memset (&type_vector[old_vector_length], 0,
292              (type_vector_length - old_vector_length) * sizeof(struct type *));
293     }
294   return &type_vector[index];
295 }
296
297 /* Make sure there is a type allocated for type number index
298    and return the type object.
299    This can create an empty (zeroed) type object.  */
300
301 static struct type *
302 coff_alloc_type (index)
303      int index;
304 {
305   register struct type **type_addr = coff_lookup_type (index);
306   register struct type *type = *type_addr;
307
308   /* If we are referring to a type not known at all yet,
309      allocate an empty type for it.
310      We will fill it in later if we find out how.  */
311   if (type == NULL)
312     {
313       type = alloc_type (current_objfile);
314       *type_addr = type;
315     }
316   return type;
317 }
318 \f
319 /* Manage the vector of line numbers.  */
320
321 static void
322 coff_record_line (line, pc)
323      int line;
324      CORE_ADDR pc;
325 {
326   struct linetable_entry *e;
327   /* Make sure line vector is big enough.  */
328
329   if (line_vector_index + 2 >= line_vector_length)
330     {
331       line_vector_length *= 2;
332       line_vector = (struct linetable *)
333         xrealloc ((char *) line_vector, sizeof (struct linetable)
334                   + (line_vector_length
335                      * sizeof (struct linetable_entry)));
336     }
337
338   e = line_vector->item + line_vector_index++;
339   e->line = line; e->pc = pc;
340 }
341 \f
342 /* Start a new symtab for a new source file.
343    This is called when a COFF ".file" symbol is seen;
344    it indicates the start of data for one original source file.  */
345
346 static void
347 coff_start_symtab ()
348 {
349   start_symtab (
350                 /* We fill in the filename later.  start_symtab
351                    puts this pointer into last_source file and in
352                    coff_end_symtab we assume we can free() it.
353                    FIXME: leaks memory.  */
354                 savestring ("", 0),
355                 /* We never know the directory name for COFF.  */
356                 NULL,
357                 /* The start address is irrelevant, since we set
358                    last_source_start_addr in coff_end_symtab.  */
359                 0);
360
361   /* Initialize the source file line number information for this file.  */
362
363   if (line_vector)              /* Unlikely, but maybe possible? */
364     free ((PTR)line_vector);
365   line_vector_index = 0;
366   line_vector_length = 1000;
367   prev_line_number = -2;        /* Force first line number to be explicit */
368   line_vector = (struct linetable *)
369     xmalloc (sizeof (struct linetable)
370              + line_vector_length * sizeof (struct linetable_entry));
371 }
372
373 /* Save the vital information from when starting to read a file,
374    for use when closing off the current file.
375    NAME is the file name the symbols came from, START_ADDR is the first
376    text address for the file, and SIZE is the number of bytes of text.  */
377
378 static void
379 complete_symtab (name, start_addr, size)
380     char *name;
381     CORE_ADDR start_addr;
382     unsigned int size;
383 {
384   last_source_file = savestring (name, strlen (name));
385   cur_src_start_addr = start_addr;
386   cur_src_end_addr = start_addr + size;
387
388   if (current_objfile -> ei.entry_point >= cur_src_start_addr &&
389       current_objfile -> ei.entry_point <  cur_src_end_addr)
390     {
391       current_objfile -> ei.entry_file_lowpc = cur_src_start_addr;
392       current_objfile -> ei.entry_file_highpc = cur_src_end_addr;
393     }
394 }
395
396 /* Finish the symbol definitions for one main source file,
397    close off all the lexical contexts for that file
398    (creating struct block's for them), then make the
399    struct symtab for that file and put it in the list of all such. */
400
401 static void
402 coff_end_symtab (objfile)
403      struct objfile *objfile;
404 {
405   struct symtab *symtab;
406
407   last_source_start_addr = cur_src_start_addr;
408
409   /* For COFF, we only have one subfile, so we can just look at
410      subfiles and not worry about there being other elements in the
411      chain.  We fill in various fields now because we didn't know them
412      before (or because doing it now is simply an artifact of how this
413      file used to be written).  */
414   subfiles->line_vector = line_vector;
415   subfiles->name = last_source_file;
416
417   /* sort_pending is needed for amdcoff, at least.
418      sort_linevec is needed for the SCO compiler.  */
419   symtab = end_symtab (cur_src_end_addr, 1, 1, objfile, 0);
420
421   if (symtab != NULL)
422     free_named_symtabs (symtab->filename);
423
424   /* Reinitialize for beginning of new file. */
425   line_vector = 0;
426   line_vector_length = -1;
427   last_source_file = NULL;
428 }
429 \f
430 static void
431 record_minimal_symbol (name, address, type)
432      char *name;
433      CORE_ADDR address;
434      enum minimal_symbol_type type;
435 {
436   /* We don't want TDESC entry points in the minimal symbol table */
437   if (name[0] == '@') return;
438
439   prim_record_minimal_symbol (savestring (name, strlen (name)), address, type);
440 }
441 \f
442 /* coff_symfile_init ()
443    is the coff-specific initialization routine for reading symbols.
444    It is passed a struct objfile which contains, among other things,
445    the BFD for the file whose symbols are being read, and a slot for
446    a pointer to "private data" which we fill with cookies and other
447    treats for coff_symfile_read ().
448
449    We will only be called if this is a COFF or COFF-like file.
450    BFD handles figuring out the format of the file, and code in symtab.c
451    uses BFD's determination to vector to us.
452
453    The ultimate result is a new symtab (or, FIXME, eventually a psymtab).  */
454
455 struct coff_symfile_info {
456   file_ptr min_lineno_offset;           /* Where in file lowest line#s are */
457   file_ptr max_lineno_offset;           /* 1+last byte of line#s in file */
458 };
459
460 static int text_bfd_scnum;
461
462 static void
463 coff_symfile_init (objfile)
464      struct objfile *objfile;
465 {
466   asection      *section;
467   bfd *abfd = objfile->obfd;
468
469   /* Allocate struct to keep track of the symfile */
470   objfile -> sym_private = xmmalloc (objfile -> md,
471                                      sizeof (struct coff_symfile_info));
472
473   init_entry_point_info (objfile);
474
475   /* Save the section number for the text section */
476   section = bfd_get_section_by_name(abfd,".text");
477   if (section)
478     text_bfd_scnum = section->index;
479   else
480     text_bfd_scnum = -1; 
481 }
482
483 /* This function is called for every section; it finds the outer limits
484    of the line table (minimum and maximum file offset) so that the
485    mainline code can read the whole thing for efficiency.  */
486
487 /* ARGSUSED */
488 static void
489 find_linenos (abfd, asect, vpinfo)
490      bfd *abfd;
491      sec_ptr asect;
492      PTR vpinfo;
493 {
494   struct coff_symfile_info *info;
495   int size, count;
496   file_ptr offset, maxoff;
497
498 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
499   count = asect->lineno_count;
500 /* End of warning */
501
502   if (count == 0)
503     return;
504   size = count * local_linesz;
505
506   info = (struct coff_symfile_info *)vpinfo;
507 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
508   offset = asect->line_filepos;
509 /* End of warning */
510
511   if (offset < info->min_lineno_offset || info->min_lineno_offset == 0)
512     info->min_lineno_offset = offset;
513
514   maxoff = offset + size;
515   if (maxoff > info->max_lineno_offset)
516     info->max_lineno_offset = maxoff;
517 }
518
519
520 /* The BFD for this file -- only good while we're actively reading
521    symbols into a psymtab or a symtab.  */
522
523 static bfd *symfile_bfd;
524
525 /* Read a symbol file, after initialization by coff_symfile_init.  */
526 /* FIXME!  Addr and Mainline are not used yet -- this will not work for
527    shared libraries or add_file!  */
528
529 /* ARGSUSED */
530 static void
531 coff_symfile_read (objfile, section_offsets, mainline)
532      struct objfile *objfile;
533      struct section_offsets *section_offsets;
534      int mainline;
535 {
536   struct coff_symfile_info *info;
537   bfd *abfd = objfile->obfd;
538   coff_data_type *cdata = coff_data (abfd);
539   char *name = bfd_get_filename (abfd);
540   int desc;
541   register int val;
542   int num_symbols;
543   int symtab_offset;
544   int stringtab_offset;
545   struct cleanup *back_to;
546
547   info = (struct coff_symfile_info *) objfile -> sym_private;
548   symfile_bfd = abfd;                   /* Kludge for swap routines */
549
550 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
551    desc = fileno ((FILE *)(abfd->iostream));    /* File descriptor */
552    num_symbols = bfd_get_symcount (abfd);       /* How many syms */
553    symtab_offset = cdata->sym_filepos;          /* Symbol table file offset */
554    stringtab_offset = symtab_offset +           /* String table file offset */
555                       num_symbols * cdata->local_symesz;
556
557   /* Set a few file-statics that give us specific information about
558      the particular COFF file format we're reading.  */
559   local_linesz   = cdata->local_linesz;
560   local_n_btmask = cdata->local_n_btmask;
561   local_n_btshft = cdata->local_n_btshft;
562   local_n_tmask  = cdata->local_n_tmask;
563   local_n_tshift = cdata->local_n_tshift;
564   local_linesz   = cdata->local_linesz;
565   local_symesz   = cdata->local_symesz;
566   local_auxesz   = cdata->local_auxesz;
567
568   /* Allocate space for raw symbol and aux entries, based on their
569      space requirements as reported by BFD.  */
570   temp_sym = (char *) xmalloc
571          (cdata->local_symesz + cdata->local_auxesz);
572   temp_aux = temp_sym + cdata->local_symesz;
573   back_to = make_cleanup (free_current_contents, &temp_sym);
574 /* End of warning */
575
576   /* Read the line number table, all at once.  */
577   info->min_lineno_offset = 0;
578   info->max_lineno_offset = 0;
579   bfd_map_over_sections (abfd, find_linenos, (PTR)info);
580
581   make_cleanup (free_linetab, 0);
582   val = init_lineno (desc, info->min_lineno_offset, 
583                      info->max_lineno_offset - info->min_lineno_offset);
584   if (val < 0)
585     error ("\"%s\": error reading line numbers\n", name);
586
587   /* Now read the string table, all at once.  */
588
589   make_cleanup (free_stringtab, 0);
590   val = init_stringtab (desc, stringtab_offset);
591   if (val < 0)
592     error ("\"%s\": can't get string table", name);
593
594   init_minimal_symbol_collection ();
595   make_cleanup (discard_minimal_symbols, 0);
596
597   /* Now that the executable file is positioned at symbol table,
598      process it and define symbols accordingly.  */
599
600   read_coff_symtab ((long)symtab_offset, num_symbols, objfile);
601
602   /* Sort symbols alphabetically within each block.  */
603
604   sort_all_symtab_syms ();
605
606   /* Install any minimal symbols that have been collected as the current
607      minimal symbols for this objfile. */
608
609   install_minimal_symbols (objfile);
610
611   do_cleanups (back_to);
612 }
613
614 static void
615 coff_new_init (ignore)
616      struct objfile *ignore;
617 {
618         /* Nothin' to do */
619 }
620
621 /* Perform any local cleanups required when we are done with a particular
622    objfile.  I.E, we are in the process of discarding all symbol information
623    for an objfile, freeing up all memory held for it, and unlinking the
624    objfile struct from the global list of known objfiles. */
625
626 static void
627 coff_symfile_finish (objfile)
628      struct objfile *objfile;
629 {
630   if (objfile -> sym_private != NULL)
631     {
632       mfree (objfile -> md, objfile -> sym_private);
633     }
634 }
635
636 \f
637 /* Given pointers to a symbol table in coff style exec file,
638    analyze them and create struct symtab's describing the symbols.
639    NSYMS is the number of symbols in the symbol table.
640    We read them one at a time using read_one_sym ().  */
641
642 static void
643 read_coff_symtab (symtab_offset, nsyms, objfile)
644      long symtab_offset;
645      int nsyms;
646      struct objfile *objfile;
647 {
648   FILE *stream; 
649   register struct context_stack *new;
650   struct coff_symbol coff_symbol;
651   register struct coff_symbol *cs = &coff_symbol;
652   static struct internal_syment main_sym;
653   static union internal_auxent main_aux;
654   struct coff_symbol fcn_cs_saved;
655   static struct internal_syment fcn_sym_saved;
656   static union internal_auxent fcn_aux_saved;
657   struct symtab *s;
658   
659   /* A .file is open.  */
660   int in_source_file = 0;
661   int num_object_files = 0;
662   int next_file_symnum = -1;
663
664   /* Name of the current file.  */
665   char *filestring = "";
666   int depth = 0;
667   int fcn_first_line = 0;
668   int fcn_last_line = 0;
669   int fcn_start_addr = 0;
670   long fcn_line_ptr = 0;
671   int val;
672
673   stream = bfd_cache_lookup(objfile->obfd);
674   if (!stream)
675    perror_with_name(objfile->name);
676
677   /* Work around a stdio bug in SunOS4.1.1 (this makes me nervous....
678      it's hard to know I've really worked around it.  The fix should be
679      harmless, anyway).  The symptom of the bug is that the first
680      fread (in read_one_sym), will (in my example) actually get data
681      from file offset 268, when the fseek was to 264 (and ftell shows
682      264).  This causes all hell to break loose.  I was unable to
683      reproduce this on a short test program which operated on the same
684      file, performing (I think) the same sequence of operations.
685
686      It stopped happening when I put in this rewind().
687
688      FIXME: Find out if this has been reported to Sun, whether it has
689      been fixed in a later release, etc.  */
690
691   rewind (stream);
692
693   /* Position to read the symbol table. */
694   val = fseek (stream, (long)symtab_offset, 0);
695   if (val < 0)
696     perror_with_name (objfile->name);
697
698   current_objfile = objfile;
699   nlist_stream_global = stream;
700   nlist_nsyms_global = nsyms;
701   last_source_file = NULL;
702   memset (opaque_type_chain, 0, sizeof opaque_type_chain);
703
704   if (type_vector)                      /* Get rid of previous one */
705     free ((PTR)type_vector);
706   type_vector_length = 160;
707   type_vector = (struct type **)
708                 xmalloc (type_vector_length * sizeof (struct type *));
709   memset (type_vector, 0, type_vector_length * sizeof (struct type *));
710
711   coff_start_symtab ();
712
713   symnum = 0;
714   while (symnum < nsyms)
715     {
716       QUIT;                     /* Make this command interruptable.  */
717       read_one_sym (cs, &main_sym, &main_aux);
718
719 #ifdef SEM
720       temp_sem_val = cs->c_name[0] << 24 | cs->c_name[1] << 16 |
721                      cs->c_name[2] << 8 | cs->c_name[3];
722       if (int_sem_val == temp_sem_val)
723         last_coffsem = (int) strtol (cs->c_name+4, (char **) NULL, 10);
724 #endif
725
726       if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
727         {
728           if (last_source_file)
729             coff_end_symtab (objfile);
730
731           coff_start_symtab ();
732           complete_symtab ("_globals_", 0, first_object_file_end);
733           /* done with all files, everything from here on out is globals */
734         }
735
736       /* Special case for file with type declarations only, no text.  */
737       if (!last_source_file && SDB_TYPE (cs->c_type)
738           && cs->c_secnum == N_DEBUG)
739         complete_symtab (filestring, 0, 0);
740
741       /* Typedefs should not be treated as symbol definitions.  */
742       if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
743         {
744           /* Record all functions -- external and static -- in minsyms. */
745           record_minimal_symbol (cs->c_name, cs->c_value, mst_text);
746
747           fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
748           fcn_start_addr = cs->c_value;
749           fcn_cs_saved = *cs;
750           fcn_sym_saved = main_sym;
751           fcn_aux_saved = main_aux;
752           continue;
753         }
754
755       switch (cs->c_sclass)
756         {
757           case C_EFCN:
758           case C_EXTDEF:
759           case C_ULABEL:
760           case C_USTATIC:
761           case C_LINE:
762           case C_ALIAS:
763           case C_HIDDEN:
764             complain (&bad_sclass_complaint, cs->c_name);
765             break;
766
767           case C_FILE:
768             /*
769              * c_value field contains symnum of next .file entry in table
770              * or symnum of first global after last .file.
771              */
772             next_file_symnum = cs->c_value;
773             filestring = getfilename (&main_aux);
774             /*
775              * Complete symbol table for last object file
776              * containing debugging information.
777              */
778             if (last_source_file)
779               {
780                 coff_end_symtab (objfile);
781                 coff_start_symtab ();
782               }
783             in_source_file = 1;
784             break;
785
786           case C_STAT:
787             if (cs->c_name[0] == '.') {
788                     if (STREQ (cs->c_name, ".text")) {
789                             /* FIXME:  don't wire in ".text" as section name
790                                        or symbol name! */
791                             if (++num_object_files == 1) {
792                                     /* last address of startup file */
793                                     first_object_file_end = cs->c_value +
794                                             main_aux.x_scn.x_scnlen;
795                             }
796                             /* Check for in_source_file deals with case of
797                                a file with debugging symbols
798                                followed by a later file with no symbols.  */
799                             if (in_source_file)
800                               complete_symtab (filestring, cs->c_value,
801                                                main_aux.x_scn.x_scnlen);
802                             in_source_file = 0;
803                     }
804                     /* flush rest of '.' symbols */
805                     break;
806             }
807             else if (!SDB_TYPE (cs->c_type)
808                      && cs->c_name[0] == 'L'
809                      && (strncmp (cs->c_name, "LI%", 3) == 0
810                          || strncmp (cs->c_name, "LF%", 3) == 0
811                          || strncmp (cs->c_name,"LC%",3) == 0
812                          || strncmp (cs->c_name,"LP%",3) == 0
813                          || strncmp (cs->c_name,"LPB%",4) == 0
814                          || strncmp (cs->c_name,"LBB%",4) == 0
815                          || strncmp (cs->c_name,"LBE%",4) == 0
816                          || strncmp (cs->c_name,"LPBX%",5) == 0))
817               /* At least on a 3b1, gcc generates swbeg and string labels
818                  that look like this.  Ignore them.  */
819               break;
820             /* fall in for static symbols that don't start with '.' */
821           case C_EXT:
822             /* Record external symbols in minsyms if we don't have debug
823                info for them.  FIXME, this is probably the wrong thing
824                to do.  Why don't we record them even if we do have
825                debug symbol info?  What really belongs in the minsyms
826                anyway?  Fred!??  */
827             if (!SDB_TYPE (cs->c_type)) {
828                 /* FIXME: This is BOGUS Will Robinson! 
829                 Coff should provide the SEC_CODE flag for executable sections,
830                 then if we could look up sections by section number we
831                 could see if the flags indicate SEC_CODE.  If so, then
832                 record this symbol as a function in the minimal symbol table.
833                 But why are absolute syms recorded as functions, anyway?  */
834                     if (cs->c_secnum <= text_bfd_scnum+1) {/* text or abs */
835                             record_minimal_symbol (cs->c_name, cs->c_value,
836                                                    mst_text);
837                             break;
838                     } else {
839                             record_minimal_symbol (cs->c_name, cs->c_value,
840                                                    mst_data);
841                             break;
842                     }
843             }
844             process_coff_symbol (cs, &main_aux, objfile);
845             break;
846
847           case C_FCN:
848             if (STREQ (cs->c_name, ".bf"))
849               {
850                 within_function = 1;
851
852                 /* value contains address of first non-init type code */
853                 /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
854                             contains line number of '{' } */
855                 if (cs->c_naux != 1)
856                   complain (&bf_no_aux_complaint, cs->c_symnum);
857                 fcn_first_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
858
859                 /* Might want to check that locals are 0 and
860                    context_stack_depth is zero, and complain if not.  */
861
862                 depth = 0;
863                 new = push_context (depth, fcn_start_addr);
864                 fcn_cs_saved.c_name = getsymname (&fcn_sym_saved);
865                 new->name = process_coff_symbol (&fcn_cs_saved,
866                                                  &fcn_aux_saved, objfile);
867               }
868             else if (STREQ (cs->c_name, ".ef"))
869               {
870                 /* the value of .ef is the address of epilogue code;
871                    not useful for gdb.  */
872                 /* { main_aux.x_sym.x_misc.x_lnsz.x_lnno
873                             contains number of lines to '}' */
874                 new = pop_context ();
875                 /* Stack must be empty now.  */
876                 if (context_stack_depth > 0 || new == NULL)
877                   {
878                     complain (&ef_complaint, cs->c_symnum);
879                     within_function = 0;
880                     break;
881                   }
882                 if (cs->c_naux != 1)
883                   {
884                     complain (&ef_no_aux_complaint, cs->c_symnum);
885                     fcn_last_line = 0x7FFFFFFF;
886                   }
887                 else
888                   {
889                     fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
890                   }
891                 enter_linenos (fcn_line_ptr, fcn_first_line, fcn_last_line);
892
893                 finish_block (new->name, &local_symbols, new->old_blocks,
894                               new->start_addr,
895 #if defined (FUNCTION_EPILOGUE_SIZE)
896                               /* This macro should be defined only on
897                                  machines where the
898                                  fcn_aux_saved.x_sym.x_misc.x_fsize
899                                  field is always zero.
900                                  So use the .bf record information that
901                                  points to the epilogue and add the size
902                                  of the epilogue.  */
903                               cs->c_value + FUNCTION_EPILOGUE_SIZE,
904 #else
905                               fcn_cs_saved.c_value +
906                                   fcn_aux_saved.x_sym.x_misc.x_fsize,
907 #endif
908                               objfile
909                               );
910                 within_function = 0;
911               }
912             break;
913
914           case C_BLOCK:
915             if (STREQ (cs->c_name, ".bb"))
916               {
917                 push_context (++depth, cs->c_value);
918               }
919             else if (STREQ (cs->c_name, ".eb"))
920               {
921                 new = pop_context ();
922                 if (depth-- != new->depth)
923                   {
924                     complain (&eb_complaint, (char *)symnum);
925                     break;
926                   }
927                 if (local_symbols && context_stack_depth > 0)
928                   {
929                     /* Make a block for the local symbols within.  */
930                     finish_block (0, &local_symbols, new->old_blocks,
931                                   new->start_addr, cs->c_value, objfile);
932                   }
933                 /* Now pop locals of block just finished.  */
934                 local_symbols = new->locals;
935               }
936             break;
937
938           default:
939             process_coff_symbol (cs, &main_aux, objfile);
940             break;
941         }
942     }
943
944   if (last_source_file)
945     coff_end_symtab (objfile);
946
947   /* Patch up any opaque types (references to types that are not defined
948      in the file where they are referenced, e.g. "struct foo *bar").  */
949   ALL_OBJFILE_SYMTABS (objfile, s)
950     patch_opaque_types (s);
951
952   current_objfile = NULL;
953 }
954 \f
955 /* Routines for reading headers and symbols from executable.  */
956
957 #ifdef FIXME
958 /* Move these XXXMAGIC symbol defns into BFD!  */
959
960 /* Read COFF file header, check magic number,
961    and return number of symbols. */
962 read_file_hdr (chan, file_hdr)
963     int chan;
964     FILHDR *file_hdr;
965 {
966   lseek (chan, 0L, 0);
967   if (myread (chan, (char *)file_hdr, FILHSZ) < 0)
968     return -1;
969
970   switch (file_hdr->f_magic)
971     {
972 #ifdef MC68MAGIC
973     case MC68MAGIC:
974 #endif
975 #ifdef NS32GMAGIC
976       case NS32GMAGIC:
977       case NS32SMAGIC:
978 #endif
979 #ifdef I386MAGIC
980     case I386MAGIC:
981 #endif
982 #ifdef CLIPPERMAGIC
983     case CLIPPERMAGIC:
984 #endif
985 #if defined (MC68KWRMAGIC) \
986   && (!defined (MC68MAGIC) || MC68KWRMAGIC != MC68MAGIC)
987     case MC68KWRMAGIC:
988 #endif
989 #ifdef MC68KROMAGIC
990     case MC68KROMAGIC:
991     case MC68KPGMAGIC:
992 #endif
993 #ifdef MC88DGMAGIC
994     case MC88DGMAGIC:
995 #endif      
996 #ifdef MC88MAGIC
997     case MC88MAGIC:
998 #endif      
999 #ifdef I960ROMAGIC
1000     case I960ROMAGIC:           /* Intel 960 */
1001 #endif
1002 #ifdef I960RWMAGIC
1003     case I960RWMAGIC:           /* Intel 960 */
1004 #endif
1005         return file_hdr->f_nsyms;
1006
1007       default:
1008 #ifdef BADMAG
1009         if (BADMAG(file_hdr))
1010           return -1;
1011         else
1012           return file_hdr->f_nsyms;
1013 #else
1014         return -1;
1015 #endif
1016     }
1017 }
1018 #endif
1019
1020 /* Read the next symbol, swap it, and return it in both internal_syment
1021    form, and coff_symbol form.  Also return its first auxent, if any,
1022    in internal_auxent form, and skip any other auxents.  */
1023
1024 static void
1025 read_one_sym (cs, sym, aux)
1026     register struct coff_symbol *cs;
1027     register struct internal_syment *sym;
1028     register union internal_auxent *aux;
1029 {
1030   int i;
1031
1032   cs->c_symnum = symnum;
1033   fread (temp_sym, local_symesz, 1, nlist_stream_global);
1034   bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *)sym);
1035   cs->c_naux = sym->n_numaux & 0xff;
1036   if (cs->c_naux >= 1)
1037     {
1038     fread (temp_aux, local_auxesz, 1, nlist_stream_global);
1039     bfd_coff_swap_aux_in (symfile_bfd, temp_aux, sym->n_type, sym->n_sclass,
1040                           (char *)aux);
1041     /* If more than one aux entry, read past it (only the first aux
1042        is important). */
1043     for (i = 1; i < cs->c_naux; i++)
1044       fread (temp_aux, local_auxesz, 1, nlist_stream_global);
1045     }
1046   cs->c_name = getsymname (sym);
1047   cs->c_value = sym->n_value;
1048   cs->c_sclass = (sym->n_sclass & 0xff);
1049   cs->c_secnum = sym->n_scnum;
1050   cs->c_type = (unsigned) sym->n_type;
1051   if (!SDB_TYPE (cs->c_type))
1052     cs->c_type = 0;
1053
1054   symnum += 1 + cs->c_naux;
1055 }
1056 \f
1057 /* Support for string table handling */
1058
1059 static char *stringtab = NULL;
1060
1061 static int
1062 init_stringtab (chan, offset)
1063     int chan;
1064     long offset;
1065 {
1066   long length;
1067   int val;
1068   unsigned char lengthbuf[4];
1069
1070   free_stringtab ();
1071
1072   if (lseek (chan, offset, 0) < 0)
1073     return -1;
1074
1075   val = myread (chan, (char *)lengthbuf, sizeof lengthbuf);
1076   length = bfd_h_get_32 (symfile_bfd, lengthbuf);
1077
1078   /* If no string table is needed, then the file may end immediately
1079      after the symbols.  Just return with `stringtab' set to null. */
1080   if (val != sizeof lengthbuf || length < sizeof lengthbuf)
1081     return 0;
1082
1083   stringtab = (char *) xmalloc (length);
1084   memcpy (stringtab, &length, sizeof length);
1085   if (length == sizeof length)          /* Empty table -- just the count */
1086     return 0;
1087
1088   val = myread (chan, stringtab + sizeof lengthbuf, length - sizeof lengthbuf);
1089   if (val != length - sizeof lengthbuf || stringtab[length - 1] != '\0')
1090     return -1;
1091
1092   return 0;
1093 }
1094
1095 static void
1096 free_stringtab ()
1097 {
1098   if (stringtab)
1099     free (stringtab);
1100   stringtab = NULL;
1101 }
1102
1103 static char *
1104 getsymname (symbol_entry)
1105     struct internal_syment *symbol_entry;
1106 {
1107   static char buffer[SYMNMLEN+1];
1108   char *result;
1109
1110   if (symbol_entry->_n._n_n._n_zeroes == 0)
1111     {
1112       result = stringtab + symbol_entry->_n._n_n._n_offset;
1113     }
1114   else
1115     {
1116       strncpy (buffer, symbol_entry->_n._n_name, SYMNMLEN);
1117       buffer[SYMNMLEN] = '\0';
1118       result = buffer;
1119     }
1120   return result;
1121 }
1122
1123 /* Extract the file name from the aux entry of a C_FILE symbol.  Return
1124    only the last component of the name.  Result is in static storage and
1125    is only good for temporary use.  */
1126
1127 static char *
1128 getfilename (aux_entry)
1129     union internal_auxent *aux_entry;
1130 {
1131   static char buffer[BUFSIZ];
1132   register char *temp;
1133   char *result;
1134
1135   if (aux_entry->x_file.x_n.x_zeroes == 0)
1136     strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_offset);
1137   else
1138     {
1139       strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
1140       buffer[FILNMLEN] = '\0';
1141     }
1142   result = buffer;
1143   if ((temp = strrchr (result, '/')) != NULL)
1144     result = temp + 1;
1145   return (result);
1146 }
1147 \f
1148 /* Support for line number handling */
1149 static char *linetab = NULL;
1150 static long linetab_offset;
1151 static unsigned long linetab_size;
1152
1153 /* Read in all the line numbers for fast lookups later.  Leave them in
1154    external (unswapped) format in memory; we'll swap them as we enter
1155    them into GDB's data structures.  */
1156  
1157 static int
1158 init_lineno (chan, offset, size)
1159     int chan;
1160     long offset;
1161     int size;
1162 {
1163   int val;
1164
1165   linetab_offset = offset;
1166   linetab_size = size;
1167
1168   free_linetab();
1169
1170   if (size == 0)
1171     return 0;
1172
1173   if (lseek (chan, offset, 0) < 0)
1174     return -1;
1175   
1176   /* Allocate the desired table, plus a sentinel */
1177   linetab = (char *) xmalloc (size + local_linesz);
1178
1179   val = myread (chan, linetab, size);
1180   if (val != size)
1181     return -1;
1182
1183   /* Terminate it with an all-zero sentinel record */
1184   memset (linetab + size, 0, local_linesz);
1185
1186   return 0;
1187 }
1188
1189 static void
1190 free_linetab ()
1191 {
1192   if (linetab)
1193     free (linetab);
1194   linetab = NULL;
1195 }
1196
1197 #if !defined (L_LNNO32)
1198 #define L_LNNO32(lp) ((lp)->l_lnno)
1199 #endif
1200
1201 static void
1202 enter_linenos (file_offset, first_line, last_line)
1203     long file_offset;
1204     register int first_line;
1205     register int last_line;
1206 {
1207   register char *rawptr;
1208   struct internal_lineno lptr;
1209
1210   if (file_offset < linetab_offset)
1211     {
1212       complain (&lineno_complaint, file_offset);
1213       if (file_offset > linetab_size)   /* Too big to be an offset? */
1214         return;
1215       file_offset += linetab_offset;  /* Try reading at that linetab offset */
1216     }
1217   
1218   rawptr = &linetab[file_offset - linetab_offset];
1219
1220   /* skip first line entry for each function */
1221   rawptr += local_linesz;
1222   /* line numbers start at one for the first line of the function */
1223   first_line--;
1224
1225   for (;;) {
1226     bfd_coff_swap_lineno_in (symfile_bfd, rawptr, &lptr);
1227     rawptr += local_linesz;
1228     /* The next function, or the sentinel, will have L_LNNO32 zero; we exit. */
1229     if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
1230       coff_record_line (first_line + L_LNNO32 (&lptr), lptr.l_addr.l_paddr);
1231     else
1232       break;
1233   } 
1234 }
1235 \f
1236 static void
1237 patch_type (type, real_type)
1238     struct type *type;
1239     struct type *real_type;
1240 {
1241   register struct type *target = TYPE_TARGET_TYPE (type);
1242   register struct type *real_target = TYPE_TARGET_TYPE (real_type);
1243   int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field);
1244
1245   TYPE_LENGTH (target) = TYPE_LENGTH (real_target);
1246   TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target);
1247   TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target, field_size);
1248
1249   memcpy (TYPE_FIELDS (target), TYPE_FIELDS (real_target), field_size);
1250
1251   if (TYPE_NAME (real_target))
1252     {
1253       if (TYPE_NAME (target))
1254         free (TYPE_NAME (target));
1255       TYPE_NAME (target) = concat (TYPE_NAME (real_target), NULL);
1256     }
1257 }
1258
1259 /* Patch up all appropriate typedef symbols in the opaque_type_chains
1260    so that they can be used to print out opaque data structures properly.  */
1261
1262 static void
1263 patch_opaque_types (s)
1264      struct symtab *s;
1265 {
1266   register struct block *b;
1267   register int i;
1268   register struct symbol *real_sym;
1269   
1270   /* Go through the per-file symbols only */
1271   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
1272   for (i = BLOCK_NSYMS (b) - 1; i >= 0; i--)
1273     {
1274       /* Find completed typedefs to use to fix opaque ones.
1275          Remove syms from the chain when their types are stored,
1276          but search the whole chain, as there may be several syms
1277          from different files with the same name.  */
1278       real_sym = BLOCK_SYM (b, i);
1279       if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF &&
1280           SYMBOL_NAMESPACE (real_sym) == VAR_NAMESPACE &&
1281           TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR &&
1282           TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
1283         {
1284           register char *name = SYMBOL_NAME (real_sym);
1285           register int hash = hashname (name);
1286           register struct symbol *sym, *prev;
1287           
1288           prev = 0;
1289           for (sym = opaque_type_chain[hash]; sym;)
1290             {
1291               if (name[0] == SYMBOL_NAME (sym)[0] &&
1292                   STREQ (name + 1, SYMBOL_NAME (sym) + 1))
1293                 {
1294                   if (prev)
1295                     {
1296                       SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
1297                     }
1298                   else
1299                     {
1300                       opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
1301                     }
1302                   
1303                   patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
1304                   
1305                   if (prev)
1306                     {
1307                       sym = SYMBOL_VALUE_CHAIN (prev);
1308                     }
1309                   else
1310                     {
1311                       sym = opaque_type_chain[hash];
1312                     }
1313                 }
1314               else
1315                 {
1316                   prev = sym;
1317                   sym = SYMBOL_VALUE_CHAIN (sym);
1318                 }
1319             }
1320         }
1321     }
1322 }
1323 \f
1324 static struct symbol *
1325 process_coff_symbol (cs, aux, objfile)
1326      register struct coff_symbol *cs;
1327      register union internal_auxent *aux;
1328      struct objfile *objfile;
1329 {
1330   register struct symbol *sym
1331     = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
1332                                        sizeof (struct symbol));
1333   char *name;
1334   struct type *temptype;
1335
1336   memset (sym, 0, sizeof (struct symbol));
1337   name = cs->c_name;
1338   name = EXTERNAL_NAME (name, objfile->obfd);
1339   SYMBOL_NAME (sym) = obstack_copy0 (&objfile->symbol_obstack, name,
1340                                      strlen (name));
1341
1342   /* default assumptions */
1343   SYMBOL_VALUE (sym) = cs->c_value;
1344   SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1345
1346   if (ISFCN (cs->c_type))
1347     {
1348 #if 0
1349        /* FIXME:  This has NOT been tested.  The DBX version has.. */
1350        /* Generate a template for the type of this function.  The 
1351           types of the arguments will be added as we read the symbol 
1352           table. */
1353        struct type *new = (struct type *)
1354                     obstack_alloc (&objfile->symbol_obstack, sizeof (struct type));
1355        
1356        memcpy (new, lookup_function_type (decode_function_type (cs, cs->c_type, aux)),
1357                       sizeof(struct type));
1358        SYMBOL_TYPE (sym) = new;
1359        in_function_type = SYMBOL_TYPE(sym);
1360 #else
1361        SYMBOL_TYPE(sym) = 
1362          lookup_function_type (decode_function_type (cs, cs->c_type, aux));
1363 #endif
1364
1365       SYMBOL_CLASS (sym) = LOC_BLOCK;
1366       if (cs->c_sclass == C_STAT)
1367         add_symbol_to_list (sym, &file_symbols);
1368       else if (cs->c_sclass == C_EXT)
1369         add_symbol_to_list (sym, &global_symbols);
1370     }
1371   else
1372     {
1373       SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux);
1374       switch (cs->c_sclass)
1375         {
1376           case C_NULL:
1377             break;
1378
1379           case C_AUTO:
1380             SYMBOL_CLASS (sym) = LOC_LOCAL;
1381             add_symbol_to_list (sym, &local_symbols);
1382             break;
1383
1384           case C_EXT:
1385             SYMBOL_CLASS (sym) = LOC_STATIC;
1386             SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
1387             add_symbol_to_list (sym, &global_symbols);
1388             break;
1389
1390           case C_STAT:
1391             SYMBOL_CLASS (sym) = LOC_STATIC;
1392             SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
1393             if (within_function) {
1394               /* Static symbol of local scope */
1395               add_symbol_to_list (sym, &local_symbols);
1396             }
1397             else {
1398               /* Static symbol at top level of file */
1399               add_symbol_to_list (sym, &file_symbols);
1400             }
1401             break;
1402
1403 #ifdef C_GLBLREG                /* AMD coff */
1404           case C_GLBLREG:
1405 #endif
1406           case C_REG:
1407             SYMBOL_CLASS (sym) = LOC_REGISTER;
1408             SYMBOL_VALUE (sym) = SDB_REG_TO_REGNUM(cs->c_value);
1409             add_symbol_to_list (sym, &local_symbols);
1410             break;
1411
1412           case C_LABEL:
1413             break;
1414
1415           case C_ARG:
1416             SYMBOL_CLASS (sym) = LOC_ARG;
1417 #if 0
1418             /* FIXME:  This has not been tested. */
1419             /* Add parameter to function.  */
1420             add_param_to_type(&in_function_type,sym);
1421 #endif
1422             add_symbol_to_list (sym, &local_symbols);
1423 #if !defined (BELIEVE_PCC_PROMOTION) && (TARGET_BYTE_ORDER == BIG_ENDIAN)
1424             /* If PCC says a parameter is a short or a char,
1425                aligned on an int boundary, realign it to the "little end"
1426                of the int.  */
1427             temptype = lookup_fundamental_type (current_objfile, FT_INTEGER);
1428             if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (temptype)
1429                 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT
1430                 && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (temptype))
1431                 {
1432                     SYMBOL_VALUE (sym) += TYPE_LENGTH (temptype)
1433                                         - TYPE_LENGTH (SYMBOL_TYPE (sym));
1434                 }
1435 #endif
1436             break;
1437
1438           case C_REGPARM:
1439             SYMBOL_CLASS (sym) = LOC_REGPARM;
1440             SYMBOL_VALUE (sym) = SDB_REG_TO_REGNUM(cs->c_value);
1441             add_symbol_to_list (sym, &local_symbols);
1442 #if !defined (BELIEVE_PCC_PROMOTION)
1443         /* FIXME:  This should retain the current type, since it's just
1444            a register value.  gnu@adobe, 26Feb93 */
1445             /* If PCC says a parameter is a short or a char,
1446                it is really an int.  */
1447             temptype = lookup_fundamental_type (current_objfile, FT_INTEGER);
1448             if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (temptype)
1449                 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT)
1450                 {
1451                     SYMBOL_TYPE (sym) = TYPE_UNSIGNED (SYMBOL_TYPE (sym))
1452                         ? lookup_fundamental_type (current_objfile,
1453                                                    FT_UNSIGNED_INTEGER)
1454                             : temptype;
1455                 }
1456 #endif
1457             break;
1458             
1459           case C_TPDEF:
1460             SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1461             SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1462
1463             /* If type has no name, give it one */
1464             if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
1465               TYPE_NAME (SYMBOL_TYPE (sym)) = concat (SYMBOL_NAME (sym), NULL);
1466
1467             /* Keep track of any type which points to empty structured type,
1468                 so it can be filled from a definition from another file.  A
1469                 simple forward reference (TYPE_CODE_UNDEF) is not an
1470                 empty structured type, though; the forward references
1471                 work themselves out via the magic of coff_lookup_type.  */
1472             if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR &&
1473                 TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0 &&
1474                 TYPE_CODE   (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) !=
1475                                                 TYPE_CODE_UNDEF)
1476               {
1477                 register int i = hashname (SYMBOL_NAME (sym));
1478
1479                 SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
1480                 opaque_type_chain[i] = sym;
1481               }
1482             add_symbol_to_list (sym, &file_symbols);
1483             break;
1484
1485           case C_STRTAG:
1486           case C_UNTAG:
1487           case C_ENTAG:
1488             SYMBOL_CLASS (sym) = LOC_TYPEDEF;
1489             SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
1490
1491             /* Some compilers try to be helpful by inventing "fake"
1492                names for anonymous enums, structures, and unions, like
1493                "~0fake" or ".0fake".  Thanks, but no thanks... */
1494             if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
1495               if (SYMBOL_NAME(sym) != NULL
1496                   && *SYMBOL_NAME(sym) != '~'
1497                   && *SYMBOL_NAME(sym) != '.')
1498                 TYPE_TAG_NAME (SYMBOL_TYPE (sym)) =
1499                   concat (SYMBOL_NAME (sym), NULL);
1500
1501             add_symbol_to_list (sym, &file_symbols);
1502             break;
1503
1504           default:
1505             break;
1506         }
1507     }
1508   return sym;
1509 }
1510 \f
1511 /* Decode a coff type specifier;
1512    return the type that is meant.  */
1513
1514 static
1515 struct type *
1516 decode_type (cs, c_type, aux)
1517      register struct coff_symbol *cs;
1518      unsigned int c_type;
1519      register union internal_auxent *aux;
1520 {
1521   register struct type *type = 0;
1522   unsigned int new_c_type;
1523
1524   if (c_type & ~N_BTMASK)
1525     {
1526       new_c_type = DECREF (c_type);
1527       if (ISPTR (c_type))
1528         {
1529           type = decode_type (cs, new_c_type, aux);
1530           type = lookup_pointer_type (type);
1531         }
1532       else if (ISFCN (c_type))
1533         {
1534           type = decode_type (cs, new_c_type, aux);
1535           type = lookup_function_type (type);
1536         }
1537       else if (ISARY (c_type))
1538         {
1539           int i, n;
1540           register unsigned short *dim;
1541           struct type *base_type, *index_type, *range_type;
1542
1543           /* Define an array type.  */
1544           /* auxent refers to array, not base type */
1545           if (aux->x_sym.x_tagndx.l == 0)
1546             cs->c_naux = 0;
1547
1548           /* shift the indices down */
1549           dim = &aux->x_sym.x_fcnary.x_ary.x_dimen[0];
1550           i = 1;
1551           n = dim[0];
1552           for (i = 0; *dim && i < DIMNUM - 1; i++, dim++)
1553             *dim = *(dim + 1);
1554           *dim = 0;
1555
1556           base_type = decode_type (cs, new_c_type, aux);
1557           index_type = lookup_fundamental_type (current_objfile, FT_INTEGER);
1558           range_type =
1559             create_range_type ((struct type *) NULL, index_type, 0, n - 1);
1560           type =
1561             create_array_type ((struct type *) NULL, base_type, range_type);
1562         }
1563       return type;
1564     }
1565
1566   /* Reference to existing type.  This only occurs with the
1567      struct, union, and enum types.  EPI a29k coff
1568      fakes us out by producing aux entries with a nonzero
1569      x_tagndx for definitions of structs, unions, and enums, so we
1570      have to check the c_sclass field.  SCO 3.2v4 cc gets confused
1571      with pointers to pointers to defined structs, and generates
1572      negative x_tagndx fields.  */
1573   if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0)
1574     {
1575       if (cs->c_sclass != C_STRTAG
1576           && cs->c_sclass != C_UNTAG
1577           && cs->c_sclass != C_ENTAG
1578           && aux->x_sym.x_tagndx.l >= 0)
1579         {
1580           type = coff_alloc_type (aux->x_sym.x_tagndx.l);
1581           return type;
1582         } else {
1583           complain (&tagndx_bad_complaint, cs->c_name);
1584           /* And fall through to decode_base_type... */
1585         }
1586     }
1587
1588   return decode_base_type (cs, BTYPE (c_type), aux);
1589 }
1590
1591 /* Decode a coff type specifier for function definition;
1592    return the type that the function returns.  */
1593
1594 static
1595 struct type *
1596 decode_function_type (cs, c_type, aux)
1597      register struct coff_symbol *cs;
1598      unsigned int c_type;
1599      register union internal_auxent *aux;
1600 {
1601   if (aux->x_sym.x_tagndx.l == 0)
1602     cs->c_naux = 0;     /* auxent refers to function, not base type */
1603
1604   return decode_type (cs, DECREF (c_type), aux);
1605 }
1606 \f
1607 /* basic C types */
1608
1609 static
1610 struct type *
1611 decode_base_type (cs, c_type, aux)
1612      register struct coff_symbol *cs;
1613      unsigned int c_type;
1614      register union internal_auxent *aux;
1615 {
1616   struct type *type;
1617
1618   switch (c_type)
1619     {
1620       case T_NULL:
1621         /* shows up with "void (*foo)();" structure members */
1622         return lookup_fundamental_type (current_objfile, FT_VOID);
1623
1624 #if 0
1625 /* DGUX actually defines both T_ARG and T_VOID to the same value.  */
1626 #ifdef T_ARG
1627       case T_ARG:
1628         /* Shows up in DGUX, I think.  Not sure where.  */
1629         return lookup_fundamental_type (current_objfile, FT_VOID);      /* shouldn't show up here */
1630 #endif
1631 #endif /* 0 */
1632
1633 #ifdef T_VOID
1634       case T_VOID:
1635         /* Intel 960 COFF has this symbol and meaning.  */
1636         return lookup_fundamental_type (current_objfile, FT_VOID);
1637 #endif
1638
1639       case T_CHAR:
1640         return lookup_fundamental_type (current_objfile, FT_CHAR);
1641
1642       case T_SHORT:
1643         return lookup_fundamental_type (current_objfile, FT_SHORT);
1644
1645       case T_INT:
1646         return lookup_fundamental_type (current_objfile, FT_INTEGER);
1647
1648       case T_LONG:
1649         return lookup_fundamental_type (current_objfile, FT_LONG);
1650
1651       case T_FLOAT:
1652         return lookup_fundamental_type (current_objfile, FT_FLOAT);
1653
1654       case T_DOUBLE:
1655         return lookup_fundamental_type (current_objfile, FT_DBL_PREC_FLOAT);
1656
1657       case T_STRUCT:
1658         if (cs->c_naux != 1)
1659           {
1660             /* anonymous structure type */
1661             type = coff_alloc_type (cs->c_symnum);
1662             TYPE_CODE (type) = TYPE_CODE_STRUCT;
1663             TYPE_NAME (type) = NULL;
1664             /* This used to set the tag to "<opaque>".  But I think setting it
1665                to NULL is right, and the printing code can print it as
1666                "struct {...}".  */
1667             TYPE_TAG_NAME (type) = NULL;
1668             INIT_CPLUS_SPECIFIC(type);
1669             TYPE_LENGTH (type) = 0;
1670             TYPE_FIELDS (type) = 0;
1671             TYPE_NFIELDS (type) = 0;
1672           }
1673         else
1674           {
1675             type = coff_read_struct_type (cs->c_symnum,
1676                                     aux->x_sym.x_misc.x_lnsz.x_size,
1677                                     aux->x_sym.x_fcnary.x_fcn.x_endndx.l);
1678           }
1679         return type;
1680
1681       case T_UNION:
1682         if (cs->c_naux != 1)
1683           {
1684             /* anonymous union type */
1685             type = coff_alloc_type (cs->c_symnum);
1686             TYPE_NAME (type) = NULL;
1687             /* This used to set the tag to "<opaque>".  But I think setting it
1688                to NULL is right, and the printing code can print it as
1689                "union {...}".  */
1690             TYPE_TAG_NAME (type) = NULL;
1691             INIT_CPLUS_SPECIFIC(type);
1692             TYPE_LENGTH (type) = 0;
1693             TYPE_FIELDS (type) = 0;
1694             TYPE_NFIELDS (type) = 0;
1695           }
1696         else
1697           {
1698             type = coff_read_struct_type (cs->c_symnum,
1699                                     aux->x_sym.x_misc.x_lnsz.x_size,
1700                                     aux->x_sym.x_fcnary.x_fcn.x_endndx.l);
1701           }
1702         TYPE_CODE (type) = TYPE_CODE_UNION;
1703         return type;
1704
1705       case T_ENUM:
1706         if (cs->c_naux != 1)
1707           {
1708             /* anonymous enum type */
1709             type = coff_alloc_type (cs->c_symnum);
1710             TYPE_CODE (type) = TYPE_CODE_ENUM;
1711             TYPE_NAME (type) = NULL;
1712             /* This used to set the tag to "<opaque>".  But I think setting it
1713                to NULL is right, and the printing code can print it as
1714                "enum {...}".  */
1715             TYPE_TAG_NAME (type) = NULL;
1716             TYPE_LENGTH (type) = 0;
1717             TYPE_FIELDS (type) = 0;
1718             TYPE_NFIELDS(type) = 0;
1719           }
1720         else
1721           {
1722             type = coff_read_enum_type (cs->c_symnum,
1723                                         aux->x_sym.x_misc.x_lnsz.x_size,
1724                                         aux->x_sym.x_fcnary.x_fcn.x_endndx.l);
1725           }
1726         return type;
1727
1728       case T_MOE:
1729         /* shouldn't show up here */
1730         break;
1731
1732       case T_UCHAR:
1733         return lookup_fundamental_type (current_objfile, FT_UNSIGNED_CHAR);
1734
1735       case T_USHORT:
1736         return lookup_fundamental_type (current_objfile, FT_UNSIGNED_SHORT);
1737
1738       case T_UINT:
1739         return lookup_fundamental_type (current_objfile, FT_UNSIGNED_INTEGER);
1740
1741       case T_ULONG:
1742         return lookup_fundamental_type (current_objfile, FT_UNSIGNED_LONG);
1743     }
1744   complain (&unexpected_type_complaint, cs->c_name);
1745   return lookup_fundamental_type (current_objfile, FT_VOID);
1746 }
1747 \f
1748 /* This page contains subroutines of read_type.  */
1749
1750 /* Read the description of a structure (or union type)
1751    and return an object describing the type.  */
1752
1753 static struct type *
1754 coff_read_struct_type (index, length, lastsym)
1755      int index;
1756      int length;
1757      int lastsym;
1758 {
1759   struct nextfield
1760     {
1761       struct nextfield *next;
1762       struct field field;
1763     };
1764
1765   register struct type *type;
1766   register struct nextfield *list = 0;
1767   struct nextfield *new;
1768   int nfields = 0;
1769   register int n;
1770   char *name;
1771   struct coff_symbol member_sym;
1772   register struct coff_symbol *ms = &member_sym;
1773   struct internal_syment sub_sym;
1774   union internal_auxent sub_aux;
1775   int done = 0;
1776
1777   type = coff_alloc_type (index);
1778   TYPE_CODE (type) = TYPE_CODE_STRUCT;
1779   INIT_CPLUS_SPECIFIC(type);
1780   TYPE_LENGTH (type) = length;
1781
1782   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
1783     {
1784       read_one_sym (ms, &sub_sym, &sub_aux);
1785       name = ms->c_name;
1786       name = EXTERNAL_NAME (name, current_objfile->obfd);
1787
1788       switch (ms->c_sclass)
1789         {
1790           case C_MOS:
1791           case C_MOU:
1792
1793             /* Get space to record the next field's data.  */
1794             new = (struct nextfield *) alloca (sizeof (struct nextfield));
1795             new->next = list;
1796             list = new;
1797
1798             /* Save the data.  */
1799             list->field.name = savestring (name, strlen (name));
1800             list->field.type = decode_type (ms, ms->c_type, &sub_aux);
1801             list->field.bitpos = 8 * ms->c_value;
1802             list->field.bitsize = 0;
1803             nfields++;
1804             break;
1805
1806           case C_FIELD:
1807
1808             /* Get space to record the next field's data.  */
1809             new = (struct nextfield *) alloca (sizeof (struct nextfield));
1810             new->next = list;
1811             list = new;
1812
1813             /* Save the data.  */
1814             list->field.name = savestring (name, strlen (name));
1815             list->field.type = decode_type (ms, ms->c_type, &sub_aux);
1816             list->field.bitpos = ms->c_value;
1817             list->field.bitsize = sub_aux.x_sym.x_misc.x_lnsz.x_size;
1818             nfields++;
1819             break;
1820
1821           case C_EOS:
1822             done = 1;
1823             break;
1824         }
1825     }
1826   /* Now create the vector of fields, and record how big it is.  */
1827
1828   TYPE_NFIELDS (type) = nfields;
1829   TYPE_FIELDS (type) = (struct field *)
1830     TYPE_ALLOC (type, sizeof (struct field) * nfields);
1831
1832   /* Copy the saved-up fields into the field vector.  */
1833
1834   for (n = nfields; list; list = list->next)
1835     TYPE_FIELD (type, --n) = list->field;
1836
1837   return type;
1838 }
1839 \f
1840 /* Read a definition of an enumeration type,
1841    and create and return a suitable type object.
1842    Also defines the symbols that represent the values of the type.  */
1843
1844 /* ARGSUSED */
1845 static struct type *
1846 coff_read_enum_type (index, length, lastsym)
1847      int index;
1848      int length;
1849      int lastsym;
1850 {
1851   register struct symbol *sym;
1852   register struct type *type;
1853   int nsyms = 0;
1854   int done = 0;
1855   struct pending **symlist;
1856   struct coff_symbol member_sym;
1857   register struct coff_symbol *ms = &member_sym;
1858   struct internal_syment sub_sym;
1859   union internal_auxent sub_aux;
1860   struct pending *osyms, *syms;
1861   int o_nsyms;
1862   register int n;
1863   char *name;
1864
1865   type = coff_alloc_type (index);
1866   if (within_function)
1867     symlist = &local_symbols;
1868   else
1869     symlist = &file_symbols;
1870   osyms = *symlist;
1871   o_nsyms = osyms ? osyms->nsyms : 0;
1872
1873   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
1874     {
1875       read_one_sym (ms, &sub_sym, &sub_aux);
1876       name = ms->c_name;
1877       name = EXTERNAL_NAME (name, current_objfile->obfd);
1878
1879       switch (ms->c_sclass)
1880         {
1881           case C_MOE:
1882             sym = (struct symbol *) xmalloc (sizeof (struct symbol));
1883             memset (sym, 0, sizeof (struct symbol));
1884
1885             SYMBOL_NAME (sym) = savestring (name, strlen (name));
1886             SYMBOL_CLASS (sym) = LOC_CONST;
1887             SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1888             SYMBOL_VALUE (sym) = ms->c_value;
1889             add_symbol_to_list (sym, symlist);
1890             nsyms++;
1891             break;
1892
1893           case C_EOS:
1894             /* Sometimes the linker (on 386/ix 2.0.2 at least) screws
1895                up the count of how many symbols to read.  So stop
1896                on .eos.  */
1897             done = 1;
1898             break;
1899         }
1900     }
1901
1902   /* Now fill in the fields of the type-structure.  */
1903
1904   if (length > 0)
1905     TYPE_LENGTH (type) =  length;
1906   else
1907     TYPE_LENGTH (type) =  TARGET_INT_BIT / TARGET_CHAR_BIT;     /* Assume ints */
1908   TYPE_CODE (type) = TYPE_CODE_ENUM;
1909   TYPE_NFIELDS (type) = nsyms;
1910   TYPE_FIELDS (type) = (struct field *)
1911     TYPE_ALLOC (type, sizeof (struct field) * nsyms);
1912
1913   /* Find the symbols for the values and put them into the type.
1914      The symbols can be found in the symlist that we put them on
1915      to cause them to be defined.  osyms contains the old value
1916      of that symlist; everything up to there was defined by us.  */
1917   /* Note that we preserve the order of the enum constants, so
1918      that in something like "enum {FOO, LAST_THING=FOO}" we print
1919      FOO, not LAST_THING.  */
1920
1921   for (syms = *symlist, n = 0; syms; syms = syms->next)
1922     {
1923       int j = 0;
1924       if (syms == osyms)
1925         j = o_nsyms;
1926       for (; j < syms->nsyms; j++,n++)
1927         {
1928           struct symbol *xsym = syms->symbol[j];
1929           SYMBOL_TYPE (xsym) = type;
1930           TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
1931           TYPE_FIELD_VALUE (type, n) = 0;
1932           TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
1933           TYPE_FIELD_BITSIZE (type, n) = 0;
1934         }
1935       if (syms == osyms)
1936         break;
1937     }
1938
1939 #if 0
1940   /* This screws up perfectly good C programs with enums.  FIXME.  */
1941   /* Is this Modula-2's BOOLEAN type?  Flag it as such if so. */
1942   if(TYPE_NFIELDS(type) == 2 &&
1943      ((STREQ(TYPE_FIELD_NAME(type,0),"TRUE") &&
1944        STREQ(TYPE_FIELD_NAME(type,1),"FALSE")) ||
1945       (STREQ(TYPE_FIELD_NAME(type,1),"TRUE") &&
1946        STREQ(TYPE_FIELD_NAME(type,0),"FALSE"))))
1947      TYPE_CODE(type) = TYPE_CODE_BOOL;
1948 #endif
1949   return type;
1950 }
1951
1952 /* Fake up support for relocating symbol addresses.  FIXME.  */
1953
1954 struct section_offsets coff_symfile_faker = {0};
1955
1956 struct section_offsets *
1957 coff_symfile_offsets (objfile, addr)
1958      struct objfile *objfile;
1959      CORE_ADDR addr;
1960 {
1961   return &coff_symfile_faker;
1962 }
1963
1964 /* Register our ability to parse symbols for coff BFD files */
1965
1966 static struct sym_fns coff_sym_fns =
1967 {
1968   "coff",               /* sym_name: name or name prefix of BFD target type */
1969   4,                    /* sym_namelen: number of significant sym_name chars */
1970   coff_new_init,        /* sym_new_init: init anything gbl to entire symtab */
1971   coff_symfile_init,    /* sym_init: read initial info, setup for sym_read() */
1972   coff_symfile_read,    /* sym_read: read a symbol file into symtab */
1973   coff_symfile_finish,  /* sym_finish: finished with file, cleanup */
1974   coff_symfile_offsets, /* sym_offsets:  xlate external to internal form */
1975   NULL                  /* next: pointer to next struct sym_fns */
1976 };
1977
1978 void
1979 _initialize_coffread ()
1980 {
1981   add_symtab_fns(&coff_sym_fns);
1982 }