Home | History | Annotate | Line # | Download | only in binutils
coffgrok.h revision 1.1.1.2
      1      1.1  christos /* coffgrok.h
      2  1.1.1.2  christos    Copyright (C) 2001-2015 Free Software Foundation, Inc.
      3      1.1  christos 
      4      1.1  christos    This file is part of GNU Binutils.
      5      1.1  christos 
      6      1.1  christos    This program is free software; you can redistribute it and/or modify
      7      1.1  christos    it under the terms of the GNU General Public License as published by
      8      1.1  christos    the Free Software Foundation; either version 3 of the License, or
      9      1.1  christos    (at your option) any later version.
     10      1.1  christos 
     11      1.1  christos    This program is distributed in the hope that it will be useful,
     12      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14      1.1  christos    GNU General Public License for more details.
     15      1.1  christos 
     16      1.1  christos    You should have received a copy of the GNU General Public License
     17      1.1  christos    along with this program; if not, write to the Free Software
     18      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19      1.1  christos    MA 02110-1301, USA.  */
     20      1.1  christos 
     21      1.1  christos #define T_NULL		0
     22  1.1.1.2  christos #define T_VOID		1	/* Function argument (only used by compiler).  */
     23  1.1.1.2  christos #define T_CHAR		2	/* Character		*/
     24  1.1.1.2  christos #define T_SHORT		3	/* Short integer	*/
     25  1.1.1.2  christos #define T_INT		4	/* Integer		*/
     26  1.1.1.2  christos #define T_LONG		5	/* Long integer		*/
     27  1.1.1.2  christos #define T_FLOAT		6	/* Floating point	*/
     28  1.1.1.2  christos #define T_DOUBLE	7	/* Double word		*/
     29  1.1.1.2  christos #define T_STRUCT	8	/* Structure 		*/
     30  1.1.1.2  christos #define T_UNION		9	/* Union 		*/
     31  1.1.1.2  christos #define T_ENUM		10	/* Enumeration 		*/
     32  1.1.1.2  christos #define T_MOE		11	/* Member of enumeration*/
     33  1.1.1.2  christos #define T_UCHAR		12	/* Unsigned character	*/
     34  1.1.1.2  christos #define T_USHORT	13	/* Unsigned short	*/
     35  1.1.1.2  christos #define T_UINT		14	/* Unsigned integer	*/
     36  1.1.1.2  christos #define T_ULONG		15	/* Unsigned long	*/
     37  1.1.1.2  christos #define T_LNGDBL	16	/* Long double		*/
     38      1.1  christos 
     39      1.1  christos 
     40      1.1  christos struct coff_reloc
     41      1.1  christos {
     42      1.1  christos   int offset;
     43      1.1  christos   struct coff_symbol *symbol;
     44      1.1  christos   int addend;
     45      1.1  christos };
     46      1.1  christos 
     47      1.1  christos struct coff_section
     48      1.1  christos {
     49      1.1  christos   char *name;
     50      1.1  christos   int code;
     51      1.1  christos   int data;
     52      1.1  christos   int address;
     53      1.1  christos   int number;  /* 0..n, .text = 0 */
     54  1.1.1.2  christos   unsigned int nrelocs;
     55      1.1  christos   int size;
     56      1.1  christos   struct coff_reloc *relocs;
     57      1.1  christos   struct bfd_section *bfd_section;
     58      1.1  christos };
     59      1.1  christos 
     60      1.1  christos struct coff_ofile
     61      1.1  christos {
     62      1.1  christos   int nsources;
     63      1.1  christos   struct coff_sfile *source_head;
     64      1.1  christos   struct coff_sfile *source_tail;
     65      1.1  christos   int nsections;
     66      1.1  christos   struct coff_section *sections;
     67      1.1  christos   struct coff_symbol *symbol_list_head;
     68      1.1  christos   struct coff_symbol *symbol_list_tail;
     69      1.1  christos };
     70      1.1  christos 
     71  1.1.1.2  christos struct coff_isection
     72  1.1.1.2  christos {
     73      1.1  christos   int low;
     74      1.1  christos   int high;
     75      1.1  christos   int init;
     76      1.1  christos   struct coff_section *parent;
     77      1.1  christos };
     78      1.1  christos 
     79      1.1  christos struct coff_sfile
     80      1.1  christos {
     81      1.1  christos   char *name;
     82      1.1  christos   struct coff_scope *scope;
     83      1.1  christos   struct coff_sfile *next;
     84      1.1  christos 
     85      1.1  christos   /* Vector which maps where in each output section
     86  1.1.1.2  christos      the input file has it's data.  */
     87      1.1  christos   struct coff_isection *section;
     88      1.1  christos };
     89      1.1  christos 
     90  1.1.1.2  christos struct coff_type
     91      1.1  christos {
     92      1.1  christos   int size;
     93      1.1  christos   enum
     94      1.1  christos     {
     95      1.1  christos       coff_pointer_type, coff_function_type, coff_array_type, coff_structdef_type, coff_basic_type,
     96      1.1  christos       coff_structref_type, coff_enumref_type, coff_enumdef_type, coff_secdef_type
     97  1.1.1.2  christos     } type;
     98  1.1.1.2  christos 
     99      1.1  christos   union
    100      1.1  christos     {
    101      1.1  christos       struct
    102  1.1.1.2  christos       {
    103      1.1  christos 	int address;
    104      1.1  christos 	int size;
    105      1.1  christos       } asecdef;
    106      1.1  christos 
    107      1.1  christos       struct
    108  1.1.1.2  christos       {
    109  1.1.1.2  christos 	int isstruct;
    110  1.1.1.2  christos 	struct coff_scope *elements;
    111  1.1.1.2  christos 	int idx;
    112  1.1.1.2  christos       } astructdef;
    113  1.1.1.2  christos 
    114  1.1.1.2  christos       struct
    115  1.1.1.2  christos       {
    116  1.1.1.2  christos 	struct coff_symbol *ref;
    117  1.1.1.2  christos       } astructref;
    118  1.1.1.2  christos 
    119  1.1.1.2  christos       struct
    120  1.1.1.2  christos       {
    121  1.1.1.2  christos 	struct coff_scope *elements;
    122  1.1.1.2  christos 	int idx;
    123  1.1.1.2  christos       } aenumdef;
    124  1.1.1.2  christos 
    125  1.1.1.2  christos       struct
    126  1.1.1.2  christos       {
    127  1.1.1.2  christos 	struct coff_symbol *ref;
    128  1.1.1.2  christos       } aenumref;
    129  1.1.1.2  christos 
    130  1.1.1.2  christos       struct
    131  1.1.1.2  christos       {
    132  1.1.1.2  christos 	struct coff_type *points_to;
    133  1.1.1.2  christos       } pointer;
    134  1.1.1.2  christos 
    135  1.1.1.2  christos       struct
    136  1.1.1.2  christos       {
    137  1.1.1.2  christos 	int dim;
    138  1.1.1.2  christos 	struct coff_type *array_of;
    139  1.1.1.2  christos       } array;
    140  1.1.1.2  christos 
    141  1.1.1.2  christos       struct
    142  1.1.1.2  christos       {
    143  1.1.1.2  christos 	struct coff_type *   function_returns;
    144  1.1.1.2  christos 	struct coff_scope *  parameters;
    145  1.1.1.2  christos 	struct coff_scope *  code;
    146  1.1.1.2  christos 	struct coff_line *   lines;
    147  1.1.1.2  christos       } function;
    148  1.1.1.2  christos 
    149      1.1  christos       int basic;		/* One of T_VOID.. T_UINT */
    150  1.1.1.2  christos   } u;
    151      1.1  christos };
    152      1.1  christos 
    153  1.1.1.2  christos struct coff_line
    154  1.1.1.2  christos {
    155  1.1.1.2  christos   int   nlines;
    156  1.1.1.2  christos   int * lines;
    157  1.1.1.2  christos   int * addresses;
    158  1.1.1.2  christos };
    159  1.1.1.2  christos 
    160  1.1.1.2  christos struct coff_scope
    161  1.1.1.2  christos {
    162  1.1.1.2  christos   struct coff_section * sec;     /* Which section.  */
    163  1.1.1.2  christos   int                   offset;  /* Where.  */
    164  1.1.1.2  christos   int                   size;    /* How big.  */
    165  1.1.1.2  christos   struct coff_scope *   parent;	 /* One up.  */
    166  1.1.1.2  christos   struct coff_scope *   next;	 /* Next along.  */
    167  1.1.1.2  christos   int                   nvars;
    168  1.1.1.2  christos   struct coff_symbol *  vars_head;	/* Symbols.  */
    169  1.1.1.2  christos   struct coff_symbol *  vars_tail;
    170  1.1.1.2  christos   struct coff_scope *   list_head;	/* Children.  */
    171  1.1.1.2  christos   struct coff_scope *   list_tail;
    172  1.1.1.2  christos };
    173  1.1.1.2  christos 
    174  1.1.1.2  christos struct coff_visible
    175  1.1.1.2  christos {
    176  1.1.1.2  christos   enum coff_vis_type
    177  1.1.1.2  christos   {
    178  1.1.1.2  christos     coff_vis_ext_def,
    179  1.1.1.2  christos     coff_vis_ext_ref,
    180  1.1.1.2  christos     coff_vis_int_def,
    181  1.1.1.2  christos     coff_vis_common,
    182  1.1.1.2  christos     coff_vis_auto,
    183  1.1.1.2  christos     coff_vis_register,
    184  1.1.1.2  christos     coff_vis_tag,
    185  1.1.1.2  christos     coff_vis_member_of_struct,
    186  1.1.1.2  christos     coff_vis_member_of_enum,
    187  1.1.1.2  christos     coff_vis_autoparam,
    188  1.1.1.2  christos     coff_vis_regparam,
    189  1.1.1.2  christos   } type;
    190  1.1.1.2  christos };
    191      1.1  christos 
    192  1.1.1.2  christos struct coff_where
    193  1.1.1.2  christos {
    194  1.1.1.2  christos   enum
    195  1.1.1.2  christos   {
    196  1.1.1.2  christos     coff_where_stack, coff_where_memory, coff_where_register, coff_where_unknown,
    197  1.1.1.2  christos     coff_where_strtag, coff_where_member_of_struct,
    198  1.1.1.2  christos     coff_where_member_of_enum, coff_where_entag, coff_where_typedef
    199  1.1.1.2  christos   } where;
    200  1.1.1.2  christos 
    201  1.1.1.2  christos   int offset;
    202  1.1.1.2  christos   int bitoffset;
    203  1.1.1.2  christos   int bitsize;
    204  1.1.1.2  christos   struct coff_section *section;
    205  1.1.1.2  christos };
    206  1.1.1.2  christos 
    207  1.1.1.2  christos struct coff_symbol
    208  1.1.1.2  christos {
    209  1.1.1.2  christos   char *                name;
    210  1.1.1.2  christos   int                   tag;
    211  1.1.1.2  christos   struct coff_type *    type;
    212  1.1.1.2  christos   struct coff_where *   where;
    213  1.1.1.2  christos   struct coff_visible * visible;
    214  1.1.1.2  christos   struct coff_symbol *  next;
    215  1.1.1.2  christos   struct coff_symbol *  next_in_ofile_list; /* For the ofile list.  */
    216  1.1.1.2  christos   int                   number;
    217  1.1.1.2  christos   int                   er_number;
    218  1.1.1.2  christos   struct coff_sfile *   sfile;
    219  1.1.1.2  christos };
    220      1.1  christos 
    221  1.1.1.2  christos struct coff_ofile * coff_grok (bfd *);
    222