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