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