1/* This file defines standard DWARF types, structures, and macros.
2   Copyright (C) 2000-2011, 2014 Red Hat, Inc.
3   This file is part of elfutils.
4
5   This file is free software; you can redistribute it and/or modify
6   it under the terms of either
7
8     * the GNU Lesser General Public License as published by the Free
9       Software Foundation; either version 3 of the License, or (at
10       your option) any later version
11
12   or
13
14     * the GNU General Public License as published by the Free
15       Software Foundation; either version 2 of the License, or (at
16       your option) any later version
17
18   or both in parallel, as here.
19
20   elfutils is distributed in the hope that it will be useful, but
21   WITHOUT ANY WARRANTY; without even the implied warranty of
22   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23   General Public License for more details.
24
25   You should have received copies of the GNU General Public License and
26   the GNU Lesser General Public License along with this program.  If
27   not, see <http://www.gnu.org/licenses/>.  */
28
29#ifndef _DWARF_H
30#define	_DWARF_H 1
31
32/* DWARF tags.  */
33enum
34  {
35    DW_TAG_array_type = 0x01,
36    DW_TAG_class_type = 0x02,
37    DW_TAG_entry_point = 0x03,
38    DW_TAG_enumeration_type = 0x04,
39    DW_TAG_formal_parameter = 0x05,
40    DW_TAG_imported_declaration = 0x08,
41    DW_TAG_label = 0x0a,
42    DW_TAG_lexical_block = 0x0b,
43    DW_TAG_member = 0x0d,
44    DW_TAG_pointer_type = 0x0f,
45    DW_TAG_reference_type = 0x10,
46    DW_TAG_compile_unit = 0x11,
47    DW_TAG_string_type = 0x12,
48    DW_TAG_structure_type = 0x13,
49    DW_TAG_subroutine_type = 0x15,
50    DW_TAG_typedef = 0x16,
51    DW_TAG_union_type = 0x17,
52    DW_TAG_unspecified_parameters = 0x18,
53    DW_TAG_variant = 0x19,
54    DW_TAG_common_block = 0x1a,
55    DW_TAG_common_inclusion = 0x1b,
56    DW_TAG_inheritance = 0x1c,
57    DW_TAG_inlined_subroutine = 0x1d,
58    DW_TAG_module = 0x1e,
59    DW_TAG_ptr_to_member_type = 0x1f,
60    DW_TAG_set_type = 0x20,
61    DW_TAG_subrange_type = 0x21,
62    DW_TAG_with_stmt = 0x22,
63    DW_TAG_access_declaration = 0x23,
64    DW_TAG_base_type = 0x24,
65    DW_TAG_catch_block = 0x25,
66    DW_TAG_const_type = 0x26,
67    DW_TAG_constant = 0x27,
68    DW_TAG_enumerator = 0x28,
69    DW_TAG_file_type = 0x29,
70    DW_TAG_friend = 0x2a,
71    DW_TAG_namelist = 0x2b,
72    DW_TAG_namelist_item = 0x2c,
73    DW_TAG_packed_type = 0x2d,
74    DW_TAG_subprogram = 0x2e,
75    DW_TAG_template_type_parameter = 0x2f,
76    DW_TAG_template_value_parameter = 0x30,
77    DW_TAG_thrown_type = 0x31,
78    DW_TAG_try_block = 0x32,
79    DW_TAG_variant_part = 0x33,
80    DW_TAG_variable = 0x34,
81    DW_TAG_volatile_type = 0x35,
82    DW_TAG_dwarf_procedure = 0x36,
83    DW_TAG_restrict_type = 0x37,
84    DW_TAG_interface_type = 0x38,
85    DW_TAG_namespace = 0x39,
86    DW_TAG_imported_module = 0x3a,
87    DW_TAG_unspecified_type = 0x3b,
88    DW_TAG_partial_unit = 0x3c,
89    DW_TAG_imported_unit = 0x3d,
90    /* 0x3e reserved.  */
91    DW_TAG_condition = 0x3f,
92    DW_TAG_shared_type = 0x40,
93    DW_TAG_type_unit = 0x41,
94    DW_TAG_rvalue_reference_type = 0x42,
95    DW_TAG_template_alias = 0x43,
96
97    /* DWARF 5.  */
98    DW_TAG_atomic_type = 0x47,
99
100    DW_TAG_lo_user = 0x4080,
101
102    DW_TAG_MIPS_loop = 0x4081,
103    DW_TAG_format_label = 0x4101,
104    DW_TAG_function_template = 0x4102,
105    DW_TAG_class_template = 0x4103,
106
107    DW_TAG_GNU_BINCL = 0x4104,
108    DW_TAG_GNU_EINCL = 0x4105,
109
110    DW_TAG_GNU_template_template_param = 0x4106,
111    DW_TAG_GNU_template_parameter_pack = 0x4107,
112    DW_TAG_GNU_formal_parameter_pack = 0x4108,
113    DW_TAG_GNU_call_site = 0x4109,
114    DW_TAG_GNU_call_site_parameter = 0x410a,
115
116    DW_TAG_hi_user = 0xffff
117  };
118
119
120/* Children determination encodings.  */
121enum
122  {
123    DW_CHILDREN_no = 0,
124    DW_CHILDREN_yes = 1
125  };
126
127
128/* DWARF attributes encodings.  */
129enum
130  {
131    DW_AT_sibling = 0x01,
132    DW_AT_location = 0x02,
133    DW_AT_name = 0x03,
134    DW_AT_ordering = 0x09,
135    DW_AT_subscr_data = 0x0a,
136    DW_AT_byte_size = 0x0b,
137    DW_AT_bit_offset = 0x0c,
138    DW_AT_bit_size = 0x0d,
139    DW_AT_element_list = 0x0f,
140    DW_AT_stmt_list = 0x10,
141    DW_AT_low_pc = 0x11,
142    DW_AT_high_pc = 0x12,
143    DW_AT_language = 0x13,
144    DW_AT_member = 0x14,
145    DW_AT_discr = 0x15,
146    DW_AT_discr_value = 0x16,
147    DW_AT_visibility = 0x17,
148    DW_AT_import = 0x18,
149    DW_AT_string_length = 0x19,
150    DW_AT_common_reference = 0x1a,
151    DW_AT_comp_dir = 0x1b,
152    DW_AT_const_value = 0x1c,
153    DW_AT_containing_type = 0x1d,
154    DW_AT_default_value = 0x1e,
155    DW_AT_inline = 0x20,
156    DW_AT_is_optional = 0x21,
157    DW_AT_lower_bound = 0x22,
158    DW_AT_producer = 0x25,
159    DW_AT_prototyped = 0x27,
160    DW_AT_return_addr = 0x2a,
161    DW_AT_start_scope = 0x2c,
162    DW_AT_bit_stride = 0x2e,
163    DW_AT_upper_bound = 0x2f,
164    DW_AT_abstract_origin = 0x31,
165    DW_AT_accessibility = 0x32,
166    DW_AT_address_class = 0x33,
167    DW_AT_artificial = 0x34,
168    DW_AT_base_types = 0x35,
169    DW_AT_calling_convention = 0x36,
170    DW_AT_count = 0x37,
171    DW_AT_data_member_location = 0x38,
172    DW_AT_decl_column = 0x39,
173    DW_AT_decl_file = 0x3a,
174    DW_AT_decl_line = 0x3b,
175    DW_AT_declaration = 0x3c,
176    DW_AT_discr_list = 0x3d,
177    DW_AT_encoding = 0x3e,
178    DW_AT_external = 0x3f,
179    DW_AT_frame_base = 0x40,
180    DW_AT_friend = 0x41,
181    DW_AT_identifier_case = 0x42,
182    DW_AT_macro_info = 0x43,
183    DW_AT_namelist_item = 0x44,
184    DW_AT_priority = 0x45,
185    DW_AT_segment = 0x46,
186    DW_AT_specification = 0x47,
187    DW_AT_static_link = 0x48,
188    DW_AT_type = 0x49,
189    DW_AT_use_location = 0x4a,
190    DW_AT_variable_parameter = 0x4b,
191    DW_AT_virtuality = 0x4c,
192    DW_AT_vtable_elem_location = 0x4d,
193    DW_AT_allocated = 0x4e,
194    DW_AT_associated = 0x4f,
195    DW_AT_data_location = 0x50,
196    DW_AT_byte_stride = 0x51,
197    DW_AT_entry_pc = 0x52,
198    DW_AT_use_UTF8 = 0x53,
199    DW_AT_extension = 0x54,
200    DW_AT_ranges = 0x55,
201    DW_AT_trampoline = 0x56,
202    DW_AT_call_column = 0x57,
203    DW_AT_call_file = 0x58,
204    DW_AT_call_line = 0x59,
205    DW_AT_description = 0x5a,
206    DW_AT_binary_scale = 0x5b,
207    DW_AT_decimal_scale = 0x5c,
208    DW_AT_small = 0x5d,
209    DW_AT_decimal_sign = 0x5e,
210    DW_AT_digit_count = 0x5f,
211    DW_AT_picture_string = 0x60,
212    DW_AT_mutable = 0x61,
213    DW_AT_threads_scaled = 0x62,
214    DW_AT_explicit = 0x63,
215    DW_AT_object_pointer = 0x64,
216    DW_AT_endianity = 0x65,
217    DW_AT_elemental = 0x66,
218    DW_AT_pure = 0x67,
219    DW_AT_recursive = 0x68,
220    DW_AT_signature = 0x69,
221    DW_AT_main_subprogram = 0x6a,
222    DW_AT_data_bit_offset = 0x6b,
223    DW_AT_const_expr = 0x6c,
224    DW_AT_enum_class = 0x6d,
225    DW_AT_linkage_name = 0x6e,
226
227    /* DWARF5 attribute values.  */
228    DW_AT_noreturn = 0x87,
229
230    DW_AT_lo_user = 0x2000,
231
232    DW_AT_MIPS_fde = 0x2001,
233    DW_AT_MIPS_loop_begin = 0x2002,
234    DW_AT_MIPS_tail_loop_begin = 0x2003,
235    DW_AT_MIPS_epilog_begin = 0x2004,
236    DW_AT_MIPS_loop_unroll_factor = 0x2005,
237    DW_AT_MIPS_software_pipeline_depth = 0x2006,
238    DW_AT_MIPS_linkage_name = 0x2007,
239    DW_AT_MIPS_stride = 0x2008,
240    DW_AT_MIPS_abstract_name = 0x2009,
241    DW_AT_MIPS_clone_origin = 0x200a,
242    DW_AT_MIPS_has_inlines = 0x200b,
243    DW_AT_MIPS_stride_byte = 0x200c,
244    DW_AT_MIPS_stride_elem = 0x200d,
245    DW_AT_MIPS_ptr_dopetype = 0x200e,
246    DW_AT_MIPS_allocatable_dopetype = 0x200f,
247    DW_AT_MIPS_assumed_shape_dopetype = 0x2010,
248    DW_AT_MIPS_assumed_size = 0x2011,
249
250    /* GNU extensions.  */
251    DW_AT_sf_names = 0x2101,
252    DW_AT_src_info = 0x2102,
253    DW_AT_mac_info = 0x2103,
254    DW_AT_src_coords = 0x2104,
255    DW_AT_body_begin = 0x2105,
256    DW_AT_body_end = 0x2106,
257    DW_AT_GNU_vector = 0x2107,
258    DW_AT_GNU_guarded_by = 0x2108,
259    DW_AT_GNU_pt_guarded_by = 0x2109,
260    DW_AT_GNU_guarded = 0x210a,
261    DW_AT_GNU_pt_guarded = 0x210b,
262    DW_AT_GNU_locks_excluded = 0x210c,
263    DW_AT_GNU_exclusive_locks_required = 0x210d,
264    DW_AT_GNU_shared_locks_required = 0x210e,
265    DW_AT_GNU_odr_signature = 0x210f,
266    DW_AT_GNU_template_name = 0x2110,
267    DW_AT_GNU_call_site_value = 0x2111,
268    DW_AT_GNU_call_site_data_value = 0x2112,
269    DW_AT_GNU_call_site_target = 0x2113,
270    DW_AT_GNU_call_site_target_clobbered = 0x2114,
271    DW_AT_GNU_tail_call = 0x2115,
272    DW_AT_GNU_all_tail_call_sites = 0x2116,
273    DW_AT_GNU_all_call_sites = 0x2117,
274    DW_AT_GNU_all_source_call_sites = 0x2118,
275    DW_AT_GNU_macros = 0x2119,
276    DW_AT_GNU_deleted = 0x211a,
277
278    DW_AT_hi_user = 0x3fff
279  };
280
281
282/* DWARF form encodings.  */
283enum
284  {
285    DW_FORM_addr = 0x01,
286    DW_FORM_block2 = 0x03,
287    DW_FORM_block4 = 0x04,
288    DW_FORM_data2 = 0x05,
289    DW_FORM_data4 = 0x06,
290    DW_FORM_data8 = 0x07,
291    DW_FORM_string = 0x08,
292    DW_FORM_block = 0x09,
293    DW_FORM_block1 = 0x0a,
294    DW_FORM_data1 = 0x0b,
295    DW_FORM_flag = 0x0c,
296    DW_FORM_sdata = 0x0d,
297    DW_FORM_strp = 0x0e,
298    DW_FORM_udata = 0x0f,
299    DW_FORM_ref_addr = 0x10,
300    DW_FORM_ref1 = 0x11,
301    DW_FORM_ref2 = 0x12,
302    DW_FORM_ref4 = 0x13,
303    DW_FORM_ref8 = 0x14,
304    DW_FORM_ref_udata = 0x15,
305    DW_FORM_indirect = 0x16,
306    DW_FORM_sec_offset = 0x17,
307    DW_FORM_exprloc = 0x18,
308    DW_FORM_flag_present = 0x19,
309    DW_FORM_ref_sig8 = 0x20,
310
311    DW_FORM_GNU_ref_alt = 0x1f20, /* offset in alternate .debuginfo.  */
312    DW_FORM_GNU_strp_alt = 0x1f21 /* offset in alternate .debug_str. */
313  };
314
315
316/* DWARF location operation encodings.  */
317enum
318  {
319    DW_OP_addr = 0x03,		/* Constant address.  */
320    DW_OP_deref = 0x06,
321    DW_OP_const1u = 0x08,	/* Unsigned 1-byte constant.  */
322    DW_OP_const1s = 0x09,	/* Signed 1-byte constant.  */
323    DW_OP_const2u = 0x0a,	/* Unsigned 2-byte constant.  */
324    DW_OP_const2s = 0x0b,	/* Signed 2-byte constant.  */
325    DW_OP_const4u = 0x0c,	/* Unsigned 4-byte constant.  */
326    DW_OP_const4s = 0x0d,	/* Signed 4-byte constant.  */
327    DW_OP_const8u = 0x0e,	/* Unsigned 8-byte constant.  */
328    DW_OP_const8s = 0x0f,	/* Signed 8-byte constant.  */
329    DW_OP_constu = 0x10,	/* Unsigned LEB128 constant.  */
330    DW_OP_consts = 0x11,	/* Signed LEB128 constant.  */
331    DW_OP_dup = 0x12,
332    DW_OP_drop = 0x13,
333    DW_OP_over = 0x14,
334    DW_OP_pick = 0x15,		/* 1-byte stack index.  */
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,	/* Unsigned LEB128 addend.  */
349    DW_OP_shl = 0x24,
350    DW_OP_shr = 0x25,
351    DW_OP_shra = 0x26,
352    DW_OP_xor = 0x27,
353    DW_OP_bra = 0x28,		/* Signed 2-byte constant.  */
354    DW_OP_eq = 0x29,
355    DW_OP_ge = 0x2a,
356    DW_OP_gt = 0x2b,
357    DW_OP_le = 0x2c,
358    DW_OP_lt = 0x2d,
359    DW_OP_ne = 0x2e,
360    DW_OP_skip = 0x2f,		/* Signed 2-byte constant.  */
361    DW_OP_lit0 = 0x30,		/* Literal 0.  */
362    DW_OP_lit1 = 0x31,		/* Literal 1.  */
363    DW_OP_lit2 = 0x32,		/* Literal 2.  */
364    DW_OP_lit3 = 0x33,		/* Literal 3.  */
365    DW_OP_lit4 = 0x34,		/* Literal 4.  */
366    DW_OP_lit5 = 0x35,		/* Literal 5.  */
367    DW_OP_lit6 = 0x36,		/* Literal 6.  */
368    DW_OP_lit7 = 0x37,		/* Literal 7.  */
369    DW_OP_lit8 = 0x38,		/* Literal 8.  */
370    DW_OP_lit9 = 0x39,		/* Literal 9.  */
371    DW_OP_lit10 = 0x3a,		/* Literal 10.  */
372    DW_OP_lit11 = 0x3b,		/* Literal 11.  */
373    DW_OP_lit12 = 0x3c,		/* Literal 12.  */
374    DW_OP_lit13 = 0x3d,		/* Literal 13.  */
375    DW_OP_lit14 = 0x3e,		/* Literal 14.  */
376    DW_OP_lit15 = 0x3f,		/* Literal 15.  */
377    DW_OP_lit16 = 0x40,		/* Literal 16.  */
378    DW_OP_lit17 = 0x41,		/* Literal 17.  */
379    DW_OP_lit18 = 0x42,		/* Literal 18.  */
380    DW_OP_lit19 = 0x43,		/* Literal 19.  */
381    DW_OP_lit20 = 0x44,		/* Literal 20.  */
382    DW_OP_lit21 = 0x45,		/* Literal 21.  */
383    DW_OP_lit22 = 0x46,		/* Literal 22.  */
384    DW_OP_lit23 = 0x47,		/* Literal 23.  */
385    DW_OP_lit24 = 0x48,		/* Literal 24.  */
386    DW_OP_lit25 = 0x49,		/* Literal 25.  */
387    DW_OP_lit26 = 0x4a,		/* Literal 26.  */
388    DW_OP_lit27 = 0x4b,		/* Literal 27.  */
389    DW_OP_lit28 = 0x4c,		/* Literal 28.  */
390    DW_OP_lit29 = 0x4d,		/* Literal 29.  */
391    DW_OP_lit30 = 0x4e,		/* Literal 30.  */
392    DW_OP_lit31 = 0x4f,		/* Literal 31.  */
393    DW_OP_reg0 = 0x50,		/* Register 0.  */
394    DW_OP_reg1 = 0x51,		/* Register 1.  */
395    DW_OP_reg2 = 0x52,		/* Register 2.  */
396    DW_OP_reg3 = 0x53,		/* Register 3.  */
397    DW_OP_reg4 = 0x54,		/* Register 4.  */
398    DW_OP_reg5 = 0x55,		/* Register 5.  */
399    DW_OP_reg6 = 0x56,		/* Register 6.  */
400    DW_OP_reg7 = 0x57,		/* Register 7.  */
401    DW_OP_reg8 = 0x58,		/* Register 8.  */
402    DW_OP_reg9 = 0x59,		/* Register 9.  */
403    DW_OP_reg10 = 0x5a,		/* Register 10.  */
404    DW_OP_reg11 = 0x5b,		/* Register 11.  */
405    DW_OP_reg12 = 0x5c,		/* Register 12.  */
406    DW_OP_reg13 = 0x5d,		/* Register 13.  */
407    DW_OP_reg14 = 0x5e,		/* Register 14.  */
408    DW_OP_reg15 = 0x5f,		/* Register 15.  */
409    DW_OP_reg16 = 0x60,		/* Register 16.  */
410    DW_OP_reg17 = 0x61,		/* Register 17.  */
411    DW_OP_reg18 = 0x62,		/* Register 18.  */
412    DW_OP_reg19 = 0x63,		/* Register 19.  */
413    DW_OP_reg20 = 0x64,		/* Register 20.  */
414    DW_OP_reg21 = 0x65,		/* Register 21.  */
415    DW_OP_reg22 = 0x66,		/* Register 22.  */
416    DW_OP_reg23 = 0x67,		/* Register 24.  */
417    DW_OP_reg24 = 0x68,		/* Register 24.  */
418    DW_OP_reg25 = 0x69,		/* Register 25.  */
419    DW_OP_reg26 = 0x6a,		/* Register 26.  */
420    DW_OP_reg27 = 0x6b,		/* Register 27.  */
421    DW_OP_reg28 = 0x6c,		/* Register 28.  */
422    DW_OP_reg29 = 0x6d,		/* Register 29.  */
423    DW_OP_reg30 = 0x6e,		/* Register 30.  */
424    DW_OP_reg31 = 0x6f,		/* Register 31.  */
425    DW_OP_breg0 = 0x70,		/* Base register 0.  */
426    DW_OP_breg1 = 0x71,		/* Base register 1.  */
427    DW_OP_breg2 = 0x72,		/* Base register 2.  */
428    DW_OP_breg3 = 0x73,		/* Base register 3.  */
429    DW_OP_breg4 = 0x74,		/* Base register 4.  */
430    DW_OP_breg5 = 0x75,		/* Base register 5.  */
431    DW_OP_breg6 = 0x76,		/* Base register 6.  */
432    DW_OP_breg7 = 0x77,		/* Base register 7.  */
433    DW_OP_breg8 = 0x78,		/* Base register 8.  */
434    DW_OP_breg9 = 0x79,		/* Base register 9.  */
435    DW_OP_breg10 = 0x7a,	/* Base register 10.  */
436    DW_OP_breg11 = 0x7b,	/* Base register 11.  */
437    DW_OP_breg12 = 0x7c,	/* Base register 12.  */
438    DW_OP_breg13 = 0x7d,	/* Base register 13.  */
439    DW_OP_breg14 = 0x7e,	/* Base register 14.  */
440    DW_OP_breg15 = 0x7f,	/* Base register 15.  */
441    DW_OP_breg16 = 0x80,	/* Base register 16.  */
442    DW_OP_breg17 = 0x81,	/* Base register 17.  */
443    DW_OP_breg18 = 0x82,	/* Base register 18.  */
444    DW_OP_breg19 = 0x83,	/* Base register 19.  */
445    DW_OP_breg20 = 0x84,	/* Base register 20.  */
446    DW_OP_breg21 = 0x85,	/* Base register 21.  */
447    DW_OP_breg22 = 0x86,	/* Base register 22.  */
448    DW_OP_breg23 = 0x87,	/* Base register 23.  */
449    DW_OP_breg24 = 0x88,	/* Base register 24.  */
450    DW_OP_breg25 = 0x89,	/* Base register 25.  */
451    DW_OP_breg26 = 0x8a,	/* Base register 26.  */
452    DW_OP_breg27 = 0x8b,	/* Base register 27.  */
453    DW_OP_breg28 = 0x8c,	/* Base register 28.  */
454    DW_OP_breg29 = 0x8d,	/* Base register 29.  */
455    DW_OP_breg30 = 0x8e,	/* Base register 30.  */
456    DW_OP_breg31 = 0x8f,	/* Base register 31.  */
457    DW_OP_regx = 0x90,		/* Unsigned LEB128 register.  */
458    DW_OP_fbreg = 0x91,		/* Signed LEB128 offset.  */
459    DW_OP_bregx = 0x92,		/* ULEB128 register followed by SLEB128 off. */
460    DW_OP_piece = 0x93,		/* ULEB128 size of piece addressed. */
461    DW_OP_deref_size = 0x94,	/* 1-byte size of data retrieved.  */
462    DW_OP_xderef_size = 0x95,	/* 1-byte size of data retrieved.  */
463    DW_OP_nop = 0x96,
464    DW_OP_push_object_address = 0x97,
465    DW_OP_call2 = 0x98,
466    DW_OP_call4 = 0x99,
467    DW_OP_call_ref = 0x9a,
468    DW_OP_form_tls_address = 0x9b,/* TLS offset to address in current thread */
469    DW_OP_call_frame_cfa = 0x9c,/* CFA as determined by CFI.  */
470    DW_OP_bit_piece = 0x9d,	/* ULEB128 size and ULEB128 offset in bits.  */
471    DW_OP_implicit_value = 0x9e, /* DW_FORM_block follows opcode.  */
472    DW_OP_stack_value = 0x9f,	 /* No operands, special like DW_OP_piece.  */
473
474    /* GNU extensions.  */
475    DW_OP_GNU_push_tls_address = 0xe0,
476    DW_OP_GNU_uninit = 0xf0,
477    DW_OP_GNU_encoded_addr = 0xf1,
478    DW_OP_GNU_implicit_pointer = 0xf2,
479    DW_OP_GNU_entry_value = 0xf3,
480    DW_OP_GNU_const_type = 0xf4,
481    DW_OP_GNU_regval_type = 0xf5,
482    DW_OP_GNU_deref_type = 0xf6,
483    DW_OP_GNU_convert = 0xf7,
484    DW_OP_GNU_reinterpret = 0xf9,
485    DW_OP_GNU_parameter_ref = 0xfa,
486
487    DW_OP_lo_user = 0xe0,	/* Implementation-defined range start.  */
488    DW_OP_hi_user = 0xff	/* Implementation-defined range end.  */
489  };
490
491
492/* DWARF base type encodings.  */
493enum
494  {
495    DW_ATE_void = 0x0,
496    DW_ATE_address = 0x1,
497    DW_ATE_boolean = 0x2,
498    DW_ATE_complex_float = 0x3,
499    DW_ATE_float = 0x4,
500    DW_ATE_signed = 0x5,
501    DW_ATE_signed_char = 0x6,
502    DW_ATE_unsigned = 0x7,
503    DW_ATE_unsigned_char = 0x8,
504    DW_ATE_imaginary_float = 0x9,
505    DW_ATE_packed_decimal = 0xa,
506    DW_ATE_numeric_string = 0xb,
507    DW_ATE_edited = 0xc,
508    DW_ATE_signed_fixed = 0xd,
509    DW_ATE_unsigned_fixed = 0xe,
510    DW_ATE_decimal_float = 0xf,
511    DW_ATE_UTF = 0x10,
512
513    DW_ATE_lo_user = 0x80,
514    DW_ATE_hi_user = 0xff
515  };
516
517
518/* DWARF decimal sign encodings.  */
519enum
520  {
521    DW_DS_unsigned = 1,
522    DW_DS_leading_overpunch = 2,
523    DW_DS_trailing_overpunch = 3,
524    DW_DS_leading_separate = 4,
525    DW_DS_trailing_separate = 5,
526  };
527
528
529/* DWARF endianity encodings.  */
530enum
531  {
532    DW_END_default = 0,
533    DW_END_big = 1,
534    DW_END_little = 2,
535
536    DW_END_lo_user = 0x40,
537    DW_END_hi_user = 0xff
538  };
539
540
541/* DWARF accessibility encodings.  */
542enum
543  {
544    DW_ACCESS_public = 1,
545    DW_ACCESS_protected = 2,
546    DW_ACCESS_private = 3
547  };
548
549
550/* DWARF visibility encodings.  */
551enum
552  {
553    DW_VIS_local = 1,
554    DW_VIS_exported = 2,
555    DW_VIS_qualified = 3
556  };
557
558
559/* DWARF virtuality encodings.  */
560enum
561  {
562    DW_VIRTUALITY_none = 0,
563    DW_VIRTUALITY_virtual = 1,
564    DW_VIRTUALITY_pure_virtual = 2
565  };
566
567
568/* DWARF language encodings.  */
569enum
570  {
571    DW_LANG_C89 = 0x0001,	     /* ISO C:1989 */
572    DW_LANG_C = 0x0002,		     /* C */
573    DW_LANG_Ada83 = 0x0003,	     /* ISO Ada:1983 */
574    DW_LANG_C_plus_plus	= 0x0004,    /* ISO C++:1998 */
575    DW_LANG_Cobol74 = 0x0005,	     /* ISO Cobol:1974 */
576    DW_LANG_Cobol85 = 0x0006,	     /* ISO Cobol:1985 */
577    DW_LANG_Fortran77 = 0x0007,	     /* ISO FORTRAN 77 */
578    DW_LANG_Fortran90 = 0x0008,	     /* ISO Fortran 90 */
579    DW_LANG_Pascal83 = 0x0009,	     /* ISO Pascal:1983 */
580    DW_LANG_Modula2 = 0x000a,	     /* ISO Modula-2:1996 */
581    DW_LANG_Java = 0x000b,	     /* Java */
582    DW_LANG_C99 = 0x000c,	     /* ISO C:1999 */
583    DW_LANG_Ada95 = 0x000d,	     /* ISO Ada:1995 */
584    DW_LANG_Fortran95 = 0x000e,	     /* ISO Fortran 95 */
585    DW_LANG_PL1 = 0x000f,	     /* ISO PL/1:1976 */
586    DW_LANG_ObjC = 0x0010,	     /* Objective-C */
587    DW_LANG_ObjC_plus_plus = 0x0011, /* Objective-C++ */
588    DW_LANG_UPC = 0x0012,	     /* Unified Parallel C */
589    DW_LANG_D = 0x0013,		     /* D */
590    DW_LANG_Python = 0x0014,	     /* Python */
591    DW_LANG_Go = 0x0016,	     /* Go */
592    DW_LANG_Haskell = 0x0018,	     /* Haskell */
593    DW_LANG_C_plus_plus_11 = 0x001a, /* ISO C++:2011 */
594    DW_LANG_C11 = 0x001d,	     /* ISO C:2011 */
595    DW_LANG_C_plus_plus_14 = 0x0021, /* ISO C++:2014 */
596    DW_LANG_Fortran03 = 0x0022,	     /* ISO/IEC 1539-1:2004 */
597    DW_LANG_Fortran08 = 0x0023,	     /* ISO/IEC 1539-1:2010 */
598
599
600    DW_LANG_lo_user = 0x8000,
601    DW_LANG_Mips_Assembler = 0x8001, /* Assembler */
602    DW_LANG_hi_user = 0xffff
603  };
604
605
606/* DWARF identifier case encodings.  */
607enum
608  {
609    DW_ID_case_sensitive = 0,
610    DW_ID_up_case = 1,
611    DW_ID_down_case = 2,
612    DW_ID_case_insensitive = 3
613  };
614
615
616/* DWARF calling conventions encodings.  */
617enum
618  {
619    DW_CC_normal = 0x1,
620    DW_CC_program = 0x2,
621    DW_CC_nocall = 0x3,
622    DW_CC_lo_user = 0x40,
623    DW_CC_hi_user = 0xff
624  };
625
626
627/* DWARF inline encodings.  */
628enum
629  {
630    DW_INL_not_inlined = 0,
631    DW_INL_inlined = 1,
632    DW_INL_declared_not_inlined = 2,
633    DW_INL_declared_inlined = 3
634  };
635
636
637/* DWARF ordering encodings.  */
638enum
639  {
640    DW_ORD_row_major = 0,
641    DW_ORD_col_major = 1
642  };
643
644
645/* DWARF discriminant descriptor encodings.  */
646enum
647  {
648    DW_DSC_label = 0,
649    DW_DSC_range = 1
650  };
651
652
653/* DWARF standard opcode encodings.  */
654enum
655  {
656    DW_LNS_copy = 1,
657    DW_LNS_advance_pc = 2,
658    DW_LNS_advance_line = 3,
659    DW_LNS_set_file = 4,
660    DW_LNS_set_column = 5,
661    DW_LNS_negate_stmt = 6,
662    DW_LNS_set_basic_block = 7,
663    DW_LNS_const_add_pc = 8,
664    DW_LNS_fixed_advance_pc = 9,
665    DW_LNS_set_prologue_end = 10,
666    DW_LNS_set_epilogue_begin = 11,
667    DW_LNS_set_isa = 12
668  };
669
670
671/* DWARF extended opcode encodings.  */
672enum
673  {
674    DW_LNE_end_sequence = 1,
675    DW_LNE_set_address = 2,
676    DW_LNE_define_file = 3,
677    DW_LNE_set_discriminator = 4,
678
679    DW_LNE_lo_user = 128,
680    DW_LNE_hi_user = 255
681  };
682
683
684/* DWARF macinfo type encodings.  */
685enum
686  {
687    DW_MACINFO_define = 1,
688    DW_MACINFO_undef = 2,
689    DW_MACINFO_start_file = 3,
690    DW_MACINFO_end_file = 4,
691    DW_MACINFO_vendor_ext = 255
692  };
693
694
695/* DWARF debug_macro type encodings.  GNU/DWARF5 extension.  */
696enum
697  {
698    DW_MACRO_GNU_define = 0x01,
699    DW_MACRO_GNU_undef = 0x02,
700    DW_MACRO_GNU_start_file = 0x03,
701    DW_MACRO_GNU_end_file = 0x04,
702    DW_MACRO_GNU_define_indirect = 0x05,
703    DW_MACRO_GNU_undef_indirect = 0x06,
704    DW_MACRO_GNU_transparent_include = 0x07,
705    DW_MACRO_GNU_lo_user = 0xe0,
706    DW_MACRO_GNU_hi_user = 0xff
707  };
708
709
710/* DWARF call frame instruction encodings.  */
711enum
712  {
713    DW_CFA_advance_loc = 0x40,
714    DW_CFA_offset = 0x80,
715    DW_CFA_restore = 0xc0,
716    DW_CFA_extended = 0,
717
718    DW_CFA_nop = 0x00,
719    DW_CFA_set_loc = 0x01,
720    DW_CFA_advance_loc1 = 0x02,
721    DW_CFA_advance_loc2 = 0x03,
722    DW_CFA_advance_loc4 = 0x04,
723    DW_CFA_offset_extended = 0x05,
724    DW_CFA_restore_extended = 0x06,
725    DW_CFA_undefined = 0x07,
726    DW_CFA_same_value = 0x08,
727    DW_CFA_register = 0x09,
728    DW_CFA_remember_state = 0x0a,
729    DW_CFA_restore_state = 0x0b,
730    DW_CFA_def_cfa = 0x0c,
731    DW_CFA_def_cfa_register = 0x0d,
732    DW_CFA_def_cfa_offset = 0x0e,
733    DW_CFA_def_cfa_expression = 0x0f,
734    DW_CFA_expression = 0x10,
735    DW_CFA_offset_extended_sf = 0x11,
736    DW_CFA_def_cfa_sf = 0x12,
737    DW_CFA_def_cfa_offset_sf = 0x13,
738    DW_CFA_val_offset = 0x14,
739    DW_CFA_val_offset_sf = 0x15,
740    DW_CFA_val_expression = 0x16,
741
742    DW_CFA_low_user = 0x1c,
743    DW_CFA_MIPS_advance_loc8 = 0x1d,
744    DW_CFA_GNU_window_save = 0x2d,
745    DW_CFA_GNU_args_size = 0x2e,
746    DW_CFA_GNU_negative_offset_extended = 0x2f,
747    DW_CFA_high_user = 0x3f
748  };
749
750/* ID indicating CIE as opposed to FDE in .debug_frame.  */
751enum
752  {
753    DW_CIE_ID_32 = 0xffffffffU,		 /* In 32-bit format CIE header.  */
754    DW_CIE_ID_64 = 0xffffffffffffffffULL /* In 64-bit format CIE header.  */
755  };
756
757
758/* Information for GNU unwind information.  */
759enum
760  {
761    DW_EH_PE_absptr = 0x00,
762    DW_EH_PE_omit = 0xff,
763
764    /* FDE data encoding.  */
765    DW_EH_PE_uleb128 = 0x01,
766    DW_EH_PE_udata2 = 0x02,
767    DW_EH_PE_udata4 = 0x03,
768    DW_EH_PE_udata8 = 0x04,
769    DW_EH_PE_sleb128 = 0x09,
770    DW_EH_PE_sdata2 = 0x0a,
771    DW_EH_PE_sdata4 = 0x0b,
772    DW_EH_PE_sdata8 = 0x0c,
773    DW_EH_PE_signed = 0x08,
774
775    /* FDE flags.  */
776    DW_EH_PE_pcrel = 0x10,
777    DW_EH_PE_textrel = 0x20,
778    DW_EH_PE_datarel = 0x30,
779    DW_EH_PE_funcrel = 0x40,
780    DW_EH_PE_aligned = 0x50,
781
782    DW_EH_PE_indirect = 0x80
783  };
784
785
786/* DWARF XXX.  */
787#define DW_ADDR_none	0
788
789/* Section 7.2.2 of the DWARF3 specification defines a range of escape
790   codes that can appear in the length field of certain DWARF structures.
791
792   These defines enumerate the minium and maximum values of this range.
793   Currently only the maximum value is used (to indicate that 64-bit
794   values are going to be used in the dwarf data that accompanies the
795   structure).  The other values are reserved.
796
797   Note: There is a typo in DWARF3 spec (published Dec 20, 2005).  In
798   sections 7.4, 7.5.1, 7.19, 7.20 the minimum escape code is referred to
799   as 0xffffff00 whereas in fact it should be 0xfffffff0.  */
800#define DWARF3_LENGTH_MIN_ESCAPE_CODE 0xfffffff0u
801#define DWARF3_LENGTH_MAX_ESCAPE_CODE 0xffffffffu
802#define DWARF3_LENGTH_64_BIT          DWARF3_LENGTH_MAX_ESCAPE_CODE
803
804#endif	/* dwarf.h */
805