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