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