OSDN Git Service

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