Format gdb-gdb.py.in with autopep8
[external/binutils.git] / gdb / coffread.c
1 /* Read coff symbol tables and convert to internal format, for GDB.
2    Copyright (C) 1987-2018 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   /* Let buildsym.c deduce the language for this symtab.  */
397                  language_unknown);
398   record_debugformat ("COFF");
399 }
400
401 /* Save the vital information from when starting to read a file,
402    for use when closing off the current file.
403    NAME is the file name the symbols came from, START_ADDR is the
404    first text address for the file, and SIZE is the number of bytes of
405    text.  */
406
407 static void
408 complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size)
409 {
410   set_last_source_file (name);
411   current_source_start_addr = start_addr;
412   current_source_end_addr = start_addr + size;
413 }
414
415 /* Finish the symbol definitions for one main source file, close off
416    all the lexical contexts for that file (creating struct block's for
417    them), then make the struct symtab for that file and put it in the
418    list of all such.  */
419
420 static void
421 coff_end_symtab (struct objfile *objfile)
422 {
423   last_source_start_addr = current_source_start_addr;
424
425   end_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile));
426
427   /* Reinitialize for beginning of new file.  */
428   set_last_source_file (NULL);
429 }
430 \f
431 /* The linker sometimes generates some non-function symbols inside
432    functions referencing variables imported from another DLL.
433    Return nonzero if the given symbol corresponds to one of them.  */
434
435 static int
436 is_import_fixup_symbol (struct coff_symbol *cs,
437                         enum minimal_symbol_type type)
438 {
439   /* The following is a bit of a heuristic using the characterictics
440      of these fixup symbols, but should work well in practice...  */
441   int i;
442
443   /* Must be a non-static text symbol.  */
444   if (type != mst_text)
445     return 0;
446
447   /* Must be a non-function symbol.  */
448   if (ISFCN (cs->c_type))
449     return 0;
450
451   /* The name must start with "__fu<digits>__".  */
452   if (!startswith (cs->c_name, "__fu"))
453     return 0;
454   if (! isdigit (cs->c_name[4]))
455     return 0;
456   for (i = 5; cs->c_name[i] != '\0' && isdigit (cs->c_name[i]); i++)
457     /* Nothing, just incrementing index past all digits.  */;
458   if (cs->c_name[i] != '_' || cs->c_name[i + 1] != '_')
459     return 0;
460
461   return 1;
462 }
463
464 static struct minimal_symbol *
465 record_minimal_symbol (minimal_symbol_reader &reader,
466                        struct coff_symbol *cs, CORE_ADDR address,
467                        enum minimal_symbol_type type, int section, 
468                        struct objfile *objfile)
469 {
470   /* We don't want TDESC entry points in the minimal symbol table.  */
471   if (cs->c_name[0] == '@')
472     return NULL;
473
474   if (is_import_fixup_symbol (cs, type))
475     {
476       /* Because the value of these symbols is within a function code
477          range, these symbols interfere with the symbol-from-address
478          reverse lookup; this manifests itselfs in backtraces, or any
479          other commands that prints symbolic addresses.  Just pretend
480          these symbols do not exist.  */
481       return NULL;
482     }
483
484   return reader.record_with_info (cs->c_name, address, type, section);
485 }
486 \f
487 /* coff_symfile_init ()
488    is the coff-specific initialization routine for reading symbols.
489    It is passed a struct objfile which contains, among other things,
490    the BFD for the file whose symbols are being read, and a slot for
491    a pointer to "private data" which we fill with cookies and other
492    treats for coff_symfile_read ().
493
494    We will only be called if this is a COFF or COFF-like file.  BFD
495    handles figuring out the format of the file, and code in symtab.c
496    uses BFD's determination to vector to us.
497
498    The ultimate result is a new symtab (or, FIXME, eventually a
499    psymtab).  */
500
501 static void
502 coff_symfile_init (struct objfile *objfile)
503 {
504   struct dbx_symfile_info *dbx;
505   struct coff_symfile_info *coff;
506
507   /* Allocate struct to keep track of stab reading.  */
508   dbx = XCNEW (struct dbx_symfile_info);
509   set_objfile_data (objfile, dbx_objfile_data_key, dbx);
510
511   /* Allocate struct to keep track of the symfile.  */
512   coff = XCNEW (struct coff_symfile_info);
513   set_objfile_data (objfile, coff_objfile_data_key, coff);
514
515   /* COFF objects may be reordered, so set OBJF_REORDERED.  If we
516      find this causes a significant slowdown in gdb then we could
517      set it in the debug symbol readers only when necessary.  */
518   objfile->flags |= OBJF_REORDERED;
519 }
520
521 /* This function is called for every section; it finds the outer
522    limits of the line table (minimum and maximum file offset) so that
523    the mainline code can read the whole thing for efficiency.  */
524
525 static void
526 find_linenos (bfd *abfd, struct bfd_section *asect, void *vpinfo)
527 {
528   struct coff_symfile_info *info;
529   int size, count;
530   file_ptr offset, maxoff;
531
532   /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
533   count = asect->lineno_count;
534   /* End of warning.  */
535
536   if (count == 0)
537     return;
538   size = count * local_linesz;
539
540   info = (struct coff_symfile_info *) vpinfo;
541   /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
542   offset = asect->line_filepos;
543   /* End of warning.  */
544
545   if (offset < info->min_lineno_offset || info->min_lineno_offset == 0)
546     info->min_lineno_offset = offset;
547
548   maxoff = offset + size;
549   if (maxoff > info->max_lineno_offset)
550     info->max_lineno_offset = maxoff;
551 }
552
553
554 /* The BFD for this file -- only good while we're actively reading
555    symbols into a psymtab or a symtab.  */
556
557 static bfd *symfile_bfd;
558
559 /* Read a symbol file, after initialization by coff_symfile_init.  */
560
561 static void
562 coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
563 {
564   struct coff_symfile_info *info;
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;
573   int stabstrsize;
574   
575   info = (struct coff_symfile_info *) objfile_data (objfile,
576                                                     coff_objfile_data_key);
577   symfile_bfd = abfd;           /* Kludge for swap routines.  */
578
579 /* WARNING WILL ROBINSON!  ACCESSING BFD-PRIVATE DATA HERE!  FIXME!  */
580   num_symbols = bfd_get_symcount (abfd);        /* How many syms */
581   symtab_offset = cdata->sym_filepos;   /* Symbol table file offset */
582   stringtab_offset = symtab_offset +    /* String table file offset */
583     num_symbols * cdata->local_symesz;
584
585   /* Set a few file-statics that give us specific information about
586      the particular COFF file format we're reading.  */
587   local_n_btmask = cdata->local_n_btmask;
588   local_n_btshft = cdata->local_n_btshft;
589   local_n_tmask = cdata->local_n_tmask;
590   local_n_tshift = cdata->local_n_tshift;
591   local_linesz = cdata->local_linesz;
592   local_symesz = cdata->local_symesz;
593   local_auxesz = cdata->local_auxesz;
594
595   /* Allocate space for raw symbol and aux entries, based on their
596      space requirements as reported by BFD.  */
597   temp_sym = (char *) xmalloc
598     (cdata->local_symesz + cdata->local_auxesz);
599   temp_aux = temp_sym + cdata->local_symesz;
600   back_to = make_cleanup (free_current_contents, &temp_sym);
601
602   /* We need to know whether this is a PE file, because in PE files,
603      unlike standard COFF files, symbol values are stored as offsets
604      from the section address, rather than as absolute addresses.
605      FIXME: We should use BFD to read the symbol table, and thus avoid
606      this problem.  */
607   pe_file =
608     startswith (bfd_get_target (objfile->obfd), "pe")
609     || startswith (bfd_get_target (objfile->obfd), "epoc-pe");
610
611   /* End of warning.  */
612
613   info->min_lineno_offset = 0;
614   info->max_lineno_offset = 0;
615
616   /* Only read line number information if we have symbols.
617
618      On Windows NT, some of the system's DLL's have sections with
619      PointerToLinenumbers fields that are non-zero, but point at
620      random places within the image file.  (In the case I found,
621      KERNEL32.DLL's .text section has a line number info pointer that
622      points into the middle of the string `lib\\i386\kernel32.dll'.)
623
624      However, these DLL's also have no symbols.  The line number
625      tables are meaningless without symbols.  And in fact, GDB never
626      uses the line number information unless there are symbols.  So we
627      can avoid spurious error messages (and maybe run a little
628      faster!) by not even reading the line number table unless we have
629      symbols.  */
630   if (num_symbols > 0)
631     {
632       /* Read the line number table, all at once.  */
633       bfd_map_over_sections (abfd, find_linenos, (void *) info);
634
635       make_cleanup (free_linetab_cleanup, 0 /*ignore*/);
636       val = init_lineno (abfd, info->min_lineno_offset,
637                          info->max_lineno_offset - info->min_lineno_offset);
638       if (val < 0)
639         error (_("\"%s\": error reading line numbers."), name);
640     }
641
642   /* Now read the string table, all at once.  */
643
644   make_cleanup (free_stringtab_cleanup, 0 /*ignore*/);
645   val = init_stringtab (abfd, stringtab_offset);
646   if (val < 0)
647     error (_("\"%s\": can't get string table"), name);
648
649   minimal_symbol_reader reader (objfile);
650
651   /* Now that the executable file is positioned at symbol table,
652      process it and define symbols accordingly.  */
653
654   coff_symtab_read (reader, (long) symtab_offset, num_symbols, objfile);
655
656   /* Install any minimal symbols that have been collected as the
657      current minimal symbols for this objfile.  */
658
659   reader.install ();
660
661   if (pe_file)
662     {
663       struct minimal_symbol *msym;
664
665       ALL_OBJFILE_MSYMBOLS (objfile, msym)
666         {
667           const char *name = MSYMBOL_LINKAGE_NAME (msym);
668
669           /* If the minimal symbols whose name are prefixed by "__imp_"
670              or "_imp_", get rid of the prefix, and search the minimal
671              symbol in OBJFILE.  Note that 'maintenance print msymbols'
672              shows that type of these "_imp_XXXX" symbols is mst_data.  */
673           if (MSYMBOL_TYPE (msym) == mst_data)
674             {
675               const char *name1 = NULL;
676
677               if (startswith (name, "_imp_"))
678                 name1 = name + 5;
679               else if (startswith (name, "__imp_"))
680                 name1 = name + 6;
681               if (name1 != NULL)
682                 {
683                   int lead = bfd_get_symbol_leading_char (objfile->obfd);
684                   struct bound_minimal_symbol found;
685
686                   if (lead != '\0' && *name1 == lead)
687                     name1 += 1;
688
689                   found = lookup_minimal_symbol (name1, NULL, objfile);
690
691                   /* If found, there are symbols named "_imp_foo" and "foo"
692                      respectively in OBJFILE.  Set the type of symbol "foo"
693                      as 'mst_solib_trampoline'.  */
694                   if (found.minsym != NULL
695                       && MSYMBOL_TYPE (found.minsym) == mst_text)
696                     MSYMBOL_TYPE (found.minsym) = mst_solib_trampoline;
697                 }
698             }
699         }
700     }
701
702   if (!(objfile->flags & OBJF_READNEVER))
703     bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
704
705   if (info->stabsects)
706     {
707       if (!info->stabstrsect)
708         {
709           error (_("The debugging information in `%s' is corrupted.\nThe "
710                    "file has a `.stabs' section, but no `.stabstr' section."),
711                  name);
712         }
713
714       /* FIXME: dubious.  Why can't we use something normal like
715          bfd_get_section_contents?  */
716       bfd_seek (abfd, abfd->where, 0);
717
718       stabstrsize = bfd_section_size (abfd, info->stabstrsect);
719
720       coffstab_build_psymtabs (objfile,
721                                info->textaddr, info->textsize,
722                                info->stabsects,
723                                info->stabstrsect->filepos, stabstrsize);
724     }
725   if (dwarf2_has_info (objfile, NULL))
726     {
727       /* DWARF2 sections.  */
728       dwarf2_build_psymtabs (objfile);
729     }
730
731   dwarf2_build_frame_info (objfile);
732
733   /* Try to add separate debug file if no symbols table found.   */
734   if (!objfile_has_partial_symbols (objfile))
735     {
736       std::string debugfile = find_separate_debug_file_by_buildid (objfile);
737
738       if (debugfile.empty ())
739         debugfile = find_separate_debug_file_by_debuglink (objfile);
740
741       if (!debugfile.empty ())
742         {
743           gdb_bfd_ref_ptr abfd (symfile_bfd_open (debugfile.c_str ()));
744
745           symbol_file_add_separate (abfd.get (), debugfile.c_str (),
746                                     symfile_flags, 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 (_("Bad n_sclass for symbol %s"),
900                      cs->c_name);
901           break;
902
903         case C_FILE:
904           /* c_value field contains symnum of next .file entry in
905              table or symnum of first global after last .file.  */
906           next_file_symnum = cs->c_value;
907           if (cs->c_naux > 0)
908             filestring = coff_getfilename (&main_aux);
909           else
910             filestring = "";
911
912           /* Complete symbol table for last object file
913              containing debugging information.  */
914           if (get_last_source_file ())
915             {
916               coff_end_symtab (objfile);
917               coff_start_symtab (objfile, filestring);
918             }
919           in_source_file = 1;
920           break;
921
922           /* C_LABEL is used for labels and static functions.
923              Including it here allows gdb to see static functions when
924              no debug info is available.  */
925         case C_LABEL:
926           /* However, labels within a function can make weird
927              backtraces, so filter them out (from phdm@macqel.be).  */
928           if (within_function)
929             break;
930           /* Fall through.  */
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           /* For static symbols that don't start with '.'...  */
968           /* Fall through.  */
969         case C_THUMBEXT:
970         case C_THUMBEXTFUNC:
971         case C_EXT:
972           {
973             /* Record it in the minimal symbols regardless of
974                SDB_TYPE.  This parallels what we do for other debug
975                formats, and probably is needed to make
976                print_address_symbolic work right without the (now
977                gone) "set fast-symbolic-addr off" kludge.  */
978
979             enum minimal_symbol_type ms_type;
980             int sec;
981             CORE_ADDR offset = 0;
982
983             if (cs->c_secnum == N_UNDEF)
984               {
985                 /* This is a common symbol.  We used to rely on
986                    the target to tell us whether it knows where
987                    the symbol has been relocated to, but none of
988                    the target implementations actually provided
989                    that operation.  So we just ignore the symbol,
990                    the same way we would do if we had a target-side
991                    symbol lookup which returned no match.  */
992                 break;
993               }
994             else if (cs->c_secnum == N_ABS)
995               {
996                 /* Use the correct minimal symbol type (and don't
997                    relocate) for absolute values.  */
998                 ms_type = mst_abs;
999                 sec = cs_to_section (cs, objfile);
1000                 tmpaddr = cs->c_value;
1001               }
1002             else
1003               {
1004                 asection *bfd_section = cs_to_bfd_section (cs, objfile);
1005
1006                 sec = cs_to_section (cs, objfile);
1007                 tmpaddr = cs->c_value;
1008                 /* Statics in a PE file also get relocated.  */
1009                 if (cs->c_sclass == C_EXT
1010                     || cs->c_sclass == C_THUMBEXTFUNC
1011                     || cs->c_sclass == C_THUMBEXT
1012                     || (pe_file && (cs->c_sclass == C_STAT)))
1013                   offset = ANOFFSET (objfile->section_offsets, sec);
1014
1015                 if (bfd_section->flags & SEC_CODE)
1016                   {
1017                     ms_type =
1018                       cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXTFUNC
1019                       || cs->c_sclass == C_THUMBEXT ?
1020                       mst_text : mst_file_text;
1021                     tmpaddr = gdbarch_addr_bits_remove (gdbarch, tmpaddr);
1022                   }
1023                 else if (bfd_section->flags & SEC_ALLOC
1024                          && bfd_section->flags & SEC_LOAD)
1025                   {
1026                     ms_type =
1027                       cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1028                       ? mst_data : mst_file_data;
1029                   }
1030                 else if (bfd_section->flags & SEC_ALLOC)
1031                   {
1032                     ms_type =
1033                       cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1034                       ? mst_bss : mst_file_bss;
1035                   }
1036                 else
1037                   ms_type = mst_unknown;
1038               }
1039
1040             msym = record_minimal_symbol (reader, cs, tmpaddr, ms_type,
1041                                           sec, objfile);
1042             if (msym)
1043               gdbarch_coff_make_msymbol_special (gdbarch,
1044                                                  cs->c_sclass, msym);
1045
1046             if (SDB_TYPE (cs->c_type))
1047               {
1048                 struct symbol *sym;
1049
1050                 sym = process_coff_symbol
1051                   (cs, &main_aux, objfile);
1052                 SYMBOL_VALUE (sym) = tmpaddr + offset;
1053                 SYMBOL_SECTION (sym) = sec;
1054               }
1055           }
1056           break;
1057
1058         case C_FCN:
1059           if (strcmp (cs->c_name, ".bf") == 0)
1060             {
1061               within_function = 1;
1062
1063               /* Value contains address of first non-init type
1064                  code.  */
1065               /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
1066                  contains line number of '{' }.  */
1067               if (cs->c_naux != 1)
1068                 complaint (_("`.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 (_("`.ef' symbol without matching `.bf' "
1095                                "symbol ignored starting at symnum %d"),
1096                              cs->c_symnum);
1097                   within_function = 0;
1098                   break;
1099                 }
1100
1101               newobj = pop_context ();
1102               /* Stack must be empty now.  */
1103               if (context_stack_depth > 0 || newobj == NULL)
1104                 {
1105                   complaint (_("Unmatched .ef symbol(s) ignored "
1106                                "starting at symnum %d"),
1107                              cs->c_symnum);
1108                   within_function = 0;
1109                   break;
1110                 }
1111               if (cs->c_naux != 1)
1112                 {
1113                   complaint (_("`.ef' symbol %d has no aux entry"),
1114                              cs->c_symnum);
1115                   fcn_last_line = 0x7FFFFFFF;
1116                 }
1117               else
1118                 {
1119                   fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
1120                 }
1121               /* fcn_first_line is the line number of the opening '{'.
1122                  Do not record it - because it would affect gdb's idea
1123                  of the line number of the first statement of the
1124                  function - except for one-line functions, for which
1125                  it is also the line number of all the statements and
1126                  of the closing '}', and for which we do not have any
1127                  other statement-line-number.  */
1128               if (fcn_last_line == 1)
1129                 record_line (current_subfile, fcn_first_line,
1130                              gdbarch_addr_bits_remove (gdbarch,
1131                                                        fcn_first_line_addr));
1132               else
1133                 enter_linenos (fcn_line_ptr, fcn_first_line,
1134                                fcn_last_line, objfile);
1135
1136               finish_block (newobj->name, &local_symbols, newobj->old_blocks,
1137                             NULL, newobj->start_addr,
1138                             fcn_cs_saved.c_value
1139                             + fcn_aux_saved.x_sym.x_misc.x_fsize
1140                             + ANOFFSET (objfile->section_offsets,
1141                                         SECT_OFF_TEXT (objfile)));
1142               within_function = 0;
1143             }
1144           break;
1145
1146         case C_BLOCK:
1147           if (strcmp (cs->c_name, ".bb") == 0)
1148             {
1149               tmpaddr = cs->c_value;
1150               tmpaddr += ANOFFSET (objfile->section_offsets,
1151                                    SECT_OFF_TEXT (objfile));
1152               push_context (++depth, tmpaddr);
1153             }
1154           else if (strcmp (cs->c_name, ".eb") == 0)
1155             {
1156               if (context_stack_depth <= 0)
1157                 {       /* We attempted to pop an empty context stack.  */
1158                   complaint (_("`.eb' symbol without matching `.bb' "
1159                                "symbol ignored starting at symnum %d"),
1160                              cs->c_symnum);
1161                   break;
1162                 }
1163
1164               newobj = pop_context ();
1165               if (depth-- != newobj->depth)
1166                 {
1167                   complaint (_("Mismatched .eb symbol ignored "
1168                                "starting at symnum %d"),
1169                              symnum);
1170                   break;
1171                 }
1172               if (local_symbols && context_stack_depth > 0)
1173                 {
1174                   tmpaddr =
1175                     cs->c_value + ANOFFSET (objfile->section_offsets,
1176                                             SECT_OFF_TEXT (objfile));
1177                   /* Make a block for the local symbols within.  */
1178                   finish_block (0, &local_symbols, newobj->old_blocks, NULL,
1179                                 newobj->start_addr, tmpaddr);
1180                 }
1181               /* Now pop locals of block just finished.  */
1182               local_symbols = newobj->locals;
1183             }
1184           break;
1185
1186         default:
1187           process_coff_symbol (cs, &main_aux, objfile);
1188           break;
1189         }
1190     }
1191
1192   if ((nsyms == 0) && (pe_file))
1193     {
1194       /* We've got no debugging symbols, but it's a portable
1195          executable, so try to read the export table.  */
1196       read_pe_exported_syms (reader, objfile);
1197     }
1198
1199   if (get_last_source_file ())
1200     coff_end_symtab (objfile);
1201
1202   /* Patch up any opaque types (references to types that are not defined
1203      in the file where they are referenced, e.g. "struct foo *bar").  */
1204   {
1205     struct compunit_symtab *cu;
1206     struct symtab *s;
1207
1208     ALL_OBJFILE_FILETABS (objfile, cu, s)
1209       patch_opaque_types (s);
1210   }
1211
1212   coffread_objfile = NULL;
1213 }
1214 \f
1215 /* Routines for reading headers and symbols from executable.  */
1216
1217 /* Read the next symbol, swap it, and return it in both
1218    internal_syment form, and coff_symbol form.  Also return its first
1219    auxent, if any, in internal_auxent form, and skip any other
1220    auxents.  */
1221
1222 static void
1223 read_one_sym (struct coff_symbol *cs,
1224               struct internal_syment *sym,
1225               union internal_auxent *aux)
1226 {
1227   int i;
1228   bfd_size_type bytes;
1229
1230   cs->c_symnum = symnum;
1231   bytes = bfd_bread (temp_sym, local_symesz, nlist_bfd_global);
1232   if (bytes != local_symesz)
1233     error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
1234   bfd_coff_swap_sym_in (symfile_bfd, temp_sym, (char *) sym);
1235   cs->c_naux = sym->n_numaux & 0xff;
1236   if (cs->c_naux >= 1)
1237     {
1238       bytes  = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
1239       if (bytes != local_auxesz)
1240         error (_("%s: error reading symbols"), objfile_name (coffread_objfile));
1241       bfd_coff_swap_aux_in (symfile_bfd, temp_aux,
1242                             sym->n_type, sym->n_sclass,
1243                             0, cs->c_naux, (char *) aux);
1244       /* If more than one aux entry, read past it (only the first aux
1245          is important).  */
1246       for (i = 1; i < cs->c_naux; i++)
1247         {
1248           bytes = bfd_bread (temp_aux, local_auxesz, nlist_bfd_global);
1249           if (bytes != local_auxesz)
1250             error (_("%s: error reading symbols"),
1251                    objfile_name (coffread_objfile));
1252         }
1253     }
1254   cs->c_name = getsymname (sym);
1255   cs->c_value = sym->n_value;
1256   cs->c_sclass = (sym->n_sclass & 0xff);
1257   cs->c_secnum = sym->n_scnum;
1258   cs->c_type = (unsigned) sym->n_type;
1259   if (!SDB_TYPE (cs->c_type))
1260     cs->c_type = 0;
1261
1262 #if 0
1263   if (cs->c_sclass & 128)
1264     printf (_("thumb symbol %s, class 0x%x\n"), cs->c_name, cs->c_sclass);
1265 #endif
1266
1267   symnum += 1 + cs->c_naux;
1268
1269   /* The PE file format stores symbol values as offsets within the
1270      section, rather than as absolute addresses.  We correct that
1271      here, if the symbol has an appropriate storage class.  FIXME: We
1272      should use BFD to read the symbols, rather than duplicating the
1273      work here.  */
1274   if (pe_file)
1275     {
1276       switch (cs->c_sclass)
1277         {
1278         case C_EXT:
1279         case C_THUMBEXT:
1280         case C_THUMBEXTFUNC:
1281         case C_SECTION:
1282         case C_NT_WEAK:
1283         case C_STAT:
1284         case C_THUMBSTAT:
1285         case C_THUMBSTATFUNC:
1286         case C_LABEL:
1287         case C_THUMBLABEL:
1288         case C_BLOCK:
1289         case C_FCN:
1290         case C_EFCN:
1291           if (cs->c_secnum != 0)
1292             cs->c_value += cs_section_address (cs, symfile_bfd);
1293           break;
1294         }
1295     }
1296 }
1297 \f
1298 /* Support for string table handling.  */
1299
1300 static char *stringtab = NULL;
1301
1302 static int
1303 init_stringtab (bfd *abfd, long offset)
1304 {
1305   long length;
1306   int val;
1307   unsigned char lengthbuf[4];
1308
1309   free_stringtab ();
1310
1311   /* If the file is stripped, the offset might be zero, indicating no
1312      string table.  Just return with `stringtab' set to null.  */
1313   if (offset == 0)
1314     return 0;
1315
1316   if (bfd_seek (abfd, offset, 0) < 0)
1317     return -1;
1318
1319   val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
1320   length = bfd_h_get_32 (symfile_bfd, lengthbuf);
1321
1322   /* If no string table is needed, then the file may end immediately
1323      after the symbols.  Just return with `stringtab' set to null.  */
1324   if (val != sizeof lengthbuf || length < sizeof lengthbuf)
1325     return 0;
1326
1327   stringtab = (char *) xmalloc (length);
1328   /* This is in target format (probably not very useful, and not
1329      currently used), not host format.  */
1330   memcpy (stringtab, lengthbuf, sizeof lengthbuf);
1331   if (length == sizeof length)  /* Empty table -- just the count.  */
1332     return 0;
1333
1334   val = bfd_bread (stringtab + sizeof lengthbuf, 
1335                    length - sizeof lengthbuf, abfd);
1336   if (val != length - sizeof lengthbuf || stringtab[length - 1] != '\0')
1337     return -1;
1338
1339   return 0;
1340 }
1341
1342 static void
1343 free_stringtab (void)
1344 {
1345   if (stringtab)
1346     xfree (stringtab);
1347   stringtab = NULL;
1348 }
1349
1350 static void
1351 free_stringtab_cleanup (void *ignore)
1352 {
1353   free_stringtab ();
1354 }
1355
1356 static char *
1357 getsymname (struct internal_syment *symbol_entry)
1358 {
1359   static char buffer[SYMNMLEN + 1];
1360   char *result;
1361
1362   if (symbol_entry->_n._n_n._n_zeroes == 0)
1363     {
1364       /* FIXME: Probably should be detecting corrupt symbol files by
1365          seeing whether offset points to within the stringtab.  */
1366       result = stringtab + symbol_entry->_n._n_n._n_offset;
1367     }
1368   else
1369     {
1370       strncpy (buffer, symbol_entry->_n._n_name, SYMNMLEN);
1371       buffer[SYMNMLEN] = '\0';
1372       result = buffer;
1373     }
1374   return result;
1375 }
1376
1377 /* Extract the file name from the aux entry of a C_FILE symbol.
1378    Return only the last component of the name.  Result is in static
1379    storage and is only good for temporary use.  */
1380
1381 static const char *
1382 coff_getfilename (union internal_auxent *aux_entry)
1383 {
1384   static char buffer[BUFSIZ];
1385   const char *result;
1386
1387   if (aux_entry->x_file.x_n.x_zeroes == 0)
1388     {
1389       if (strlen (stringtab + aux_entry->x_file.x_n.x_offset) >= BUFSIZ)
1390         internal_error (__FILE__, __LINE__, _("coff file name too long"));
1391       strcpy (buffer, stringtab + aux_entry->x_file.x_n.x_offset);
1392     }
1393   else
1394     {
1395       strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
1396       buffer[FILNMLEN] = '\0';
1397     }
1398   result = buffer;
1399
1400   /* FIXME: We should not be throwing away the information about what
1401      directory.  It should go into dirname of the symtab, or some such
1402      place.  */
1403   result = lbasename (result);
1404   return (result);
1405 }
1406 \f
1407 /* Support for line number handling.  */
1408
1409 static char *linetab = NULL;
1410 static long linetab_offset;
1411 static unsigned long linetab_size;
1412
1413 /* Read in all the line numbers for fast lookups later.  Leave them in
1414    external (unswapped) format in memory; we'll swap them as we enter
1415    them into GDB's data structures.  */
1416
1417 static int
1418 init_lineno (bfd *abfd, long offset, int size)
1419 {
1420   int val;
1421
1422   linetab_offset = offset;
1423   linetab_size = size;
1424
1425   free_linetab ();
1426
1427   if (size == 0)
1428     return 0;
1429
1430   if (bfd_seek (abfd, offset, 0) < 0)
1431     return -1;
1432
1433   /* Allocate the desired table, plus a sentinel.  */
1434   linetab = (char *) xmalloc (size + local_linesz);
1435
1436   val = bfd_bread (linetab, size, abfd);
1437   if (val != size)
1438     return -1;
1439
1440   /* Terminate it with an all-zero sentinel record.  */
1441   memset (linetab + size, 0, local_linesz);
1442
1443   return 0;
1444 }
1445
1446 static void
1447 free_linetab (void)
1448 {
1449   if (linetab)
1450     xfree (linetab);
1451   linetab = NULL;
1452 }
1453
1454 static void
1455 free_linetab_cleanup (void *ignore)
1456 {
1457   free_linetab ();
1458 }
1459
1460 #if !defined (L_LNNO32)
1461 #define L_LNNO32(lp) ((lp)->l_lnno)
1462 #endif
1463
1464 static void
1465 enter_linenos (long file_offset, int first_line,
1466                int last_line, struct objfile *objfile)
1467 {
1468   struct gdbarch *gdbarch = get_objfile_arch (objfile);
1469   char *rawptr;
1470   struct internal_lineno lptr;
1471
1472   if (!linetab)
1473     return;
1474   if (file_offset < linetab_offset)
1475     {
1476       complaint (_("Line number pointer %ld lower than start of line numbers"),
1477                  file_offset);
1478       if (file_offset > linetab_size)   /* Too big to be an offset?  */
1479         return;
1480       file_offset += linetab_offset;    /* Try reading at that linetab
1481                                            offset.  */
1482     }
1483
1484   rawptr = &linetab[file_offset - linetab_offset];
1485
1486   /* Skip first line entry for each function.  */
1487   rawptr += local_linesz;
1488   /* Line numbers start at one for the first line of the function.  */
1489   first_line--;
1490
1491   /* If the line number table is full (e.g. 64K lines in COFF debug
1492      info), the next function's L_LNNO32 might not be zero, so don't
1493      overstep the table's end in any case.  */
1494   while (rawptr <= &linetab[0] + linetab_size)
1495     {
1496       bfd_coff_swap_lineno_in (symfile_bfd, rawptr, &lptr);
1497       rawptr += local_linesz;
1498       /* The next function, or the sentinel, will have L_LNNO32 zero;
1499          we exit.  */
1500       if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line)
1501         {
1502           CORE_ADDR addr = lptr.l_addr.l_paddr;
1503           addr += ANOFFSET (objfile->section_offsets,
1504                             SECT_OFF_TEXT (objfile));
1505           record_line (current_subfile,
1506                        first_line + L_LNNO32 (&lptr),
1507                        gdbarch_addr_bits_remove (gdbarch, addr));
1508         }
1509       else
1510         break;
1511     }
1512 }
1513 \f
1514 static void
1515 patch_type (struct type *type, struct type *real_type)
1516 {
1517   struct type *target = TYPE_TARGET_TYPE (type);
1518   struct type *real_target = TYPE_TARGET_TYPE (real_type);
1519   int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field);
1520
1521   TYPE_LENGTH (target) = TYPE_LENGTH (real_target);
1522   TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target);
1523   TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target,
1524                                                       field_size);
1525
1526   memcpy (TYPE_FIELDS (target), 
1527           TYPE_FIELDS (real_target), 
1528           field_size);
1529
1530   if (TYPE_NAME (real_target))
1531     {
1532       /* The previous copy of TYPE_NAME is allocated by
1533          process_coff_symbol.  */
1534       if (TYPE_NAME (target))
1535         xfree ((char*) TYPE_NAME (target));
1536       TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target));
1537     }
1538 }
1539
1540 /* Patch up all appropriate typedef symbols in the opaque_type_chains
1541    so that they can be used to print out opaque data structures
1542    properly.  */
1543
1544 static void
1545 patch_opaque_types (struct symtab *s)
1546 {
1547   struct block *b;
1548   struct block_iterator iter;
1549   struct symbol *real_sym;
1550
1551   /* Go through the per-file symbols only.  */
1552   b = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (s), STATIC_BLOCK);
1553   ALL_BLOCK_SYMBOLS (b, iter, real_sym)
1554     {
1555       /* Find completed typedefs to use to fix opaque ones.
1556          Remove syms from the chain when their types are stored,
1557          but search the whole chain, as there may be several syms
1558          from different files with the same name.  */
1559       if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF
1560           && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN
1561           && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR
1562           && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0)
1563         {
1564           const char *name = SYMBOL_LINKAGE_NAME (real_sym);
1565           int hash = hashname (name);
1566           struct symbol *sym, *prev;
1567
1568           prev = 0;
1569           for (sym = opaque_type_chain[hash]; sym;)
1570             {
1571               if (name[0] == SYMBOL_LINKAGE_NAME (sym)[0]
1572                   && strcmp (name + 1, SYMBOL_LINKAGE_NAME (sym) + 1) == 0)
1573                 {
1574                   if (prev)
1575                     {
1576                       SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
1577                     }
1578                   else
1579                     {
1580                       opaque_type_chain[hash] = SYMBOL_VALUE_CHAIN (sym);
1581                     }
1582
1583                   patch_type (SYMBOL_TYPE (sym), SYMBOL_TYPE (real_sym));
1584
1585                   if (prev)
1586                     {
1587                       sym = SYMBOL_VALUE_CHAIN (prev);
1588                     }
1589                   else
1590                     {
1591                       sym = opaque_type_chain[hash];
1592                     }
1593                 }
1594               else
1595                 {
1596                   prev = sym;
1597                   sym = SYMBOL_VALUE_CHAIN (sym);
1598                 }
1599             }
1600         }
1601     }
1602 }
1603 \f
1604 static int
1605 coff_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
1606 {
1607   return gdbarch_sdb_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
1608 }
1609
1610 static const struct symbol_register_ops coff_register_funcs = {
1611   coff_reg_to_regnum
1612 };
1613
1614 /* The "aclass" index for computed COFF symbols.  */
1615
1616 static int coff_register_index;
1617
1618 static struct symbol *
1619 process_coff_symbol (struct coff_symbol *cs,
1620                      union internal_auxent *aux,
1621                      struct objfile *objfile)
1622 {
1623   struct symbol *sym = allocate_symbol (objfile);
1624   char *name;
1625
1626   name = cs->c_name;
1627   name = EXTERNAL_NAME (name, objfile->obfd);
1628   SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
1629                        &objfile->objfile_obstack);
1630   SYMBOL_SET_NAMES (sym, name, strlen (name), 1, objfile);
1631
1632   /* default assumptions */
1633   SYMBOL_VALUE (sym) = cs->c_value;
1634   SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
1635   SYMBOL_SECTION (sym) = cs_to_section (cs, objfile);
1636
1637   if (ISFCN (cs->c_type))
1638     {
1639       SYMBOL_VALUE (sym) += ANOFFSET (objfile->section_offsets,
1640                                       SECT_OFF_TEXT (objfile));
1641       SYMBOL_TYPE (sym) =
1642         lookup_function_type (decode_function_type (cs, cs->c_type,
1643                                                     aux, objfile));
1644
1645       SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
1646       if (cs->c_sclass == C_STAT || cs->c_sclass == C_THUMBSTAT
1647           || cs->c_sclass == C_THUMBSTATFUNC)
1648         add_symbol_to_list (sym, &file_symbols);
1649       else if (cs->c_sclass == C_EXT || cs->c_sclass == C_THUMBEXT
1650                || cs->c_sclass == C_THUMBEXTFUNC)
1651         add_symbol_to_list (sym, &global_symbols);
1652     }
1653   else
1654     {
1655       SYMBOL_TYPE (sym) = decode_type (cs, cs->c_type, aux, objfile);
1656       switch (cs->c_sclass)
1657         {
1658         case C_NULL:
1659           break;
1660
1661         case C_AUTO:
1662           SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
1663           add_symbol_to_list (sym, &local_symbols);
1664           break;
1665
1666         case C_THUMBEXT:
1667         case C_THUMBEXTFUNC:
1668         case C_EXT:
1669           SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
1670           SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
1671           SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
1672                                                   SECT_OFF_TEXT (objfile));
1673           add_symbol_to_list (sym, &global_symbols);
1674           break;
1675
1676         case C_THUMBSTAT:
1677         case C_THUMBSTATFUNC:
1678         case C_STAT:
1679           SYMBOL_ACLASS_INDEX (sym) = LOC_STATIC;
1680           SYMBOL_VALUE_ADDRESS (sym) = (CORE_ADDR) cs->c_value;
1681           SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (objfile->section_offsets,
1682                                                   SECT_OFF_TEXT (objfile));
1683           if (within_function)
1684             {
1685               /* Static symbol of local scope.  */
1686               add_symbol_to_list (sym, &local_symbols);
1687             }
1688           else
1689             {
1690               /* Static symbol at top level of file.  */
1691               add_symbol_to_list (sym, &file_symbols);
1692             }
1693           break;
1694
1695 #ifdef C_GLBLREG                /* AMD coff */
1696         case C_GLBLREG:
1697 #endif
1698         case C_REG:
1699           SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
1700           SYMBOL_VALUE (sym) = cs->c_value;
1701           add_symbol_to_list (sym, &local_symbols);
1702           break;
1703
1704         case C_THUMBLABEL:
1705         case C_LABEL:
1706           break;
1707
1708         case C_ARG:
1709           SYMBOL_ACLASS_INDEX (sym) = LOC_ARG;
1710           SYMBOL_IS_ARGUMENT (sym) = 1;
1711           add_symbol_to_list (sym, &local_symbols);
1712           break;
1713
1714         case C_REGPARM:
1715           SYMBOL_ACLASS_INDEX (sym) = coff_register_index;
1716           SYMBOL_IS_ARGUMENT (sym) = 1;
1717           SYMBOL_VALUE (sym) = cs->c_value;
1718           add_symbol_to_list (sym, &local_symbols);
1719           break;
1720
1721         case C_TPDEF:
1722           SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
1723           SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
1724
1725           /* If type has no name, give it one.  */
1726           if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
1727             {
1728               if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
1729                   || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC)
1730                 {
1731                   /* If we are giving a name to a type such as
1732                      "pointer to foo" or "function returning foo", we
1733                      better not set the TYPE_NAME.  If the program
1734                      contains "typedef char *caddr_t;", we don't want 
1735                      all variables of type char * to print as caddr_t.
1736                      This is not just a consequence of GDB's type
1737                      management; CC and GCC (at least through version
1738                      2.4) both output variables of either type char *
1739                      or caddr_t with the type refering to the C_TPDEF
1740                      symbol for caddr_t.  If a future compiler cleans
1741                      this up it GDB is not ready for it yet, but if it
1742                      becomes ready we somehow need to disable this
1743                      check (without breaking the PCC/GCC2.4 case).
1744
1745                      Sigh.
1746
1747                      Fortunately, this check seems not to be necessary
1748                      for anything except pointers or functions.  */
1749                   ;
1750                 }
1751               else
1752                 TYPE_NAME (SYMBOL_TYPE (sym)) =
1753                   xstrdup (SYMBOL_LINKAGE_NAME (sym));
1754             }
1755
1756           /* Keep track of any type which points to empty structured
1757              type, so it can be filled from a definition from another
1758              file.  A simple forward reference (TYPE_CODE_UNDEF) is
1759              not an empty structured type, though; the forward
1760              references work themselves out via the magic of
1761              coff_lookup_type.  */
1762           if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
1763               && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0
1764               && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym)))
1765                  != TYPE_CODE_UNDEF)
1766             {
1767               int i = hashname (SYMBOL_LINKAGE_NAME (sym));
1768
1769               SYMBOL_VALUE_CHAIN (sym) = opaque_type_chain[i];
1770               opaque_type_chain[i] = sym;
1771             }
1772           add_symbol_to_list (sym, &file_symbols);
1773           break;
1774
1775         case C_STRTAG:
1776         case C_UNTAG:
1777         case C_ENTAG:
1778           SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
1779           SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
1780
1781           /* Some compilers try to be helpful by inventing "fake"
1782              names for anonymous enums, structures, and unions, like
1783              "~0fake" or ".0fake".  Thanks, but no thanks...  */
1784           if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
1785             if (SYMBOL_LINKAGE_NAME (sym) != NULL
1786                 && *SYMBOL_LINKAGE_NAME (sym) != '~'
1787                 && *SYMBOL_LINKAGE_NAME (sym) != '.')
1788               TYPE_NAME (SYMBOL_TYPE (sym)) =
1789                 concat (SYMBOL_LINKAGE_NAME (sym), (char *)NULL);
1790
1791           add_symbol_to_list (sym, &file_symbols);
1792           break;
1793
1794         default:
1795           break;
1796         }
1797     }
1798   return sym;
1799 }
1800 \f
1801 /* Decode a coff type specifier;  return the type that is meant.  */
1802
1803 static struct type *
1804 decode_type (struct coff_symbol *cs, unsigned int c_type,
1805              union internal_auxent *aux, struct objfile *objfile)
1806 {
1807   struct type *type = 0;
1808   unsigned int new_c_type;
1809
1810   if (c_type & ~N_BTMASK)
1811     {
1812       new_c_type = DECREF (c_type);
1813       if (ISPTR (c_type))
1814         {
1815           type = decode_type (cs, new_c_type, aux, objfile);
1816           type = lookup_pointer_type (type);
1817         }
1818       else if (ISFCN (c_type))
1819         {
1820           type = decode_type (cs, new_c_type, aux, objfile);
1821           type = lookup_function_type (type);
1822         }
1823       else if (ISARY (c_type))
1824         {
1825           int i, n;
1826           unsigned short *dim;
1827           struct type *base_type, *index_type, *range_type;
1828
1829           /* Define an array type.  */
1830           /* auxent refers to array, not base type.  */
1831           if (aux->x_sym.x_tagndx.l == 0)
1832             cs->c_naux = 0;
1833
1834           /* Shift the indices down.  */
1835           dim = &aux->x_sym.x_fcnary.x_ary.x_dimen[0];
1836           i = 1;
1837           n = dim[0];
1838           for (i = 0; *dim && i < DIMNUM - 1; i++, dim++)
1839             *dim = *(dim + 1);
1840           *dim = 0;
1841
1842           base_type = decode_type (cs, new_c_type, aux, objfile);
1843           index_type = objfile_type (objfile)->builtin_int;
1844           range_type
1845             = create_static_range_type ((struct type *) NULL,
1846                                         index_type, 0, n - 1);
1847           type =
1848             create_array_type ((struct type *) NULL, 
1849                                base_type, range_type);
1850         }
1851       return type;
1852     }
1853
1854   /* Reference to existing type.  This only occurs with the struct,
1855      union, and enum types.  EPI a29k coff fakes us out by producing
1856      aux entries with a nonzero x_tagndx for definitions of structs,
1857      unions, and enums, so we have to check the c_sclass field.  SCO
1858      3.2v4 cc gets confused with pointers to pointers to defined
1859      structs, and generates negative x_tagndx fields.  */
1860   if (cs->c_naux > 0 && aux->x_sym.x_tagndx.l != 0)
1861     {
1862       if (cs->c_sclass != C_STRTAG
1863           && cs->c_sclass != C_UNTAG
1864           && cs->c_sclass != C_ENTAG
1865           && aux->x_sym.x_tagndx.l >= 0)
1866         {
1867           type = coff_alloc_type (aux->x_sym.x_tagndx.l);
1868           return type;
1869         }
1870       else
1871         {
1872           complaint (_("Symbol table entry for %s has bad tagndx value"),
1873                      cs->c_name);
1874           /* And fall through to decode_base_type...  */
1875         }
1876     }
1877
1878   return decode_base_type (cs, BTYPE (c_type), aux, objfile);
1879 }
1880
1881 /* Decode a coff type specifier for function definition;
1882    return the type that the function returns.  */
1883
1884 static struct type *
1885 decode_function_type (struct coff_symbol *cs, 
1886                       unsigned int c_type,
1887                       union internal_auxent *aux, 
1888                       struct objfile *objfile)
1889 {
1890   if (aux->x_sym.x_tagndx.l == 0)
1891     cs->c_naux = 0;     /* auxent refers to function, not base
1892                            type.  */
1893
1894   return decode_type (cs, DECREF (c_type), aux, objfile);
1895 }
1896 \f
1897 /* Basic C types.  */
1898
1899 static struct type *
1900 decode_base_type (struct coff_symbol *cs, 
1901                   unsigned int c_type,
1902                   union internal_auxent *aux, 
1903                   struct objfile *objfile)
1904 {
1905   struct gdbarch *gdbarch = get_objfile_arch (objfile);
1906   struct type *type;
1907
1908   switch (c_type)
1909     {
1910     case T_NULL:
1911       /* Shows up with "void (*foo)();" structure members.  */
1912       return objfile_type (objfile)->builtin_void;
1913
1914 #ifdef T_VOID
1915     case T_VOID:
1916       /* Intel 960 COFF has this symbol and meaning.  */
1917       return objfile_type (objfile)->builtin_void;
1918 #endif
1919
1920     case T_CHAR:
1921       return objfile_type (objfile)->builtin_char;
1922
1923     case T_SHORT:
1924       return objfile_type (objfile)->builtin_short;
1925
1926     case T_INT:
1927       return objfile_type (objfile)->builtin_int;
1928
1929     case T_LONG:
1930       if (cs->c_sclass == C_FIELD
1931           && aux->x_sym.x_misc.x_lnsz.x_size
1932              > gdbarch_long_bit (gdbarch))
1933         return objfile_type (objfile)->builtin_long_long;
1934       else
1935         return objfile_type (objfile)->builtin_long;
1936
1937     case T_FLOAT:
1938       return objfile_type (objfile)->builtin_float;
1939
1940     case T_DOUBLE:
1941       return objfile_type (objfile)->builtin_double;
1942
1943     case T_LNGDBL:
1944       return objfile_type (objfile)->builtin_long_double;
1945
1946     case T_STRUCT:
1947       if (cs->c_naux != 1)
1948         {
1949           /* Anonymous structure type.  */
1950           type = coff_alloc_type (cs->c_symnum);
1951           TYPE_CODE (type) = TYPE_CODE_STRUCT;
1952           TYPE_NAME (type) = NULL;
1953           INIT_CPLUS_SPECIFIC (type);
1954           TYPE_LENGTH (type) = 0;
1955           TYPE_FIELDS (type) = 0;
1956           TYPE_NFIELDS (type) = 0;
1957         }
1958       else
1959         {
1960           type = coff_read_struct_type (cs->c_symnum,
1961                                         aux->x_sym.x_misc.x_lnsz.x_size,
1962                                         aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1963                                         objfile);
1964         }
1965       return type;
1966
1967     case T_UNION:
1968       if (cs->c_naux != 1)
1969         {
1970           /* Anonymous union type.  */
1971           type = coff_alloc_type (cs->c_symnum);
1972           TYPE_NAME (type) = NULL;
1973           INIT_CPLUS_SPECIFIC (type);
1974           TYPE_LENGTH (type) = 0;
1975           TYPE_FIELDS (type) = 0;
1976           TYPE_NFIELDS (type) = 0;
1977         }
1978       else
1979         {
1980           type = coff_read_struct_type (cs->c_symnum,
1981                                         aux->x_sym.x_misc.x_lnsz.x_size,
1982                                         aux->x_sym.x_fcnary.x_fcn.x_endndx.l,
1983                                         objfile);
1984         }
1985       TYPE_CODE (type) = TYPE_CODE_UNION;
1986       return type;
1987
1988     case T_ENUM:
1989       if (cs->c_naux != 1)
1990         {
1991           /* Anonymous enum type.  */
1992           type = coff_alloc_type (cs->c_symnum);
1993           TYPE_CODE (type) = TYPE_CODE_ENUM;
1994           TYPE_NAME (type) = NULL;
1995           TYPE_LENGTH (type) = 0;
1996           TYPE_FIELDS (type) = 0;
1997           TYPE_NFIELDS (type) = 0;
1998         }
1999       else
2000         {
2001           type = coff_read_enum_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       return type;
2007
2008     case T_MOE:
2009       /* Shouldn't show up here.  */
2010       break;
2011
2012     case T_UCHAR:
2013       return objfile_type (objfile)->builtin_unsigned_char;
2014
2015     case T_USHORT:
2016       return objfile_type (objfile)->builtin_unsigned_short;
2017
2018     case T_UINT:
2019       return objfile_type (objfile)->builtin_unsigned_int;
2020
2021     case T_ULONG:
2022       if (cs->c_sclass == C_FIELD
2023           && aux->x_sym.x_misc.x_lnsz.x_size
2024              > gdbarch_long_bit (gdbarch))
2025         return objfile_type (objfile)->builtin_unsigned_long_long;
2026       else
2027         return objfile_type (objfile)->builtin_unsigned_long;
2028     }
2029   complaint (_("Unexpected type for symbol %s"), cs->c_name);
2030   return objfile_type (objfile)->builtin_void;
2031 }
2032 \f
2033 /* This page contains subroutines of read_type.  */
2034
2035 /* Read the description of a structure (or union type) and return an
2036    object describing the type.  */
2037
2038 static struct type *
2039 coff_read_struct_type (int index, int length, int lastsym,
2040                        struct objfile *objfile)
2041 {
2042   struct nextfield
2043     {
2044       struct nextfield *next;
2045       struct field field;
2046     };
2047
2048   struct type *type;
2049   struct nextfield *list = 0;
2050   struct nextfield *newobj;
2051   int nfields = 0;
2052   int n;
2053   char *name;
2054   struct coff_symbol member_sym;
2055   struct coff_symbol *ms = &member_sym;
2056   struct internal_syment sub_sym;
2057   union internal_auxent sub_aux;
2058   int done = 0;
2059
2060   type = coff_alloc_type (index);
2061   TYPE_CODE (type) = TYPE_CODE_STRUCT;
2062   INIT_CPLUS_SPECIFIC (type);
2063   TYPE_LENGTH (type) = length;
2064
2065   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
2066     {
2067       read_one_sym (ms, &sub_sym, &sub_aux);
2068       name = ms->c_name;
2069       name = EXTERNAL_NAME (name, objfile->obfd);
2070
2071       switch (ms->c_sclass)
2072         {
2073         case C_MOS:
2074         case C_MOU:
2075
2076           /* Get space to record the next field's data.  */
2077           newobj = XALLOCA (struct nextfield);
2078           newobj->next = list;
2079           list = newobj;
2080
2081           /* Save the data.  */
2082           list->field.name
2083             = (const char *) obstack_copy0 (&objfile->objfile_obstack,
2084                                             name, strlen (name));
2085           FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
2086                                                   &sub_aux, objfile);
2087           SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
2088           FIELD_BITSIZE (list->field) = 0;
2089           nfields++;
2090           break;
2091
2092         case C_FIELD:
2093
2094           /* Get space to record the next field's data.  */
2095           newobj = XALLOCA (struct nextfield);
2096           newobj->next = list;
2097           list = newobj;
2098
2099           /* Save the data.  */
2100           list->field.name
2101             = (const char *) obstack_copy0 (&objfile->objfile_obstack,
2102                                             name, strlen (name));
2103           FIELD_TYPE (list->field) = decode_type (ms, ms->c_type,
2104                                                   &sub_aux, objfile);
2105           SET_FIELD_BITPOS (list->field, ms->c_value);
2106           FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
2107           nfields++;
2108           break;
2109
2110         case C_EOS:
2111           done = 1;
2112           break;
2113         }
2114     }
2115   /* Now create the vector of fields, and record how big it is.  */
2116
2117   TYPE_NFIELDS (type) = nfields;
2118   TYPE_FIELDS (type) = (struct field *)
2119     TYPE_ALLOC (type, sizeof (struct field) * nfields);
2120
2121   /* Copy the saved-up fields into the field vector.  */
2122
2123   for (n = nfields; list; list = list->next)
2124     TYPE_FIELD (type, --n) = list->field;
2125
2126   return type;
2127 }
2128 \f
2129 /* Read a definition of an enumeration type,
2130    and create and return a suitable type object.
2131    Also defines the symbols that represent the values of the type.  */
2132
2133 static struct type *
2134 coff_read_enum_type (int index, int length, int lastsym,
2135                      struct objfile *objfile)
2136 {
2137   struct gdbarch *gdbarch = get_objfile_arch (objfile);
2138   struct symbol *sym;
2139   struct type *type;
2140   int nsyms = 0;
2141   int done = 0;
2142   struct pending **symlist;
2143   struct coff_symbol member_sym;
2144   struct coff_symbol *ms = &member_sym;
2145   struct internal_syment sub_sym;
2146   union internal_auxent sub_aux;
2147   struct pending *osyms, *syms;
2148   int o_nsyms;
2149   int n;
2150   char *name;
2151   int unsigned_enum = 1;
2152
2153   type = coff_alloc_type (index);
2154   if (within_function)
2155     symlist = &local_symbols;
2156   else
2157     symlist = &file_symbols;
2158   osyms = *symlist;
2159   o_nsyms = osyms ? osyms->nsyms : 0;
2160
2161   while (!done && symnum < lastsym && symnum < nlist_nsyms_global)
2162     {
2163       read_one_sym (ms, &sub_sym, &sub_aux);
2164       name = ms->c_name;
2165       name = EXTERNAL_NAME (name, objfile->obfd);
2166
2167       switch (ms->c_sclass)
2168         {
2169         case C_MOE:
2170           sym = allocate_symbol (objfile);
2171
2172           name = (char *) obstack_copy0 (&objfile->objfile_obstack, name,
2173                                          strlen (name));
2174           SYMBOL_SET_LINKAGE_NAME (sym, name);
2175           SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
2176           SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
2177           SYMBOL_VALUE (sym) = ms->c_value;
2178           add_symbol_to_list (sym, symlist);
2179           nsyms++;
2180           break;
2181
2182         case C_EOS:
2183           /* Sometimes the linker (on 386/ix 2.0.2 at least) screws
2184              up the count of how many symbols to read.  So stop
2185              on .eos.  */
2186           done = 1;
2187           break;
2188         }
2189     }
2190
2191   /* Now fill in the fields of the type-structure.  */
2192
2193   if (length > 0)
2194     TYPE_LENGTH (type) = length;
2195   else /* Assume ints.  */
2196     TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
2197   TYPE_CODE (type) = TYPE_CODE_ENUM;
2198   TYPE_NFIELDS (type) = nsyms;
2199   TYPE_FIELDS (type) = (struct field *)
2200     TYPE_ALLOC (type, sizeof (struct field) * nsyms);
2201
2202   /* Find the symbols for the values and put them into the type.
2203      The symbols can be found in the symlist that we put them on
2204      to cause them to be defined.  osyms contains the old value
2205      of that symlist; everything up to there was defined by us.  */
2206   /* Note that we preserve the order of the enum constants, so
2207      that in something like "enum {FOO, LAST_THING=FOO}" we print
2208      FOO, not LAST_THING.  */
2209
2210   for (syms = *symlist, n = 0; syms; syms = syms->next)
2211     {
2212       int j = 0;
2213
2214       if (syms == osyms)
2215         j = o_nsyms;
2216       for (; j < syms->nsyms; j++, n++)
2217         {
2218           struct symbol *xsym = syms->symbol[j];
2219
2220           SYMBOL_TYPE (xsym) = type;
2221           TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
2222           SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
2223           if (SYMBOL_VALUE (xsym) < 0)
2224             unsigned_enum = 0;
2225           TYPE_FIELD_BITSIZE (type, n) = 0;
2226         }
2227       if (syms == osyms)
2228         break;
2229     }
2230
2231   if (unsigned_enum)
2232     TYPE_UNSIGNED (type) = 1;
2233
2234   return type;
2235 }
2236
2237 /* Register our ability to parse symbols for coff BFD files.  */
2238
2239 static const struct sym_fns coff_sym_fns =
2240 {
2241   coff_new_init,                /* sym_new_init: init anything gbl to
2242                                    entire symtab */
2243   coff_symfile_init,            /* sym_init: read initial info, setup
2244                                    for sym_read() */
2245   coff_symfile_read,            /* sym_read: read a symbol file into
2246                                    symtab */
2247   NULL,                         /* sym_read_psymbols */
2248   coff_symfile_finish,          /* sym_finish: finished with file,
2249                                    cleanup */
2250   default_symfile_offsets,      /* sym_offsets: xlate external to
2251                                    internal form */
2252   default_symfile_segments,     /* sym_segments: Get segment
2253                                    information from a file */
2254   NULL,                         /* sym_read_linetable  */
2255
2256   default_symfile_relocate,     /* sym_relocate: Relocate a debug
2257                                    section.  */
2258   NULL,                         /* sym_probe_fns */
2259   &psym_functions
2260 };
2261
2262 /* Free the per-objfile COFF data.  */
2263
2264 static void
2265 coff_free_info (struct objfile *objfile, void *arg)
2266 {
2267   xfree (arg);
2268 }
2269
2270 void
2271 _initialize_coffread (void)
2272 {
2273   add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);
2274
2275   coff_objfile_data_key = register_objfile_data_with_cleanup (NULL,
2276                                                               coff_free_info);
2277
2278   coff_register_index
2279     = register_symbol_register_impl (LOC_REGISTER, &coff_register_funcs);
2280 }