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