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