1 #ifndef FIRM_BE_BEDWARF_T_H
2 #define FIRM_BE_BEDWARF_T_H
3 
4 #include "bedwarf.h"
5 
6 /* Tag names and codes.  */
7 typedef enum dwarf_tag {
8 	DW_TAG_padding                = 0x00,
9 	DW_TAG_array_type             = 0x01,
10 	DW_TAG_class_type             = 0x02,
11 	DW_TAG_entry_point            = 0x03,
12 	DW_TAG_enumeration_type       = 0x04,
13 	DW_TAG_formal_parameter       = 0x05,
14 	DW_TAG_imported_declaration   = 0x08,
15 	DW_TAG_label                  = 0x0A,
16 	DW_TAG_lexical_block          = 0x0B,
17 	DW_TAG_member                 = 0x0D,
18 	DW_TAG_pointer_type           = 0x0F,
19 	DW_TAG_reference_type         = 0x10,
20 	DW_TAG_compile_unit           = 0x11,
21 	DW_TAG_string_type            = 0x12,
22 	DW_TAG_structure_type         = 0x13,
23 	DW_TAG_subroutine_type        = 0x15,
24 	DW_TAG_typedef                = 0x16,
25 	DW_TAG_union_type             = 0x17,
26 	DW_TAG_unspecified_parameters = 0x18,
27 	DW_TAG_variant                = 0x19,
28 	DW_TAG_common_block           = 0x1A,
29 	DW_TAG_common_inclusion       = 0x1B,
30 	DW_TAG_inheritance            = 0x1C,
31 	DW_TAG_inlined_subroutine     = 0x1D,
32 	DW_TAG_module                 = 0x1E,
33 	DW_TAG_ptr_to_member_type     = 0x1F,
34 	DW_TAG_set_type               = 0x20,
35 	DW_TAG_subrange_type          = 0x21,
36 	DW_TAG_with_stmt              = 0x22,
37 	DW_TAG_access_declaration     = 0x23,
38 	DW_TAG_base_type              = 0x24,
39 	DW_TAG_catch_block            = 0x25,
40 	DW_TAG_const_type             = 0x26,
41 	DW_TAG_constant               = 0x27,
42 	DW_TAG_enumerator             = 0x28,
43 	DW_TAG_file_type              = 0x29,
44 	DW_TAG_friend                 = 0x2A,
45 	DW_TAG_namelist               = 0x2B,
46 	DW_TAG_namelist_item          = 0x2C,
47 	DW_TAG_packed_type            = 0x2D,
48 	DW_TAG_subprogram             = 0x2E,
49 	DW_TAG_template_type_param    = 0x2F,
50 	DW_TAG_template_value_param   = 0x30,
51 	DW_TAG_thrown_type            = 0x31,
52 	DW_TAG_try_block              = 0x32,
53 	DW_TAG_variant_part           = 0x33,
54 	DW_TAG_variable               = 0x34,
55 	DW_TAG_volatile_type          = 0x35,
56 	/* DWARF 3.  */
57 	DW_TAG_dwarf_procedure        = 0x36,
58 	DW_TAG_restrict_type          = 0x37,
59 	DW_TAG_interface_type         = 0x38,
60 	DW_TAG_namespace              = 0x39,
61 	DW_TAG_imported_module        = 0x3A,
62 	DW_TAG_unspecified_type       = 0x3B,
63 	DW_TAG_partial_unit           = 0x3C,
64 	DW_TAG_imported_unit          = 0x3D,
65 	DW_TAG_condition              = 0x3F,
66 	DW_TAG_shared_type            = 0x40,
67 } dwarf_tag;
68 
69 typedef enum dw_children {
70 	DW_CHILDREN_no  = 0x00,
71 	DW_CHILDREN_yes = 0x01
72 } dw_children;
73 
74 typedef enum dwarf_form {
75 	DW_FORM_addr      = 0x01,
76 	DW_FORM_block2    = 0x03,
77 	DW_FORM_block4    = 0x04,
78 	DW_FORM_data2     = 0x05,
79 	DW_FORM_data4     = 0x06,
80 	DW_FORM_data8     = 0x07,
81 	DW_FORM_string    = 0x08,
82 	DW_FORM_block     = 0x09,
83 	DW_FORM_block1    = 0x0A,
84 	DW_FORM_data1     = 0x0B,
85 	DW_FORM_flag      = 0x0C,
86 	DW_FORM_sdata     = 0x0D,
87 	DW_FORM_strp      = 0x0E,
88 	DW_FORM_udata     = 0x0F,
89 	DW_FORM_ref_addr  = 0x10,
90 	DW_FORM_ref1      = 0x11,
91 	DW_FORM_ref2      = 0x12,
92 	DW_FORM_ref4      = 0x13,
93 	DW_FORM_ref8      = 0x14,
94 	DW_FORM_ref_udata = 0x15,
95 	DW_FORM_indirect  = 0x16
96 } dwarf_form;
97 
98 typedef enum dwarf_attribute {
99 	DW_AT_sibling              = 0x01,
100 	DW_AT_location             = 0x02,
101 	DW_AT_name                 = 0x03,
102 	DW_AT_ordering             = 0x09,
103 	DW_AT_subscr_data          = 0x0A,
104 	DW_AT_byte_size            = 0x0B,
105 	DW_AT_bit_offset           = 0x0C,
106 	DW_AT_bit_size             = 0x0D,
107 	DW_AT_element_list         = 0x0F,
108 	DW_AT_stmt_list            = 0x10,
109 	DW_AT_low_pc               = 0x11,
110 	DW_AT_high_pc              = 0x12,
111 	DW_AT_language             = 0x13,
112 	DW_AT_member               = 0x14,
113 	DW_AT_discr                = 0x15,
114 	DW_AT_discr_value          = 0x16,
115 	DW_AT_visibility           = 0x17,
116 	DW_AT_import               = 0x18,
117 	DW_AT_string_length        = 0x19,
118 	DW_AT_common_reference     = 0x1A,
119 	DW_AT_comp_dir             = 0x1B,
120 	DW_AT_const_value          = 0x1C,
121 	DW_AT_containing_type      = 0x1D,
122 	DW_AT_default_value        = 0x1E,
123 	DW_AT_inline               = 0x20,
124 	DW_AT_is_optional          = 0x21,
125 	DW_AT_lower_bound          = 0x22,
126 	DW_AT_producer             = 0x25,
127 	DW_AT_prototyped           = 0x27,
128 	DW_AT_return_addr          = 0x2A,
129 	DW_AT_start_scope          = 0x2C,
130 	DW_AT_bit_stride           = 0x2E,
131 	DW_AT_stride_size          = DW_AT_bit_stride,
132 	DW_AT_upper_bound          = 0x2F,
133 	DW_AT_abstract_origin      = 0x31,
134 	DW_AT_accessibility        = 0x32,
135 	DW_AT_address_class        = 0x33,
136 	DW_AT_artificial           = 0x34,
137 	DW_AT_base_types           = 0x35,
138 	DW_AT_calling_convention   = 0x36,
139 	DW_AT_count                = 0x37,
140 	DW_AT_data_member_location = 0x38,
141 	DW_AT_decl_column          = 0x39,
142 	DW_AT_decl_file            = 0x3A,
143 	DW_AT_decl_line            = 0x3B,
144 	DW_AT_declaration          = 0x3C,
145 	DW_AT_discr_list           = 0x3D,
146 	DW_AT_encoding             = 0x3E,
147 	DW_AT_external             = 0x3F,
148 	DW_AT_frame_base           = 0x40,
149 	DW_AT_friend               = 0x41,
150 	DW_AT_identifier_case      = 0x42,
151 	DW_AT_macro_info           = 0x43,
152 	DW_AT_namelist_items       = 0x44,
153 	DW_AT_priority             = 0x45,
154 	DW_AT_segment              = 0x46,
155 	DW_AT_specification        = 0x47,
156 	DW_AT_static_link          = 0x48,
157 	DW_AT_type                 = 0x49,
158 	DW_AT_use_location         = 0x4A,
159 	DW_AT_variable_parameter   = 0x4B,
160 	DW_AT_virtuality           = 0x4C,
161 	DW_AT_vtable_elem_location = 0x4D,
162 	/* DWARF 3 values.  */
163 	DW_AT_allocated            = 0x4E,
164 	DW_AT_associated           = 0x4F,
165 	DW_AT_data_location        = 0x50,
166 	DW_AT_byte_stride          = 0x51,
167 	DW_AT_stride               = DW_AT_byte_stride,
168 	DW_AT_entry_pc             = 0x52,
169 	DW_AT_use_UTF8             = 0x53,
170 	DW_AT_extension            = 0x54,
171 	DW_AT_ranges               = 0x55,
172 	DW_AT_trampoline           = 0x56,
173 	DW_AT_call_column          = 0x57,
174 	DW_AT_call_file            = 0x58,
175 	DW_AT_call_line            = 0x59,
176 	DW_AT_description          = 0x5A,
177 	DW_AT_binary_scale         = 0x5B,
178 	DW_AT_decimal_scale        = 0x5C,
179 	DW_AT_small                = 0x5D,
180 	DW_AT_decimal_sign         = 0x5E,
181 	DW_AT_digit_count          = 0x5F,
182 	DW_AT_picture_string       = 0x60,
183 	DW_AT_mutable              = 0x61,
184 	DW_AT_threads_scaled       = 0x62,
185 	DW_AT_explicit             = 0x63,
186 	DW_AT_object_pointer       = 0x64,
187 	DW_AT_endianity            = 0x65,
188 	DW_AT_elemental            = 0x66,
189 	DW_AT_pure                 = 0x67,
190 	DW_AT_recursive            = 0x68,
191 } dwarf_attribute;
192 
193 typedef enum dwarf_type {
194 	DW_ATE_void            = 0x0,
195 	DW_ATE_address         = 0x1,
196 	DW_ATE_boolean         = 0x2,
197 	DW_ATE_complex_float   = 0x3,
198 	DW_ATE_float           = 0x4,
199 	DW_ATE_signed          = 0x5,
200 	DW_ATE_signed_char     = 0x6,
201 	DW_ATE_unsigned        = 0x7,
202 	DW_ATE_unsigned_char   = 0x8,
203 	/* DWARF 3.  */
204 	DW_ATE_imaginary_float = 0x9,
205 	DW_ATE_packed_decimal  = 0xA,
206 	DW_ATE_numeric_string  = 0xB,
207 	DW_ATE_edited          = 0xC,
208 	DW_ATE_signed_fixed    = 0xD,
209 	DW_ATE_unsigned_fixed  = 0xE,
210 	DW_ATE_decimal_float   = 0xF,
211 } dwarf_type;
212 
213 typedef enum dwarf_line_number_x_ops {
214 	DW_LNE_end_sequence = 1,
215 	DW_LNE_set_address  = 2,
216 	DW_LNE_define_file  = 3,
217 } dwarf_line_number_x_ops;
218 
219 typedef enum dwarf_location_op {
220 	DW_OP_addr                = 0x03,
221 	DW_OP_deref               = 0x06,
222 	DW_OP_const1u             = 0x08,
223 	DW_OP_const1s             = 0x09,
224 	DW_OP_const2u             = 0x0A,
225 	DW_OP_const2s             = 0x0B,
226 	DW_OP_const4u             = 0x0C,
227 	DW_OP_const4s             = 0x0D,
228 	DW_OP_const8u             = 0x0E,
229 	DW_OP_const8s             = 0x0F,
230 	DW_OP_constu              = 0x10,
231 	DW_OP_consts              = 0x11,
232 	DW_OP_dup                 = 0x12,
233 	DW_OP_drop                = 0x13,
234 	DW_OP_over                = 0x14,
235 	DW_OP_pick                = 0x15,
236 	DW_OP_swap                = 0x16,
237 	DW_OP_rot                 = 0x17,
238 	DW_OP_xderef              = 0x18,
239 	DW_OP_abs                 = 0x19,
240 	DW_OP_and                 = 0x1A,
241 	DW_OP_div                 = 0x1B,
242 	DW_OP_minus               = 0x1C,
243 	DW_OP_mod                 = 0x1D,
244 	DW_OP_mul                 = 0x1E,
245 	DW_OP_neg                 = 0x1F,
246 	DW_OP_not                 = 0x20,
247 	DW_OP_or                  = 0x21,
248 	DW_OP_plus                = 0x22,
249 	DW_OP_plus_uconst         = 0x23,
250 	DW_OP_shl                 = 0x24,
251 	DW_OP_shr                 = 0x25,
252 	DW_OP_shra                = 0x26,
253 	DW_OP_xor                 = 0x27,
254 	DW_OP_bra                 = 0x28,
255 	DW_OP_eq                  = 0x29,
256 	DW_OP_ge                  = 0x2A,
257 	DW_OP_gt                  = 0x2B,
258 	DW_OP_le                  = 0x2C,
259 	DW_OP_lt                  = 0x2D,
260 	DW_OP_ne                  = 0x2E,
261 	DW_OP_skip                = 0x2F,
262 	DW_OP_lit0                = 0x30,
263 	DW_OP_lit1                = 0x31,
264 	DW_OP_lit2                = 0x32,
265 	DW_OP_lit3                = 0x33,
266 	DW_OP_lit4                = 0x34,
267 	DW_OP_lit5                = 0x35,
268 	DW_OP_lit6                = 0x36,
269 	DW_OP_lit7                = 0x37,
270 	DW_OP_lit8                = 0x38,
271 	DW_OP_lit9                = 0x39,
272 	DW_OP_lit10               = 0x3A,
273 	DW_OP_lit11               = 0x3B,
274 	DW_OP_lit12               = 0x3C,
275 	DW_OP_lit13               = 0x3D,
276 	DW_OP_lit14               = 0x3E,
277 	DW_OP_lit15               = 0x3F,
278 	DW_OP_lit16               = 0x40,
279 	DW_OP_lit17               = 0x41,
280 	DW_OP_lit18               = 0x42,
281 	DW_OP_lit19               = 0x43,
282 	DW_OP_lit20               = 0x44,
283 	DW_OP_lit21               = 0x45,
284 	DW_OP_lit22               = 0x46,
285 	DW_OP_lit23               = 0x47,
286 	DW_OP_lit24               = 0x48,
287 	DW_OP_lit25               = 0x49,
288 	DW_OP_lit26               = 0x4A,
289 	DW_OP_lit27               = 0x4B,
290 	DW_OP_lit28               = 0x4C,
291 	DW_OP_lit29               = 0x4D,
292 	DW_OP_lit30               = 0x4E,
293 	DW_OP_lit31               = 0x4F,
294 	DW_OP_reg0                = 0x50,
295 	DW_OP_reg1                = 0x51,
296 	DW_OP_reg2                = 0x52,
297 	DW_OP_reg3                = 0x53,
298 	DW_OP_reg4                = 0x54,
299 	DW_OP_reg5                = 0x55,
300 	DW_OP_reg6                = 0x56,
301 	DW_OP_reg7                = 0x57,
302 	DW_OP_reg8                = 0x58,
303 	DW_OP_reg9                = 0x59,
304 	DW_OP_reg10               = 0x5A,
305 	DW_OP_reg11               = 0x5B,
306 	DW_OP_reg12               = 0x5C,
307 	DW_OP_reg13               = 0x5D,
308 	DW_OP_reg14               = 0x5E,
309 	DW_OP_reg15               = 0x5F,
310 	DW_OP_reg16               = 0x60,
311 	DW_OP_reg17               = 0x61,
312 	DW_OP_reg18               = 0x62,
313 	DW_OP_reg19               = 0x63,
314 	DW_OP_reg20               = 0x64,
315 	DW_OP_reg21               = 0x65,
316 	DW_OP_reg22               = 0x66,
317 	DW_OP_reg23               = 0x67,
318 	DW_OP_reg24               = 0x68,
319 	DW_OP_reg25               = 0x69,
320 	DW_OP_reg26               = 0x6A,
321 	DW_OP_reg27               = 0x6B,
322 	DW_OP_reg28               = 0x6C,
323 	DW_OP_reg29               = 0x6D,
324 	DW_OP_reg30               = 0x6E,
325 	DW_OP_reg31               = 0x6F,
326 	DW_OP_breg0               = 0x70,
327 	DW_OP_breg1               = 0x71,
328 	DW_OP_breg2               = 0x72,
329 	DW_OP_breg3               = 0x73,
330 	DW_OP_breg4               = 0x74,
331 	DW_OP_breg5               = 0x75,
332 	DW_OP_breg6               = 0x76,
333 	DW_OP_breg7               = 0x77,
334 	DW_OP_breg8               = 0x78,
335 	DW_OP_breg9               = 0x79,
336 	DW_OP_breg10              = 0x7A,
337 	DW_OP_breg11              = 0x7B,
338 	DW_OP_breg12              = 0x7C,
339 	DW_OP_breg13              = 0x7D,
340 	DW_OP_breg14              = 0x7E,
341 	DW_OP_breg15              = 0x7F,
342 	DW_OP_breg16              = 0x80,
343 	DW_OP_breg17              = 0x81,
344 	DW_OP_breg18              = 0x82,
345 	DW_OP_breg19              = 0x83,
346 	DW_OP_breg20              = 0x84,
347 	DW_OP_breg21              = 0x85,
348 	DW_OP_breg22              = 0x86,
349 	DW_OP_breg23              = 0x87,
350 	DW_OP_breg24              = 0x88,
351 	DW_OP_breg25              = 0x89,
352 	DW_OP_breg26              = 0x8A,
353 	DW_OP_breg27              = 0x8B,
354 	DW_OP_breg28              = 0x8C,
355 	DW_OP_breg29              = 0x8D,
356 	DW_OP_breg30              = 0x8E,
357 	DW_OP_breg31              = 0x8F,
358 	DW_OP_regx                = 0x90,
359 	DW_OP_fbreg               = 0x91,
360 	DW_OP_bregx               = 0x92,
361 	DW_OP_piece               = 0x93,
362 	DW_OP_deref_size          = 0x94,
363 	DW_OP_xderef_size         = 0x95,
364 	DW_OP_nop                 = 0x96,
365 	DW_OP_push_object_address = 0x97,
366 	DW_OP_call2               = 0x98,
367 	DW_OP_call4               = 0x99,
368 	DW_OP_call_ref            = 0x9a,
369 	DW_OP_form_tls_address    = 0x9b,
370 	DW_OP_call_frame_cfa      = 0x9c,
371 	DW_OP_bit_piece           = 0x9d,
372 } dwarf_location_op;
373 
374 #endif
375