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