• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2014 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  #ifndef ART_COMPILER_DEBUG_DWARF_DWARF_CONSTANTS_H_
18  #define ART_COMPILER_DEBUG_DWARF_DWARF_CONSTANTS_H_
19  
20  namespace art {
21  namespace dwarf {
22  
23  // Based on the Dwarf 4 specification at dwarfstd.com and issues marked
24  // for inclusion in Dwarf 5 on same. Values not specified in the Dwarf 4
25  // standard might change or be removed in the future and may be different
26  // than the values used currently by other implementations for the same trait,
27  // use at your own risk.
28  
29  enum Tag {
30    DW_TAG_array_type = 0x01,
31    DW_TAG_class_type = 0x02,
32    DW_TAG_entry_point = 0x03,
33    DW_TAG_enumeration_type = 0x04,
34    DW_TAG_formal_parameter = 0x05,
35    DW_TAG_imported_declaration = 0x08,
36    DW_TAG_label = 0x0a,
37    DW_TAG_lexical_block = 0x0b,
38    DW_TAG_member = 0x0d,
39    DW_TAG_pointer_type = 0x0f,
40    DW_TAG_reference_type = 0x10,
41    DW_TAG_compile_unit = 0x11,
42    DW_TAG_string_type = 0x12,
43    DW_TAG_structure_type = 0x13,
44    DW_TAG_subroutine_type = 0x15,
45    DW_TAG_typedef = 0x16,
46    DW_TAG_union_type = 0x17,
47    DW_TAG_unspecified_parameters = 0x18,
48    DW_TAG_variant = 0x19,
49    DW_TAG_common_block = 0x1a,
50    DW_TAG_common_inclusion = 0x1b,
51    DW_TAG_inheritance = 0x1c,
52    DW_TAG_inlined_subroutine = 0x1d,
53    DW_TAG_module = 0x1e,
54    DW_TAG_ptr_to_member_type = 0x1f,
55    DW_TAG_set_type = 0x20,
56    DW_TAG_subrange_type = 0x21,
57    DW_TAG_with_stmt = 0x22,
58    DW_TAG_access_declaration = 0x23,
59    DW_TAG_base_type = 0x24,
60    DW_TAG_catch_block = 0x25,
61    DW_TAG_const_type = 0x26,
62    DW_TAG_constant = 0x27,
63    DW_TAG_enumerator = 0x28,
64    DW_TAG_file_type = 0x29,
65    DW_TAG_friend = 0x2a,
66    DW_TAG_namelist = 0x2b,
67    DW_TAG_namelist_item = 0x2c,
68    DW_TAG_packed_type = 0x2d,
69    DW_TAG_subprogram = 0x2e,
70    DW_TAG_template_type_parameter = 0x2f,
71    DW_TAG_template_value_parameter = 0x30,
72    DW_TAG_thrown_type = 0x31,
73    DW_TAG_try_block = 0x32,
74    DW_TAG_variant_part = 0x33,
75    DW_TAG_variable = 0x34,
76    DW_TAG_volatile_type = 0x35,
77    DW_TAG_dwarf_procedure = 0x36,
78    DW_TAG_restrict_type = 0x37,
79    DW_TAG_interface_type = 0x38,
80    DW_TAG_namespace = 0x39,
81    DW_TAG_imported_module = 0x3a,
82    DW_TAG_unspecified_type = 0x3b,
83    DW_TAG_partial_unit = 0x3c,
84    DW_TAG_imported_unit = 0x3d,
85    DW_TAG_condition = 0x3f,
86    DW_TAG_shared_type = 0x40,
87    DW_TAG_type_unit = 0x41,
88    DW_TAG_rvalue_reference_type = 0x42,
89    DW_TAG_template_alias = 0x43,
90  #ifdef INCLUDE_DWARF5_VALUES
91    // Values to be added in Dwarf 5. Final value not yet specified. Values listed
92    // may be different than other implementations. Use with caution.
93    // TODO Update these values when Dwarf 5 is released.
94    DW_TAG_coarray_type = 0x44,
95    DW_TAG_call_site = 0x45,
96    DW_TAG_call_site_parameter = 0x46,
97    DW_TAG_generic_subrange = 0x47,
98    DW_TAG_atomic_type = 0x48,
99    DW_TAG_dynamic_type = 0x49,
100    DW_TAG_aligned_type = 0x50,
101  #endif
102    DW_TAG_lo_user = 0x4080,
103    DW_TAG_hi_user = 0xffff
104  };
105  
106  enum Children : uint8_t {
107    DW_CHILDREN_no = 0x00,
108    DW_CHILDREN_yes = 0x01
109  };
110  
111  enum Attribute {
112    DW_AT_sibling = 0x01,
113    DW_AT_location = 0x02,
114    DW_AT_name = 0x03,
115    DW_AT_ordering = 0x09,
116    DW_AT_byte_size = 0x0b,
117    DW_AT_bit_offset = 0x0c,
118    DW_AT_bit_size = 0x0d,
119    DW_AT_stmt_list = 0x10,
120    DW_AT_low_pc = 0x11,
121    DW_AT_high_pc = 0x12,
122    DW_AT_language = 0x13,
123    DW_AT_discr = 0x15,
124    DW_AT_discr_value = 0x16,
125    DW_AT_visibility = 0x17,
126    DW_AT_import = 0x18,
127    DW_AT_string_length = 0x19,
128    DW_AT_common_reference = 0x1a,
129    DW_AT_comp_dir = 0x1b,
130    DW_AT_const_value = 0x1c,
131    DW_AT_containing_type = 0x1d,
132    DW_AT_default_value = 0x1e,
133    DW_AT_inline = 0x20,
134    DW_AT_is_optional = 0x21,
135    DW_AT_lower_bound = 0x22,
136    DW_AT_producer = 0x25,
137    DW_AT_prototyped = 0x27,
138    DW_AT_return_addr = 0x2a,
139    DW_AT_start_scope = 0x2c,
140    DW_AT_bit_stride = 0x2e,
141    DW_AT_upper_bound = 0x2f,
142    DW_AT_abstract_origin = 0x31,
143    DW_AT_accessibility = 0x32,
144    DW_AT_address_class = 0x33,
145    DW_AT_artificial = 0x34,
146    DW_AT_base_types = 0x35,
147    DW_AT_calling_convention = 0x36,
148    DW_AT_count = 0x37,
149    DW_AT_data_member_location = 0x38,
150    DW_AT_decl_column = 0x39,
151    DW_AT_decl_file = 0x3a,
152    DW_AT_decl_line = 0x3b,
153    DW_AT_declaration = 0x3c,
154    DW_AT_discr_list = 0x3d,
155    DW_AT_encoding = 0x3e,
156    DW_AT_external = 0x3f,
157    DW_AT_frame_base = 0x40,
158    DW_AT_friend = 0x41,
159    DW_AT_identifier_case = 0x42,
160    DW_AT_macro_info = 0x43,
161    DW_AT_namelist_item = 0x44,
162    DW_AT_priority = 0x45,
163    DW_AT_segment = 0x46,
164    DW_AT_specification = 0x47,
165    DW_AT_static_link = 0x48,
166    DW_AT_type = 0x49,
167    DW_AT_use_location = 0x4a,
168    DW_AT_variable_parameter = 0x4b,
169    DW_AT_virtuality = 0x4c,
170    DW_AT_vtable_elem_location = 0x4d,
171    DW_AT_allocated = 0x4e,
172    DW_AT_associated = 0x4f,
173    DW_AT_data_location = 0x50,
174    DW_AT_byte_stride = 0x51,
175    DW_AT_entry_pc = 0x52,
176    DW_AT_use_UTF8 = 0x53,
177    DW_AT_extension = 0x54,
178    DW_AT_ranges = 0x55,
179    DW_AT_trampoline = 0x56,
180    DW_AT_call_column = 0x57,
181    DW_AT_call_file = 0x58,
182    DW_AT_call_line = 0x59,
183    DW_AT_description = 0x5a,
184    DW_AT_binary_scale = 0x5b,
185    DW_AT_decimal_scale = 0x5c,
186    DW_AT_small = 0x5d,
187    DW_AT_decimal_sign = 0x5e,
188    DW_AT_digit_count = 0x5f,
189    DW_AT_picture_string = 0x60,
190    DW_AT_mutable = 0x61,
191    DW_AT_threads_scaled = 0x62,
192    DW_AT_explicit = 0x63,
193    DW_AT_object_pointer = 0x64,
194    DW_AT_endianity = 0x65,
195    DW_AT_elemental = 0x66,
196    DW_AT_pure = 0x67,
197    DW_AT_recursive = 0x68,
198    DW_AT_signature = 0x69,
199    DW_AT_main_subprogram = 0x6a,
200    DW_AT_data_bit_offset = 0x6b,
201    DW_AT_const_expr = 0x6c,
202    DW_AT_enum_class = 0x6d,
203    DW_AT_linkage_name = 0x6e,
204  #ifdef INCLUDE_DWARF5_VALUES
205    // Values to be added in Dwarf 5. Final value not yet specified. Values listed
206    // may be different than other implementations. Use with caution.
207    // TODO Update these values when Dwarf 5 is released.
208    DW_AT_call_site_value = 0x6f,
209    DW_AT_call_site_data_value = 0x70,
210    DW_AT_call_site_target = 0x71,
211    DW_AT_call_site_target_clobbered = 0x72,
212    DW_AT_tail_call = 0x73,
213    DW_AT_all_tail_call_sites = 0x74,
214    DW_AT_all_call_sites = 0x75,
215    DW_AT_all_source_call_sites = 0x76,
216    DW_AT_call_site_parameter = 0x77,
217    DW_AT_tail_call = 0x78,
218    DW_AT_all_tail_call_sites = 0x79,
219    DW_AT_all_call_sites = 0x7a,
220    DW_AT_all_source_call_sites = 0x7b,
221    DW_AT_rank = 0x7c,
222    DW_AT_string_bitsize = 0x7d,
223    DW_AT_string_byte_size = 0x7e,
224    DW_AT_reference = 0x7f,
225    DW_AT_rvalue_reference = 0x80,
226    DW_AT_noreturn = 0x81,
227    DW_AT_alignment = 0x82,
228  #endif
229    DW_AT_lo_user = 0x2000,
230    DW_AT_hi_user = 0xffff
231  };
232  
233  enum Form : uint8_t {
234    DW_FORM_addr = 0x01,
235    DW_FORM_block2 = 0x03,
236    DW_FORM_block4 = 0x04,
237    DW_FORM_data2 = 0x05,
238    DW_FORM_data4 = 0x06,
239    DW_FORM_data8 = 0x07,
240    DW_FORM_string = 0x08,
241    DW_FORM_block = 0x09,
242    DW_FORM_block1 = 0x0a,
243    DW_FORM_data1 = 0x0b,
244    DW_FORM_flag = 0x0c,
245    DW_FORM_sdata = 0x0d,
246    DW_FORM_strp = 0x0e,
247    DW_FORM_udata = 0x0f,
248    DW_FORM_ref_addr = 0x10,
249    DW_FORM_ref1 = 0x11,
250    DW_FORM_ref2 = 0x12,
251    DW_FORM_ref4 = 0x13,
252    DW_FORM_ref8 = 0x14,
253    DW_FORM_ref_udata = 0x15,
254    DW_FORM_indirect = 0x16,
255    DW_FORM_sec_offset = 0x17,
256    DW_FORM_exprloc = 0x18,
257    DW_FORM_flag_present = 0x19,
258    DW_FORM_ref_sig8 = 0x20
259  };
260  
261  enum Operation : uint16_t {
262    DW_OP_addr = 0x03,
263    DW_OP_deref = 0x06,
264    DW_OP_const1u = 0x08,
265    DW_OP_const1s = 0x09,
266    DW_OP_const2u = 0x0a,
267    DW_OP_const2s = 0x0b,
268    DW_OP_const4u = 0x0c,
269    DW_OP_const4s = 0x0d,
270    DW_OP_const8u = 0x0e,
271    DW_OP_const8s = 0x0f,
272    DW_OP_constu = 0x10,
273    DW_OP_consts = 0x11,
274    DW_OP_dup = 0x12,
275    DW_OP_drop = 0x13,
276    DW_OP_over = 0x14,
277    DW_OP_pick = 0x15,
278    DW_OP_swap = 0x16,
279    DW_OP_rot = 0x17,
280    DW_OP_xderef = 0x18,
281    DW_OP_abs = 0x19,
282    DW_OP_and = 0x1a,
283    DW_OP_div = 0x1b,
284    DW_OP_minus = 0x1c,
285    DW_OP_mod = 0x1d,
286    DW_OP_mul = 0x1e,
287    DW_OP_neg = 0x1f,
288    DW_OP_not = 0x20,
289    DW_OP_or = 0x21,
290    DW_OP_plus = 0x22,
291    DW_OP_plus_uconst = 0x23,
292    DW_OP_shl = 0x24,
293    DW_OP_shr = 0x25,
294    DW_OP_shra = 0x26,
295    DW_OP_xor = 0x27,
296    DW_OP_skip = 0x2f,
297    DW_OP_bra = 0x28,
298    DW_OP_eq = 0x29,
299    DW_OP_ge = 0x2a,
300    DW_OP_gt = 0x2b,
301    DW_OP_le = 0x2c,
302    DW_OP_lt = 0x2d,
303    DW_OP_ne = 0x2e,
304    DW_OP_lit0 = 0x30,
305    DW_OP_lit1 = 0x31,
306    DW_OP_lit2 = 0x32,
307    DW_OP_lit3 = 0x33,
308    DW_OP_lit4 = 0x34,
309    DW_OP_lit5 = 0x35,
310    DW_OP_lit6 = 0x36,
311    DW_OP_lit7 = 0x37,
312    DW_OP_lit8 = 0x38,
313    DW_OP_lit9 = 0x39,
314    DW_OP_lit10 = 0x3a,
315    DW_OP_lit11 = 0x3b,
316    DW_OP_lit12 = 0x3c,
317    DW_OP_lit13 = 0x3d,
318    DW_OP_lit14 = 0x3e,
319    DW_OP_lit15 = 0x3f,
320    DW_OP_lit16 = 0x40,
321    DW_OP_lit17 = 0x41,
322    DW_OP_lit18 = 0x42,
323    DW_OP_lit19 = 0x43,
324    DW_OP_lit20 = 0x44,
325    DW_OP_lit21 = 0x45,
326    DW_OP_lit22 = 0x46,
327    DW_OP_lit23 = 0x47,
328    DW_OP_lit24 = 0x48,
329    DW_OP_lit25 = 0x49,
330    DW_OP_lit26 = 0x4a,
331    DW_OP_lit27 = 0x4b,
332    DW_OP_lit28 = 0x4c,
333    DW_OP_lit29 = 0x4d,
334    DW_OP_lit30 = 0x4e,
335    DW_OP_lit31 = 0x4f,
336    DW_OP_reg0 = 0x50,
337    DW_OP_reg1 = 0x51,
338    DW_OP_reg2 = 0x52,
339    DW_OP_reg3 = 0x53,
340    DW_OP_reg4 = 0x54,
341    DW_OP_reg5 = 0x55,
342    DW_OP_reg6 = 0x56,
343    DW_OP_reg7 = 0x57,
344    DW_OP_reg8 = 0x58,
345    DW_OP_reg9 = 0x59,
346    DW_OP_reg10 = 0x5a,
347    DW_OP_reg11 = 0x5b,
348    DW_OP_reg12 = 0x5c,
349    DW_OP_reg13 = 0x5d,
350    DW_OP_reg14 = 0x5e,
351    DW_OP_reg15 = 0x5f,
352    DW_OP_reg16 = 0x60,
353    DW_OP_reg17 = 0x61,
354    DW_OP_reg18 = 0x62,
355    DW_OP_reg19 = 0x63,
356    DW_OP_reg20 = 0x64,
357    DW_OP_reg21 = 0x65,
358    DW_OP_reg22 = 0x66,
359    DW_OP_reg23 = 0x67,
360    DW_OP_reg24 = 0x68,
361    DW_OP_reg25 = 0x69,
362    DW_OP_reg26 = 0x6a,
363    DW_OP_reg27 = 0x6b,
364    DW_OP_reg28 = 0x6c,
365    DW_OP_reg29 = 0x6d,
366    DW_OP_reg30 = 0x6e,
367    DW_OP_reg31 = 0x6f,
368    DW_OP_breg0 = 0x70,
369    DW_OP_breg1 = 0x71,
370    DW_OP_breg2 = 0x72,
371    DW_OP_breg3 = 0x73,
372    DW_OP_breg4 = 0x74,
373    DW_OP_breg5 = 0x75,
374    DW_OP_breg6 = 0x76,
375    DW_OP_breg7 = 0x77,
376    DW_OP_breg8 = 0x78,
377    DW_OP_breg9 = 0x79,
378    DW_OP_breg10 = 0x7a,
379    DW_OP_breg11 = 0x7b,
380    DW_OP_breg12 = 0x7c,
381    DW_OP_breg13 = 0x7d,
382    DW_OP_breg14 = 0x7e,
383    DW_OP_breg15 = 0x7f,
384    DW_OP_breg16 = 0x80,
385    DW_OP_breg17 = 0x81,
386    DW_OP_breg18 = 0x82,
387    DW_OP_breg19 = 0x83,
388    DW_OP_breg20 = 0x84,
389    DW_OP_breg21 = 0x85,
390    DW_OP_breg22 = 0x86,
391    DW_OP_breg23 = 0x87,
392    DW_OP_breg24 = 0x88,
393    DW_OP_breg25 = 0x89,
394    DW_OP_breg26 = 0x8a,
395    DW_OP_breg27 = 0x8b,
396    DW_OP_breg28 = 0x8c,
397    DW_OP_breg29 = 0x8d,
398    DW_OP_breg30 = 0x8e,
399    DW_OP_breg31 = 0x8f,
400    DW_OP_regx = 0x90,
401    DW_OP_fbreg = 0x91,
402    DW_OP_bregx = 0x92,
403    DW_OP_piece = 0x93,
404    DW_OP_deref_size = 0x94,
405    DW_OP_xderef_size = 0x95,
406    DW_OP_nop = 0x96,
407    DW_OP_push_object_address = 0x97,
408    DW_OP_call2 = 0x98,
409    DW_OP_call4 = 0x99,
410    DW_OP_call_ref = 0x9a,
411    DW_OP_form_tls_address = 0x9b,
412    DW_OP_call_frame_cfa = 0x9c,
413    DW_OP_bit_piece = 0x9d,
414    DW_OP_implicit_value = 0x9e,
415    DW_OP_stack_value = 0x9f,
416  #ifdef INCLUDE_DWARF5_VALUES
417    // Values to be added in Dwarf 5. Final value not yet specified. Values listed
418    // may be different than other implementations. Use with caution.
419    // TODO Update these values when Dwarf 5 is released.
420    DW_OP_entry_value = 0xa0,
421    DW_OP_const_type = 0xa1,
422    DW_OP_regval_type = 0xa2,
423    DW_OP_deref_type = 0xa3,
424    DW_OP_xderef_type = 0xa4,
425    DW_OP_convert = 0xa5,
426    DW_OP_reinterpret = 0xa6,
427  #endif
428    DW_OP_lo_user = 0xe0,
429    DW_OP_hi_user = 0xff
430  };
431  
432  enum BaseTypeEncoding : uint8_t {
433    DW_ATE_address = 0x01,
434    DW_ATE_boolean = 0x02,
435    DW_ATE_complex_float = 0x03,
436    DW_ATE_float = 0x04,
437    DW_ATE_signed = 0x05,
438    DW_ATE_signed_char = 0x06,
439    DW_ATE_unsigned = 0x07,
440    DW_ATE_unsigned_char = 0x08,
441    DW_ATE_imaginary_float = 0x09,
442    DW_ATE_packed_decimal = 0x0a,
443    DW_ATE_numeric_string = 0x0b,
444    DW_ATE_edited = 0x0c,
445    DW_ATE_signed_fixed = 0x0d,
446    DW_ATE_unsigned_fixed = 0x0e,
447    DW_ATE_decimal_float = 0x0f,
448    DW_ATE_UTF = 0x10,
449    DW_ATE_lo_user = 0x80,
450    DW_ATE_hi_user = 0xff
451  };
452  
453  enum DecimalSign : uint8_t {
454    DW_DS_unsigned = 0x01,
455    DW_DS_leading_overpunch = 0x02,
456    DW_DS_trailing_overpunch = 0x03,
457    DW_DS_leading_separate = 0x04,
458    DW_DS_trailing_separate = 0x05
459  };
460  
461  enum Endianity : uint8_t {
462    DW_END_default = 0x00,
463    DW_END_big = 0x01,
464    DW_END_little = 0x02,
465    DW_END_lo_user = 0x40,
466    DW_END_hi_user = 0xff
467  };
468  
469  enum Accessibility : uint8_t {
470    DW_ACCESS_public = 0x01,
471    DW_ACCESS_protected = 0x02,
472    DW_ACCESS_private = 0x03
473  };
474  
475  enum Visibility : uint8_t {
476    DW_VIS_local = 0x01,
477    DW_VIS_exported = 0x02,
478    DW_VIS_qualified = 0x03
479  };
480  
481  enum Virtuality : uint8_t {
482    DW_VIRTUALITY_none = 0x00,
483    DW_VIRTUALITY_virtual = 0x01,
484    DW_VIRTUALITY_pure_virtual = 0x02
485  };
486  
487  enum Language {
488    DW_LANG_C89 = 0x01,
489    DW_LANG_C = 0x02,
490    DW_LANG_Ada83 = 0x03,
491    DW_LANG_C_plus_plus = 0x04,
492    DW_LANG_Cobol74 = 0x05,
493    DW_LANG_Cobol85 = 0x06,
494    DW_LANG_Fortran77 = 0x07,
495    DW_LANG_Fortran90 = 0x08,
496    DW_LANG_Pascal83 = 0x09,
497    DW_LANG_Modula2 = 0x0a,
498    DW_LANG_Java = 0x0b,
499    DW_LANG_C99 = 0x0c,
500    DW_LANG_Ada95 = 0x0d,
501    DW_LANG_Fortran95 = 0x0e,
502    DW_LANG_PLI = 0x0f,
503    DW_LANG_ObjC = 0x10,
504    DW_LANG_ObjC_plus_plus = 0x11,
505    DW_LANG_UPC = 0x12,
506    DW_LANG_D = 0x13,
507    DW_LANG_Python = 0x14,
508  #ifdef INCLUDE_DWARF5_VALUES
509    // Values to be added in Dwarf 5. Final value not yet specified. Values listed
510    // may be different than other implementations. Use with caution.
511    // TODO Update these values when Dwarf 5 is released.
512    DW_LANG_OpenCL = 0x15,
513    DW_LANG_Go = 0x16,
514    DW_LANG_Modula3 = 0x17,
515    DW_LANG_Haskell = 0x18,
516    DW_LANG_C_plus_plus_03 = 0x19,
517    DW_LANG_C_plus_plus_11 = 0x1a,
518    DW_LANG_OCaml = 0x1b,
519    DW_LANG_Rust = 0x1c,
520    DW_LANG_C11 = 0x1d,
521    DW_LANG_Swift = 0x1e,
522    DW_LANG_Julia = 0x1f,
523  #endif
524    DW_LANG_lo_user = 0x8000,
525    DW_LANG_hi_user = 0xffff
526  };
527  
528  enum Identifier : uint8_t {
529    DW_ID_case_sensitive = 0x00,
530    DW_ID_up_case = 0x01,
531    DW_ID_down_case = 0x02,
532    DW_ID_case_insensitive = 0x03
533  };
534  
535  enum CallingConvention : uint8_t {
536    DW_CC_normal = 0x01,
537    DW_CC_program = 0x02,
538    DW_CC_nocall = 0x03,
539    DW_CC_lo_user = 0x40,
540    DW_CC_hi_user = 0xff
541  };
542  
543  enum Inline : uint8_t {
544    DW_INL_not_inlined = 0x00,
545    DW_INL_inlined = 0x01,
546    DW_INL_declared_not_inlined = 0x02,
547    DW_INL_declared_inlined = 0x03
548  };
549  
550  enum ArrayOrdering : uint8_t {
551    DW_ORD_row_major = 0x00,
552    DW_ORD_col_major = 0x01
553  };
554  
555  enum DiscriminantList : uint8_t {
556    DW_DSC_label = 0x00,
557    DW_DSC_range = 0x01
558  };
559  
560  enum LineNumberOpcode : uint8_t {
561    DW_LNS_copy = 0x01,
562    DW_LNS_advance_pc = 0x02,
563    DW_LNS_advance_line = 0x03,
564    DW_LNS_set_file = 0x04,
565    DW_LNS_set_column = 0x05,
566    DW_LNS_negate_stmt = 0x06,
567    DW_LNS_set_basic_block = 0x07,
568    DW_LNS_const_add_pc = 0x08,
569    DW_LNS_fixed_advance_pc = 0x09,
570    DW_LNS_set_prologue_end = 0x0a,
571    DW_LNS_set_epilogue_begin = 0x0b,
572    DW_LNS_set_isa = 0x0c
573  };
574  
575  enum LineNumberExtendedOpcode : uint8_t {
576    DW_LNE_end_sequence = 0x01,
577    DW_LNE_set_address = 0x02,
578    DW_LNE_define_file = 0x03,
579    DW_LNE_set_discriminator = 0x04,
580    DW_LNE_lo_user = 0x80,
581    DW_LNE_hi_user = 0xff
582  };
583  
584  #ifdef INCLUDE_DWARF5_VALUES
585  enum LineNumberFormat : uint8_t {
586    // Values to be added in Dwarf 5. Final value not yet specified. Values listed
587    // may be different than other implementations. Use with caution.
588    // TODO Update these values when Dwarf 5 is released.
589    //
590    DW_LNF_path = 0x1,
591    DW_LNF_include_index = 0x2,
592    DW_LNF_timestamp = 0x3,
593    DW_LNF_size = 0x4,
594    DW_LNF_MD5 = 0x5,
595    DW_LNF_lo_user = 0x2000,
596    DW_LNF_hi_user = 0x3fff
597  };
598  #endif
599  
600  enum MacroInfo : uint8_t {
601    DW_MACINFO_define = 0x01,
602    DW_MACINFO_undef = 0x02,
603    DW_MACINFO_start_file = 0x03,
604    DW_MACINFO_end_file = 0x04,
605    DW_MACINFO_vendor_ext = 0xff
606  };
607  
608  #ifdef INCLUDE_DWARF5_VALUES
609  enum Macro : uint8_t {
610    // Values to be added in Dwarf 5. Final value not yet specified. Values listed
611    // may be different than other implementations. Use with caution.
612    // TODO Update these values when Dwarf 5 is released.
613    DW_MACRO_define = 0x01,
614    DW_MACRO_undef = 0x02,
615    DW_MACRO_start_file = 0x03,
616    DW_MACRO_end_file = 0x04,
617    DW_MACRO_define_indirect = 0x05,
618    DW_MACRO_undef_indirect = 0x06,
619    DW_MACRO_transparent_include = 0x07,
620    DW_MACRO_define_indirectx = 0x0b,
621    DW_MACRO_undef_indirectx = 0x0c,
622    DW_MACRO_lo_user = 0xe0,
623    DW_MACRO_hi_user = 0xff
624  };
625  #endif
626  
627  const uint32_t CIE_ID_32 = 0xffffffff;
628  const uint64_t CIE_ID_64 = 0xffffffffffffffff;
629  
630  enum CallFrameInstruction : uint8_t {
631    DW_CFA_advance_loc = 0x40,
632    DW_CFA_offset = 0x80,
633    DW_CFA_restore = 0xc0,
634    DW_CFA_nop = 0x00,
635    DW_CFA_set_loc = 0x01,
636    DW_CFA_advance_loc1 = 0x02,
637    DW_CFA_advance_loc2 = 0x03,
638    DW_CFA_advance_loc4 = 0x04,
639    DW_CFA_offset_extended = 0x05,
640    DW_CFA_restore_extended = 0x06,
641    DW_CFA_undefined = 0x07,
642    DW_CFA_same_value = 0x08,
643    DW_CFA_register = 0x09,
644    DW_CFA_remember_state = 0x0a,
645    DW_CFA_restore_state = 0x0b,
646    DW_CFA_def_cfa = 0x0c,
647    DW_CFA_def_cfa_register = 0x0d,
648    DW_CFA_def_cfa_offset = 0x0e,
649    DW_CFA_def_cfa_expression = 0x0f,
650    DW_CFA_expression = 0x10,
651    DW_CFA_offset_extended_sf = 0x11,
652    DW_CFA_def_cfa_sf = 0x12,
653    DW_CFA_def_cfa_offset_sf = 0x13,
654    DW_CFA_val_offset = 0x14,
655    DW_CFA_val_offset_sf = 0x15,
656    DW_CFA_val_expression = 0x16,
657    DW_CFA_lo_user = 0x1c,
658    DW_CFA_hi_user = 0x3f
659  };
660  
661  enum ExceptionHeaderValueFormat : uint8_t  {
662    DW_EH_PE_native = 0x00,
663    DW_EH_PE_uleb128 = 0x01,
664    DW_EH_PE_udata2 = 0x02,
665    DW_EH_PE_udata4 = 0x03,
666    DW_EH_PE_udata8 = 0x04,
667    DW_EH_PE_sleb128 = 0x09,
668    DW_EH_PE_sdata2 = 0x0A,
669    DW_EH_PE_sdata4 = 0x0B,
670    DW_EH_PE_sdata8 = 0x0C,
671    DW_EH_PE_omit = 0xFF,
672  };
673  
674  enum ExceptionHeaderValueApplication : uint8_t {
675    DW_EH_PE_absptr = 0x00,
676    DW_EH_PE_pcrel = 0x10,
677    DW_EH_PE_textrel = 0x20,
678    DW_EH_PE_datarel = 0x30,
679    DW_EH_PE_funcrel = 0x40,
680    DW_EH_PE_aligned = 0x50,
681  };
682  
683  enum CFIFormat : uint8_t {
684    // This is the original format as defined by the specification.
685    // It is used for the .debug_frame section.
686    DW_DEBUG_FRAME_FORMAT,
687    // Slightly modified format used for the .eh_frame section.
688    DW_EH_FRAME_FORMAT
689  };
690  
691  }  // namespace dwarf
692  }  // namespace art
693  
694  #endif  // ART_COMPILER_DEBUG_DWARF_DWARF_CONSTANTS_H_
695