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