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