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