Home | History | Annotate | Line # | Download | only in binutils
coffgrok.h revision 1.1.1.1
      1 /* coffgrok.h
      2    Copyright 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
      3 
      4    This file is part of GNU Binutils.
      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 #define T_NULL		0
     22 #define T_VOID		1	/* function argument (only used by compiler) */
     23 #define T_CHAR		2	/* character		*/
     24 #define T_SHORT		3	/* short integer	*/
     25 #define T_INT		4	/* integer		*/
     26 #define T_LONG		5	/* long integer		*/
     27 #define T_FLOAT		6	/* floating point	*/
     28 #define T_DOUBLE	7	/* double word		*/
     29 #define T_STRUCT	8	/* structure 		*/
     30 #define T_UNION		9	/* union 		*/
     31 #define T_ENUM		10	/* enumeration 		*/
     32 #define T_MOE		11	/* member of enumeration*/
     33 #define T_UCHAR		12	/* unsigned character	*/
     34 #define T_USHORT	13	/* unsigned short	*/
     35 #define T_UINT		14	/* unsigned integer	*/
     36 #define T_ULONG		15	/* unsigned long	*/
     37 #define T_LNGDBL	16	/* long double		*/
     38 
     39 
     40 struct coff_reloc
     41 {
     42   int offset;
     43   struct coff_symbol *symbol;
     44   int addend;
     45 };
     46 
     47 struct coff_section
     48 {
     49   char *name;
     50   int code;
     51   int data;
     52   int address;
     53   int number;  /* 0..n, .text = 0 */
     54   int nrelocs;
     55   int size;
     56   struct coff_reloc *relocs;
     57   struct bfd_section *bfd_section;
     58 };
     59 
     60 struct coff_ofile
     61 {
     62   int nsources;
     63   struct coff_sfile *source_head;
     64   struct coff_sfile *source_tail;
     65   int nsections;
     66   struct coff_section *sections;
     67   struct coff_symbol *symbol_list_head;
     68   struct coff_symbol *symbol_list_tail;
     69 };
     70 
     71 struct coff_isection {
     72   int low;
     73   int high;
     74   int init;
     75   struct coff_section *parent;
     76 };
     77 
     78 struct coff_sfile
     79 {
     80   char *name;
     81   struct coff_scope *scope;
     82   struct coff_sfile *next;
     83 
     84   /* Vector which maps where in each output section
     85      the input file has it's data */
     86   struct coff_isection *section;
     87 
     88 };
     89 
     90 
     91  struct coff_type
     92 {
     93   int size;
     94   enum
     95     {
     96       coff_pointer_type, coff_function_type, coff_array_type, coff_structdef_type, coff_basic_type,
     97       coff_structref_type, coff_enumref_type, coff_enumdef_type, coff_secdef_type
     98       } type;
     99   union
    100     {
    101       struct
    102 	{
    103 	int address;
    104 	int size;
    105       } asecdef;
    106 
    107       struct
    108 	{
    109 	  int isstruct;
    110 	  struct coff_scope *elements;
    111 	  int idx;
    112 	}
    113       astructdef;
    114       struct
    115 	{
    116 	  struct coff_symbol *ref;
    117 	} astructref;
    118 
    119       struct
    120 	{
    121 	  struct coff_scope *elements;
    122 	  int idx;
    123 	} aenumdef;
    124       struct
    125 	{
    126 	  struct coff_symbol *ref;
    127 	} aenumref;
    128 
    129       struct
    130 	{
    131 	  struct coff_type *points_to;
    132 	} pointer;
    133       struct
    134 	{
    135 	  int dim;
    136 	  struct coff_type *array_of;
    137 	} array;
    138 
    139       struct
    140 	{
    141 	  struct coff_type *function_returns;
    142 	  struct coff_scope *parameters;
    143 	  struct coff_scope *code;
    144 	  struct coff_line *lines;
    145 	} function;
    146       int basic;		/* One of T_VOID.. T_UINT */
    147     }  u;
    148 };
    149 
    150 
    151  struct coff_line
    152  {
    153    int nlines;
    154    int *lines;
    155    int *addresses;
    156  };
    157 
    158 
    159  struct coff_scope
    160    {
    161      struct coff_section *sec; /* What section */
    162      int offset; /* where */
    163      int size; /* How big */
    164      struct coff_scope *parent;	/* one up */
    165 
    166      struct coff_scope *next;	/*next along */
    167 
    168      int nvars;
    169 
    170      struct coff_symbol *vars_head;	/* symbols */
    171      struct coff_symbol *vars_tail;
    172 
    173      struct coff_scope *list_head;	/* children */
    174      struct coff_scope *list_tail;
    175 
    176    };
    177 
    178 
    179  struct coff_visible
    180    {
    181      enum coff_vis_type
    182        {
    183 	 coff_vis_ext_def,
    184 	 coff_vis_ext_ref,
    185 	 coff_vis_int_def,
    186 	 coff_vis_common,
    187 	 coff_vis_auto,
    188 	 coff_vis_register,
    189 	 coff_vis_tag,
    190 	 coff_vis_member_of_struct,
    191 	 coff_vis_member_of_enum,
    192 	 coff_vis_autoparam,
    193 	 coff_vis_regparam,
    194        } type;
    195    };
    196 
    197  struct coff_where
    198    {
    199      enum
    200        {
    201 	 coff_where_stack, coff_where_memory, coff_where_register, coff_where_unknown,
    202 	 coff_where_strtag, coff_where_member_of_struct,
    203 	 coff_where_member_of_enum, coff_where_entag, coff_where_typedef
    204 
    205        } where;
    206      int offset;
    207      int bitoffset;
    208      int bitsize;
    209      struct coff_section *section;
    210    };
    211 
    212  struct coff_symbol
    213    {
    214      char *name;
    215      int tag;
    216      struct coff_type *type;
    217      struct coff_where *where;
    218      struct coff_visible *visible;
    219      struct coff_symbol *next;
    220      struct coff_symbol *next_in_ofile_list; /* For the ofile list */
    221      int number;
    222      int er_number;
    223      struct coff_sfile *sfile;
    224   };
    225 
    226 struct coff_ofile *coff_grok PARAMS ((bfd *));
    227