xref: /haiku/src/kits/debugger/dwarf/Dwarf.h (revision e1c4049fed1047bdb957b0529e1921e97ef94770)
1 /*
2  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Copyright 2013, Rene Gollent, rene@gollent.com.
4  * Distributed under the terms of the MIT License.
5  */
6 #ifndef DWARF_H
7 #define DWARF_H
8 
9 // tag
10 enum {
11 	DW_TAG_array_type				= 0x01,
12 	DW_TAG_class_type				= 0x02,
13 	DW_TAG_entry_point				= 0x03,
14 	DW_TAG_enumeration_type			= 0x04,
15 	DW_TAG_formal_parameter			= 0x05,
16 	DW_TAG_imported_declaration		= 0x08,
17 	DW_TAG_label					= 0x0a,
18 	DW_TAG_lexical_block			= 0x0b,
19 	DW_TAG_member					= 0x0d,
20 	DW_TAG_pointer_type				= 0x0f,
21 	DW_TAG_reference_type			= 0x10,
22 	DW_TAG_compile_unit				= 0x11,
23 	DW_TAG_string_type				= 0x12,
24 	DW_TAG_structure_type			= 0x13,
25 	DW_TAG_subroutine_type			= 0x15,
26 	DW_TAG_typedef					= 0x16,
27 	DW_TAG_union_type				= 0x17,
28 	DW_TAG_unspecified_parameters	= 0x18,
29 	DW_TAG_variant					= 0x19,
30 	DW_TAG_common_block				= 0x1a,
31 	DW_TAG_common_inclusion			= 0x1b,
32 	DW_TAG_inheritance				= 0x1c,
33 	DW_TAG_inlined_subroutine		= 0x1d,
34 	DW_TAG_module					= 0x1e,
35 	DW_TAG_ptr_to_member_type		= 0x1f,
36 	DW_TAG_set_type					= 0x20,
37 	DW_TAG_subrange_type			= 0x21,
38 	DW_TAG_with_stmt				= 0x22,
39 	DW_TAG_access_declaration		= 0x23,
40 	DW_TAG_base_type				= 0x24,
41 	DW_TAG_catch_block				= 0x25,
42 	DW_TAG_const_type				= 0x26,
43 	DW_TAG_constant					= 0x27,
44 	DW_TAG_enumerator				= 0x28,
45 	DW_TAG_file_type				= 0x29,
46 	DW_TAG_friend					= 0x2a,
47 	DW_TAG_namelist					= 0x2b,
48 	DW_TAG_namelist_item			= 0x2c,
49 	DW_TAG_packed_type				= 0x2d,
50 	DW_TAG_subprogram				= 0x2e,
51 	DW_TAG_template_type_parameter	= 0x2f,
52 	DW_TAG_template_value_parameter	= 0x30,
53 	DW_TAG_thrown_type				= 0x31,
54 	DW_TAG_try_block				= 0x32,
55 	DW_TAG_variant_part				= 0x33,
56 	DW_TAG_variable					= 0x34,
57 	DW_TAG_volatile_type			= 0x35,
58 	DW_TAG_dwarf_procedure			= 0x36,
59 	DW_TAG_restrict_type			= 0x37,
60 	DW_TAG_interface_type			= 0x38,
61 	DW_TAG_namespace				= 0x39,
62 	DW_TAG_imported_module			= 0x3a,
63 	DW_TAG_unspecified_type			= 0x3b,
64 	DW_TAG_partial_unit				= 0x3c,
65 	DW_TAG_imported_unit			= 0x3d,
66 	DW_TAG_condition				= 0x3f,
67 	DW_TAG_shared_type				= 0x40,
68 	DW_TAG_type_unit				= 0x41,
69 	DW_TAG_rvalue_reference_type	= 0x42,
70 	DW_TAG_template_alias			= 0x43,
71 	DW_TAG_coarray_type				= 0x44,
72 	DW_TAG_generic_subrange			= 0x45,
73 	DW_TAG_dynamic_type				= 0x46,
74 	DW_TAG_atomic_type				= 0x47,
75 	DW_TAG_call_site				= 0x48,
76 	DW_TAG_call_site_parameter		= 0x49,
77 	DW_TAG_skeleton_unit			= 0x4a,
78 	DW_TAG_immutable_type			= 0x4b,
79 	DW_TAG_lo_user					= 0x4080,
80 	DW_TAG_GNU_template_template_param
81 									= 0x4106,
82 	DW_TAG_GNU_template_parameter_pack
83 									= 0x4107,
84 	DW_TAG_GNU_formal_parameter_pack
85 									= 0x4108,
86 	DW_TAG_GNU_call_site			= 0x4109,
87 	DW_TAG_GNU_call_site_parameter	= 0x410a,
88 	DW_TAG_hi_user					= 0xffff
89 };
90 
91 // has children flag value
92 enum {
93 	DW_CHILDREN_no	= 0x00,
94 	DW_CHILDREN_yes	= 0x01
95 };
96 
97 // attribute name
98 enum {
99 	DW_AT_sibling				= 0x01,		// reference
100 	DW_AT_location				= 0x02,		// block, loclistptr
101 	DW_AT_name					= 0x03,		// string
102 	DW_AT_ordering				= 0x09,		// constant
103 	DW_AT_byte_size				= 0x0b,		// block, constant, reference
104 	DW_AT_bit_offset			= 0x0c,		// block, constant, reference
105 	DW_AT_bit_size				= 0x0d,		// block, constant, reference
106 	DW_AT_stmt_list				= 0x10,		// lineptr
107 	DW_AT_low_pc				= 0x11,		// address
108 	DW_AT_high_pc				= 0x12,		// address
109 	DW_AT_language				= 0x13,		// constant
110 	DW_AT_discr					= 0x15,		// reference
111 	DW_AT_discr_value			= 0x16,		// constant
112 	DW_AT_visibility			= 0x17,		// constant
113 	DW_AT_import				= 0x18,		// reference
114 	DW_AT_string_length			= 0x19,		// block, loclistptr
115 	DW_AT_common_reference		= 0x1a,		// reference
116 	DW_AT_comp_dir				= 0x1b,		// string
117 	DW_AT_const_value			= 0x1c,		// block, constant, string
118 	DW_AT_containing_type		= 0x1d,		// reference
119 	DW_AT_default_value			= 0x1e,		// reference
120 	DW_AT_inline				= 0x20,		// constant
121 	DW_AT_is_optional			= 0x21,		// flag
122 	DW_AT_lower_bound			= 0x22,		// block, constant, reference
123 	DW_AT_producer				= 0x25,		// string
124 	DW_AT_prototyped			= 0x27,		// flag
125 	DW_AT_return_addr			= 0x2a,		// block, loclistptr
126 	DW_AT_start_scope			= 0x2c,		// constant
127 	DW_AT_bit_stride			= 0x2e,		// constant
128 	DW_AT_upper_bound			= 0x2f,		// block, constant, reference
129 	DW_AT_abstract_origin		= 0x31,		// reference
130 	DW_AT_accessibility			= 0x32,		// constant
131 	DW_AT_address_class			= 0x33,		// constant
132 	DW_AT_artificial			= 0x34,		// flag
133 	DW_AT_base_types			= 0x35,		// reference
134 	DW_AT_calling_convention	= 0x36,		// constant
135 	DW_AT_count					= 0x37,		// block, constant, reference
136 	DW_AT_data_member_location	= 0x38,		// block, constant, loclistptr
137 	DW_AT_decl_column			= 0x39,		// constant
138 	DW_AT_decl_file				= 0x3a,		// constant
139 	DW_AT_decl_line				= 0x3b,		// constant
140 	DW_AT_declaration			= 0x3c,		// flag
141 	DW_AT_discr_list			= 0x3d,		// block
142 	DW_AT_encoding				= 0x3e,		// constant
143 	DW_AT_external				= 0x3f,		// flag
144 	DW_AT_frame_base			= 0x40,		// block, loclistptr
145 	DW_AT_friend				= 0x41,		// reference
146 	DW_AT_identifier_case		= 0x42,		// constant
147 	DW_AT_macro_info			= 0x43,		// macptr
148 	DW_AT_namelist_item			= 0x44,		// block
149 	DW_AT_priority				= 0x45,		// reference
150 	DW_AT_segment				= 0x46,		// block, loclistptr
151 	DW_AT_specification			= 0x47,		// reference
152 	DW_AT_static_link			= 0x48,		// block, loclistptr
153 	DW_AT_type					= 0x49,		// reference
154 	DW_AT_use_location			= 0x4a,		// block, loclistptr
155 	DW_AT_variable_parameter	= 0x4b,		// flag
156 	DW_AT_virtuality			= 0x4c,		// constant
157 	DW_AT_vtable_elem_location	= 0x4d,		// block, loclistptr
158 	DW_AT_allocated				= 0x4e,		// block, constant, reference
159 	DW_AT_associated			= 0x4f,		// block, constant, reference
160 	DW_AT_data_location			= 0x50,		// block
161 	DW_AT_byte_stride			= 0x51,		// block, constant, reference
162 	DW_AT_entry_pc				= 0x52,		// address
163 	DW_AT_use_UTF8				= 0x53,		// flag
164 	DW_AT_extension				= 0x54,		// reference
165 	DW_AT_ranges				= 0x55,		// rangelistptr
166 	DW_AT_trampoline			= 0x56,		// address, flag, reference, string
167 	DW_AT_call_column			= 0x57,		// constant
168 	DW_AT_call_file				= 0x58,		// constant
169 	DW_AT_call_line				= 0x59,		// constant
170 	DW_AT_description			= 0x5a,		// string
171 	DW_AT_binary_scale			= 0x5b,		// constant
172 	DW_AT_decimal_scale			= 0x5c,		// constant
173 	DW_AT_small					= 0x5d,		// reference
174 	DW_AT_decimal_sign			= 0x5e,		// constant
175 	DW_AT_digit_count			= 0x5f,		// constant
176 	DW_AT_picture_string		= 0x60,		// string
177 	DW_AT_mutable				= 0x61,		// flag
178 	DW_AT_threads_scaled		= 0x62,		// flag
179 	DW_AT_explicit				= 0x63,		// flag
180 	DW_AT_object_pointer		= 0x64,		// reference
181 	DW_AT_endianity				= 0x65,		// constant
182 	DW_AT_elemental				= 0x66,		// flag
183 	DW_AT_pure					= 0x67,		// flag
184 	DW_AT_recursive				= 0x68,		// flag
185 	DW_AT_signature				= 0x69,		// reference
186 	DW_AT_main_subprogram		= 0x6a,		// flag
187 	DW_AT_data_bit_offset		= 0x6b,		// constant
188 	DW_AT_const_expr			= 0x6c,		// flag
189 	DW_AT_enum_class			= 0x6d,		// flag
190 	DW_AT_linkage_name			= 0x6e,		// string
191 	DW_AT_string_length_bit_size
192 								= 0x6f,		// constant
193 	DW_AT_string_length_byte_size
194 								= 0x70,		// constant
195 	DW_AT_rank					= 0x71,		// constant, exprloc
196 	DW_AT_str_offsets_base		= 0x72,		// stroffsetsptr
197 	DW_AT_addr_base				= 0x73,		// addrptr
198 	DW_AT_rnglists_base			= 0x74,		// rnglistsptr
199 	DW_AT_dwo_name				= 0x76,		// string
200 	DW_AT_reference				= 0x77,		// flag
201 	DW_AT_rvalue_reference		= 0x78,		// flag
202 	DW_AT_macros				= 0x79,		// macptr
203 	DW_AT_call_all_calls		= 0x7a,		// flag
204 	DW_AT_call_all_source_calls	= 0x7b,		// flag
205 	DW_AT_call_all_tail_calls	= 0x7c,		// flag
206 	DW_AT_call_return_pc		= 0x7d,		// address
207 	DW_AT_call_value			= 0x7e,		// exprloc
208 	DW_AT_call_origin			= 0x7f,		// exprloc
209 	DW_AT_call_parameter		= 0x80,		// reference
210 	DW_AT_call_pc				= 0x81,		// address
211 	DW_AT_call_tail_call		= 0x82,		// flag
212 	DW_AT_call_target			= 0x83,		// exprloc
213 	DW_AT_call_target_clobbered	= 0x84,		// exprloc
214 	DW_AT_call_data_location	= 0x85,		// exprloc
215 	DW_AT_call_data_value		= 0x86,		// exprloc
216 	DW_AT_noreturn				= 0x87,		// flag
217 	DW_AT_alignment				= 0x88,		// constant
218 	DW_AT_export_symbols		= 0x89,		// flag
219 	DW_AT_deleted				= 0x8a,		// flag
220 	DW_AT_defaulted				= 0x8b,		// constant
221 	DW_AT_loclists_base			= 0x8c,		// loclistsptr
222 	DW_AT_lo_user				= 0x2000,
223 	DW_AT_call_site_value		= 0x2111,	// exprloc
224 	DW_AT_call_site_data_value
225 								= 0x2112,	// exprloc
226 	DW_AT_call_site_target
227 								= 0x2113,	// exprloc
228 	DW_AT_call_site_target_clobbered
229 								= 0x2114,	// exprloc
230 	DW_AT_tail_call				= 0x2115,	// flag
231 	DW_AT_all_tail_call_sites
232 								= 0x2116,	// flag
233 	DW_AT_all_call_sites		= 0x2117,	// flag
234 	DW_AT_all_source_call_sites
235 								= 0x2118,	// flag
236 	DW_AT_hi_user				= 0x3fff
237 };
238 
239 // attribute form
240 enum {
241 	DW_FORM_addr		= 0x01,	// address
242 	DW_FORM_block2		= 0x03,	// block
243 	DW_FORM_block4		= 0x04,	// block
244 	DW_FORM_data2		= 0x05,	// constant
245 	DW_FORM_data4		= 0x06,	// constant, lineptr, loclistptr, macptr,
246 								// rangelistptr
247 	DW_FORM_data8		= 0x07,	// constant, lineptr, loclistptr, macptr,
248 								// rangelistptr
249 	DW_FORM_string		= 0x08,	// string
250 	DW_FORM_block		= 0x09,	// block
251 	DW_FORM_block1		= 0x0a,	// block
252 	DW_FORM_data1		= 0x0b,	// constant
253 	DW_FORM_flag		= 0x0c,	// flag
254 	DW_FORM_sdata		= 0x0d,	// constant
255 	DW_FORM_strp		= 0x0e,	// string
256 	DW_FORM_udata		= 0x0f,	// constant
257 	DW_FORM_ref_addr	= 0x10,	// reference
258 	DW_FORM_ref1		= 0x11,	// reference
259 	DW_FORM_ref2		= 0x12,	// reference
260 	DW_FORM_ref4		= 0x13,	// reference
261 	DW_FORM_ref8		= 0x14,	// reference
262 	DW_FORM_ref_udata	= 0x15,	// reference
263 	DW_FORM_indirect	= 0x16,	// form in .debug_info
264 	DW_FORM_sec_offset	= 0x17, // lineptr, loclistptr, macptr, rangelistptr
265 	DW_FORM_exprloc		= 0x18,	// dwarf expression
266 	DW_FORM_flag_present
267 						= 0x19,	// flag
268 	DW_FORM_strx		= 0x1a, // string
269 	DW_FORM_addrx		= 0x1b, // address
270 	DW_FORM_ref_sup4	= 0x1c, // reference
271 	DW_FORM_strp_sup	= 0x1d, // string
272 	DW_FORM_data16		= 0x1e, // constant
273 	DW_FORM_line_strp	= 0x1f, // string
274 	DW_FORM_ref_sig8	= 0x20,	// reference
275 	DW_FORM_implicit_const
276 						= 0x21, // constant
277 	DW_FORM_loclistx	= 0x22, // loclist
278 	DW_FORM_rnglistx	= 0x23, // rnglist
279 	DW_FORM_ref_sup8	= 0x24, // reference
280 	DW_FORM_strx1		= 0x25, // string
281 	DW_FORM_strx2		= 0x26, // string
282 	DW_FORM_strx3		= 0x27, // string
283 	DW_FORM_strx4		= 0x28, // string
284 	DW_FORM_addrx1		= 0x29, // address
285 	DW_FORM_addrx2		= 0x2a, // address
286 	DW_FORM_addrx3		= 0x2b, // address
287 	DW_FORM_addrx4		= 0x2c, // address
288 
289 };
290 
291 // expression operation
292 enum {
293 	DW_OP_addr					= 0x03,
294 	DW_OP_deref					= 0x06,
295 	DW_OP_const1u				= 0x08,
296 	DW_OP_const1s				= 0x09,
297 	DW_OP_const2u				= 0x0a,
298 	DW_OP_const2s				= 0x0b,
299 	DW_OP_const4u				= 0x0c,
300 	DW_OP_const4s				= 0x0d,
301 	DW_OP_const8u				= 0x0e,
302 	DW_OP_const8s				= 0x0f,
303 	DW_OP_constu				= 0x10,
304 	DW_OP_consts				= 0x11,
305 	DW_OP_dup					= 0x12,
306 	DW_OP_drop					= 0x13,
307 	DW_OP_over					= 0x14,
308 	DW_OP_pick					= 0x15,
309 	DW_OP_swap					= 0x16,
310 	DW_OP_rot					= 0x17,
311 	DW_OP_xderef				= 0x18,
312 	DW_OP_abs					= 0x19,
313 	DW_OP_and					= 0x1a,
314 	DW_OP_div					= 0x1b,
315 	DW_OP_minus					= 0x1c,
316 	DW_OP_mod					= 0x1d,
317 	DW_OP_mul					= 0x1e,
318 	DW_OP_neg					= 0x1f,
319 	DW_OP_not					= 0x20,
320 	DW_OP_or					= 0x21,
321 	DW_OP_plus					= 0x22,
322 	DW_OP_plus_uconst			= 0x23,
323 	DW_OP_shl					= 0x24,
324 	DW_OP_shr					= 0x25,
325 	DW_OP_shra					= 0x26,
326 	DW_OP_xor					= 0x27,
327 	DW_OP_skip					= 0x2f,
328 	DW_OP_bra					= 0x28,
329 	DW_OP_eq					= 0x29,
330 	DW_OP_ge					= 0x2a,
331 	DW_OP_gt					= 0x2b,
332 	DW_OP_le					= 0x2c,
333 	DW_OP_lt					= 0x2d,
334 	DW_OP_ne					= 0x2e,
335 	DW_OP_lit0					= 0x30,
336 	DW_OP_lit1					= 0x31,
337 	DW_OP_lit31					= 0x4f,
338 	DW_OP_reg0					= 0x50,
339 	DW_OP_reg1					= 0x51,
340 	DW_OP_reg31					= 0x6f,
341 	DW_OP_breg0					= 0x70,
342 	DW_OP_breg1					= 0x71,
343 	DW_OP_breg31				= 0x8f,
344 	DW_OP_regx					= 0x90,
345 	DW_OP_fbreg					= 0x91,
346 	DW_OP_bregx					= 0x92,
347 	DW_OP_piece					= 0x93,
348 	DW_OP_deref_size			= 0x94,
349 	DW_OP_xderef_size			= 0x95,
350 	DW_OP_nop					= 0x96,
351 	DW_OP_push_object_address	= 0x97,
352 	DW_OP_call2					= 0x98,
353 	DW_OP_call4					= 0x99,
354 	DW_OP_call_ref				= 0x9a,
355 	DW_OP_form_tls_address		= 0x9b,
356 	DW_OP_call_frame_cfa		= 0x9c,
357 	DW_OP_bit_piece				= 0x9d,
358 	DW_OP_implicit_value		= 0x9e,
359 	DW_OP_stack_value			= 0x9f,
360 	DW_OP_implicit_pointer		= 0xa0,
361 	DW_OP_addrx					= 0xa1,
362 	DW_OP_constx				= 0xa2,
363 	DW_OP_entry_value			= 0xa3,
364 	DW_OP_const_type			= 0xa4,
365 	DW_OP_regval_type			= 0xa5,
366 	DW_OP_deref_type			= 0xa6,
367 	DW_OP_xderef_type			= 0xa7,
368 	DW_OP_convert				= 0xa8,
369 	DW_OP_reinterpret			= 0xa9,
370 	DW_OP_lo_user				= 0xe0,
371 	DW_OP_hi_user				= 0xff
372 };
373 
374 // base type
375 enum {
376 	DW_ATE_address			= 0x01,
377 	DW_ATE_boolean			= 0x02,
378 	DW_ATE_complex_float	= 0x03,
379 	DW_ATE_float			= 0x04,
380 	DW_ATE_signed			= 0x05,
381 	DW_ATE_signed_char		= 0x06,
382 	DW_ATE_unsigned			= 0x07,
383 	DW_ATE_unsigned_char	= 0x08,
384 	DW_ATE_imaginary_float	= 0x09,
385 	DW_ATE_packed_decimal	= 0x0a,
386 	DW_ATE_numeric_string	= 0x0b,
387 	DW_ATE_edited			= 0x0c,
388 	DW_ATE_signed_fixed		= 0x0d,
389 	DW_ATE_unsigned_fixed	= 0x0e,
390 	DW_ATE_decimal_float	= 0x0f,
391 	DW_ATE_UTF				= 0x10,
392 	DW_ATE_UCS				= 0x11,
393 	DW_ATE_ASCII			= 0x12,
394 	DW_ATE_lo_user			= 0x80,
395 	DW_ATE_hi_user			= 0xff
396 };
397 
398 // decimal sign
399 enum {
400 	DW_DS_unsigned				= 0x01,
401 	DW_DS_leading_overpunch		= 0x02,
402 	DW_DS_trailing_overpunch	= 0x03,
403 	DW_DS_leading_separate		= 0x04,
404 	DW_DS_trailing_separate		= 0x05
405 };
406 
407 // endianess
408 enum {
409 	DW_END_default		= 0x00,
410 	DW_END_big			= 0x01,
411 	DW_END_little		= 0x02,
412 	DW_END_lo_user		= 0x40,
413 	DW_END_hi_user		= 0xff
414 };
415 
416 // accessibility
417 enum {
418 	DW_ACCESS_public	= 0x01,
419 	DW_ACCESS_protected	= 0x02,
420 	DW_ACCESS_private	= 0x03
421 };
422 
423 // visibility
424 enum {
425 	DW_VIS_local		= 0x01,
426 	DW_VIS_exported		= 0x02,
427 	DW_VIS_qualified	= 0x03
428 };
429 
430 // virtuality
431 enum {
432 	DW_VIRTUALITY_none			= 0x00,
433 	DW_VIRTUALITY_virtual		= 0x01,
434 	DW_VIRTUALITY_pure_virtual	= 0x02
435 };
436 
437 // source language
438 enum {
439 	DW_LANG_C89				= 0x0001,
440 	DW_LANG_C				= 0x0002,
441 	DW_LANG_Ada83			= 0x0003,
442 	DW_LANG_C_plus_plus		= 0x0004,
443 	DW_LANG_Cobol74			= 0x0005,
444 	DW_LANG_Cobol85			= 0x0006,
445 	DW_LANG_Fortran77		= 0x0007,
446 	DW_LANG_Fortran90		= 0x0008,
447 	DW_LANG_Pascal83		= 0x0009,
448 	DW_LANG_Modula2			= 0x000a,
449 	DW_LANG_Java			= 0x000b,
450 	DW_LANG_C99				= 0x000c,
451 	DW_LANG_Ada95			= 0x000d,
452 	DW_LANG_Fortran95		= 0x000e,
453 	DW_LANG_PLI				= 0x000f,
454 	DW_LANG_ObjC			= 0x0010,
455 	DW_LANG_ObjC_plus_plus	= 0x0011,
456 	DW_LANG_UPC				= 0x0012,
457 	DW_LANG_D				= 0x0013,
458 	DW_LANG_Python			= 0x0014,
459 	DW_LANG_OpenCL			= 0x0015,
460 	DW_LANG_Go				= 0x0016,
461 	DW_LANG_Modula3			= 0x0017,
462 	DW_LANG_Haskell			= 0x0018,
463 	DW_LANG_C_plus_plus_03	= 0x0019,
464 	DW_LANG_C_plus_plus_11	= 0x001a,
465 	DW_LANG_OCaml			= 0x001b,
466 	DW_LANG_Rust			= 0x001c,
467 	DW_LANG_C11				= 0x001d,
468 	DW_LANG_Swift			= 0x001e,
469 	DW_LANG_Julia			= 0x001f,
470 	DW_LANG_Dylan			= 0x0020,
471 	DW_LANG_C_plus_plus_14	= 0x0021,
472 	DW_LANG_Fortran03		= 0x0022,
473 	DW_LANG_Fortran08		= 0x0023,
474 	DW_LANG_RenderScript	= 0x0024,
475 	DW_LANG_BLISS			= 0x0025,
476 	DW_LANG_lo_user			= 0x8000,
477 	DW_LANG_hi_user			= 0xffff
478 };
479 
480 // identifier case
481 enum {
482 	DW_ID_case_sensitive	= 0x00,
483 	DW_ID_up_case			= 0x01,
484 	DW_ID_down_case			= 0x02,
485 	DW_ID_case_insensitive	= 0x03
486 };
487 
488 // calling convention
489 enum {
490 	DW_CC_normal			= 0x01,
491 	DW_CC_program			= 0x02,
492 	DW_CC_nocall			= 0x03,
493 	DW_CC_pass_by_reference	= 0x04,
494 	DW_CC_pass_by_value		= 0x05,
495 	DW_CC_lo_user			= 0x40,
496 	DW_CC_hi_user			= 0xff
497 };
498 
499 // inlining
500 enum {
501 	DW_INL_not_inlined			= 0x00,
502 	DW_INL_inlined				= 0x01,
503 	DW_INL_declared_not_inlined	= 0x02,
504 	DW_INL_declared_inlined		= 0x03
505 };
506 
507 // array ordering
508 enum {
509 	DW_ORD_row_major			= 0x00,
510 	DW_ORD_col_major			= 0x01
511 };
512 
513 // discriminant descriptor
514 enum {
515 	DW_DSC_label			= 0x00,
516 	DW_DSC_range			= 0x01
517 };
518 
519 // line number standard opcode
520 enum {
521 	DW_LNS_copy					= 0x01,
522 	DW_LNS_advance_pc			= 0x02,
523 	DW_LNS_advance_line			= 0x03,
524 	DW_LNS_set_file				= 0x04,
525 	DW_LNS_set_column			= 0x05,
526 	DW_LNS_negate_stmt			= 0x06,
527 	DW_LNS_set_basic_block		= 0x07,
528 	DW_LNS_const_add_pc			= 0x08,
529 	DW_LNS_fixed_advance_pc		= 0x09,
530 	DW_LNS_set_prologue_end		= 0x0a,
531 	DW_LNS_set_epilogue_begin	= 0x0b,
532 	DW_LNS_set_isa				= 0x0c
533 };
534 
535 // line number extended opcode
536 enum {
537 	DW_LNE_end_sequence			= 0x01,
538 	DW_LNE_set_address			= 0x02,
539 	DW_LNE_define_file			= 0x03,
540 	DW_LNE_set_discriminator 	= 0x04,
541 	DW_LNE_lo_user				= 0x80,
542 	DW_LNE_hi_user				= 0xff
543 };
544 
545 // line number header entry format
546 enum {
547 	DW_LNCT_path				= 0x0001,
548 	DW_LNCT_directory_index		= 0x0002,
549 	DW_LNCT_timestamp			= 0x0003,
550 	DW_LNCT_size				= 0x0004,
551 	DW_LNCT_MD5					= 0x0005,
552 	DW_LNCT_lo_user				= 0x2000,
553 	DW_LNCT_hi_user				= 0x3fff
554 };
555 
556 // macro information type
557 enum {
558 	DW_MACINFO_define		= 0x01,
559 	DW_MACINFO_undef		= 0x02,
560 	DW_MACINFO_start_file	= 0x03,
561 	DW_MACINFO_end_file		= 0x04,
562 	DW_MACINFO_vendor_ext	= 0xff
563 };
564 
565 // call frame instruction (high 2 bits for the first 3 items, low 6 bits for
566 // the remaining ones)
567 enum {
568 	DW_CFA_advance_loc			= 0x1,	// high 2 bits
569 	DW_CFA_offset				= 0x2,	// high 2 bits
570 	DW_CFA_restore				= 0x3,	// high 2 bits
571 	DW_CFA_nop					= 0,	// whole byte
572 	DW_CFA_set_loc				= 0x01,
573 	DW_CFA_advance_loc1			= 0x02,
574 	DW_CFA_advance_loc2			= 0x03,
575 	DW_CFA_advance_loc4			= 0x04,
576 	DW_CFA_offset_extended		= 0x05,
577 	DW_CFA_restore_extended		= 0x06,
578 	DW_CFA_undefined			= 0x07,
579 	DW_CFA_same_value			= 0x08,
580 	DW_CFA_register				= 0x09,
581 	DW_CFA_remember_state		= 0x0a,
582 	DW_CFA_restore_state		= 0x0b,
583 	DW_CFA_def_cfa				= 0x0c,
584 	DW_CFA_def_cfa_register		= 0x0d,
585 	DW_CFA_def_cfa_offset		= 0x0e,
586 	DW_CFA_def_cfa_expression	= 0x0f,
587 	DW_CFA_expression			= 0x10,
588 	DW_CFA_offset_extended_sf	= 0x11,
589 	DW_CFA_def_cfa_sf			= 0x12,
590 	DW_CFA_def_cfa_offset_sf	= 0x13,
591 	DW_CFA_val_offset			= 0x14,
592 	DW_CFA_val_offset_sf		= 0x15,
593 	DW_CFA_val_expression		= 0x16,
594 	DW_CFA_lo_user				= 0x1c,
595 	DW_CFA_hi_user				= 0x3f,
596 
597 	// extensions
598     DW_CFA_MIPS_advance_loc8	= 0x1d,
599     DW_CFA_GNU_window_save		= 0x2d,
600     DW_CFA_GNU_args_size		= 0x2e,
601     DW_CFA_GNU_negative_offset_extended	= 0x2f
602 };
603 
604 // unit type
605 enum {
606 	DW_UT_compile				= 0x01,
607 	DW_UT_type					= 0x02,
608 	DW_UT_partial				= 0x03,
609 	DW_UT_skeleton				= 0x04,
610 	DW_UT_split_compile			= 0x05,
611 	DW_UT_split_type			= 0x06,
612 	DW_UT_lo_user				= 0x80,
613 	DW_UT_hi_user				= 0xff
614 };
615 
616 
617 enum dwarf_reference_type {
618 	dwarf_reference_type_local = 0,
619 	dwarf_reference_type_global,
620 	dwarf_reference_type_signature
621 };
622 
623 
624 #endif	// DWARF_H
625