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