1 
2 /**
3  * Reflects declarations from the DWARF 3 to 5 specification, not the The D Language Foundation
4  * dwarf implementation
5  *
6  * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/backend/dwarf2.d, backend/_dwarf2.d)
7  */
8 
9 module dmd.backend.dwarf2;
10 
11 // Online documentation: https://dlang.org/phobos/dmd_backend_dwarf2.html
12 
13 @safe:
14 
15 enum
16 {
17         DW_SECT_INFO                    = 1,
18         DW_SECT_ABBREV                  = 3,
19         DW_SECT_LINE                    = 4,
20         DW_SECT_LOCLISTS                = 5,
21         DW_SECT_STR_OFFSETS             = 6,
22         DW_SECT_MACRO                   = 7,
23         DW_SECT_RNGLISTS                = 8,
24 }
25 
26 enum
27 {
28         DW_UT_compile                   = 0x01,
29         DW_UT_type                      = 0x02,
30         DW_UT_partial                   = 0x03,
31         DW_UT_skeleton                  = 0x04,
32         DW_UT_split_compile             = 0x05,
33         DW_UT_split_type                = 0x06,
34 
35         DW_UT_lo_user                   = 0x80,
36         DW_UT_hi_user                   = 0xff,
37 }
38 
39 enum
40 {
41         DW_TAG_array_type               = 0x01,
42         DW_TAG_class_type               = 0x02,
43         DW_TAG_entry_point              = 0x03,
44         DW_TAG_enumeration_type         = 0x04,
45         DW_TAG_formal_parameter         = 0x05,
46         DW_TAG_imported_declaration     = 0x08,
47         DW_TAG_label                    = 0x0A,
48         DW_TAG_lexical_block            = 0x0B,
49         DW_TAG_member                   = 0x0D,
50         DW_TAG_pointer_type             = 0x0F,
51         DW_TAG_reference_type           = 0x10,
52         DW_TAG_compile_unit             = 0x11,
53         DW_TAG_string_type              = 0x12,
54         DW_TAG_structure_type           = 0x13,
55         DW_TAG_subroutine_type          = 0x15,
56         DW_TAG_typedef                  = 0x16,
57         DW_TAG_union_type               = 0x17,
58         DW_TAG_unspecified_parameters   = 0x18,
59         DW_TAG_variant                  = 0x19,
60         DW_TAG_common_block             = 0x1A,
61         DW_TAG_common_inclusion         = 0x1B,
62         DW_TAG_inheritance              = 0x1C,
63         DW_TAG_inlined_subroutine       = 0x1D,
64         DW_TAG_module                   = 0x1E,
65         DW_TAG_ptr_to_member_type       = 0x1F,
66         DW_TAG_set_type                 = 0x20,
67         DW_TAG_subrange_type            = 0x21,
68         DW_TAG_with_stmt                = 0x22,
69         DW_TAG_access_declaration       = 0x23,
70         DW_TAG_base_type                = 0x24,
71         DW_TAG_catch_block              = 0x25,
72         DW_TAG_const_type               = 0x26,
73         DW_TAG_constant                 = 0x27,
74         DW_TAG_enumerator               = 0x28,
75         DW_TAG_file_type                = 0x29,
76         DW_TAG_friend                   = 0x2A,
77         DW_TAG_namelist                 = 0x2B,
78         DW_TAG_namelist_item            = 0x2C,
79         DW_TAG_packed_type              = 0x2D,
80         DW_TAG_subprogram               = 0x2E,
81         DW_TAG_template_type_param      = 0x2F,
82         DW_TAG_template_value_param     = 0x30,
83         DW_TAG_thrown_type              = 0x31,
84         DW_TAG_try_block                = 0x32,
85         DW_TAG_variant_part             = 0x33,
86         DW_TAG_variable                 = 0x34,
87         DW_TAG_volatile_type            = 0x35,
88 
89         /* DWARF v3 */
90         DW_TAG_dwarf_procedure          = 0x36,
91         DW_TAG_restrict_type            = 0x37,
92         DW_TAG_interface_type           = 0x38,
93         DW_TAG_namespace                = 0x39,
94         DW_TAG_imported_module          = 0x3A,
95         DW_TAG_unspecified_type         = 0x3B,
96         DW_TAG_partial_unit             = 0x3C,
97         DW_TAG_imported_unit            = 0x3D,
98         DW_TAG_condition                = 0x3F,
99         DW_TAG_shared_type              = 0x40,
100 
101         /* DWARF v4 */
102         DW_TAG_type_unit                = 0x41,
103         DW_TAG_rvalue_reference_type    = 0x42,
104         DW_TAG_template_alias           = 0x43,
105 
106         /* DWARF v5 */
107         DW_TAG_coarray_type             = 0x44,
108         DW_TAG_generic_subrange         = 0x45,
109         DW_TAG_dynamic_type             = 0x46,
110         DW_TAG_atomic_type              = 0x47,
111         DW_TAG_call_site                = 0x48,
112         DW_TAG_call_site_parameter      = 0x49,
113         DW_TAG_skeleton_unit            = 0x4a,
114         DW_TAG_immutable_type           = 0x4b,
115 
116         DW_TAG_lo_user                  = 0x4080,
117         DW_TAG_hi_user                  = 0xFFFF,
118 }
119 
120 enum
121 {
122         DW_CHILDREN_no                  = 0x00,
123         DW_CHILDREN_yes                 = 0x01,
124 }
125 
126 enum
127 {
128         DW_AT_sibling                   = 0x01,
129         DW_AT_location                  = 0x02,
130         DW_AT_name                      = 0x03,
131         DW_AT_ordering                  = 0x09,
132         DW_AT_byte_size                 = 0x0B,
133         DW_AT_bit_offset                = 0x0C,
134         DW_AT_bit_size                  = 0x0D,
135         DW_AT_stmt_list                 = 0x10,
136         DW_AT_low_pc                    = 0x11,
137         DW_AT_high_pc                   = 0x12,
138         DW_AT_language                  = 0x13,
139         DW_AT_discr                     = 0x15,
140         DW_AT_discr_value               = 0x16,
141         DW_AT_visibility                = 0x17,
142         DW_AT_import                    = 0x18,
143         DW_AT_string_length             = 0x19,
144         DW_AT_common_reference          = 0x1A,
145         DW_AT_comp_dir                  = 0x1B,
146         DW_AT_const_value               = 0x1C,
147         DW_AT_containing_type           = 0x1D,
148         DW_AT_default_value             = 0x1E,
149         DW_AT_inline                    = 0x20,
150         DW_AT_is_optional               = 0x21,
151         DW_AT_lower_bound               = 0x22,
152         DW_AT_producer                  = 0x25,
153         DW_AT_prototyped                = 0x27,
154         DW_AT_return_addr               = 0x2A,
155         DW_AT_start_scope               = 0x2C,
156         DW_AT_stride_size               = 0x2E,
157         DW_AT_upper_bound               = 0x2F,
158         DW_AT_abstract_origin           = 0x31,
159         DW_AT_accessibility             = 0x32,
160         DW_AT_address_class             = 0x33,
161         DW_AT_artificial                = 0x34,
162         DW_AT_base_types                = 0x35,
163         DW_AT_calling_convention        = 0x36,
164         DW_AT_count                     = 0x37,
165         DW_AT_data_member_location      = 0x38,
166         DW_AT_decl_column               = 0x39,
167         DW_AT_decl_file                 = 0x3A,
168         DW_AT_decl_line                 = 0x3B,
169         DW_AT_declaration               = 0x3C,
170         DW_AT_discr_list                = 0x3D,
171         DW_AT_encoding                  = 0x3E,
172         DW_AT_external                  = 0x3F,
173         DW_AT_frame_base                = 0x40,
174         DW_AT_friend                    = 0x41,
175         DW_AT_identifier_case           = 0x42,
176         DW_AT_macro_info                = 0x43,
177         DW_AT_namelist_item             = 0x44,
178         DW_AT_priority                  = 0x45,
179         DW_AT_segment                   = 0x46,
180         DW_AT_specification             = 0x47,
181         DW_AT_static_link               = 0x48,
182         DW_AT_type                      = 0x49,
183         DW_AT_use_location              = 0x4A,
184         DW_AT_variable_parameter        = 0x4B,
185         DW_AT_virtuality                = 0x4C,
186         DW_AT_vtable_elem_location      = 0x4D,
187 
188         /* DWARF v3 */
189         DW_AT_allocated                 = 0x4E,
190         DW_AT_associated                = 0x4F,
191         DW_AT_data_location             = 0x50,
192         DW_AT_byte_stride               = 0x51,
193         DW_AT_entry_pc                  = 0x52,
194         DW_AT_use_UTF8                  = 0x53,
195         DW_AT_extension                 = 0x54,
196         DW_AT_ranges                    = 0x55,
197         DW_AT_trampoline                = 0x56,
198         DW_AT_call_column               = 0x57,
199         DW_AT_call_file                 = 0x58,
200         DW_AT_call_line                 = 0x59,
201         DW_AT_description               = 0x5A,
202         DW_AT_binary_scale              = 0x5B,
203         DW_AT_decimal_scale             = 0x5C,
204         DW_AT_small                     = 0x5D,
205         DW_AT_decimal_sign              = 0x5E,
206         DW_AT_digit_count               = 0x5F,
207         DW_AT_picture_string            = 0x60,
208         DW_AT_mutable                   = 0x61,
209         DW_AT_threads_scaled            = 0x62,
210         DW_AT_explicit                  = 0x63,
211         DW_AT_object_pointer            = 0x64,
212         DW_AT_endianity                 = 0x65,
213         DW_AT_elemental                 = 0x66,
214         DW_AT_pure                      = 0x67,
215         DW_AT_recursive                 = 0x68,
216 
217         /* DWARF v4 */
218         DW_AT_signature                 = 0x69,
219         DW_AT_main_subprogram           = 0x6a,
220         DW_AT_data_bit_offset           = 0x6b,
221         DW_AT_const_expr                = 0x6c,
222         DW_AT_enum_class                = 0x6d,
223         DW_AT_linkage_name              = 0x6e,
224 
225         /* DWARF v5 */
226         DW_AT_string_length_bit_size    = 0x6f,
227         DW_AT_string_length_byte_size   = 0x70,
228         DW_AT_rank                      = 0x71,
229         DW_AT_str_offsets_base          = 0x72,
230         DW_AT_addr_base                 = 0x73,
231         DW_AT_rnglists_base             = 0x74,
232         DW_AT_dwo_name                  = 0x76,
233         DW_AT_reference                 = 0x77,
234         DW_AT_rvalue_reference          = 0x78,
235         DW_AT_macros                    = 0x79,
236         DW_AT_call_all_calls            = 0x7a,
237         DW_AT_call_all_source_calls     = 0x7b,
238         DW_AT_call_all_tail_calls       = 0x7c,
239         DW_AT_call_return_pc            = 0x7d,
240         DW_AT_call_value                = 0x7e,
241         DW_AT_call_origin               = 0x7f,
242         DW_AT_call_parameter            = 0x80,
243         DW_AT_call_pc                   = 0x81,
244         DW_AT_call_tail_call            = 0x82,
245         DW_AT_call_target               = 0x83,
246         DW_AT_call_target_clobbered     = 0x84,
247         DW_AT_call_data_location        = 0x85,
248         DW_AT_call_data_value           = 0x86,
249         DW_AT_noreturn                  = 0x87,
250         DW_AT_alignment                 = 0x88,
251         DW_AT_export_symbols            = 0x89,
252         DW_AT_deleted                   = 0x8a,
253         DW_AT_defaulted                 = 0x8b,
254         DW_AT_loclists_base             = 0x8c,
255 
256         DW_AT_lo_user                   = 0x2000,
257         DW_AT_MIPS_linkage_name         = 0x2007,
258         DW_AT_GNU_vector                = 0x2107,
259         DW_AT_hi_user                   = 0x3FFF,
260 }
261 
262 enum
263 {
264         DW_FORM_addr                    = 0x01,
265         DW_FORM_block2                  = 0x03,
266         DW_FORM_block4                  = 0x04,
267         DW_FORM_data2                   = 0x05,
268         DW_FORM_data4                   = 0x06,
269         DW_FORM_data8                   = 0x07,
270         DW_FORM_string                  = 0x08,
271         DW_FORM_block                   = 0x09,
272         DW_FORM_block1                  = 0x0A,
273         DW_FORM_data1                   = 0x0B,
274         DW_FORM_flag                    = 0x0C,
275         DW_FORM_sdata                   = 0x0D,
276         DW_FORM_strp                    = 0x0E,
277         DW_FORM_udata                   = 0x0F,
278         DW_FORM_ref_addr                = 0x10,
279         DW_FORM_ref1                    = 0x11,
280         DW_FORM_ref2                    = 0x12,
281         DW_FORM_ref4                    = 0x13,
282         DW_FORM_ref8                    = 0x14,
283         DW_FORM_ref_udata               = 0x15,
284         DW_FORM_indirect                = 0x16,
285 
286         /* DWARF v4 */
287         DW_FORM_sec_offset              = 0x17,
288         DW_FORM_exprloc                 = 0x18,
289         DW_FORM_flag_present            = 0x19,
290 
291         /* DWARF v5 */
292         DW_FORM_strx                    = 0x1a,
293         DW_FORM_addrx                   = 0x1b,
294         DW_FORM_ref_sup4                = 0x1c,
295         DW_FORM_strp_sup                = 0x1d,
296         DW_FORM_data16                  = 0x1e,
297         DW_FORM_line_strp               = 0x1f,
298 
299         /* DWARF v4 */
300         DW_FORM_ref_sig8                = 0x20,
301 
302         /* DWARF v5 */
303         DW_FORM_implicit_const          = 0x21,
304         DW_FORM_loclistx                = 0x22,
305         DW_FORM_rnglistx                = 0x23,
306         DW_FORM_ref_sup8                = 0x24,
307         DW_FORM_strx1                   = 0x25,
308         DW_FORM_strx2                   = 0x26,
309         DW_FORM_strx3                   = 0x27,
310         DW_FORM_strx4                   = 0x28,
311         DW_FORM_addrx1                  = 0x29,
312         DW_FORM_addrx2                  = 0x2a,
313         DW_FORM_addrx3                  = 0x2b,
314         DW_FORM_addrx4                  = 0x2c,
315 }
316 
317 enum
318 {
319         DW_OP_addr                      = 0x03,
320         DW_OP_deref                     = 0x06,
321         DW_OP_const1u                   = 0x08,
322         DW_OP_const1s                   = 0x09,
323         DW_OP_const2u                   = 0x0a,
324         DW_OP_const2s                   = 0x0b,
325         DW_OP_const4u                   = 0x0c,
326         DW_OP_const4s                   = 0x0d,
327         DW_OP_const8u                   = 0x0e,
328         DW_OP_const8s                   = 0x0f,
329         DW_OP_constu                    = 0x10,
330         DW_OP_consts                    = 0x11,
331         DW_OP_dup                       = 0x12,
332         DW_OP_drop                      = 0x13,
333         DW_OP_over                      = 0x14,
334         DW_OP_pick                      = 0x15,
335         DW_OP_swap                      = 0x16,
336         DW_OP_rot                       = 0x17,
337         DW_OP_xderef                    = 0x18,
338         DW_OP_abs                       = 0x19,
339         DW_OP_and                       = 0x1a,
340         DW_OP_div                       = 0x1b,
341         DW_OP_minus                     = 0x1c,
342         DW_OP_mod                       = 0x1d,
343         DW_OP_mul                       = 0x1e,
344         DW_OP_neg                       = 0x1f,
345         DW_OP_not                       = 0x20,
346         DW_OP_or                        = 0x21,
347         DW_OP_plus                      = 0x22,
348         DW_OP_plus_uconst               = 0x23,
349         DW_OP_shl                       = 0x24,
350         DW_OP_shr                       = 0x25,
351         DW_OP_shra                      = 0x26,
352         DW_OP_xor                       = 0x27,
353         DW_OP_skip                      = 0x2f,
354         DW_OP_bra                       = 0x28,
355         DW_OP_eq                        = 0x29,
356         DW_OP_ge                        = 0x2a,
357         DW_OP_gt                        = 0x2b,
358         DW_OP_le                        = 0x2c,
359         DW_OP_lt                        = 0x2d,
360         DW_OP_ne                        = 0x2e,
361         DW_OP_lit0                      = 0x30,
362         DW_OP_lit1                      = 0x31,
363         // ...
364         DW_OP_lit31                     = 0x4f,
365         DW_OP_reg0                      = 0x50,
366         DW_OP_reg1                      = 0x51,
367         // ...
368         DW_OP_reg31                     = 0x6f,
369         DW_OP_breg0                     = 0x70,
370         DW_OP_breg1                     = 0x71,
371         // ...
372         DW_OP_breg31                    = 0x8f,
373         DW_OP_regx                      = 0x90,
374         DW_OP_fbreg                     = 0x91,
375         DW_OP_bregx                     = 0x92,
376         DW_OP_piece                     = 0x93,
377         DW_OP_deref_size                = 0x94,
378         DW_OP_xderef_size               = 0x95,
379         DW_OP_nop                       = 0x96,
380 
381         /* DWARF v3 */
382         DW_OP_push_object_address       = 0x97,
383         DW_OP_call2                     = 0x98,
384         DW_OP_call4                     = 0x99,
385         DW_OP_call_ref                  = 0x9a,
386         DW_OP_form_tls_address          = 0x9b,
387         DW_OP_call_frame_cfa            = 0x9c,
388         DW_OP_bit_piece                 = 0x9d,
389 
390         /* DWARF v4 */
391         DW_OP_implicit_value            = 0x9e,
392         DW_OP_stack_value               = 0x9f,
393 
394         /* DWARF v5 */
395         DW_OP_implicit_pointer          = 0xa0,
396         DW_OP_addrx                     = 0xa1,
397         DW_OP_constx                    = 0xa2,
398         DW_OP_entry_value               = 0xa3,
399         DW_OP_const_type                = 0xa4,
400         DW_OP_regval_type               = 0xa5,
401         DW_OP_deref_type                = 0xa6,
402         DW_OP_xderef_type               = 0xa7,
403         DW_OP_convert                   = 0xa8,
404         DW_OP_reinterpret               = 0xa9,
405 
406         /* GNU extensions. */
407         DW_OP_GNU_push_tls_address      = 0xe0,
408 
409         DW_OP_lo_user                   = 0xe0,
410         DW_OP_hi_user                   = 0xff,
411 }
412 
413 enum
414 {
415         DW_ATE_address                  = 0x01,
416         DW_ATE_boolean                  = 0x02,
417         DW_ATE_complex_float            = 0x03,
418         DW_ATE_float                    = 0x04,
419         DW_ATE_signed                   = 0x05,
420         DW_ATE_signed_char              = 0x06,
421         DW_ATE_unsigned                 = 0x07,
422         DW_ATE_unsigned_char            = 0x08,
423 
424         /* DWARF v3 */
425         DW_ATE_imaginary_float          = 0x09,
426         DW_ATE_packed_decimal           = 0x0a,
427         DW_ATE_numeric_string           = 0x0b,
428         DW_ATE_edited                   = 0x0c,
429         DW_ATE_signed_fixed             = 0x0d,
430         DW_ATE_unsigned_fixed           = 0x0e,
431         DW_ATE_decimal_float            = 0x0f,
432 
433         /* DWARF v4 */
434         DW_ATE_UTF                      = 0x10,
435 
436         /* DWARF v5 */
437         DW_ATE_UCS                      = 0x11,
438         DW_ATE_ASCII                    = 0x12,
439 
440         DW_ATE_lo_user                  = 0x80,
441         DW_ATE_hi_user                  = 0xff,
442 }
443 
444 enum
445 {
446         /* DWARF v5 */
447         DW_LLE_end_of_list              = 0x00,
448         DW_LLE_base_addressx            = 0x01,
449         DW_LLE_startx_endx              = 0x02,
450         DW_LLE_startx_length            = 0x03,
451         DW_LLE_offset_pair              = 0x04,
452         DW_LLE_default_location         = 0x05,
453         DW_LLE_base_address             = 0x06,
454         DW_LLE_start_end                = 0x07,
455         DW_LLE_start_length             = 0x08,
456 }
457 
458 enum
459 {
460         DW_DS_unsigned                  = 0x01,
461         DW_DS_leading_overpunch         = 0x02,
462         DW_DS_trailing_overpunch        = 0x03,
463         DW_DS_leading_separate          = 0x04,
464         DW_DS_trailing_separate         = 0x05,
465 }
466 
467 enum
468 {
469         DW_END_default                  = 0x00,
470         DW_END_big                      = 0x01,
471         DW_END_little                   = 0x02,
472         DW_END_lo_user                  = 0x40,
473         DW_END_hi_user                  = 0xff,
474 }
475 
476 enum
477 {
478         DW_ACCESS_public                = 0x01,
479         DW_ACCESS_protected             = 0x02,
480         DW_ACCESS_private               = 0x03,
481 }
482 
483 enum
484 {
485         DW_VIS_local                    = 0x01,
486         DW_VIS_exported                 = 0x02,
487         DW_VIS_qualified                = 0x03,
488 }
489 
490 enum
491 {
492         DW_VIRTUALITY_none              = 0x00,
493         DW_VIRTUALITY_virtual           = 0x01,
494         DW_VIRTUALITY_pure_virtual      = 0x02,
495 }
496 
497 enum
498 {
499         DW_LANG_C89                     = 0x0001,
500         DW_LANG_C                       = 0x0002,
501         DW_LANG_Ada83                   = 0x0003,
502         DW_LANG_C_plus_plus             = 0x0004,
503         DW_LANG_Cobol74                 = 0x0005,
504         DW_LANG_Cobol85                 = 0x0006,
505         DW_LANG_Fortran77               = 0x0007,
506         DW_LANG_Fortran90               = 0x0008,
507         DW_LANG_Pascal83                = 0x0009,
508         DW_LANG_Modula2                 = 0x000a,
509         DW_LANG_Java                    = 0x000b,
510         DW_LANG_C99                     = 0x000c,
511         DW_LANG_Ada95                   = 0x000d,
512         DW_LANG_Fortran95               = 0x000e,
513         DW_LANG_PLI                     = 0x000f,
514         DW_LANG_ObjC                    = 0x0010,
515         DW_LANG_ObjC_plus_plus          = 0x0011,
516         DW_LANG_UPC                     = 0x0012,
517         DW_LANG_D                       = 0x0013,
518         DW_LANG_Python                  = 0x0014,
519 
520         /* DWARF v5 */
521         DW_LANG_OpenCL                  = 0x0015,
522         DW_LANG_Go                      = 0x0016,
523         DW_LANG_Modula3                 = 0x0017,
524         DW_LANG_Haskell                 = 0x0018,
525         DW_LANG_C_plus_plus_03          = 0x0019,
526         DW_LANG_C_plus_plus_11          = 0x001a,
527         DW_LANG_OCaml                   = 0x001b,
528         DW_LANG_Rust                    = 0x001c,
529         DW_LANG_C11                     = 0x001d,
530         DW_LANG_Swift                   = 0x001e,
531         DW_LANG_Julia                   = 0x001f,
532         DW_LANG_Dylan                   = 0x0020,
533         DW_LANG_C_plus_plus_14          = 0x0021,
534         DW_LANG_Fortran03               = 0x0022,
535         DW_LANG_Fortran08               = 0x0023,
536         DW_LANG_RenderScript            = 0x0024,
537         DW_LANG_BLISS                   = 0x0025,
538 
539         DW_LANG_lo_user                 = 0x8000,
540         DW_LANG_hi_user                 = 0xffff,
541 }
542 
543 enum
544 {
545         DW_ID_case_sensitive            = 0x00,
546         DW_ID_up_case                   = 0x01,
547         DW_ID_down_case                 = 0x02,
548         DW_ID_case_insensitive          = 0x03,
549 }
550 
551 enum
552 {
553         DW_CC_normal                    = 0x01,
554         DW_CC_program                   = 0x02,
555         DW_CC_nocall                    = 0x03,
556 
557         /* DWARF v5 */
558         DW_CC_pass_by_reference         = 0x04,
559         DW_CC_pass_by_value             = 0x05,
560 
561         DW_CC_lo_user                   = 0x40,
562         DW_CC_hi_user                   = 0xff,
563 }
564 
565 enum
566 {
567         DW_INL_not_inlined              = 0x00,
568         DW_INL_inlined                  = 0x01,
569         DW_INL_declared_not_inlined     = 0x02,
570         DW_INL_declared_inlined         = 0x03,
571 }
572 
573 enum
574 {
575         DW_ORD_row_major                = 0x00,
576         DW_ORD_col_major                = 0x01,
577 }
578 
579 enum
580 {
581         /* DWARF v5 */
582         DW_IDX_compile_unit             = 1,
583         DW_IDX_type_unit                = 2,
584         DW_IDX_die_offset               = 3,
585         DW_IDX_parent                   = 4,
586         DW_IDX_type_hash                = 5,
587 
588         DW_IDX_lo_user                  = 0x2000,
589         DW_IDX_hi_user                  = 0x3fff,
590 }
591 
592 enum
593 {
594         /* DWARF v5 */
595         DW_DEFAULTED_no                 = 0x00,
596         DW_DEFAULTED_in_class           = 0x01,
597         DW_DEFAULTED_out_of_class       = 0x02,
598 }
599 
600 enum
601 {
602         DW_DSC_label                    = 0x00,
603         DW_DSC_range                    = 0x01,
604 }
605 
606 enum
607 {
608         DW_LNS_copy                     = 0x01,
609         DW_LNS_advance_pc               = 0x02,
610         DW_LNS_advance_line             = 0x03,
611         DW_LNS_set_file                 = 0x04,
612         DW_LNS_set_column               = 0x05,
613         DW_LNS_negate_stmt              = 0x06,
614         DW_LNS_set_basic_block          = 0x07,
615         DW_LNS_const_add_pc             = 0x08,
616         DW_LNS_fixed_advance_pc         = 0x09,
617         DW_LNS_set_prologue_end         = 0x0a,
618         DW_LNS_set_epilogue_begin       = 0x0b,
619         DW_LNS_set_isa                  = 0x0c,
620 }
621 
622 enum
623 {
624         DW_LNE_end_sequence             = 0x01,
625         DW_LNE_set_address              = 0x02,
626         DW_LNE_define_file              = 0x03, // DWARF v4 and earlier only
627         DW_LNE_lo_user                  = 0x80,
628         DW_LNE_hi_user                  = 0xff,
629 }
630 
631 enum
632 {
633         /* DWARF v5 */
634         DW_LNCT_path                    = 0x1,
635         DW_LNCT_directory_index         = 0x2,
636         DW_LNCT_timestamp               = 0x3,
637         DW_LNCT_size                    = 0x4,
638         DW_LNCT_MD5                     = 0x5,
639 
640         DW_LNCT_lo_user                 = 0x2000,
641         DW_LNCT_hi_user                 = 0x3fff,
642 }
643 
644 enum
645 {
646         DW_MACINFO_define       = 0x01,
647         DW_MACINFO_undef        = 0x02,
648         DW_MACINFO_start_file   = 0x03,
649         DW_MACINFO_end_file     = 0x04,
650         DW_MACINFO_vendor_ext   = 0xff,
651 }
652 
653 enum
654 {
655         /* DWARF v5 */
656         DW_MACRO_define                 = 0x01,
657         DW_MACRO_undef                  = 0x02,
658         DW_MACRO_start_file             = 0x03,
659         DW_MACRO_end_file               = 0x04,
660         DW_MACRO_define_strp            = 0x05,
661         DW_MACRO_undef_strp             = 0x06,
662         DW_MACRO_import                 = 0x07,
663         DW_MACRO_define_sup             = 0x08,
664         DW_MACRO_undef_sup              = 0x09,
665         DW_MACRO_import_sup             = 0x0a,
666         DW_MACRO_define_strx            = 0x0b,
667         DW_MACRO_undef_strx             = 0x0c,
668 
669         DW_MACRO_lo_user                = 0xe0,
670         DW_MACRO_hi_user                = 0xff,
671 }
672 
673 enum
674 {
675         DW_CFA_advance_loc              = 0x40,
676         DW_CFA_offset                   = 0x80,
677         DW_CFA_restore                  = 0xc0,
678         DW_CFA_nop                      = 0x00,
679         DW_CFA_set_loc                  = 0x01,
680         DW_CFA_advance_loc1             = 0x02,
681         DW_CFA_advance_loc2             = 0x03,
682         DW_CFA_advance_loc4             = 0x04,
683         DW_CFA_offset_extended          = 0x05,
684         DW_CFA_restore_extended         = 0x06,
685         DW_CFA_undefined                = 0x07,
686         DW_CFA_same_value               = 0x08,
687         DW_CFA_register                 = 0x09,
688         DW_CFA_remember_state           = 0x0a,
689         DW_CFA_restore_state            = 0x0b,
690         DW_CFA_def_cfa                  = 0x0c,
691         DW_CFA_def_cfa_register         = 0x0d,
692         DW_CFA_def_cfa_offset           = 0x0e,
693 
694         /* DWARF v3 */
695         DW_CFA_def_cfa_expression       = 0x0f,
696         DW_CFA_expression               = 0x10,
697         DW_CFA_offset_extended_sf       = 0x11,
698         DW_CFA_def_cfa_sf               = 0x12,
699         DW_CFA_def_cfa_offset_sf        = 0x13,
700         DW_CFA_val_offset               = 0x14,
701         DW_CFA_val_offset_sf            = 0x15,
702         DW_CFA_val_expression           = 0x16,
703 
704         /* GNU extensions. */
705         DW_CFA_GNU_window_save          = 0x2d,
706         DW_CFA_GNU_args_size            = 0x2e,
707         DW_CFA_GNU_negative_offset_extended = 0x2f,
708 
709         DW_CFA_lo_user                  = 0x1c,
710         DW_CFA_hi_user                  = 0x3f,
711 }
712 
713 enum
714 {
715         DW_EH_PE_FORMAT_MASK            = 0x0F,
716         DW_EH_PE_APPL_MASK              = 0x70,
717         DW_EH_PE_indirect               = 0x80,
718 
719         DW_EH_PE_omit                   = 0xFF,
720         DW_EH_PE_ptr                    = 0x00,
721         DW_EH_PE_uleb128                = 0x01,
722         DW_EH_PE_udata2                 = 0x02,
723         DW_EH_PE_udata4                 = 0x03,
724         DW_EH_PE_udata8                 = 0x04,
725         DW_EH_PE_sleb128                = 0x09,
726         DW_EH_PE_sdata2                 = 0x0A,
727         DW_EH_PE_sdata4                 = 0x0B,
728         DW_EH_PE_sdata8                 = 0x0C,
729 
730         DW_EH_PE_absptr                 = 0x00,
731         DW_EH_PE_pcrel                  = 0x10,
732         DW_EH_PE_textrel                = 0x20,
733         DW_EH_PE_datarel                = 0x30,
734         DW_EH_PE_funcrel                = 0x40,
735         DW_EH_PE_aligned                = 0x50,
736 }
737 
738 enum
739 {
740         /* DWARF v5 */
741         DW_RLE_end_of_list              = 0x00,
742         DW_RLE_base_addressx            = 0x01,
743         DW_RLE_startx_endx              = 0x02,
744         DW_RLE_startx_length            = 0x03,
745         DW_RLE_offset_pair              = 0x04,
746         DW_RLE_base_address             = 0x05,
747         DW_RLE_start_end                = 0x06,
748         DW_RLE_start_length             = 0x07,
749 }