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