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