1 /* ----------------------------------------------------------------------- *
2  *
3  * DWARF declarations
4  *
5  * ----------------------------------------------------------------------- */
6 
7 #ifndef DBGDW_H
8 #define DBGDW_H
9 
10 /* tags - values according to dwarf documentation v4, section 7 */
11 
12 enum dwarf_tag {
13 
14     DW_TAG_array_type           = 0x01,
15     DW_TAG_class_type           = 0x02,
16     DW_TAG_entry_point          = 0x03,
17     DW_TAG_enumeration_type     = 0x04,
18     DW_TAG_formal_parameter     = 0x05,
19 
20     DW_TAG_imported_declaration = 0x08,
21 
22     DW_TAG_label                = 0x0a,
23     DW_TAG_lexical_block        = 0x0b,
24 
25     DW_TAG_member               = 0x0d,
26 
27     DW_TAG_pointer_type         = 0x0f,
28     DW_TAG_reference_type       = 0x10,
29     DW_TAG_compile_unit         = 0x11,
30     DW_TAG_string_type          = 0x12,
31     DW_TAG_structure_type       = 0x13,
32 
33     DW_TAG_subroutine_type      = 0x15,
34     DW_TAG_typedef,
35     DW_TAG_union_type,
36     DW_TAG_unspecified_parameters,
37     DW_TAG_variant,
38     DW_TAG_common_block,
39     DW_TAG_common_inclusion,
40     DW_TAG_inheritance,
41     DW_TAG_inlined_subroutine,
42     DW_TAG_module,
43     DW_TAG_ptr_to_member_type,
44     DW_TAG_set_type,
45     DW_TAG_subrange_type,
46     DW_TAG_with_stmt,
47     DW_TAG_access_declaration,
48     DW_TAG_base_type,
49     DW_TAG_catch_block,
50     DW_TAG_const_type,
51     DW_TAG_constant,
52     DW_TAG_enumerator,
53     DW_TAG_file_type,
54     DW_TAG_friend,
55     DW_TAG_namelist,
56     DW_TAG_namelist_item,
57     DW_TAG_packed_type,
58     DW_TAG_subprogram,
59     DW_TAG_template_type_parameter,
60     DW_TAG_template_value_parameter,
61     DW_TAG_thrown_type,
62     DW_TAG_try_block,
63     DW_TAG_variant_part,
64     DW_TAG_variable,
65     DW_TAG_volatile_type,
66     DW_TAG_dwarf_procedure,
67     DW_TAG_restrict_type,
68     DW_TAG_interface_type,
69     DW_TAG_namespace,
70     DW_TAG_imported_module,
71     DW_TAG_unspecified_type,
72     DW_TAG_partial_unit,
73     DW_TAG_imported_unit,
74     DW_TAG_condition,
75     DW_TAG_shared_type,
76     DW_TAG_type_unit, /* new since v4 */
77     DW_TAG_rvalue_reference_type,
78     DW_TAG_template_alias,
79 
80     DW_TAG_lo_user = 0x4080,
81     DW_TAG_hi_user = 0xffff,
82 };
83 
84 enum dwarf_child_determination {
85     DW_CHILDREN_no  = 0x00,
86     DW_CHILDREN_yes = 0x01,
87 };
88 
89 enum dwarf_attribute {
90     DW_AT_sibling           = 0x01,
91     DW_AT_location          = 0x02,
92     DW_AT_name              = 0x03,
93     DW_AT_ordering          = 0x09,
94     DW_AT_byte_size         = 0x0b,
95     DW_AT_bit_offset        = 0x0c,
96     DW_AT_bit_size          = 0x0d,
97     DW_AT_stmt_list         = 0x10,
98     DW_AT_low_pc            = 0x11,
99     DW_AT_high_pc           = 0x12,
100     DW_AT_language          = 0x13,
101     DW_AT_discr             = 0x15,
102     DW_AT_discr_value       = 0x16,
103     DW_AT_visibility        = 0x17,
104     DW_AT_import            = 0x18,
105     DW_AT_string_length     = 0x19,
106     DW_AT_common_reference  = 0x1a,
107     DW_AT_comp_dir          = 0x1b,
108     DW_AT_const_value       = 0x1c,
109     DW_AT_containing_type   = 0x1d,
110     DW_AT_default_value     = 0x1e,
111     DW_AT_inline            = 0x20,
112     DW_AT_is_optional       = 0x21,
113     DW_AT_lower_bound       = 0x22,
114     DW_AT_producer          = 0x25,
115     DW_AT_prototyped        = 0x27,
116     DW_AT_return_addr       = 0x2a,
117     DW_AT_start_scope       = 0x2c,
118     DW_AT_bit_stride        = 0x2e,
119     DW_AT_upper_bound       = 0x2f,
120     DW_AT_abstract_origin   = 0x31,
121     DW_AT_accessibility     = 0x32,
122     DW_AT_address_class     = 0x33,
123     DW_AT_artificial        = 0x34,
124     DW_AT_base_types        = 0x35,
125     DW_AT_calling_convention= 0x36,
126     DW_AT_count             = 0x37,
127     DW_AT_data_member_location = 0x38,
128     DW_AT_decl_column       = 0x39,
129     DW_AT_decl_file         = 0x3a,
130     DW_AT_decl_line         = 0x3b,
131     DW_AT_declaration       = 0x3c,
132     DW_AT_discr_list        = 0x3d,
133     DW_AT_encoding          = 0x3e,
134     DW_AT_external          = 0x3f,
135     DW_AT_frame_base        = 0x40,
136     DW_AT_friend            = 0x41,
137     DW_AT_identifier_case   = 0x42,
138     DW_AT_macro_info        = 0x43,
139     DW_AT_namelist_item     = 0x44,
140     DW_AT_priority          = 0x45,
141     DW_AT_segment           = 0x46,
142     DW_AT_specification     = 0x47,
143     DW_AT_static_link       = 0x48,
144     DW_AT_type              = 0x49,
145     DW_AT_use_location      = 0x4a,
146     DW_AT_variable_parameter = 0x4b,
147     DW_AT_virtuality        = 0x4c,
148     DW_AT_vtable_elem_location = 0x4d,
149     DW_AT_allocated         = 0x4e,
150     DW_AT_associated        = 0x4f,
151     DW_AT_data_location     = 0x50,
152     DW_AT_byte_stride       = 0x51,
153     DW_AT_entry_pc          = 0x52,
154     DW_AT_use_UTF8          = 0x53,
155     DW_AT_extension         = 0x54,
156     DW_AT_ranges            = 0x55,
157     DW_AT_trampoline        = 0x56,
158     DW_AT_call_column       = 0x57,
159     DW_AT_call_file         = 0x58,
160     DW_AT_call_line         = 0x59,
161     DW_AT_description       = 0x5a,
162     DW_AT_binary_scale      = 0x5b,
163     DW_AT_decimal_scale     = 0x5c,
164     DW_AT_small             = 0x5d,
165     DW_AT_decimal_sign      = 0x5e,
166     DW_AT_digit_count       = 0x5f,
167     DW_AT_picture_string    = 0x60,
168     DW_AT_mutable           = 0x61,
169     DW_AT_threads_scaled    = 0x62,
170     DW_AT_explicit          = 0x63,
171     DW_AT_object_pointer    = 0x64,
172     DW_AT_endianity         = 0x65,
173     DW_AT_elemental         = 0x66,
174     DW_AT_pure              = 0x67,
175     DW_AT_recursive         = 0x68,
176     DW_AT_signature         = 0x69, /* since v4 */
177     DW_AT_main_subprogram   = 0x6a,
178     DW_AT_data_bit_offset   = 0x6b,
179     DW_AT_const_expr        = 0x6c,
180     DW_AT_enum_class        = 0x6d,
181     DW_AT_linkage_name      = 0x6e,
182 
183     DW_AT_lo_user           = 0x2000,
184     DW_AT_hi_user           = 0x3fff,
185 };
186 
187 enum dwarf_information_format {
188     DW_FORM_addr            = 0x01,
189     DW_FORM_block2          = 0x03,
190     DW_FORM_block4          = 0x04,
191     DW_FORM_data2           = 0x05,
192     DW_FORM_data4           = 0x06,
193     DW_FORM_data8           = 0x07,
194     DW_FORM_string          = 0x08,
195     DW_FORM_block           = 0x09,
196     DW_FORM_block1          = 0x0a,
197     DW_FORM_data1           = 0x0b,
198     DW_FORM_flag            = 0x0c,
199     DW_FORM_sdata           = 0x0d,
200     DW_FORM_strp            = 0x0e,
201     DW_FORM_udata           = 0x0f,
202     DW_FORM_ref_addr        = 0x10,
203     DW_FORM_ref1            = 0x11,
204     DW_FORM_ref2            = 0x12,
205     DW_FORM_ref4            = 0x13,
206     DW_FORM_ref8            = 0x14,
207     DW_FORM_ref_udata       = 0x15,
208     DW_FORM_indirect        = 0x16,
209     DW_FORM_sec_offset      = 0x17, /* since v4 */
210     DW_FORM_excploc         = 0x18,
211     DW_FORM_flag_present    = 0x19,
212     DW_FORM_ref_sig8        = 0x1a, /* in documentation, value is 0x20 ( probably typo ) */
213 };
214 
215 /* operation encodings in dwarf expressions */
216 enum dwarf_op {
217     DW_OP_addr              = 0x03,
218     DW_OP_deref             = 0x06,
219     DW_OP_const1u           = 0x08,
220     DW_OP_const1s           = 0x09,
221     DW_OP_const2u           = 0x0a,
222     DW_OP_const2s           = 0x0b,
223     DW_OP_const4u           = 0x0c,
224     DW_OP_const4s           = 0x0d,
225     DW_OP_const8u           = 0x0e,
226     DW_OP_const8s           = 0x0f,
227     DW_OP_constu            = 0x10,
228     DW_OP_consts            = 0x11,
229     DW_OP_dup               = 0x12,
230     DW_OP_drop              = 0x13,
231     DW_OP_over              = 0x14,
232     DW_OP_pick              = 0x15,
233     DW_OP_swap              = 0x16,
234     DW_OP_rot               = 0x17,
235     DW_OP_xderef            = 0x18,
236     DW_OP_abs               = 0x19,
237     DW_OP_and               = 0x1a,
238     DW_OP_div               = 0x1b,
239     DW_OP_minus             = 0x1c,
240     DW_OP_mod               = 0x1d,
241     DW_OP_mul               = 0x1e,
242     DW_OP_neg               = 0x1f,
243     DW_OP_not               = 0x20,
244     DW_OP_or                = 0x21,
245     DW_OP_plus              = 0x22,
246     DW_OP_plus_uconst       = 0x23,
247     DW_OP_shl               = 0x24,
248     DW_OP_shr               = 0x25,
249     DW_OP_shra              = 0x26,
250     DW_OP_xor               = 0x27,
251     DW_OP_skip              = 0x2f,
252     DW_OP_bra               = 0x28,
253     DW_OP_eq                = 0x29,
254     DW_OP_ge                = 0x2a,
255     DW_OP_gt                = 0x2b,
256     DW_OP_le                = 0x2c,
257     DW_OP_lt                = 0x2d,
258     DW_OP_ne                = 0x2e,
259     DW_OP_lit0              = 0x30,
260     DW_OP_lit1              = 0x31,
261     DW_OP_lit2              = 0x32,
262     DW_OP_lit3              = 0x33,
263     DW_OP_lit4              = 0x34,
264     DW_OP_lit5              = 0x35,
265     DW_OP_lit6              = 0x36,
266     DW_OP_lit7              = 0x37,
267     DW_OP_lit8              = 0x38,
268     DW_OP_lit9              = 0x39,
269     DW_OP_lit10             = 0x3a,
270     DW_OP_lit11             = 0x3b,
271     DW_OP_lit12             = 0x3c,
272     DW_OP_lit13             = 0x3d,
273     DW_OP_lit14             = 0x3e,
274     DW_OP_lit15             = 0x3f,
275     DW_OP_lit16             = 0x40,
276     DW_OP_lit17             = 0x41,
277     DW_OP_lit18             = 0x42,
278     DW_OP_lit19             = 0x43,
279     DW_OP_lit20             = 0x44,
280     DW_OP_lit21             = 0x45,
281     DW_OP_lit22             = 0x46,
282     DW_OP_lit23             = 0x47,
283     DW_OP_lit24             = 0x48,
284     DW_OP_lit25             = 0x49,
285     DW_OP_lit26             = 0x4a,
286     DW_OP_lit27             = 0x4b,
287     DW_OP_lit28             = 0x4c,
288     DW_OP_lit29             = 0x4d,
289     DW_OP_lit30             = 0x4e,
290     DW_OP_lit31             = 0x4f,
291     DW_OP_reg0              = 0x50,
292     DW_OP_reg1              = 0x51,
293     DW_OP_reg2              = 0x52,
294     DW_OP_reg3              = 0x53,
295     DW_OP_reg4              = 0x54,
296     DW_OP_reg5              = 0x55,
297     DW_OP_reg6              = 0x56,
298     DW_OP_reg7              = 0x57,
299     DW_OP_reg8              = 0x58,
300     DW_OP_reg9              = 0x59,
301     DW_OP_reg10             = 0x5a,
302     DW_OP_reg11             = 0x5b,
303     DW_OP_reg12             = 0x5c,
304     DW_OP_reg13             = 0x5d,
305     DW_OP_reg14             = 0x5e,
306     DW_OP_reg15             = 0x5f,
307     DW_OP_reg16             = 0x60,
308     DW_OP_reg17             = 0x61,
309     DW_OP_reg18             = 0x62,
310     DW_OP_reg19             = 0x63,
311     DW_OP_reg20             = 0x64,
312     DW_OP_reg21             = 0x65,
313     DW_OP_reg22             = 0x66,
314     DW_OP_reg23             = 0x67,
315     DW_OP_reg24             = 0x68,
316     DW_OP_reg25             = 0x69,
317     DW_OP_reg26             = 0x6a,
318     DW_OP_reg27             = 0x6b,
319     DW_OP_reg28             = 0x6c,
320     DW_OP_reg29             = 0x6d,
321     DW_OP_reg30             = 0x6e,
322     DW_OP_reg31             = 0x6f,
323     DW_OP_breg0             = 0x70,
324     DW_OP_breg1             = 0x71,
325     DW_OP_breg2             = 0x72,
326     DW_OP_breg3             = 0x73,
327     DW_OP_breg4             = 0x74,
328     DW_OP_breg5             = 0x75,
329     DW_OP_breg6             = 0x76,
330     DW_OP_breg7             = 0x77,
331     DW_OP_breg8             = 0x78,
332     DW_OP_breg9             = 0x79,
333     DW_OP_breg10            = 0x7a,
334     DW_OP_breg11            = 0x7b,
335     DW_OP_breg12            = 0x7c,
336     DW_OP_breg13            = 0x7d,
337     DW_OP_breg14            = 0x7e,
338     DW_OP_breg15            = 0x7f,
339     DW_OP_breg16            = 0x80,
340     DW_OP_breg17            = 0x81,
341     DW_OP_breg18            = 0x82,
342     DW_OP_breg19            = 0x83,
343     DW_OP_breg20            = 0x84,
344     DW_OP_breg21            = 0x85,
345     DW_OP_breg22            = 0x86,
346     DW_OP_breg23            = 0x87,
347     DW_OP_breg24            = 0x88,
348     DW_OP_breg25            = 0x89,
349     DW_OP_breg26            = 0x8a,
350     DW_OP_breg27            = 0x8b,
351     DW_OP_breg28            = 0x8c,
352     DW_OP_breg29            = 0x8d,
353     DW_OP_breg30            = 0x8e,
354     DW_OP_breg31            = 0x8f,
355     DW_OP_regx              = 0x90,
356     DW_OP_fbreg             = 0x91,
357     DW_OP_bregx             = 0x92,
358     DW_OP_piece             = 0x93,
359     DW_OP_deref_size        = 0x94,
360     DW_OP_xderef_size       = 0x95,
361     DW_OP_nop               = 0x96,
362     DW_OP_push_object_address = 0x97,
363     DW_OP_call2             = 0x98,
364     DW_OP_call4             = 0x99,
365     DW_OP_call_ref          = 0x9a,
366     DW_OP_form_tls_address  = 0x9b,
367     DW_OP_call_frame_cfa    = 0x9c,
368     DW_OP_bit_piece         = 0x9d,
369     DW_OP_implicit_value    = 0x9e, /* since v4 */
370     DW_OP_stack_value       = 0x9f,
371 
372     DW_OP_lo_user           = 0xe0,
373     DW_OP_hi_user           = 0xff,
374 };
375 
376 /* DW_AT_encoding */
377 enum dwarf_base_type_attribute_encoding {
378     DW_ATE_address          = 0x01,
379     DW_ATE_boolean          = 0x02,
380     DW_ATE_complex_float    = 0x03,
381     DW_ATE_float            = 0x04,
382     DW_ATE_signed           = 0x05,
383     DW_ATE_signed_char      = 0x06,
384     DW_ATE_unsigned         = 0x07,
385     DW_ATE_unsigned_char    = 0x08,
386     DW_ATE_imaginary_float  = 0x09,
387     DW_ATE_packed_decimal   = 0x0a,
388     DW_ATE_numeric_string   = 0x0b,
389     DW_ATE_edited           = 0x0c,
390     DW_ATE_signed_fixed     = 0x0d,
391     DW_ATE_unsigned_fixed   = 0x0e,
392     DW_ATE_decimal_float    = 0x0f,
393     DW_ATE_UTF              = 0x10, /* since v4 */
394 
395     DW_ATE_lo_user          = 0x80,
396     DW_ATE_hi_user          = 0xff,
397 };
398 
399 /* DW_AT_decimal_sign */
400 enum dwarf_decimal_sign {
401     DW_DS_unsigned              = 0x01,
402     DW_DS_leading_overpunch     = 0x02,
403     DW_DS_trailing_overpunch    = 0x03,
404     DW_DS_leading_separate      = 0x04,
405     DW_DS_trailing_separate     = 0x05,
406 };
407 
408 /* DW_AT_endianity */
409 enum dwarf_endianity {
410     DW_END_default  = 0x00,
411     DW_END_big      = 0x01,
412     DW_END_little   = 0x02,
413 
414     DW_END_lo_user  = 0x40,
415     DW_END_hi_user  = 0xff,
416 };
417 
418 /* DW_AT_accessibility */
419 enum dwarf_accessibility {
420     DW_ACCESS_public        = 0x01,
421     DW_ACCESS_protected     = 0x02,
422     DW_ACCESS_private       = 0x03,
423 };
424 
425 /* DW_AT_visibility */
426 enum dwarf_visibility {
427     DW_VIS_local            = 0x01,
428     DW_VIS_exported         = 0x02,
429     DW_VIS_qualified        = 0x03,
430 };
431 
432 /* DW_AT_virtuality */
433 enum dwarf_virtuality {
434     DW_VIRTUALITY_none          = 0x00,
435     DW_VIRTUALITY_virtual       = 0x01,
436     DW_VIRTUALITY_pure_virtual  = 0x02,
437 };
438 
439 /* DW_AT_language */
440 enum dwarf_language {
441     DW_LANG_C89             = 0x0001,
442     DW_LANG_C               = 0x0002,
443     DW_LANG_Ada83           = 0x0003,
444     DW_LANG_C_plus_plus     = 0x0004,
445     DW_LANG_Cobol74         = 0x0005,
446     DW_LANG_Cobol85         = 0x0006,
447     DW_LANG_Fortran77       = 0x0007,
448     DW_LANG_Fortran90       = 0x0008,
449     DW_LANG_Pascal83        = 0x0009,
450     DW_LANG_Modula2         = 0x000a,
451     DW_LANG_Java            = 0x000b,
452     DW_LANG_C99             = 0x000c,
453     DW_LANG_Ada95           = 0x000d,
454     DW_LANG_Fortran95       = 0x000e,
455     DW_LANG_PLI             = 0x000f,
456     DW_LANG_ObjC            = 0x0010,
457     DW_LANG_ObjC_plus_plus  = 0x0011,
458     DW_LANG_UPC             = 0x0012,
459     DW_LANG_D               = 0x0013,
460     DW_LANG_Phyton          = 0x0014, /* since v4 */
461 
462     DW_LANG_lo_user         = 0x8000,
463     DW_LANG_hi_user         = 0xffff,
464 };
465 
466 /* DW_AT_identifier_case */
467 enum dwarf_identifier_case {
468     DW_ID_case_sensitive    = 0x00,
469     DW_ID_up_case           = 0x01,
470     DW_ID_down_case         = 0x02,
471     DW_ID_case_insensitive  = 0x03,
472 };
473 
474 /* DW_AT_calling_convention */
475 enum dwarf_calling_convention {
476     DW_CC_normal    = 0x01,
477     DW_CC_program   = 0x02,
478     DW_CC_nocall    = 0x03,
479 
480     DW_CC_lo_user   = 0x40,
481     DW_CC_hi_user   = 0xff,
482 };
483 
484 /* DW_AT_inline */
485 enum dwarf_inline {
486     DW_INL_not_inlined          = 0x00,
487     DW_INL_inlined              = 0x01,
488     DW_INL_declared_not_inlined = 0x02,
489     DW_INL_declared_inlined     = 0x03,
490 };
491 
492 /* DW_AT_ordering */
493 enum dwarf_array_ordering {
494     DW_ORD_row_major = 0x00,
495     DW_ORD_col_major = 0x01,
496 };
497 
498 /* DW_AT_discr_list */
499 enum dwarf_discriminant {
500     DW_DSC_label = 0x00,
501     DW_DSC_range = 0x01,
502 };
503 
504 /* line number information standard opcodes (7.21) */
505 enum dwarf_line_number_standard {
506     DW_LNS_copy             = 0x01,
507     DW_LNS_advance_pc       = 0x02,
508     DW_LNS_advance_line     = 0x03,
509     DW_LNS_set_file         = 0x04,
510     DW_LNS_set_column       = 0x05,
511     DW_LNS_negate_stmt      = 0x06,
512     DW_LNS_set_basic_block  = 0x07,
513     DW_LNS_const_add_pc     = 0x08,
514     DW_LNS_fixed_advance_pc = 0x09,
515     DW_LNS_set_prologue_end = 0x0a,
516     DW_LNS_set_epilogue_begin = 0x0b,
517     DW_LNS_set_isa          = 0x0c,
518 };
519 
520 /* line number information extended opcodes (7.21) */
521 enum dwarf_line_number_extended {
522     DW_LNE_end_sequence     = 0x01,
523     DW_LNE_set_address      = 0x02,
524     DW_LNE_define_file      = 0x03,
525     DW_LNE_set_discriminator = 0x04, /* since v4 */
526     DW_LNE_lo_user          = 0x80,
527     DW_LNE_hi_user          = 0xff,
528 };
529 
530 enum dwarf_macinfo_type {
531     DW_MACINFO_define       = 0x01,
532     DW_MACINFO_undef        = 0x02,
533     DW_MACINFO_start_file   = 0x03,
534     DW_MACINFO_end_file     = 0x04,
535     DW_MACINFO_vendor_ext   = 0xff,
536 };
537 
538 enum dwarf_call_frame {
539     DW_CFA_advance_loc          = 0x01,
540     DW_CFA_offset               = 0x02,
541     DW_CFA_restore              = 0x03,
542     DW_CFA_nop                  = 0x00,
543     DW_CFA_set_loc              = 0x01,
544     DW_CFA_advance_loc1         = 0x02,
545     DW_CFA_advance_loc2         = 0x03,
546     DW_CFA_advance_loc4         = 0x04,
547     DW_CFA_offset_extended      = 0x05,
548     DW_CFA_restore_extended     = 0x06,
549     DW_CFA_undefined            = 0x07,
550     DW_CFA_same_value           = 0x08,
551     DW_CFA_register             = 0x09,
552     DW_CFA_remember_state       = 0x0a,
553     DW_CFA_restore_state        = 0x0b,
554     DW_CFA_def_cfa              = 0x0c,
555     DW_CFA_def_cfa_register     = 0x0d,
556     DW_CFA_def_cfa_offset       = 0x0e,
557     DW_CFA_def_cfa_expression   = 0x0f,
558     DW_CFA_expression           = 0x10,
559     DW_CFA_offset_extended_sf   = 0x11,
560     DW_CFA_def_cfa_sf           = 0x12,
561     DW_CFA_def_cfa_offset_sf    = 0x13,
562     DW_CFA_val_offset           = 0x14,
563     DW_CFA_val_offset_sf        = 0x15,
564     DW_CFA_val_expression       = 0x16,
565     DW_CFA_lo_user              = 0x1c,
566     DW_CFA_hi_user              = 0x3f,
567 };
568 
569 /* LEB128 - encoded (signed and unsigned) integers:
570  * a stream of bytes, with bit 7 set, last byte has bit 7 cleared.
571  * i =    0 -     7f -> b0 = i
572  * i =   80 -   3fff -> b0 = 0x80 | i[0-6], b1 = i[7-13]
573  * i = 4000 - 1fffff -> b0 = 0x80 | i[0-6], b1 = 0x80 | i[7-13], b2 = i[14-20]
574  */
575 
576 /* header for compilation unit */
577 
578 struct dwarf_compilation_unit_header32 {
579     uint_32 unit_length;
580     uint_16 version;
581     uint_32 debug_abbrev_offset;
582     uint_8  address_size;
583 };
584 
585 /* header for type unit */
586 
587 struct dwarf_type_unit_header32 {
588     uint_32 unit_length;
589     uint_16 version;
590     uint_32 debug_abbrev_offset;
591     uint_8  address_size;
592     uint_64 type_signature;
593     uint_32 type_offset;
594 };
595 
596 #if 0
597 
598 struct dwarf_stmt_prologue {
599     uint_32 total_length;
600     uint_16 version;
601     uint_32 prologue_length;
602     uint_8  minimum_instruction_length;
603     uint_8  default_is_stmt;
604     int_8   line_base;
605     uint_8  line_range;
606     uint_8  opcode_base;
607     uint_8  standard_opcode_lengths[DWLINE_OPCODE_BASE - 1];
608 };
609 
610 struct dwarf_segmented_arange_tuple {
611     uint_32 offset;
612     uint_16 segment;
613     uint_32 length;
614 };
615 
616 struct dwarf_flat_arange_tuple {
617     uint_32 offset;
618     uint_32 length;
619 };
620 
621 union dwarf_arange_tuple {
622     struct segmented_arange_tuple  s;
623     struct flat_arange_tuple       f;
624 };
625 
626 struct dwarf_arange_prologue {
627     uint_32 length;
628     uint_16 version;
629     uint_32 debug_offset;
630     uint_8  offset_size;
631     uint_8  segment_size;
632 };
633 
634 struct dwarf_pubnames_prologue {
635     uint_32 length;
636     uint_16 version;
637     uint_32 debug_offset;
638     uint_32 debug_size;
639 };
640 #endif
641 
642 #endif
643