Replace hardwired error handlers in tui_initialize_io
[platform/upstream/binutils.git] / gdb / coffread.c
1 /* Read coff symbol tables and convert to internal format, for GDB.
2    Copyright (C) 1987-2014 Free Software Foundation, Inc.
3    Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu).
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "symtab.h"
22 #include "gdbtypes.h"
23 #include "demangle.h"
24 #include "breakpoint.h"
25
26 #include "bfd.h"
27 #include "gdb_obstack.h"
28 #include <ctype.h>
29
30 #include "coff/internal.h"      /* Internal format of COFF symbols in BFD */
31 #include "libcoff.h"            /* FIXME secret internal data from BFD */
32 #include "objfiles.h"
33 #include "buildsym.h"
34 #include "gdb-stabs.h"
35 #include "stabsread.h"
36 #include "complaints.h"
37 #include "target.h"
38 #include "block.h"
39 #include "dictionary.h"
40
41 #include "coff-pe-read.h"
42
43 #include "psymtab.h"
44
45 extern void _initialize_coffread (void);
46
47 /* Key for COFF-associated data.  */
48
49 static const struct objfile_data *coff_objfile_data_key;
50
51 /* The objfile we are currently reading.  */
52
53 static struct objfile *coffread_objfile;
54
55 struct coff_symfile_info
56   {
57     file_ptr min_lineno_offset; /* Where in file lowest line#s are.  */
58     file_ptr max_lineno_offset; /* 1+last byte of line#s in file.  */
59
60     CORE_ADDR textaddr;         /* Addr of .text section.  */
61     unsigned int textsize;      /* Size of .text section.  */
62     struct stab_section_list *stabsects;        /* .stab sections.  */
63     asection *stabstrsect;      /* Section pointer for .stab section.  */
64     char *stabstrdata;
65   };
66
67 /* Translate an external name string into a user-visible name.  */
68 #define EXTERNAL_NAME(string, abfd) \
69         (string[0] == bfd_get_symbol_leading_char (abfd) \
70         ? string + 1 : string)
71
72 /* To be an sdb debug type, type must have at least a basic or primary
73    derived type.  Using this rather than checking against T_NULL is
74    said to prevent core dumps if we try to operate on Michael Bloom
75    dbx-in-coff file.  */
76
77 #define SDB_TYPE(type) (BTYPE(type) | (type & N_TMASK))
78
79 /* Core address of start and end of text of current source file.
80    This comes from a ".text" symbol where x_nlinno > 0.  */
81
82 static CORE_ADDR current_source_start_addr;
83 static CORE_ADDR current_source_end_addr;
84
85 /* The addresses of the symbol table stream and number of symbols
86    of the object file we are reading (as copied into core).  */
87
88 static bfd *nlist_bfd_global;
89 static int nlist_nsyms_global;
90
91
92 /* Pointers to scratch storage, used for reading raw symbols and
93    auxents.  */
94
95 static char *temp_sym;
96 static char *temp_aux;
97
98 /* Local variables that hold the shift and mask values for the
99    COFF file that we are currently reading.  These come back to us
100    from BFD, and are referenced by their macro names, as well as
101    internally to the BTYPE, ISPTR, ISFCN, ISARY, ISTAG, and DECREF
102    macros from include/coff/internal.h .  */
103
104 static unsigned local_n_btmask;
105 static unsigned local_n_btshft;
106 static unsigned local_n_tmask;
107 static unsigned local_n_tshift;
108
109 #define N_BTMASK        local_n_btmask
110 #define N_BTSHFT        local_n_btshft
111 #define N_TMASK         local_n_tmask
112 #define N_TSHIFT        local_n_tshift
113
114 /* Local variables that hold the sizes in the file of various COFF
115    structures.  (We only need to know this to read them from the file
116    -- BFD will then translate the data in them, into `internal_xxx'
117    structs in the right byte order, alignment, etc.)  */
118
119 static unsigned local_linesz;
120 static unsigned local_symesz;
121 static unsigned local_auxesz;
122
123 /* This is set if this is a PE format file.  */
124
125 static int pe_file;
126
127 /* Chain of typedefs of pointers to empty struct/union types.
128    They are chained thru the SYMBOL_VALUE_CHAIN.  */
129
130 static struct symbol *opaque_type_chain[HASHSIZE];
131
132 /* Simplified internal version of coff symbol table information.  */
133
134 struct coff_symbol
135   {
136     char *c_name;
137     int c_symnum;               /* Symbol number of this entry.  */
138     int c_naux;                 /* 0 if syment only, 1 if syment +
139                                    auxent, etc.  */
140     CORE_ADDR c_value;
141     int c_sclass;
142     int c_secnum;
143     unsigned int c_type;
144   };
145
146 /* Vector of types defined so far, indexed by their type numbers.  */
147
148 static struct type **type_vector;
149
150 /* Number of elements allocated for type_vector currently.  */
151
152 static int type_vector_length;
153
154 /* Initial size of type vector.  Is realloc'd larger if needed, and
155    realloc'd down to the size actually used, when completed.  */
156
157 #define INITIAL_TYPE_VECTOR_LENGTH 160
158
159 extern void stabsread_clear_cache (void);
160
161 static struct type *coff_read_struct_type (int, int, int,
162                                            struct objfile *);
163
164 static struct type *decode_base_type (struct coff_symbol *,
165                                       unsigned int,
166                                       union internal_auxent *,
167                                       struct objfile *);
168
169 static struct type *decode_type (struct coff_symbol *, unsigned int,
170                                  union internal_auxent *,
171                                  struct objfile *);
172
173 static struct type *decode_function_type (struct coff_symbol *,
174                                           unsigned int,
175                                           union internal_auxent *,
176                                           struct objfile *);
177
178 static struct type *coff_read_enum_type (int, int, int,
179                                          struct objfile *);
180
181 static struct symbol *process_coff_symbol (struct coff_symbol *,
182                                            union internal_auxent *,
183                                            struct objfile *);
184
185 static void patch_opaque_types (struct symtab *);
186
187 static void enter_linenos (long, int, int, struct objfile *);
188
189 static void free_linetab (void);
190
191 static void free_linetab_cleanup (void *ignore);
192
193 static int init_lineno (bfd *, long, int);
194
195 static char *getsymname (struct internal_syment *);
196
197 static const char *coff_getfilename (union internal_auxent *);
198
199 static void free_stringtab (void);
200
201 static void free_stringtab_cleanup (void *ignore);
202
203 static int init_stringtab (bfd *, long);
204
205 static void read_one_sym (struct coff_symbol *,
206                           struct internal_syment *,
207                           union internal_auxent *);
208
209 static void coff_symtab_read (long, unsigned int, struct objfile *);
210 \f
211 /* We are called once per section from coff_symfile_read.  We
212    need to examine each section we are passed, check to see
213    if it is something we are interested in processing, and
214    if so, stash away some access information for the section.
215
216    FIXME: The section names should not be hardwired strings (what
217    should they be?  I don't think most object file formats have enough
218    section flags to specify what kind of debug section it is
219    -kingdon).  */
220
221 static void
222 coff_locate_sections (bfd *abfd, asection *sectp, void *csip)
223 {
224   struct coff_symfile_info *csi;
225   const char *name;
226
227   csi = (struct coff_symfile_info *) csip;
228   name = bfd_get_section_name (abfd, sectp);
229   if (strcmp (name, ".text") == 0)
230     {
231       csi->textaddr = bfd_section_vma (abfd, sectp);
232       csi->textsize += bfd_section_size (abfd, sectp);
233     }
234   else if (strncmp (name, ".text", sizeof ".text" - 1) == 0)
235     {
236       csi->textsize += bfd_section_size (abfd, sectp);
237     }
238   else if (strcmp (name, ".stabstr") == 0)
239     {
240       csi->stabstrsect = sectp;
241     }
242   else if (strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
243     {
244       const char *s;
245
246       /* We can have multiple .stab sections if linked with
247          --split-by-reloc.  */
248       for (s = name + sizeof ".stab" - 1; *s != '\0'; s++)
249         if (!isdigit (*s))
250           break;
251       if (*s == '\0')
252         {
253           struct stab_section_list *n, **pn;
254
255           n = ((struct stab_section_list *)
256                xmalloc (sizeof (struct stab_section_list)));
257           n->section = sectp;
258           n->next = NULL;
259           for (pn = &csi->stabsects; *pn != NULL; pn = &(*pn)->next)
260             ;
261           *pn = n;
262
263           /* This will be run after coffstab_build_psymtabs is called
264              in coff_symfile_read, at which point we no longer need
265              the information.  */
266           make_cleanup (xfree, n);
267         }
268     }
269 }
270
271 /* Return the section_offsets* that CS points to.  */
272 static int cs_to_section (struct coff_symbol *, struct objfile *);
273
274 struct find_targ_sec_arg
275   {
276     int targ_index;
277     asection **resultp;
278   };
279
280 static void
281 find_targ_sec (bfd *abfd, asection *sect, void *obj)
282 {
283   struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
284
285   if (sect->target_index == args->targ_index)
286     *args->resultp = sect;
287 }
288
289 /* Return the bfd_section that CS points to.  */
290 static struct bfd_section*
291 cs_to_bfd_section (struct coff_symbol *cs, struct objfile *objfile)
292 {
293   asection *sect = NULL;
294   struct find_targ_sec_arg args;
295
296   args.targ_index = cs->c_secnum;
297   args.resultp = &sect;
298   bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
299   return sect;
300 }
301
302 /* Return the section number (SECT_OFF_*) that CS points to.  */
303 static int
304 cs_to_section (struct coff_symbol *cs, struct objfile *objfile)
305 {
306   asection *sect = cs_to_bfd_section (cs, objfile);
307
308   if (sect == NULL)
309     return SECT_OFF_TEXT (objfile);
310   return gdb_bfd_section_index (objfile->obfd, sect);
311 }
312
313 /* Return the address of the section of a COFF symbol.  */
314
315 static CORE_ADDR cs_section_address (struct coff_symbol *, bfd *);
316
317 static CORE_ADDR
318 cs_section_address (struct coff_symbol *cs, bfd *abfd)
319 {
320   asection *sect = NULL;
321   struct find_targ_sec_arg args;
322   CORE_ADDR addr = 0;
323
324   args.targ_index = cs->c_secnum;
325   args.resultp = &sect;
326   bfd_map_over_sections (abfd, find_targ_sec, &args);
327   if (sect != NULL)
328     addr = bfd_get_section_vma (abfd, sect);
329   return addr;
330 }
331
332 /* Look up a coff type-number index.  Return the address of the slot
333    where the type for that index is stored.
334    The type-number is in INDEX. 
335
336    This can be used for finding the type associated with that index
337    or for associating a new type with the index.  */
338
339 static struct type **
340 coff_lookup_type (int index)
341 {
342   if (index >= type_vector_length)
343     {
344       int old_vector_length = type_vector_length;
345
346       type_vector_length *= 2;
347       if (index /* is still */  >= type_vector_length)
348         type_vector_length = index * 2;
349
350       type_vector = (struct type **)
351         xrealloc ((char *) type_vector,
352                   type_vector_length * sizeof (struct type *));
353       memset (&type_vector[old_vector_length], 0,
354          (type_vector_length - old_vector_length) * sizeof (struct type *));
355     }
356   return &type_vector[index];
357 }
358
359 /* Make sure there is a type allocated for type number index
360    and return the type object.
361    This can create an empty (zeroed) type object.  */
362
363 static struct type *
364 coff_alloc_type (int index)
365 {
366   struct type **type_addr = coff_lookup_type (index);
367   struct type *type = *type_addr;
368
369   /* If we are referring to a type not known at all yet,
370      allocate an empty type for it.
371      We will fill it in later if we find out how.  */
372   if (type == NULL)
373     {
374       type = alloc_type (coffread_objfile);
375       *type_addr = type;
376     }
377   return type;
378 }
379 \f
380 /* Start a new symtab for a new source file.
381    This is called when a COFF ".file" symbol is seen;
382    it indicates the start of data for one original source file.  */
383
384 static void
385 coff_start_symtab (const char *name)
386 {
387   start_symtab (
388   /* We fill in the filename later.  start_symtab puts this pointer
389      into last_source_file and we put it in subfiles->name, which
390      end_symtab frees; that's why it must be malloc'd.  */
391                  xstrdup (name),
392   /* We never know the directory name for COFF.  */
393                  NULL,
394   /* The start address is irrelevant, since we set
395      last_source_start_addr in coff_end_symtab.  */
396                  0);
397   record_debugformat ("COFF");
398 }
399
400 /* Save the vital information from when starting to read a file,
401    for use when closing off the current file.
402    NAME is the file name the symbols came from, START_ADDR is the
403    first text address for the file, and SIZE is the number of bytes of
404    text.  */
405
406 static void
407 complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size)
408 {
409   set_last_source_file (name);
410   current_source_start_addr = start_addr;
411   current_source_end_addr = start_addr + size;
412 }
413
414 /* Finish the symbol definitions for one main source file, close off
415    all the lexical contexts for that file (creating struct block's for
416    them), then make the struct symtab for that file and put it in the
417    list of all such.  */
418
419 static void
420 coff_end_symtab (struct objfile *objfile)
421 {
422   last_source_start_addr = current_source_start_addr;
423
424   end_symtab (current_source_end_addr, objfile,
425               SECT_OFF_TEXT (objfile));
426
427   /* Reinitialize for beginning of new file.  */
428   set_last_source_file (NULL);
429 }
430 \f
431 /* The linker sometimes generates some non-function symbols inside
432    functions referencing variables imported from another DLL.
433    Return nonzero if the given symbol corresponds to one of them.  */
434
435 static int
436 is_import_fixup_symbol (struct coff_symbol *cs,
437                         enum minimal_symbol_type type)
438 {
439   /* The following is a bit of a heuristic using the characterictics
440      of these fixup symbols, but should work well in practice...  */
441   int i;
442
443   /* Must be a non-static text symbol.  */
444   if (type != mst_text)
445     return 0;
446
447   /* Must be a non-function symbol.  */
448   if (ISFCN (cs->c_type))
449     return 0;
450
451   /* The name must start with "__fu<digits>__".  */
452   if (strncmp (cs->c_name, "__fu", 4) != 0)
453     return 0;
454   if (! isdigit (cs->c_name[4]))
455     return 0;
456   for (i = 5; cs->c_name[i] != '\0' && isdigit (cs->c_name[i]); i++)
457     /* Nothing, just incrementing index past all digits.  */;
458   if (cs->c_name[i] != '_' || cs->c_name[i + 1] != '_')
459     return 0;
460
461   return 1;
462 }
463
464 static struct minimal_symbol *
465 record_minimal_symbol (struct coff_symbol *cs, CORE_ADDR address,
466                        enum minimal_symbol_type type, int section, 
467                        struct objfile *objfile)
468 {
469   /* We don't want TDESC entry points in the minimal symbol table.  */
470   if (cs->c_name[0] == '@')
471     return NULL;
472
473   if (is_import_fixup_symbol (cs, type))
474     {
475       /* Because the value of these symbols is within a function code
476          range, these symbols interfere with the symbol-from-address
477          reverse lookup; this manifests itselfs in backtraces, or any
478          other commands that prints symbolic addresses.  Just pretend
479          these symbols do not exist.  */
480       return NULL;
481     }
482
483   return prim_record_minimal_symbol_and_info (cs->c_name, address,
484                                               type, section, objfile);
485 }
486 \f
487 /* coff_symfile_init ()
488    is the coff-specific initialization routine for reading symbols.
489    It is passed a struct objfile which contains, among other things,
490    the BFD for the file whose symbols are being read, and a slot for
491    a pointer to "private data" which we fill with cookies and other
492    treats for coff_symfile_read ().
493
494    We will only be called if this is a COFF or COFF-like file.  BFD
495    handles figuring out the format of the file, and code in symtab.c
496    uses BFD's determination to vector to us.
497
498    The ultimate result is a new symtab (or, FIXME, eventually a
499    psymtab).  */
500
501 static void
502 coff_symfile_init (struct objfile *objfile)
503 {
504   struct dbx_symfile_info *dbx;
505   struct coff_symfile_info *coff;
506
507   /* Allocate struct to keep track of stab reading.  */
508   dbx = XCNEW (struct dbx_symfile_info);
509   set_objfile_data (objfile, dbx_objfile_data_key, dbx);
510
511   /* Allocate struct to keep track of the symfile.  */
512   coff = XCNEW (struct coff_symfile_info);
513   set_objfile_data (objfile, coff_objfile_data_key, coff);
514
515   /* COFF objects may be reordered, so set OBJF_REORDERED.  If we
516      find this causes a significant slowdown in gdb then we could
517      set it in the debug symbol readers only when necessary.  */
518   objfile->flags |= OBJF_REORDERED;
519 }
520
521 /* This function is called for every section; it finds the outer
522    limits of the line table (minimum and maximum file offset) so that
523    the mainline code can read the whole thing for efficiency.  */
524
525 static void
526 find_linenos (bfd *abfd, struct bfd_section *asect, void *vpinfo)
527 {
528   struct coff_symfile_info *info;
529   int size, count;
530   file_ptr offset, maxoff;
531
532   /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
533   count = asect->lineno_count;
534   /* End of warning.  */
535
536   if (count == 0)
537     return;
538   size = count * local_linesz;
539
540   info = (struct coff_symfile_info *) vpinfo;
541   /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
542   offset = asect->line_filepos;
543   /* End of warning.  */
544
545   if (offset < info->min_lineno_offset || info->min_lineno_offset == 0)
546     info->min_lineno_offset = offset;
547
548   maxoff = offset + size;
549   if (maxoff > info->max_lineno_offset)
550     info->max_lineno_offset = maxoff;
551 }
552
553
554 /* The BFD for this file -- only good while we're actively reading
555    symbols into a psymtab or a symtab.  */
556
557 static bfd *symfile_bfd;
558
559 /* Read a symbol file, after initialization by coff_symfile_init.  */
560
561 static void
562 coff_symfile_read (struct objfile *objfile, int symfile_flags)
563 {
564   struct coff_symfile_info *info;
565   struct dbx_symfile_info *dbxinfo;
566   bfd *abfd = objfile->obfd;
567   coff_data_type *cdata = coff_data (abfd);
568   char *name = bfd_get_filename (abfd);
569   int val;
570   unsigned int num_symbols;
571   int symtab_offset;
572   int stringtab_offset;
573   struct cleanup *back_to, *cleanup_minimal_symbols;
574   int stabstrsize;
575   
576   info = objfile_data (objfile, coff_objfile_data_key);
577   dbxinfo = DBX_SYMFILE_INFO (objfile);
578   symfile_bfd = abfd;           /* Kludge for swap routines.  */
579
580 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
581   num_symbols = bfd_get_symcount (abfd);        /* How many syms */
582   symtab_offset = cdata->sym_filepos;   /* Symbol table file offset */
583   stringtab_offset = symtab_offset +    /* String table file offset */
584     num_symbols * cdata->local_symesz;
585
586   /* Set a few file-statics that give us specific information about
587      the particular COFF file format we're reading.  */
588   local_n_btmask = cdata->local_n_btmask;
589   local_n_btshft = cdata->local_n_btshft;
590   local_n_tmask = cdata->local_n_tmask;
591   local_n_tshift = cdata->local_n_tshift;
592   local_linesz = cdata->local_linesz;
593   local_symesz = cdata->local_symesz;
594   local_auxesz = cdata->local_auxesz;
595
596   /* Allocate space for raw symbol and aux entries, based on their
597      space requirements as reported by BFD.  */
598   temp_sym = (char *) xmalloc
599     (cdata->local_symesz + cdata->local_auxesz);
600   temp_aux = temp_sym + cdata->local_symesz;
601   back_to = make_cleanup (free_current_contents, &temp_sym);
602
603   /* We need to know whether this is a PE file, because in PE files,
604      unlike standard COFF files, symbol values are stored as offsets
605      from the section address, rather than as absolute addresses.
606      FIXME: We should use BFD to read the symbol table, and thus avoid
607      this problem.  */
608   pe_file =
609     strncmp (bfd_get_target (objfile->obfd), "pe", 2) == 0
610     || strncmp (bfd_get_target (objfile->obfd), "epoc-pe", 7) == 0;
611
612   /* End of warning.  */
613
614   info->min_lineno_offset = 0;
615   info->max_lineno_offset = 0;
616
617   /* Only read line number information if we have symbols.
618
619      On Windows NT, some of the system's DLL's have sections with
620      PointerToLinenumbers fields that are non-zero, but point at
621      random places within the image file.  (In the case I found,
622      KERNEL32.DLL's .text section has a line number info pointer that
623      points into the middle of the string `lib\\i386\kernel32.dll'.)
624
625      However, these DLL's also have no symbols.  The line number
626      tables are meaningless without symbols.  And in fact, GDB never
627      uses the line number information unless there are symbols.  So we
628      can avoid spurious error messages (and maybe run a little
629      faster!) by not even reading the line number table unless we have
630      symbols.  */
631   if (num_symbols > 0)
632     {
633       /* Read the line number table, all at once.  */
634       bfd_map_over_sections (abfd, find_linenos, (void *) info);
635
636       make_cleanup (free_linetab_cleanup, 0 /*ignore*/);
637       val = init_lineno (abfd, info->min_lineno_offset,
638                          info->max_lineno_offset - info->min_lineno_offset);
639       if (val < 0)
640         error (_("\"%s\": error reading line numbers."), name);
641     }
642
643   /* Now read the string table, all at once.  */
644
645   make_cleanup (free_stringtab_cleanup, 0 /*ignore*/);
646   val = init_stringtab (abfd, stringtab_offset);
647   if (val < 0)
648     error (_("\"%s\": can't get string table"), name);
649
650   init_minimal_symbol_collection ();
651   cleanup_minimal_symbols = make_cleanup_discard_minimal_symbols ();
652
653   /* Now that the executable file is positioned at symbol table,
654      process it and define symbols accordingly.  */
655
656   coff_symtab_read ((long) symtab_offset, num_symbols, objfile);
657
658   /* Install any minimal symbols that have been collected as the
659      current minimal symbols for this objfile.  */
660
661   install_minimal_symbols (objfile);
662
663   if (pe_file)
664     {
665       struct minimal_symbol *msym;
666
667       ALL_OBJFILE_MSYMBOLS (objfile, msym)
668         {
669           const char *name = MSYMBOL_LINKAGE_NAME (msym);
670
671           /* If the minimal symbols whose name are prefixed by "__imp_"
672              or "_imp_", get rid of the prefix, and search the minimal
673              symbol in OBJFILE.  Note that 'maintenance print msymbols'
674              shows that type of these "_imp_XXXX" symbols is mst_data.  */
675           if (MSYMBOL_TYPE (msym) == mst_data
676               && (strncmp (name, "__imp_", 6) == 0
677                   || strncmp (name, "_imp_", 5) == 0))
678             {
679               const char *name1 = (name[1] == '_' ? &name[7] : &name[6]);
680               struct bound_minimal_symbol found;
681
682               found = lookup_minimal_symbol (name1, NULL, objfile);
683               /* If found, there are symbols named "_imp_foo" and "foo"
684                  respectively in OBJFILE.  Set the type of symbol "foo"
685                  as 'mst_solib_trampoline'.  */
686               if (found.minsym != NULL
687                   && MSYMBOL_TYPE (found.minsym) == mst_text)
688                 MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
689             }
690         }
691     }
692
693   /* Free the installed minimal symbol data.  */
694   do_cleanups (cleanup_minimal_symbols);
695
696   bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
697
698   if (info->stabsects)
699     {
700       if (!info->stabstrsect)
701         {
702           error (_("The debugging information in `%s' is corrupted.\nThe "
703                    "file has a `.stabs' section, but no `.stabstr' section."),
704                  name);
705         }
706
707       /* FIXME: dubious.  Why can't we use something normal like
708          bfd_get_section_contents?  */
709       bfd_seek (abfd, abfd->where, 0);
710
711       stabstrsize = bfd_section_size (abfd, info->stabstrsect);
712
713       coffstab_build_psymtabs (objfile,
714                                info->textaddr, info->textsize,
715                                info->stabsects,
716                                info->stabstrsect->filepos, stabstrsize);
717     }
718   if (dwarf2_has_info (objfile, NULL))
719     {
720       /* DWARF2 sections.  */
721       dwarf2_build_psymtabs (objfile);
722     }
723
724   dwarf2_build_frame_info (objfile);
725
726   /* Try to add separate debug file if no symbols table found.   */
727   if (!objfile_has_partial_symbols (objfile))
728     {
729       char *debugfile;
730
731       debugfile = find_separate_debug_file_by_debuglink (objfile);
732       make_cleanup (xfree, debugfile);
733
734       if (debugfile)
735         {
736           bfd *abfd = symfile_bfd_open (debugfile);
737
738           make_cleanup_bfd_unref (abfd);
739           symbol_file_add_separate (abfd, debugfile, symfile_flags, objfile);
740         }
741     }
742
743   do_cleanups (back_to);
744 }
745
746 static void
747 coff_new_init (struct objfile *ignore)
748 {
749 }
750
751 /* Perform any local cleanups required when we are done with a
752    particular objfile.  I.E, we are in the process of discarding all
753    symbol information for an objfile, freeing up all memory held for
754    it, and unlinking the objfile struct from the global list of known
755    objfiles.  */
756
757 static void
758 coff_symfile_finish (struct objfile *objfile)
759 {
760   /* Let stabs reader clean up.  */
761   stabsread_clear_cache ();
762
763   dwarf2_free_objfile (objfile);
764 }
765 \f
766
767 /* Given pointers to a symbol table in coff style exec file,
768    analyze them and create struct symtab's describing the symbols.
769    NSYMS is the number of symbols in the symbol table.
770    We read them one at a time using read_one_sym ().  */
771
772 static void
773 coff_symtab_read (long symtab_offset, unsigned int nsyms,
774                   struct objfile *objfile)
775 {
776   struct gdbarch *gdbarch = get_objfile_arch (objfile);
777   struct context_stack *new;
778   struct coff_symbol coff_symbol;
779   struct coff_symbol *cs = &coff_symbol;
780   static struct internal_syment main_sym;
781   static union internal_auxent main_aux;
782   struct coff_symbol fcn_cs_saved;
783   static struct internal_syment fcn_sym_saved;
784   static union internal_auxent fcn_aux_saved;
785   struct symtab *s;
786   /* A .file is open.  */
787   int in_source_file = 0;
788   int next_file_symnum = -1;
789   /* Name of the current file.  */
790   const char *filestring = "";
791   int depth = 0;
792   int fcn_first_line = 0;
793   CORE_ADDR fcn_first_line_addr = 0;
794   int fcn_last_line = 0;
795   int fcn_start_addr = 0;
796   long fcn_line_ptr = 0;
797   int val;
798   CORE_ADDR tmpaddr;
799   struct minimal_symbol *msym;
800
801   /* Work around a stdio bug in SunOS4.1.1 (this makes me nervous....
802      it's hard to know I've really worked around it.  The fix should
803      be harmless, anyway).  The symptom of the bug is that the first
804      fread (in read_one_sym), will (in my example) actually get data
805      from file offset 268, when the fseek was to 264 (and ftell shows
806      264).  This causes all hell to break loose.  I was unable to
807      reproduce this on a short test program which operated on the same
808      file, performing (I think) the same sequence of operations.
809
810      It stopped happening when I put in this (former) rewind().
811
812      FIXME: Find out if this has been reported to Sun, whether it has
813      been fixed in a later release, etc.  */
814
815   bfd_seek (objfile->obfd, 0, 0);
816
817   /* Position to read the symbol table.  */
818   val = bfd_seek (objfile->obfd, (long) symtab_offset, 0);
819   if (val < 0)
820     perror_with_name (objfile_name (objfile));
821
822   coffread_objfile = objfile;
823   nlist_bfd_global = objfile->obfd;
824   nlist_nsyms_global = nsyms;
825   set_last_source_file (NULL);
826   memset (opaque_type_chain, 0, sizeof opaque_type_chain);
827
828   if (type_vector)              /* Get rid of previous one.  */
829     xfree (type_vector);
830   type_vector_length = INITIAL_TYPE_VECTOR_LENGTH;
831   type_vector = (struct type **)
832     xmalloc (type_vector_length * sizeof (struct type *));
833   memset (type_vector, 0, type_vector_length * sizeof (struct type *));
834
835   coff_start_symtab ("");
836
837   symnum = 0;
838   while (symnum < nsyms)
839     {
840       QUIT;                     /* Make this command interruptable.  */
841
842       read_one_sym (cs, &main_sym, &main_aux);
843
844       if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
845         {
846           if (get_last_source_file ())
847             coff_end_symtab (objfile);
848
849           coff_start_symtab ("_globals_");
850           /* coff_start_symtab will set the language of this symtab to
851              language_unknown, since such a ``file name'' is not
852              recognized.  Override that with the minimal language to
853              allow printing values in this symtab.  */
854           current_subfile->language = language_minimal;
855           complete_symtab ("_globals_", 0, 0);
856           /* Done with all files, everything from here on out is
857              globals.  */
858         }
859
860       /* Special case for file with type declarations only, no
861          text.  */
862       if (!get_last_source_file () && SDB_TYPE (cs->c_type)
863           && cs->c_secnum == N_DEBUG)
864         complete_symtab (filestring, 0, 0);
865
866       /* Typedefs should not be treated as symbol definitions.  */
867       if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
868         {
869           /* Record all functions -- external and static -- in
870              minsyms.  */
871           int section = cs_to_section (cs, objfile);
872
873           tmpaddr = cs->c_value;
874           record_minimal_symbol (cs, tmpaddr, mst_text,
875                                  section, objfile);
876
877           fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
878           fcn_start_addr = tmpaddr;
879           fcn_cs_saved = *cs;
880           fcn_sym_saved = main_sym;
881           fcn_aux_saved = main_aux;
882           continue;
883         }
884
885       switch (cs->c_sclass)
886         {
887         case C_EFCN:
888         case C_EXTDEF:
889         case C_ULABEL:
890         case C_USTATIC:
891         case C_LINE:
892         case C_ALIAS:
893         case C_HIDDEN:
894           complaint (&symfile_complaints,
895                      _("Bad n_sclass for symbol %s"),
896                      cs->c_name);
897           break;
898
899         case C_FILE:
900           /* c_value field contains symnum of next .file entry in
901              table or symnum of first global after last .file.  */
902           next_file_symnum = cs->c_value;
903           if (cs->c_naux > 0)
904             filestring = coff_getfilename (&main_aux);
905           else
906             filestring = "";
907
908           /* Complete symbol table for last object file
909              containing debugging information.  */
910           if (get_last_source_file ())
911             {
912               coff_end_symtab (objfile);
913               coff_start_symtab (filestring);
914             }
915           in_source_file = 1;
916           break;
917
918           /* C_LABEL is used for labels and static functions.
919              Including it here allows gdb to see static functions when
920              no debug info is available.  */
921         case C_LABEL:
922           /* However, labels within a function can make weird
923              backtraces, so filter them out (from phdm@macqel.be).  */
924           if (within_function)
925             break;
926         case C_STAT:
927         case C_THUMBLABEL:
928         case C_THUMBSTAT:
929         case C_THUMBSTATFUNC:
930           if (cs->c_name[0] == '.')
931             {
932               if (strcmp (cs->c_name, ".text") == 0)
933                 {
934                   /* FIXME: don't wire in ".text" as section name or
935                      symbol name!  */
936                   /* Check for in_source_file deals with case of a
937                      file with debugging symbols followed by a later
938                      file with no symbols.  */
939                   if (in_source_file)
940                     complete_symtab (filestring,
941                     cs->c_value + ANOFFSET (objfile->section_offsets,
942                                             SECT_OFF_TEXT (objfile)),
943                                      main_aux.x_scn.x_scnlen);
944                   in_source_file = 0;
945                 }
946               /* Flush rest of '.' symbols.  */
947               break;
948             }
949           else if (!SDB_TYPE (cs->c_type)
950                    && cs->c_name[0] == 'L'
951                    && (strncmp (cs->c_name, "LI%", 3) == 0
952                        || strncmp (cs->c_name, "LF%", 3) == 0
953                        || strncmp (cs->c_name, "LC%", 3) == 0
954                        || strncmp (cs->c_name, "LP%", 3) == 0
955                        || strncmp (cs->c_name, "LPB%", 4) == 0
956                        || strncmp (cs->c_name, "LBB%", 4) == 0
957                        || strncmp (cs->c_name, "LBE%", 4) == 0
958                        || strncmp (cs->c_name, "LPBX%", 5) == 0))
959             /* At least on a 3b1, gcc generates swbeg and string labels
960                that look like this.  Ignore them.  */
961             break;
962           /* Fall in for static symbols that don't start with '.'  */
963         case C_THUMBEXT:
964         case C_THUMBEXTFUNC:
965         case C_EXT:
966           {
967             /* Record it in the minimal symbols regardless of
968                SDB_TYPE.  This parallels what we do for other debug
969                formats, and probably is needed to make
970                print_address_symbolic work right without the (now
971                gone) "set fast-symbolic-addr off" kludge.  */
972
973             enum minimal_symbol_type ms_type;
974             int sec;
975             CORE_ADDR offset = 0;
976
977             if (cs->c_secnum == N_UNDEF)
978               {
979                 /* This is a common symbol.  We used to rely on
980                    the target to tell us whether it knows where
981                    the symbol has been relocated to, but none of
982                    the target implementations actually provided
983                    that operation.  So we just ignore the symbol,
984                    the same way we would do if we had a target-side
985                    symbol lookup which returned no match.  */
986                 break;
987               }
988             else if (cs->c_secnum == N_ABS)
989               {
990                 /* Use the correct minimal symbol type (and don't
991                    relocate) for absolute values.  */
992                 ms_type = mst_abs;
993                 sec = cs_to_section (cs, objfile);
994                 tmpaddr = cs->c_value;
995               }
996             else
997               {
998                 asection *bfd_section = cs_to_bfd_section (cs, objfile);
999
1000                 sec = cs_to_section (cs, objfile);
1001                 tmpaddr = cs->c_value;
1002                 /* Statics in a PE file also get relocated.  */
1003                 if (cs->c_sclass == C_EXT
1004                     || cs->c_sclass == C_THUMBEXTFUNC
1005                     || cs->c_sclass == C_THUMBEXT
1006                     || (pe_file && (cs->c_sclass == C_STAT)))
1007                   offset = ANOFFSET (objfile->section_offsets, sec);
1008
1009                 if (bfd_section->flags & SEC_CODE)
1010                   {
1011                     ms_type =
1012                       cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXTFUNC
1013                       || cs->c_sclass == C_THUMBEXT ?
1014                       mst_text : mst_file_text;
1015                     tmpaddr = gdbarch_addr_bits_remove (gdbarch, tmpaddr);
1016                   }
1017                 else if (bfd_section->flags & SEC_ALLOC
1018                          && bfd_section->flags & SEC_LOAD)
1019                   {
1020                     ms_type =
1021                       cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1022                       ? mst_data : mst_file_data;
1023                   }
1024                 else if (bfd_section->flags & SEC_ALLOC)
1025                   {
1026                     ms_type =
1027                       cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1028                       ? mst_bss : mst_file_bss;
1029                   }
1030                 else
1031                   ms_type = mst_unknown;
1032               }
1033
1034             msym = record_minimal_symbol (cs, tmpaddr, ms_type,
1035                                           sec, objfile);
1036             if (msym)
1037               gdbarch_coff_make_msymbol_special (gdbarch,
1038                                                  cs->c_sclass, msym);
1039
1040             if (SDB_TYPE (cs->c_type))
1041               {
1042                 struct symbol *sym;
1043
1044                 sym = process_coff_symbol
1045                   (cs, &main_aux, objfile);
1046                 SYMBOL_VALUE (sym) = tmpaddr + offset;
1047                 SYMBOL_SECTION (sym) = sec;
1048               }
1049           }
1050           break;
1051
1052         case C_FCN:
1053           if (strcmp (cs->c_name, ".bf") == 0)
1054             {
1055               within_function = 1;
1056
1057               /* Value contains address of first non-init type
1058                  code.  */
1059               /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
1060                  contains line number of '{' }.  */
1061               if (cs->c_naux != 1)
1062                 complaint (&symfile_complaints,
1063                            _("`.bf' symbol %d has no aux entry"),
1064                            cs->c_symnum);
1065               fcn_first_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
1066               fcn_first_line_addr = cs->c_value;
1067
1068               /* Might want to check that locals are 0 and
1069                  context_stack_depth is zero, and complain if not.  */
1070
1071               depth = 0;
1072               new = push_context (depth, fcn_start_addr);
1073               fcn_cs_saved.c_name = getsymname (&fcn_sym_saved);
1074               new->name =
1075                 process_coff_symbol (&fcn_cs_saved, 
1076                                      &fcn_aux_saved, objfile);
1077             }
1078           else if (strcmp (cs->c_name, ".ef") == 0)
1079             {
1080               if (!within_function)
1081                 error (_("Bad coff function information."));
1082               /* The value of .ef is the address of epilogue code;
1083                  not useful for gdb.  */
1084               /* { main_aux.x_sym.x_misc.x_lnsz.x_lnno
1085                  contains number of lines to '}' */
1086
1087               if (context_stack_depth <= 0)
1088                 {       /* We attempted to pop an empty context stack.  */
1089                   complaint (&symfile_complaints,
1090                              _("`.ef' symbol without matching `.bf' "
1091                                "symbol ignored starting at symnum %d"),
1092                              cs->c_symnum);
1093                   within_function = 0;
1094                   break;
1095                 }
1096
1097               new = pop_context ();
1098               /* Stack must be empty now.  */
1099               if (context_stack_depth > 0 || new == NULL)
1100                 {
1101                   complaint (&symfile_complaints,
1102                              _("Unmatched .ef symbol(s) ignored "
1103                                "starting at symnum %d"),
1104                              cs->c_symnum);
1105                   within_function = 0;
1106                   break;
1107                 }
1108               if (cs->c_naux != 1)
1109                 {
1110                   complaint (&symfile_complaints,
1111                              _("`.ef' symbol %d has no aux entry"),
1112                              cs->c_symnum);
1113                   fcn_last_line = 0x7FFFFFFF;
1114                 }
1115               else
1116                 {
1117                   fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
1118                 }
1119               /* fcn_first_line is the line number of the opening '{'.
1120                  Do not record it - because it would affect gdb's idea
1121                  of the line number of the first statement of the
1122                  function - except for one-line functions, for which
1123                  it is also the line number of all the statements and
1124                  of the closing '}', and for which we do not have any
1125                  other statement-line-number.  */
1126               if (fcn_last_line == 1)
1127                 record_line (current_subfile, fcn_first_line,
1128                              gdbarch_addr_bits_remove (gdbarch,
1129                                                        fcn_first_line_addr));
1130               else
1131                 enter_linenos (fcn_line_ptr, fcn_first_line,
1132                                fcn_last_line, objfile);
1133
1134               finish_block (new->name, &local_symbols,
1135                             new->old_blocks, new->start_addr,
1136                             fcn_cs_saved.c_value
1137                             + fcn_aux_saved.x_sym.x_misc.x_fsize
1138                             + ANOFFSET (objfile->section_offsets,
1139                                         SECT_OFF_TEXT (objfile)),
1140                             objfile
1141                 );
1142               within_function = 0;
1143             }
1144           break;
1145
1146         case C_BLOCK:
1147           if (strcmp (cs->c_name, ".bb") == 0)
1148             {
1149               tmpaddr = cs->c_value;
1150               tmpaddr += ANOFFSET (objfile->section_offsets,
1151                                    SECT_OFF_TEXT (objfile));
1152               push_context (++depth, tmpaddr);
1153             }
1154           else if (strcmp (cs->c_name, ".eb") == 0)
1155             {
1156               if (context_stack_depth <= 0)
1157                 {       /* We attempted to pop an empty context stack.  */
1158                   complaint (&symfile_complaints,
1159                              _("`.eb' symbol without matching `.bb' "
1160                                "symbol ignored starting at symnum %d"),
1161                              cs->c_symnum);
1162                   break;
1163                 }
1164
1165               new = pop_context ();
1166               if (depth-- != new->depth)
1167                 {
1168                   complaint (&symfile_complaints,
1169                              _("Mismatched .eb symbol ignored "
1170                                "starting at symnum %d"),
1171                              symnum);
1172                   break;
1173                 }
1174               if (local_symbols && context_stack_depth > 0)
1175                 {
1176                   tmpaddr =
1177                     cs->c_value + ANOFFSET (objfile->section_offsets,
1178                                             SECT_OFF_TEXT (objfile));
1179                   /* Make a block for the local symbols within.  */
1180                   finish_block (0, &local_symbols, new->old_blocks,
1181                                 new->start_addr, tmpaddr, objfile);
1182                 }
1183               /* Now pop locals of block just finished.  */
1184               local_symbols = new->locals;
1185             }
1186           break;
1187
1188         default:
1189           process_coff_symbol (cs, &main_aux, objfile);
1190           break;
1191         }
1192     }
1193
1194   if ((nsyms == 0) && (pe_file))
1195     {
1196       /* We've got no debugging symbols, but it's a portable
1197          executable, so try to read the export table.  */
1198       read_pe_exported_syms (objfile);
1199     }
1200
1201   if (get_last_source_file ())
1202     coff_end_symtab (objfile);
1203
1204   /* Patch up any opaque types (references to types that are not defined
1205      in the file where they are referenced, e.g. "struct foo *bar").  */
1206   ALL_OBJFILE_SYMTABS (objfile, s)
1207     patch_opaque_types (s);
1208
1209   coffread_objfile = NULL;
1210 }
1211 \f
1212 /* Routines for reading headers and symbols from executable.  */
1213
1214 /* Read the next symbol, swap it, and return it in both
1215    internal_syment form, and coff_symbol form.  Also return its first
1216    auxent, if any, in internal_auxent form, and skip any other
1217    auxents.  */
1218
1219 static void
1220 read_one_sym (struct coff_symbol *cs,
1221               struct internal_syment *sym,
1222               union internal_auxent *aux)
1223 {
1224   int i;
1225   bfd_size_type bytes;
1226
1227   cs->c_symnum = symnum;
1228   bytes = bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
1229   if (bytes != local_symesz)
1230     error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
1231   bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *) sym);
1232   cs->c_naux = sym->n_numaux & 0xff;
1233   if (cs->c_naux >= 1)
1234     {
1235       bytes  = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
1236       if (bytes != local_auxesz)
1237         error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
1238       bfd_coff_swap_aux_in (symfile_bfd, temp_aux,
1239                             sym->n_type, sym->n_sclass,
1240                             0, cs->c_naux, (char *) aux);
1241       /* If more than one aux entry, read past it (only the first aux
1242          is important).  */
1243       for (i = 1; i < cs->c_naux; i++)
1244         {
1245           bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
1246           if (bytes != local_auxesz)
1247             error (_("%s: error reading symbols"),
1248                    objfile_name (coffread_objfile));
1249         }
1250     }
1251   cs->c_name = getsymname (sym);
1252   cs->c_value = sym->n_value;
1253   cs->c_sclass = (sym->n_sclass & 0xff);
1254   cs->c_secnum = sym->n_scnum;
1255   cs->c_type = (unsigned) sym->n_type;
1256   if (!SDB_TYPE (cs->c_type))
1257     cs->c_type = 0;
1258
1259 #if 0
1260   if (cs->c_sclass & 128)
1261     printf (_("thumb symbol %s, class 0x%x\n"), cs->c_name, cs->c_sclass);
1262 #endif
1263
1264   symnum += 1 + cs->c_naux;
1265
1266   /* The PE file format stores symbol values as offsets within the
1267      section, rather than as absolute addresses.  We correct that
1268      here, if the symbol has an appropriate storage class.  FIXME: We
1269      should use BFD to read the symbols, rather than duplicating the
1270      work here.  */
1271   if (pe_file)
1272     {
1273       switch (cs->c_sclass)
1274         {
1275         case C_EXT:
1276         case C_THUMBEXT:
1277         case C_THUMBEXTFUNC:
1278         case C_SECTION:
1279         case C_NT_WEAK:
1280         case C_STAT:
1281         case C_THUMBSTAT:
1282         case C_THUMBSTATFUNC:
1283         case C_LABEL:
1284         case C_THUMBLABEL:
1285         case C_BLOCK:
1286         case C_FCN:
1287         case C_EFCN:
1288           if (cs->c_secnum != 0)
1289             cs->c_value += cs_section_address (cs, symfile_bfd);
1290           break;
1291         }
1292     }
1293 }
1294 \f
1295 /* Support for string table handling.  */
1296
1297 static char *stringtab = NULL;
1298
1299 static int
1300 init_stringtab (bfd *abfd, long offset)
1301 {
1302   long length;
1303   int val;
1304   unsigned char lengthbuf[4];
1305
1306   free_stringtab ();
1307
1308   /* If the file is stripped, the offset might be zero, indicating no
1309      string table.  Just return with `stringtab' set to null.  */
1310   if (offset == 0)
1311     return 0;
1312
1313   if (bfd_seek (abfd, offset, 0) < 0)
1314     return -1;
1315
1316   val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
1317   length = bfd_h_get_32 (symfile_bfd, lengthbuf);
1318
1319   /* If no string table is needed, then the file may end immediately
1320      after the symbols.  Just return with `stringtab' set to null.  */
1321   if (val != sizeof lengthbuf || length < sizeof lengthbuf)
1322     return 0;
1323
1324   stringtab = (char *) xmalloc (length);
1325   /* This is in target format (probably not very useful, and not
1326      currently used), not host format.  */
1327   memcpy (stringtab, lengthbuf, sizeof lengthbuf);
1328   if (length == sizeof length)  /* Empty table -- just the count.  */
1329     return 0;
1330
1331   val = bfd_bread (stringtab + sizeof lengthbuf, 
1332                    length - sizeof lengthbuf, abfd);
1333   if (val != length - sizeof lengthbuf || stringtab[length - 1] != '\0')
1334     return -1;
1335
1336   return 0;
1337 }
1338
1339 static void
1340 free_stringtab (void)
1341 {
1342   if (stringtab)
1343     xfree (stringtab);
1344   stringtab = NULL;
1345 }
1346
1347 static void
1348 free_stringtab_cleanup (void *ignore)
1349 {
1350   free_stringtab ();
1351 }
1352
1353 static char *
1354 getsymname (struct internal_syment *symbol_entry)
1355 {
1356   static char buffer[SYMNMLEN + 1];
1357   char *result;
1358
1359   if (symbol_entry->_n._n_n._n_zeroes == 0)
1360     {
1361       /* FIXME: Probably should be detecting corrupt symbol files by
1362          seeing whether offset points to within the stringtab.  */
1363       result = stringtab + symbol_entry->_n._n_n._n_offset;
1364     }
1365   else
1366     {
1367       strncpy (buffer, symbol_entry->_n._n_name, SYMNMLEN);
1368       buffer[SYMNMLEN] = '\0';
1369       result = buffer;
1370     }
1371   return result;
1372 }
1373
1374 /* Extract the file name from the aux entry of a C_FILE symbol.
1375    Return only the last component of the name.  Result is in static
1376    storage and is only good for temporary use.  */
1377
1378 static const char *
1379 coff_getfilename (union internal_auxent *aux_entry)
1380 {
1381   static char buffer[BUFSIZ];
1382   const char *result;
1383
1384   if (aux_entry->x_file.x_n.x_zeroes == 0)
1385     {
1386       if (strlen (stringtab + aux_entry->x_file.x_n.x_offset) >= BUFSIZ)
1387         internal_error (__FILE__, __LINE__, _("coff file name too long"));
1388       strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_offset);
1389     }
1390   else
1391     {
1392       strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
1393       buffer[FILNMLEN] = '\0';
1394     }
1395   result = buffer;
1396
1397   /* FIXME: We should not be throwing away the information about what
1398      directory.  It should go into dirname of the symtab, or some such
1399      place.  */
1400   result = lbasename (result);
1401   return (result);
1402 }
1403 \f
1404 /* Support for line number handling.  */
1405
1406 static char *linetab = NULL;
1407 static long linetab_offset;
1408 static unsigned long linetab_size;
1409
1410 /* Read in all the line numbers for fast lookups later.  Leave them in
1411    external (unswapped) format in memory; we'll swap them as we enter
1412    them into GDB's data structures.  */
1413
1414 static int
1415 init_lineno (bfd *abfd, long offset, int size)
1416 {
1417   int val;
1418
1419   linetab_offset = offset;
1420   linetab_size = size;
1421
1422   free_linetab ();
1423
1424   if (size == 0)
1425     return 0;
1426
1427   if (bfd_seek (abfd, offset, 0) < 0)
1428     return -1;
1429
1430   /* Allocate the desired table, plus a sentinel.  */
1431   linetab = (char *) xmalloc (size + local_linesz);
1432
1433   val = bfd_bread (linetab, size, abfd);
1434   if (val != size)
1435     return -1;
1436
1437   /* Terminate it with an all-zero sentinel record.  */
1438   memset (linetab + size, 0, local_linesz);
1439
1440   return 0;
1441 }
1442
1443 static void
1444 free_linetab (void)
1445 {
1446   if (linetab)
1447     xfree (linetab);
1448   linetab = NULL;
1449 }
1450
1451 static void
1452 free_linetab_cleanup (void *ignore)
1453 {
1454   free_linetab ();
1455 }
1456
1457 #if !defined (L_LNNO32)
1458 #define L_LNNO32(lp) ((lp)->l_lnno)
1459 #endif
1460
1461 static void
1462 enter_linenos (long file_offset, int first_line,
1463                int last_line, struct objfile *objfile)
1464 {
1465   struct gdbarch *gdbarch = get_objfile_arch (objfile);
1466   char *rawptr;
1467   struct internal_lineno lptr;
1468
1469   if (!linetab)
1470     return;
1471   if (file_offset < linetab_offset)
1472     {
1473       complaint (&symfile_complaints,
1474                  _("Line number pointer %ld lower than start of line numbers"),
1475                  file_offset);
1476       if (file_offset > linetab_size)   /* Too big to be an offset?  */
1477         return;
1478       file_offset += linetab_offset;    /* Try reading at that linetab
1479                                            offset.  */
1480     }
1481
1482   rawptr = &linetab[file_offset - linetab_offset];
1483
1484   /* Skip first line entry for each function.  */
1485   rawptr += local_linesz;
1486   /* Line numbers start at one for the first line of the function.  */
1487   first_line--;
1488
1489   /* If the line number table is full (e.g. 64K lines in COFF debug
1490      info), the next function's L_LNNO32 might not be zero, so don't
1491      overstep the table's end in any case.  */
1492   while (rawptr <= &linetab[0] + linetab_size)
1493     {
1494       bfd_coff_swap_lineno_in (symfile_bfd, rawptr, &lptr);
1495       rawptr += local_linesz;
1496       /* The next function, or the sentinel, will have L_LNNO32 zero;
1497          we exit.  */
1498       if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
1499         {
1500           CORE_ADDR addr = lptr.l_addr.l_paddr;
1501           addr += ANOFFSET (objfile->section_offsets,
1502                             SECT_OFF_TEXT (objfile));
1503           record_line (current_subfile,
1504                        first_line + L_LNNO32 (&lptr),
1505                        gdbarch_addr_bits_remove (gdbarch, addr));
1506         }
1507       else
1508         break;
1509     }
1510 }
1511 \f
1512 static void
1513 patch_type (struct type *type, struct type *real_type)
1514 {
1515   struct type *target = TYPE_TARGET_TYPE (type);
1516   struct type *real_target = TYPE_TARGET_TYPE (real_type);
1517   int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field);
1518
1519   TYPE_LENGTH (target) = TYPE_LENGTH (real_target);
1520   TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target);
1521   TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target,
1522                                                       field_size);
1523
1524   memcpy (TYPE_FIELDS (target), 
1525           TYPE_FIELDS (real_target), 
1526           field_size);
1527
1528   if (TYPE_NAME (real_target))
1529     {
1530       /* The previous copy of TYPE_NAME is allocated by
1531          process_coff_symbol.  */
1532       if (TYPE_NAME (target))
1533         xfree ((char*) TYPE_NAME (target));
1534       TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target));
1535     }
1536 }
1537
1538 /* Patch up all appropriate typedef symbols in the opaque_type_chains
1539    so that they can be used to print out opaque data structures
1540    properly.  */
1541
1542 static void
1543 patch_opaque_types (struct symtab *s)
1544 {
1545   struct block *b;
1546   struct block_iterator iter;
1547   struct symbol *real_sym;
1548
1549   /* Go through the per-file symbols only.  */
1550   b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
1551   ALL_BLOCK_SYMBOLS (b, iter, real_sym)
1552     {
1553       /* Find completed typedefs to use to fix opaque ones.
1554          Remove syms from the chain when their types are stored,
1555          but search the whole chain, as there may be several syms
1556          from different files with the same name.  */
1557       if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF
1558           && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN
1559           && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR
1560           && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
1561         {
1562           const char *name = SYMBOL_LINKAGE_NAME (real_sym);
1563           int hash = hashname (name);
1564           struct symbol *sym, *prev;
1565
1566           prev = 0;
1567           for (sym = opaque_type_chain[hash]; sym;)
1568             {
1569               if (name[0] == SYMBOL_LINKAGE_NAME (sym)[0]
1570                   && strcmp (name + 1, SYMBOL_LINKAGE_NAME (sym) + 1) == 0)
1571                 {
1572                   if (prev)
1573                     {
1574                       SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
1575                     }
1576                   else
1577                     {
1578                       opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
1579                     }
1580
1581                   patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
1582
1583                   if (prev)
1584                     {
1585                       sym = SYMBOL_VALUE_CHAIN (prev);
1586                     }
1587                   else
1588                     {
1589                       sym = opaque_type_chain[hash];
1590                     }
1591                 }
1592               else
1593                 {
1594                   prev = sym;
1595                   sym = SYMBOL_VALUE_CHAIN (sym);
1596                 }
1597             }
1598         }
1599     }
1600 }
1601 \f
1602 static int
1603 coff_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
1604 {
1605   return gdbarch_sdb_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
1606 }
1607
1608 static const struct symbol_register_ops coff_register_funcs = {
1609   coff_reg_to_regnum
1610 };
1611
1612 /* The "aclass" index for computed COFF symbols.  */
1613
1614 static int coff_register_index;
1615
1616 static struct symbol *
1617 process_coff_symbol (struct coff_symbol *cs,
1618                      union internal_auxent *aux,
1619                      struct objfile *objfile)
1620 {
1621   struct symbol *sym = allocate_symbol (objfile);
1622   char *name;
1623
1624   name = cs->c_name;
1625   name = EXTERNAL_NAME (name, objfile->obfd);
1626   SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
1627                        &objfile->objfile_obstack);
1628   SYMBOL_SET_NAMES (sym, name, strlen (name), 1, objfile);
1629
1630   /* default assumptions */
1631   SYMBOL_VALUE (sym) = cs->c_value;
1632   SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
1633   SYMBOL_SECTION (sym) = cs_to_section (cs, objfile);
1634
1635   if (ISFCN (cs->c_type))
1636     {
1637       SYMBOL_VALUE (sym) += ANOFFSET (objfile->section_offsets,
1638                                       SECT_OFF_TEXT (objfile));
1639       SYMBOL_TYPE (sym) =
1640         lookup_function_type (decode_function_type (cs, cs->c_type,
1641                                                     aux, objfile));
1642
1643       SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
1644       if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
1645           || cs->c_sclass == C_THUMBSTATFUNC)
1646         add_symbol_to_list (sym, &file_symbols);
1647       else if (cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1648                || cs->c_sclass == C_THUMBEXTFUNC)
1649         add_symbol_to_list (sym, &global_symbols);
1650     }
1651   else
1652     {
1653       SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux, objfile);
1654       switch (cs->c_sclass)
1655         {
1656         case C_NULL:
1657           break;
1658
1659         case C_AUTO:
1660           SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
1661           add_symbol_to_list (sym, &local_symbols);
1662           break;
1663
1664         case C_THUMBEXT:
1665         case C_THUMBEXTFUNC:
1666         case C_EXT:
1667           SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
1668           SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
1669           SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
1670                                                   SECT_OFF_TEXT (objfile));
1671           add_symbol_to_list (sym, &global_symbols);
1672           break;
1673
1674         case C_THUMBSTAT:
1675         case C_THUMBSTATFUNC:
1676         case C_STAT:
1677           SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
1678           SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
1679           SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
1680                                                   SECT_OFF_TEXT (objfile));
1681           if (within_function)
1682             {
1683               /* Static symbol of local scope.  */
1684               add_symbol_to_list (sym, &local_symbols);
1685             }
1686           else
1687             {
1688               /* Static symbol at top level of file.  */
1689               add_symbol_to_list (sym, &file_symbols);
1690             }
1691           break;
1692
1693 #ifdef C_GLBLREG                /* AMD coff */
1694         case C_GLBLREG:
1695 #endif
1696         case C_REG:
1697           SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
1698           SYMBOL_VALUE (sym) = cs->c_value;
1699           add_symbol_to_list (sym, &local_symbols);
1700           break;
1701
1702         case C_THUMBLABEL:
1703         case C_LABEL:
1704           break;
1705
1706         case C_ARG:
1707           SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
1708           SYMBOL_IS_ARGUMENT (sym) = 1;
1709           add_symbol_to_list (sym, &local_symbols);
1710           break;
1711
1712         case C_REGPARM:
1713           SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
1714           SYMBOL_IS_ARGUMENT (sym) = 1;
1715           SYMBOL_VALUE (sym) = cs->c_value;
1716           add_symbol_to_list (sym, &local_symbols);
1717           break;
1718
1719         case C_TPDEF:
1720           SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
1721           SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
1722
1723           /* If type has no name, give it one.  */
1724           if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
1725             {
1726               if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
1727                   || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC)
1728                 {
1729                   /* If we are giving a name to a type such as
1730                      "pointer to foo" or "function returning foo", we
1731                      better not set the TYPE_NAME.  If the program
1732                      contains "typedef char *caddr_t;", we don't want 
1733                      all variables of type char * to print as caddr_t.
1734                      This is not just a consequence of GDB's type
1735                      management; CC and GCC (at least through version
1736                      2.4) both output variables of either type char *
1737                      or caddr_t with the type refering to the C_TPDEF
1738                      symbol for caddr_t.  If a future compiler cleans
1739                      this up it GDB is not ready for it yet, but if it
1740                      becomes ready we somehow need to disable this
1741                      check (without breaking the PCC/GCC2.4 case).
1742
1743                      Sigh.
1744
1745                      Fortunately, this check seems not to be necessary
1746                      for anything except pointers or functions.  */
1747                   ;
1748                 }
1749               else
1750                 TYPE_NAME (SYMBOL_TYPE (sym)) =
1751                   xstrdup (SYMBOL_LINKAGE_NAME (sym));
1752             }
1753
1754           /* Keep track of any type which points to empty structured
1755              type, so it can be filled from a definition from another
1756              file.  A simple forward reference (TYPE_CODE_UNDEF) is
1757              not an empty structured type, though; the forward
1758              references work themselves out via the magic of
1759              coff_lookup_type.  */
1760           if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
1761               && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
1762               && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym)))
1763                  != TYPE_CODE_UNDEF)
1764             {
1765               int i = hashname (SYMBOL_LINKAGE_NAME (sym));
1766
1767               SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
1768               opaque_type_chain[i] = sym;
1769             }
1770           add_symbol_to_list (sym, &file_symbols);
1771           break;
1772
1773         case C_STRTAG:
1774         case C_UNTAG:
1775         case C_ENTAG:
1776           SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
1777           SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
1778
1779           /* Some compilers try to be helpful by inventing "fake"
1780              names for anonymous enums, structures, and unions, like
1781              "~0fake" or ".0fake".  Thanks, but no thanks...  */
1782           if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
1783             if (SYMBOL_LINKAGE_NAME (sym) != NULL
1784                 && *SYMBOL_LINKAGE_NAME (sym) != '~'
1785                 && *SYMBOL_LINKAGE_NAME (sym) != '.')
1786               TYPE_TAG_NAME (SYMBOL_TYPE (sym)) =
1787                 concat (SYMBOL_LINKAGE_NAME (sym), (char *)NULL);
1788
1789           add_symbol_to_list (sym, &file_symbols);
1790           break;
1791
1792         default:
1793           break;
1794         }
1795     }
1796   return sym;
1797 }
1798 \f
1799 /* Decode a coff type specifier;  return the type that is meant.  */
1800
1801 static struct type *
1802 decode_type (struct coff_symbol *cs, unsigned int c_type,
1803              union internal_auxent *aux, struct objfile *objfile)
1804 {
1805   struct type *type = 0;
1806   unsigned int new_c_type;
1807
1808   if (c_type & ~N_BTMASK)
1809     {
1810       new_c_type = DECREF (c_type);
1811       if (ISPTR (c_type))
1812         {
1813           type = decode_type (cs, new_c_type, aux, objfile);
1814           type = lookup_pointer_type (type);
1815         }
1816       else if (ISFCN (c_type))
1817         {
1818           type = decode_type (cs, new_c_type, aux, objfile);
1819           type = lookup_function_type (type);
1820         }
1821       else if (ISARY (c_type))
1822         {
1823           int i, n;
1824           unsigned short *dim;
1825           struct type *base_type, *index_type, *range_type;
1826
1827           /* Define an array type.  */
1828           /* auxent refers to array, not base type.  */
1829           if (aux->x_sym.x_tagndx.l == 0)
1830             cs->c_naux = 0;
1831
1832           /* Shift the indices down.  */
1833           dim = &aux->x_sym.x_fcnary.x_ary.x_dimen[0];
1834           i = 1;
1835           n = dim[0];
1836           for (i = 0; *dim && i < DIMNUM - 1; i++, dim++)
1837             *dim = *(dim + 1);
1838           *dim = 0;
1839
1840           base_type = decode_type (cs, new_c_type, aux, objfile);
1841           index_type = objfile_type (objfile)->builtin_int;
1842           range_type
1843             = create_static_range_type ((struct type *) NULL,
1844                                         index_type, 0, n - 1);
1845           type =
1846             create_array_type ((struct type *) NULL, 
1847                                base_type, range_type);
1848         }
1849       return type;
1850     }
1851
1852   /* Reference to existing type.  This only occurs with the struct,
1853      union, and enum types.  EPI a29k coff fakes us out by producing
1854      aux entries with a nonzero x_tagndx for definitions of structs,
1855      unions, and enums, so we have to check the c_sclass field.  SCO
1856      3.2v4 cc gets confused with pointers to pointers to defined
1857      structs, and generates negative x_tagndx fields.  */
1858   if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0)
1859     {
1860       if (cs->c_sclass != C_STRTAG
1861           && cs->c_sclass != C_UNTAG
1862           && cs->c_sclass != C_ENTAG
1863           && aux->x_sym.x_tagndx.l >= 0)
1864         {
1865           type = coff_alloc_type (aux->x_sym.x_tagndx.l);
1866           return type;
1867         }
1868       else
1869         {
1870           complaint (&symfile_complaints,
1871                      _("Symbol table entry for %s has bad tagndx value"),
1872                      cs->c_name);
1873           /* And fall through to decode_base_type...  */
1874         }
1875     }
1876
1877   return decode_base_type (cs, BTYPE (c_type), aux, objfile);
1878 }
1879
1880 /* Decode a coff type specifier for function definition;
1881    return the type that the function returns.  */
1882
1883 static struct type *
1884 decode_function_type (struct coff_symbol *cs, 
1885                       unsigned int c_type,
1886                       union internal_auxent *aux, 
1887                       struct objfile *objfile)
1888 {
1889   if (aux->x_sym.x_tagndx.l == 0)
1890     cs->c_naux = 0;     /* auxent refers to function, not base
1891                            type.  */
1892
1893   return decode_type (cs, DECREF (c_type), aux, objfile);
1894 }
1895 \f
1896 /* Basic C types.  */
1897
1898 static struct type *
1899 decode_base_type (struct coff_symbol *cs, 
1900                   unsigned int c_type,
1901                   union internal_auxent *aux, 
1902                   struct objfile *objfile)
1903 {
1904   struct gdbarch *gdbarch = get_objfile_arch (objfile);
1905   struct type *type;
1906
1907   switch (c_type)
1908     {
1909     case T_NULL:
1910       /* Shows up with "void (*foo)();" structure members.  */
1911       return objfile_type (objfile)->builtin_void;
1912
1913 #ifdef T_VOID
1914     case T_VOID:
1915       /* Intel 960 COFF has this symbol and meaning.  */
1916       return objfile_type (objfile)->builtin_void;
1917 #endif
1918
1919     case T_CHAR:
1920       return objfile_type (objfile)->builtin_char;
1921
1922     case T_SHORT:
1923       return objfile_type (objfile)->builtin_short;
1924
1925     case T_INT:
1926       return objfile_type (objfile)->builtin_int;
1927
1928     case T_LONG:
1929       if (cs->c_sclass == C_FIELD
1930           && aux->x_sym.x_misc.x_lnsz.x_size
1931              > gdbarch_long_bit (gdbarch))
1932         return objfile_type (objfile)->builtin_long_long;
1933       else
1934         return objfile_type (objfile)->builtin_long;
1935
1936     case T_FLOAT:
1937       return objfile_type (objfile)->builtin_float;
1938
1939     case T_DOUBLE:
1940       return objfile_type (objfile)->builtin_double;
1941
1942     case T_LNGDBL:
1943       return objfile_type (objfile)->builtin_long_double;
1944
1945     case T_STRUCT:
1946       if (cs->c_naux != 1)
1947         {
1948           /* Anonymous structure type.  */
1949           type = coff_alloc_type (cs->c_symnum);
1950           TYPE_CODE (type) = TYPE_CODE_STRUCT;
1951           TYPE_NAME (type) = NULL;
1952           /* This used to set the tag to "<opaque>".  But I think
1953              setting it to NULL is right, and the printing code can
1954              print it as "struct {...}".  */
1955           TYPE_TAG_NAME (type) = NULL;
1956           INIT_CPLUS_SPECIFIC (type);
1957           TYPE_LENGTH (type) = 0;
1958           TYPE_FIELDS (type) = 0;
1959           TYPE_NFIELDS (type) = 0;
1960         }
1961       else
1962         {
1963           type = coff_read_struct_type (cs->c_symnum,
1964                                         aux->x_sym.x_misc.x_lnsz.x_size,
1965                                         aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1966                                         objfile);
1967         }
1968       return type;
1969
1970     case T_UNION:
1971       if (cs->c_naux != 1)
1972         {
1973           /* Anonymous union type.  */
1974           type = coff_alloc_type (cs->c_symnum);
1975           TYPE_NAME (type) = NULL;
1976           /* This used to set the tag to "<opaque>".  But I think
1977              setting it to NULL is right, and the printing code can
1978              print it as "union {...}".  */
1979           TYPE_TAG_NAME (type) = NULL;
1980           INIT_CPLUS_SPECIFIC (type);
1981           TYPE_LENGTH (type) = 0;
1982           TYPE_FIELDS (type) = 0;
1983           TYPE_NFIELDS (type) = 0;
1984         }
1985       else
1986         {
1987           type = coff_read_struct_type (cs->c_symnum,
1988                                         aux->x_sym.x_misc.x_lnsz.x_size,
1989                                         aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1990                                         objfile);
1991         }
1992       TYPE_CODE (type) = TYPE_CODE_UNION;
1993       return type;
1994
1995     case T_ENUM:
1996       if (cs->c_naux != 1)
1997         {
1998           /* Anonymous enum type.  */
1999           type = coff_alloc_type (cs->c_symnum);
2000           TYPE_CODE (type) = TYPE_CODE_ENUM;
2001           TYPE_NAME (type) = NULL;
2002           /* This used to set the tag to "<opaque>".  But I think
2003              setting it to NULL is right, and the printing code can
2004              print it as "enum {...}".  */
2005           TYPE_TAG_NAME (type) = NULL;
2006           TYPE_LENGTH (type) = 0;
2007           TYPE_FIELDS (type) = 0;
2008           TYPE_NFIELDS (type) = 0;
2009         }
2010       else
2011         {
2012           type = coff_read_enum_type (cs->c_symnum,
2013                                       aux->x_sym.x_misc.x_lnsz.x_size,
2014                                       aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
2015                                       objfile);
2016         }
2017       return type;
2018
2019     case T_MOE:
2020       /* Shouldn't show up here.  */
2021       break;
2022
2023     case T_UCHAR:
2024       return objfile_type (objfile)->builtin_unsigned_char;
2025
2026     case T_USHORT:
2027       return objfile_type (objfile)->builtin_unsigned_short;
2028
2029     case T_UINT:
2030       return objfile_type (objfile)->builtin_unsigned_int;
2031
2032     case T_ULONG:
2033       if (cs->c_sclass == C_FIELD
2034           && aux->x_sym.x_misc.x_lnsz.x_size
2035              > gdbarch_long_bit (gdbarch))
2036         return objfile_type (objfile)->builtin_unsigned_long_long;
2037       else
2038         return objfile_type (objfile)->builtin_unsigned_long;
2039     }
2040   complaint (&symfile_complaints, 
2041              _("Unexpected type for symbol %s"), cs->c_name);
2042   return objfile_type (objfile)->builtin_void;
2043 }
2044 \f
2045 /* This page contains subroutines of read_type.  */
2046
2047 /* Read the description of a structure (or union type) and return an
2048    object describing the type.  */
2049
2050 static struct type *
2051 coff_read_struct_type (int index, int length, int lastsym,
2052                        struct objfile *objfile)
2053 {
2054   struct nextfield
2055     {
2056       struct nextfield *next;
2057       struct field field;
2058     };
2059
2060   struct type *type;
2061   struct nextfield *list = 0;
2062   struct nextfield *new;
2063   int nfields = 0;
2064   int n;
2065   char *name;
2066   struct coff_symbol member_sym;
2067   struct coff_symbol *ms = &member_sym;
2068   struct internal_syment sub_sym;
2069   union internal_auxent sub_aux;
2070   int done = 0;
2071
2072   type = coff_alloc_type (index);
2073   TYPE_CODE (type) = TYPE_CODE_STRUCT;
2074   INIT_CPLUS_SPECIFIC (type);
2075   TYPE_LENGTH (type) = length;
2076
2077   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
2078     {
2079       read_one_sym (ms, &sub_sym, &sub_aux);
2080       name = ms->c_name;
2081       name = EXTERNAL_NAME (name, objfile->obfd);
2082
2083       switch (ms->c_sclass)
2084         {
2085         case C_MOS:
2086         case C_MOU:
2087
2088           /* Get space to record the next field's data.  */
2089           new = (struct nextfield *) alloca (sizeof (struct nextfield));
2090           new->next = list;
2091           list = new;
2092
2093           /* Save the data.  */
2094           list->field.name = obstack_copy0 (&objfile->objfile_obstack,
2095                                             name, strlen (name));
2096           FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
2097                                                   &sub_aux, objfile);
2098           SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
2099           FIELD_BITSIZE (list->field) = 0;
2100           nfields++;
2101           break;
2102
2103         case C_FIELD:
2104
2105           /* Get space to record the next field's data.  */
2106           new = (struct nextfield *) alloca (sizeof (struct nextfield));
2107           new->next = list;
2108           list = new;
2109
2110           /* Save the data.  */
2111           list->field.name = obstack_copy0 (&objfile->objfile_obstack,
2112                                             name, strlen (name));
2113           FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
2114                                                   &sub_aux, objfile);
2115           SET_FIELD_BITPOS (list->field, ms->c_value);
2116           FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
2117           nfields++;
2118           break;
2119
2120         case C_EOS:
2121           done = 1;
2122           break;
2123         }
2124     }
2125   /* Now create the vector of fields, and record how big it is.  */
2126
2127   TYPE_NFIELDS (type) = nfields;
2128   TYPE_FIELDS (type) = (struct field *)
2129     TYPE_ALLOC (type, sizeof (struct field) * nfields);
2130
2131   /* Copy the saved-up fields into the field vector.  */
2132
2133   for (n = nfields; list; list = list->next)
2134     TYPE_FIELD (type, --n) = list->field;
2135
2136   return type;
2137 }
2138 \f
2139 /* Read a definition of an enumeration type,
2140    and create and return a suitable type object.
2141    Also defines the symbols that represent the values of the type.  */
2142
2143 static struct type *
2144 coff_read_enum_type (int index, int length, int lastsym,
2145                      struct objfile *objfile)
2146 {
2147   struct gdbarch *gdbarch = get_objfile_arch (objfile);
2148   struct symbol *sym;
2149   struct type *type;
2150   int nsyms = 0;
2151   int done = 0;
2152   struct pending **symlist;
2153   struct coff_symbol member_sym;
2154   struct coff_symbol *ms = &member_sym;
2155   struct internal_syment sub_sym;
2156   union internal_auxent sub_aux;
2157   struct pending *osyms, *syms;
2158   int o_nsyms;
2159   int n;
2160   char *name;
2161   int unsigned_enum = 1;
2162
2163   type = coff_alloc_type (index);
2164   if (within_function)
2165     symlist = &local_symbols;
2166   else
2167     symlist = &file_symbols;
2168   osyms = *symlist;
2169   o_nsyms = osyms ? osyms->nsyms : 0;
2170
2171   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
2172     {
2173       read_one_sym (ms, &sub_sym, &sub_aux);
2174       name = ms->c_name;
2175       name = EXTERNAL_NAME (name, objfile->obfd);
2176
2177       switch (ms->c_sclass)
2178         {
2179         case C_MOE:
2180           sym = allocate_symbol (objfile);
2181
2182           SYMBOL_SET_LINKAGE_NAME (sym,
2183                                    obstack_copy0 (&objfile->objfile_obstack,
2184                                                   name, strlen (name)));
2185           SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
2186           SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
2187           SYMBOL_VALUE (sym) = ms->c_value;
2188           add_symbol_to_list (sym, symlist);
2189           nsyms++;
2190           break;
2191
2192         case C_EOS:
2193           /* Sometimes the linker (on 386/ix 2.0.2 at least) screws
2194              up the count of how many symbols to read.  So stop
2195              on .eos.  */
2196           done = 1;
2197           break;
2198         }
2199     }
2200
2201   /* Now fill in the fields of the type-structure.  */
2202
2203   if (length > 0)
2204     TYPE_LENGTH (type) = length;
2205   else /* Assume ints.  */
2206     TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
2207   TYPE_CODE (type) = TYPE_CODE_ENUM;
2208   TYPE_NFIELDS (type) = nsyms;
2209   TYPE_FIELDS (type) = (struct field *)
2210     TYPE_ALLOC (type, sizeof (struct field) * nsyms);
2211
2212   /* Find the symbols for the values and put them into the type.
2213      The symbols can be found in the symlist that we put them on
2214      to cause them to be defined.  osyms contains the old value
2215      of that symlist; everything up to there was defined by us.  */
2216   /* Note that we preserve the order of the enum constants, so
2217      that in something like "enum {FOO, LAST_THING=FOO}" we print
2218      FOO, not LAST_THING.  */
2219
2220   for (syms = *symlist, n = 0; syms; syms = syms->next)
2221     {
2222       int j = 0;
2223
2224       if (syms == osyms)
2225         j = o_nsyms;
2226       for (; j < syms->nsyms; j++, n++)
2227         {
2228           struct symbol *xsym = syms->symbol[j];
2229
2230           SYMBOL_TYPE (xsym) = type;
2231           TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
2232           SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
2233           if (SYMBOL_VALUE (xsym) < 0)
2234             unsigned_enum = 0;
2235           TYPE_FIELD_BITSIZE (type, n) = 0;
2236         }
2237       if (syms == osyms)
2238         break;
2239     }
2240
2241   if (unsigned_enum)
2242     TYPE_UNSIGNED (type) = 1;
2243
2244   return type;
2245 }
2246
2247 /* Register our ability to parse symbols for coff BFD files.  */
2248
2249 static const struct sym_fns coff_sym_fns =
2250 {
2251   coff_new_init,                /* sym_new_init: init anything gbl to
2252                                    entire symtab */
2253   coff_symfile_init,            /* sym_init: read initial info, setup
2254                                    for sym_read() */
2255   coff_symfile_read,            /* sym_read: read a symbol file into
2256                                    symtab */
2257   NULL,                         /* sym_read_psymbols */
2258   coff_symfile_finish,          /* sym_finish: finished with file,
2259                                    cleanup */
2260   default_symfile_offsets,      /* sym_offsets: xlate external to
2261                                    internal form */
2262   default_symfile_segments,     /* sym_segments: Get segment
2263                                    information from a file */
2264   NULL,                         /* sym_read_linetable  */
2265
2266   default_symfile_relocate,     /* sym_relocate: Relocate a debug
2267                                    section.  */
2268   NULL,                         /* sym_probe_fns */
2269   &psym_functions
2270 };
2271
2272 /* Free the per-objfile COFF data.  */
2273
2274 static void
2275 coff_free_info (struct objfile *objfile, void *arg)
2276 {
2277   xfree (arg);
2278 }
2279
2280 void
2281 _initialize_coffread (void)
2282 {
2283   add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
2284
2285   coff_objfile_data_key = register_objfile_data_with_cleanup (NULL,
2286                                                               coff_free_info);
2287
2288   coff_register_index
2289     = register_symbol_register_impl (LOC_REGISTER, &coff_register_funcs);
2290 }