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