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