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