(root)/
binutils-2.41/
bfd/
xsym.h
       1  /* xSYM symbol-file support for BFD.
       2     Copyright (C) 1999-2023 Free Software Foundation, Inc.
       3  
       4     This file is part of BFD, the Binary File Descriptor library.
       5  
       6     This program is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3 of the License, or
       9     (at your option) any later version.
      10  
      11     This program is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with this program; if not, write to the Free Software
      18     Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
      19     MA 02110-1301, USA.  */
      20  
      21  #include "sysdep.h"
      22  #include "bfd.h"
      23  #include <stdio.h>
      24  
      25  #ifndef __xSYM_H__
      26  #define __xSYM_H__
      27  
      28  #define BFD_SYM_VERSION_STR_3_1		"\013Version 3.1"
      29  #define BFD_SYM_VERSION_STR_3_2		"\013Version 3.2"
      30  #define BFD_SYM_VERSION_STR_3_3		"\013Version 3.3"
      31  #define BFD_SYM_VERSION_STR_3_4		"\013Version 3.4"
      32  #define BFD_SYM_VERSION_STR_3_5		"\013Version 3.5"
      33  #define BFD_SYM_END_OF_LIST_3_2		0xffff
      34  #define BFD_SYM_END_OF_LIST_3_4		0xffffffff
      35  #define BFD_SYM_END_OF_LIST		BFD_SYM_END_OF_LIST_3_4
      36  #define BFD_SYM_FILE_NAME_INDEX_3_2	0xfffe
      37  #define BFD_SYM_FILE_NAME_INDEX_3_4	0xfffffffe
      38  #define BFD_SYM_FILE_NAME_INDEX		BFD_SYM_FILE_NAME_INDEX_3_4
      39  #define BFD_SYM_SOURCE_FILE_CHANGE_3_2	0xfffe
      40  #define BFD_SYM_SOURCE_FILE_CHANGE_3_4	0xfffffffe
      41  #define BFD_SYM_SOURCE_FILE_CHANGE	BFD_SYM_SOURCE_FILE_CHANGE_3_4
      42  #define BFD_SYM_MAXIMUM_LEGAL_INDEX_3_2 0xfffd
      43  #define BFD_SYM_MAXIMUM_LEGAL_INDEX_3_4 0xfffffffd
      44  #define BFD_SYM_MAXIMUM_LEGAL_INDEX	BFD_SYM_MAXIMUM_LEGAL_INDEX_3_4
      45  
      46  enum bfd_sym_storage_class
      47  {
      48    BFD_SYM_STORAGE_CLASS_REGISTER = 0,
      49    BFD_SYM_STORAGE_CLASS_GLOBAL = 1,
      50    BFD_SYM_STORAGE_CLASS_FRAME_RELATIVE = 2,
      51    BFD_SYM_STORAGE_CLASS_STACK_RELATIVE = 3,
      52    BFD_SYM_STORAGE_CLASS_ABSOLUTE = 4,
      53    BFD_SYM_STORAGE_CLASS_CONSTANT = 5,
      54    BFD_SYM_STORAGE_CLASS_BIGCONSTANT = 6,
      55    BFD_SYM_STORAGE_CLASS_RESOURCE = 99
      56  };
      57  typedef enum bfd_sym_storage_class bfd_sym_storage_class;
      58  
      59  enum bfd_sym_storage_kind
      60  {
      61    BFD_SYM_STORAGE_KIND_LOCAL = 0,
      62    BFD_SYM_STORAGE_KIND_VALUE = 1,
      63    BFD_SYM_STORAGE_KIND_REFERENCE = 2,
      64    BFD_SYM_STORAGE_KIND_WITH = 3
      65  };
      66  typedef enum bfd_sym_storage_kind bfd_sym_storage_kind;
      67  
      68  enum bfd_sym_version
      69  {
      70    BFD_SYM_VERSION_3_1,
      71    BFD_SYM_VERSION_3_2,
      72    BFD_SYM_VERSION_3_3,
      73    BFD_SYM_VERSION_3_4,
      74    BFD_SYM_VERSION_3_5
      75  };
      76  typedef enum bfd_sym_version bfd_sym_version;
      77  
      78  enum bfd_sym_module_kind
      79  {
      80    BFD_SYM_MODULE_KIND_NONE = 0,
      81    BFD_SYM_MODULE_KIND_PROGRAM = 1,
      82    BFD_SYM_MODULE_KIND_UNIT = 2,
      83    BFD_SYM_MODULE_KIND_PROCEDURE = 3,
      84    BFD_SYM_MODULE_KIND_FUNCTION = 4,
      85    BFD_SYM_MODULE_KIND_DATA = 5,
      86    BFD_SYM_MODULE_KIND_BLOCK = 6
      87  };
      88  typedef enum bfd_sym_module_kind bfd_sym_module_kind;
      89  
      90  enum bfd_sym_symbol_scope
      91  {
      92    BFD_SYM_SYMBOL_SCOPE_LOCAL = 0,  /* Object is seen only inside current scope.  */
      93    BFD_SYM_SYMBOL_SCOPE_GLOBAL = 1  /* Object has global scope.  */
      94  };
      95  typedef enum bfd_sym_symbol_scope bfd_sym_symbol_scope;
      96  
      97  struct bfd_sym_file_reference
      98  {
      99    unsigned long fref_frte_index; /* File reference table index.  */
     100    unsigned long fref_offset;     /* Absolute offset into source file.  */
     101  };
     102  typedef struct bfd_sym_file_reference bfd_sym_file_reference;
     103  
     104  /* NAME TABLE (NTE).  */
     105  
     106  /* RESOURCES TABLE (RTE)
     107  
     108     All code and data is *defined* to reside in a resource.  Even A5
     109     relative data is defined to reside in a dummy resource of ResType
     110     'gbld'.  Code always resides in a resource.  Because a code/data
     111     is built of many modules, when walking through a resource we must
     112     point back to the modules in the order they were defined.  This is
     113     done by requiring the entries in the Modules Entry table to be
     114     ordered by resource/resource-number and by the location in that
     115     resource.  Hence, the resource table entry points to the first
     116     module making up that resource.  All modules table entries following
     117     that first one with the same restype/resnum are contiguous and offset
     118     from that first entry.  */
     119  
     120  struct bfd_sym_resources_table_entry
     121  {
     122    unsigned char rte_res_type[4];  /* Resource Type.  */
     123    unsigned short rte_res_number;  /* Resource Number.  */
     124    unsigned long rte_nte_index;    /* Name of the resource.  */
     125    unsigned long rte_mte_first;    /* Index of first module in the resource.  */
     126    unsigned long rte_mte_last;     /* Index of the last module in the resource.  */
     127    unsigned long rte_res_size;     /* Size of the resource.  */
     128  };
     129  typedef struct bfd_sym_resources_table_entry bfd_sym_resources_table_entry;
     130  
     131  /* MODULES TABLE (MTE)
     132  
     133     Modules table entries are ordered by their appearance in a resource.
     134     (Note that having a single module copied into two resources is not
     135     possible).  Modules map back to their resource via an index into the
     136     resource table and an offset into the resource.  Modules also point
     137     to their source files, both the definition module and implementation
     138     module.  Because modules can be textually nested within other
     139     modules, a link to the parent (containing) module is required.  This
     140     module can textually contain other modules.  A link to the contiguous
     141     list of child (contained) modules is required.  Variables, statements,
     142     and types defined in the module are pointed to by indexing the head of
     143     the contiguous lists of contained variables, contained statements,
     144     and contained types.  */
     145  
     146  struct bfd_sym_modules_table_entry
     147  {
     148    unsigned long mte_rte_index;		/* Which resource it is in.  */
     149    unsigned long mte_res_offset;		/* Offset into the resource.  */
     150    unsigned long mte_size;		/* Size of module.  */
     151    char mte_kind;			/* What kind of module this is.  */
     152    char mte_scope;			/* How visible is it?  */
     153    unsigned long mte_parent;		/* Containing module.  */
     154    bfd_sym_file_reference mte_imp_fref;	/* Implementation source.  */
     155    unsigned long mte_imp_end;		/* End of implementation source.  */
     156    unsigned long mte_nte_index;		/* The name of the module.  */
     157    unsigned long mte_cmte_index;		/* Modules contained in this.  */
     158    unsigned long mte_cvte_index;		/* Variables contained in this.  */
     159    unsigned long mte_clte_index;		/* Local labels defined here.  */
     160    unsigned long mte_ctte_index;		/* Types contained in this.  */
     161    unsigned long mte_csnte_idx_1;	/* CSNTE index of mte_snbr_first.  */
     162    unsigned long mte_csnte_idx_2;	/* CSNTE index of mte_snbr_last.  */
     163  };
     164  typedef struct bfd_sym_modules_table_entry bfd_sym_modules_table_entry;
     165  
     166  /* FILE REFERENCES TABLE (FRTE)
     167  
     168     The FILE REFERENCES TABLE maps from source file to module & offset.
     169     The table is ordered by increasing file offset.  Each new offset
     170     references a module.
     171  
     172  			FRT	= FILE_SOURCE_START
     173  						FILE_SOURCE_INCREMENT*
     174  						END_OF_LIST.
     175  
     176  	*** THIS MECHANISM IS VERY SLOW FOR FILE+STATEMENT_NUMBER TO
     177  	*** MODULE/CODE ADDRESS OPERATIONS.  ANOTHER MECHANISM IS
     178  	***	REQUIRED!!  */
     179  
     180  union bfd_sym_file_references_table_entry
     181  {
     182    struct
     183    {
     184      /* END_OF_LIST, FILE_NAME_INDEX, or module table entry.  */
     185      unsigned long type;
     186    }
     187    generic;
     188  
     189    struct
     190    {
     191      /* FILE_NAME_INDEX.  */
     192      unsigned long type;
     193      unsigned long nte_index;
     194      unsigned long mod_date;
     195    }
     196    filename;
     197  
     198    struct
     199    {
     200      /* < FILE_NAME_INDEX.  */
     201      unsigned long mte_index;
     202      unsigned long file_offset;
     203    }
     204    entry;
     205  };
     206  typedef union bfd_sym_file_references_table_entry bfd_sym_file_references_table_entry;
     207  
     208  /* CONTAINED MODULES TABLE (CMTE)
     209  
     210     Contained Modules are lists of indices into the modules table.  The
     211     lists are terminated by an END_OF_LIST index.  All entries are of the
     212     same size, hence mapping an index into a CMTE list is simple.
     213  
     214     CMT = MTE_INDEX* END_OF_LIST.  */
     215  
     216  union bfd_sym_contained_modules_table_entry
     217  {
     218    struct
     219    {
     220      /* END_OF_LIST, index.  */
     221      unsigned long type;
     222    }
     223    generic;
     224  
     225    struct
     226    {
     227      unsigned long mte_index; /* Index into the Modules Table.  */
     228      unsigned long nte_index; /* The name of the module.  */
     229    }
     230    entry;
     231  };
     232  typedef union bfd_sym_contained_modules_table_entry bfd_sym_contained_modules_table_entry;
     233  
     234  /* CONTAINED VARIABLES TABLE (CVTE)
     235  
     236     Contained Variables map into the module table, file table, name table, and type
     237     table.  Contained Variables are a contiguous list of source file change record,
     238     giving the name of and offset into the source file corresponding to all variables
     239     following.  Variable definition records contain an index into the name table (giving
     240     the text of the variable as it appears in the source code), an index into the type
     241     table giving the type of the variable, an increment added to the source file
     242     offset giving the start of the implementation of the variable, and a storage
     243     class address, giving information on variable's runtime address.
     244  
     245     CVT = SOURCE_FILE_CHANGE SYMBOL_INFO* END_OF_LIST.
     246     SYMBOL_INFO = SYMBOL_DEFINITION | SOURCE_FILE_CHANGE .
     247  
     248     All entries are of the same size, making the fetching of data simple.  The
     249     variable entries in the list are in ALPHABETICAL ORDER to simplify the display of
     250     available variables for several of the debugger's windows.  */
     251  
     252  /* 'la_size' determines the variant used below:
     253  
     254       == BFD_SYM_CVTE_SCA
     255       Traditional STORAGE_CLASS_ADDRESS;
     256  
     257       <= BFD_SYM_CVTE_LA_MAX_SIZE
     258       That many logical address bytes ("in-situ");
     259  
     260       == BFD_SYM_CVTE_BIG_LA
     261       Logical address bytes in constant pool, at offset 'big_la'.  */
     262  
     263  #define	BFD_SYM_CVTE_SCA 0	    /* Indicate SCA variant of CVTE.  */
     264  #define	BFD_SYM_CVTE_LA_MAX_SIZE 13 /* Max# of logical address bytes in a CVTE.  */
     265  #define	BFD_SYM_CVTE_BIG_LA 127     /* Indicates LA redirection to constant pool.  */
     266  
     267  union bfd_sym_contained_variables_table_entry
     268  {
     269    struct
     270    {
     271      /* END_OF_LIST, SOURCE_FILE_CHANGE, or type table entry.  */
     272      unsigned long type;
     273    }
     274    generic;
     275  
     276    struct
     277    {
     278      /* SOURCE_FILE_CHANGE.  */
     279      unsigned long type;
     280      bfd_sym_file_reference fref;
     281    }
     282    file;
     283  
     284    struct
     285    {
     286      /* < SOURCE_FILE_CHANGE.  */
     287      unsigned long tte_index;
     288      unsigned long nte_index;
     289      unsigned long file_delta;			    /* Increment from previous source.  */
     290      unsigned char scope;
     291      unsigned char la_size;			    /* #bytes of LAs below.  */
     292  
     293      union
     294      {
     295        /* la_size == BFD_SYM_CVTE_SCA.  */
     296        struct
     297        {
     298  	unsigned char sca_kind;			    /* Distinguish local from value/var formal.  */
     299  	unsigned char sca_class;		    /* The storage class itself.  */
     300  	unsigned long sca_offset;
     301        }
     302        scstruct;
     303  
     304        /* la_size <= BFD_SYM_CVTE_LA_MAX_SIZE.  */
     305        struct {
     306  	unsigned char la[BFD_SYM_CVTE_LA_MAX_SIZE]; /* Logical address bytes.  */
     307  	unsigned char la_kind;			    /* Eqv. cvte_location.sca_kind.  */
     308        }
     309        lastruct;
     310  
     311        /* la_size == BFD_SYM_CVTE_BIG_LA 127.  */
     312        struct
     313        {
     314  	unsigned long big_la;			    /* Logical address bytes in constant pool.  */
     315  	unsigned char big_la_kind;		    /* Eqv. cvte_location.sca_kind.  */
     316        }
     317        biglastruct;
     318      }
     319      address;
     320    }
     321    entry;
     322  };
     323  typedef union bfd_sym_contained_variables_table_entry bfd_sym_contained_variables_table_entry;
     324  
     325  /* CONTAINED STATEMENTS TABLE (CSNTE)
     326  
     327     Contained Statements table.  This table is similar to the Contained
     328     Variables table except that instead of VARIABLE_DEFINITION entries, this
     329     module contains STATEMENT_NUMBER_DEFINITION entries.  A statement number
     330     definition points back to the containing module (via an index into
     331     the module entry table) and contains the file and resource deltas
     332     to add to the previous values to get to this statement.
     333     All entries are of the same size, making the fetching of data simple.  The
     334     entries in the table are in order of increasing statement number within the
     335     source file.
     336  
     337     The Contained Statements table is indexed from two places.  An MTE contains
     338     an index to the first statement number within the module.  An FRTE contains
     339     an index to the first statement in the table (Possibly.  This is slow.)  Or
     340     a table of fast statement number to CSNTE entry mappings indexes into the
     341     table.  Choice not yet made.  */
     342  
     343  union bfd_sym_contained_statements_table_entry
     344  {
     345    struct
     346    {
     347      /* END_OF_LIST, SOURCE_FILE_CHANGE, or statement table entry.  */
     348      unsigned long type;
     349    }
     350    generic;
     351  
     352    struct
     353    {
     354      /* SOURCE_FILE_CHANGE.  */
     355      unsigned long type;
     356      bfd_sym_file_reference fref; /* File name table.  */
     357    }
     358    file;
     359  
     360    struct
     361    {
     362      unsigned long mte_index;     /* Which module contains it.  */
     363      unsigned long file_delta;    /* Where it is defined.  */
     364      unsigned long mte_offset;    /* Where it is in the module.  */
     365    }
     366    entry;
     367  };
     368  typedef union bfd_sym_contained_statements_table_entry bfd_sym_contained_statements_table_entry;
     369  
     370  /* CONTAINED LABELS TABLE (CLTE)
     371  
     372     Contained Labels table names those labels local to the module.  It is similar
     373     to the Contained Statements table.  */
     374  
     375  union bfd_sym_contained_labels_table_entry
     376  {
     377    struct
     378    {
     379      /* END_OF_LIST, SOURCE_FILE_CHANGE, index.  */
     380      unsigned long type;
     381    }
     382    generic;
     383  
     384    struct
     385    {
     386      /* SOURCE_FILE_CHANGE.  */
     387      unsigned long type;
     388      bfd_sym_file_reference fref;
     389    }
     390    file;
     391  
     392    struct
     393    {
     394      /* < SOURCE_FILE_CHANGE.  */
     395      unsigned long mte_index;   /* Which module contains us.  */
     396      unsigned long mte_offset;  /* Where it is in the module.  */
     397      unsigned long nte_index;   /* The name of the label.  */
     398      unsigned long file_delta;  /* Where it is defined.  */
     399      unsigned short scope;      /* How visible the label is.  */
     400    }
     401    entry;
     402  };
     403  typedef union bfd_sym_contained_labels_table_entry bfd_sym_contained_labels_table_entry;
     404  
     405  /* CONTAINED TYPES TABLE (CTTE)
     406  
     407     Contained Types define the named types that are in the module.  It is used to
     408     map name indices into type indices.  The type entries in the table are in
     409     alphabetical order by type name.  */
     410  
     411  union bfd_sym_contained_types_table_entry
     412  {
     413    struct
     414    {
     415      /* END_OF_LIST, SOURCE_FILE_CHANGE, or type table entry.  */
     416      unsigned long type;
     417    }
     418    generic;
     419  
     420    struct
     421    {
     422      /* SOURCE_FILE_CHANGE.  */
     423      unsigned long type;
     424      bfd_sym_file_reference fref;
     425    }
     426    file;
     427  
     428    struct
     429    {
     430      /* < SOURCE_FILE_CHANGE.  */
     431      unsigned long tte_index;
     432      unsigned long nte_index;
     433      unsigned long file_delta; /* From last file definition.  */
     434    }
     435    entry;
     436  };
     437  typedef union bfd_sym_contained_types_table_entry bfd_sym_contained_types_table_entry;
     438  
     439  /* TYPE TABLE (TTE).  */
     440  
     441  typedef unsigned long bfd_sym_type_table_entry;
     442  
     443  /* TYPE INFORMATION TABLE (TINFO).  */
     444  
     445  struct bfd_sym_type_information_table_entry
     446  {
     447    unsigned long nte_index;
     448    unsigned long physical_size;
     449    unsigned long logical_size;
     450    unsigned long offset;
     451  };
     452  typedef struct bfd_sym_type_information_table_entry bfd_sym_type_information_table_entry;
     453  
     454  /* FILE REFERENCES INDEX TABLE (FITE)
     455  
     456     The FRTE INDEX TABLE indexes into the FILE REFERENCE TABLE above.  The FRTE
     457     at that index is the FILE_SOURCE_START for a series of files.  The FRTEs are
     458     indexed from 1.  The list is terminated with an END_OF_LIST.  */
     459  
     460  union bfd_sym_file_references_index_table_entry
     461  {
     462    struct
     463    {
     464      unsigned long type;
     465    }
     466    generic;
     467  
     468    struct
     469    {
     470      unsigned long frte_index;  /* Index into the FRTE table.  */
     471      unsigned long nte_index;   /* Name table index, gives filename.  */
     472    }
     473    entry;
     474  };
     475  typedef union bfd_sym_file_references_index_table_entry bfd_sym_file_references_index_table_entry;
     476  
     477  /* CONSTANT POOL (CONST)
     478  
     479     The CONSTANT_POOL consists of entries that start on word boundaries.  The entries
     480     are referenced by byte index into the constant pool, not by record number.
     481  
     482     Each entry takes the form:
     483  
     484     <16-bit size>
     485     <that many bytes of stuff>
     486  
     487     Entries do not cross page boundaries.  */
     488  
     489  typedef short bfd_sym_constant_pool_entry;
     490  
     491  /* The DISK_SYMBOL_HEADER_BLOCK is the first record in a .SYM file,
     492     defining the physical characteristics of the symbolic information.
     493     The remainder of the * .SYM file is stored in fixed block
     494     allocations. For the purposes of paging, the * file is considered
     495     to be an array of dshb_page_size blocks, with block 0 (and *
     496     possibly more) devoted to the DISK_SYMBOL_HEADER_BLOCK.
     497  
     498     The dti_object_count field means that the allowed indices for that
     499     type of object are 0 .. dti_object_count. An index of 0, although
     500     allowed, is never done.  However, an 0th entry is created in the
     501     table.  That entry is filled with all zeroes.  The reason for this
     502     is to avoid off-by-one programming errors that would otherwise
     503     occur: an index of k *MEANS* k, not k-1 when going to the disk
     504     table.  */
     505  
     506  struct bfd_sym_table_info
     507  {
     508    unsigned long dti_first_page;   /* First page for this table.  */
     509    unsigned long dti_page_count;   /* Number of pages for the table.  */
     510    unsigned long dti_object_count; /* Number of objects in the table.  */
     511  };
     512  typedef struct bfd_sym_table_info bfd_sym_table_info;
     513  
     514  struct bfd_sym_header_block
     515  {
     516    unsigned char dshb_id[32];      /* Version information.  */
     517    unsigned short dshb_page_size;  /* Size of the pages/blocks.  */
     518    unsigned long dshb_hash_page;   /* Disk page for the hash table.  */
     519    unsigned long dshb_root_mte;    /* MTE index of the program root.  */
     520    unsigned long dshb_mod_date;    /* modification date of executable.  */
     521    bfd_sym_table_info dshb_frte;   /* Per TABLE information.  */
     522    bfd_sym_table_info dshb_rte;
     523    bfd_sym_table_info dshb_mte;
     524    bfd_sym_table_info dshb_cmte;
     525    bfd_sym_table_info dshb_cvte;
     526    bfd_sym_table_info dshb_csnte;
     527    bfd_sym_table_info dshb_clte;
     528    bfd_sym_table_info dshb_ctte;
     529    bfd_sym_table_info dshb_tte;
     530    bfd_sym_table_info dshb_nte;
     531    bfd_sym_table_info dshb_tinfo;
     532    bfd_sym_table_info dshb_fite;   /* File information.  */
     533    bfd_sym_table_info dshb_const;  /* Constant pool.  */
     534  
     535    unsigned char dshb_file_creator[4]; /* Executable's creator.  */
     536    unsigned char dshb_file_type[4];    /* Executable's file type.  */
     537  };
     538  typedef struct bfd_sym_header_block bfd_sym_header_block;
     539  
     540  struct bfd_sym_data_struct
     541  {
     542    unsigned char *name_table;
     543    bfd_sym_header_block header;
     544    bfd_sym_version version;
     545    bfd *sbfd;
     546  };
     547  typedef struct bfd_sym_data_struct bfd_sym_data_struct;
     548  
     549  extern bool bfd_sym_mkobject
     550    (bfd *);
     551  extern void bfd_sym_print_symbol
     552    (bfd *, void *, asymbol *, bfd_print_symbol_type);
     553  extern bool bfd_sym_valid
     554    (bfd *);
     555  extern unsigned char * bfd_sym_read_name_table
     556    (bfd *, bfd_sym_header_block *);
     557  extern void bfd_sym_parse_file_reference_v32
     558    (unsigned char *, size_t, bfd_sym_file_reference *);
     559  extern void bfd_sym_parse_disk_table_v32
     560    (unsigned char *, size_t, bfd_sym_table_info *);
     561  extern void bfd_sym_parse_header_v32
     562    (unsigned char *, size_t, bfd_sym_header_block *);
     563  extern int bfd_sym_read_header_v32
     564    (bfd *, bfd_sym_header_block *);
     565  extern int bfd_sym_read_header_v34
     566    (bfd *, bfd_sym_header_block *);
     567  extern int bfd_sym_read_header
     568    (bfd *, bfd_sym_header_block *, bfd_sym_version);
     569  extern int bfd_sym_read_version
     570    (bfd *, bfd_sym_version *);
     571  extern void bfd_sym_display_table_summary
     572    (FILE *, bfd_sym_table_info *, const char *);
     573  extern void bfd_sym_display_header
     574    (FILE *, bfd_sym_header_block *);
     575  extern void bfd_sym_parse_resources_table_entry_v32
     576    (unsigned char *, size_t, bfd_sym_resources_table_entry *);
     577  extern void bfd_sym_parse_modules_table_entry_v33
     578    (unsigned char *, size_t, bfd_sym_modules_table_entry *);
     579  extern void bfd_sym_parse_file_references_table_entry_v32
     580    (unsigned char *, size_t, bfd_sym_file_references_table_entry *);
     581  extern void bfd_sym_parse_contained_modules_table_entry_v32
     582    (unsigned char *, size_t, bfd_sym_contained_modules_table_entry *);
     583  extern void bfd_sym_parse_contained_variables_table_entry_v32
     584    (unsigned char *, size_t, bfd_sym_contained_variables_table_entry *);
     585  extern void bfd_sym_parse_contained_statements_table_entry_v32
     586    (unsigned char *, size_t, bfd_sym_contained_statements_table_entry *);
     587  extern void bfd_sym_parse_contained_labels_table_entry_v32
     588    (unsigned char *, size_t, bfd_sym_contained_labels_table_entry *);
     589  extern void bfd_sym_parse_type_table_entry_v32
     590    (unsigned char *, size_t, bfd_sym_type_table_entry *);
     591  extern int bfd_sym_fetch_resources_table_entry
     592    (bfd *, bfd_sym_resources_table_entry *, unsigned long);
     593  extern int bfd_sym_fetch_modules_table_entry
     594    (bfd *, bfd_sym_modules_table_entry *, unsigned long);
     595  extern int bfd_sym_fetch_file_references_table_entry
     596    (bfd *, bfd_sym_file_references_table_entry *, unsigned long);
     597  extern int bfd_sym_fetch_contained_modules_table_entry
     598    (bfd *, bfd_sym_contained_modules_table_entry *, unsigned long);
     599  extern int bfd_sym_fetch_contained_variables_table_entry
     600    (bfd *, bfd_sym_contained_variables_table_entry *, unsigned long);
     601  extern int bfd_sym_fetch_contained_statements_table_entry
     602    (bfd *, bfd_sym_contained_statements_table_entry *, unsigned long);
     603  extern int bfd_sym_fetch_contained_labels_table_entry
     604    (bfd *, bfd_sym_contained_labels_table_entry *, unsigned long);
     605  extern int bfd_sym_fetch_contained_types_table_entry
     606    (bfd *, bfd_sym_contained_types_table_entry *, unsigned long);
     607  extern int bfd_sym_fetch_file_references_index_table_entry
     608    (bfd *, bfd_sym_file_references_index_table_entry *, unsigned long);
     609  extern int bfd_sym_fetch_constant_pool_entry
     610    (bfd *, bfd_sym_constant_pool_entry *, unsigned long);
     611  extern int bfd_sym_fetch_type_table_entry
     612    (bfd *, bfd_sym_type_table_entry *, unsigned long);
     613  extern int bfd_sym_fetch_type_information_table_entry
     614    (bfd *, bfd_sym_type_information_table_entry *, unsigned long);
     615  extern int bfd_sym_fetch_type_table_information
     616    (bfd *, bfd_sym_type_information_table_entry *, unsigned long);
     617  extern const unsigned char * bfd_sym_symbol_name
     618    (bfd *, unsigned long);
     619  extern const unsigned char * bfd_sym_module_name
     620    (bfd *, unsigned long);
     621  extern const char * bfd_sym_unparse_storage_kind
     622    (enum bfd_sym_storage_kind);
     623  extern const char * bfd_sym_unparse_storage_class
     624    (enum bfd_sym_storage_class);
     625  extern const char * bfd_sym_unparse_module_kind
     626    (enum bfd_sym_module_kind);
     627  extern const char * bfd_sym_unparse_symbol_scope
     628    (enum bfd_sym_symbol_scope);
     629  extern void bfd_sym_print_file_reference
     630    (bfd *, FILE *, bfd_sym_file_reference *);
     631  extern void bfd_sym_print_resources_table_entry
     632    (bfd *, FILE *, bfd_sym_resources_table_entry *);
     633  extern void bfd_sym_print_modules_table_entry
     634    (bfd *, FILE *, bfd_sym_modules_table_entry *);
     635  extern void bfd_sym_print_file_references_table_entry
     636    (bfd *, FILE *, bfd_sym_file_references_table_entry *);
     637  extern void bfd_sym_print_contained_modules_table_entry
     638    (bfd *, FILE *, bfd_sym_contained_modules_table_entry *);
     639  extern void bfd_sym_print_contained_variables_table_entry
     640    (bfd *, FILE *f, bfd_sym_contained_variables_table_entry *);
     641  extern void bfd_sym_print_contained_statements_table_entry
     642    (bfd *, FILE *, bfd_sym_contained_statements_table_entry *);
     643  extern void bfd_sym_print_contained_labels_table_entry
     644    (bfd *, FILE *, bfd_sym_contained_labels_table_entry *);
     645  extern void bfd_sym_print_contained_types_table_entry
     646    (bfd *, FILE *, bfd_sym_contained_types_table_entry *);
     647  extern const char * bfd_sym_type_operator_name
     648    (unsigned char);
     649  extern const char * bfd_sym_type_basic_name
     650    (unsigned char);
     651  extern int bfd_sym_fetch_long
     652    (unsigned char *, unsigned long, unsigned long, unsigned long *, long *);
     653  extern void bfd_sym_print_type_information
     654    (bfd *, FILE *, unsigned char *, unsigned long, unsigned long, unsigned long *);
     655  extern void bfd_sym_print_type_information_table_entry
     656    (bfd *, FILE *, bfd_sym_type_information_table_entry *);
     657  extern void bfd_sym_print_file_references_index_table_entry
     658    (bfd *, FILE *, bfd_sym_file_references_index_table_entry *);
     659  extern void bfd_sym_print_constant_pool_entry
     660    (bfd *, FILE *, bfd_sym_constant_pool_entry *);
     661  extern unsigned char * bfd_sym_display_name_table_entry
     662    (bfd *, FILE *, unsigned char *);
     663  extern void bfd_sym_display_name_table
     664    (bfd *, FILE *);
     665  extern void bfd_sym_display_resources_table
     666    (bfd *, FILE *);
     667  extern void bfd_sym_display_modules_table
     668    (bfd *, FILE *);
     669  extern void bfd_sym_display_file_references_table
     670    (bfd *, FILE *);
     671  extern void bfd_sym_display_contained_modules_table
     672    (bfd *, FILE *);
     673  extern void bfd_sym_display_contained_variables_table
     674    (bfd *, FILE *);
     675  extern void bfd_sym_display_contained_statements_table
     676    (bfd *, FILE *);
     677  extern void bfd_sym_display_contained_labels_table
     678    (bfd *, FILE *);
     679  extern void bfd_sym_display_contained_types_table
     680    (bfd *, FILE *);
     681  extern void bfd_sym_display_file_references_index_table
     682    (bfd *, FILE *);
     683  extern void bfd_sym_display_constant_pool
     684    (bfd *, FILE *);
     685  extern void bfd_sym_display_type_information_table
     686    (bfd *, FILE *);
     687  extern int bfd_sym_scan
     688    (bfd *, bfd_sym_version, bfd_sym_data_struct *);
     689  extern bfd_cleanup bfd_sym_object_p
     690    (bfd *);
     691  extern void bfd_sym_get_symbol_info
     692    (bfd *, asymbol *, symbol_info *);
     693  extern long bfd_sym_get_symtab_upper_bound
     694    (bfd *);
     695  extern long bfd_sym_canonicalize_symtab
     696    (bfd *, asymbol **);
     697  extern int bfd_sym_sizeof_headers
     698    (bfd *, struct bfd_link_info *);
     699  
     700  #endif /* __xSYM_H__ */