xref: /openbsd/usr.bin/ctfconv/dwarf.h (revision 283ced89)
1 /*	$OpenBSD: dwarf.h,v 1.3 2024/02/21 13:16:14 claudio Exp $ */
2 
3 /*
4  * Copyright (c) 2016 Martin Pieuchot <mpi@openbsd.org>
5  * Copyright (c) 2007 John Birrell (jb@freebsd.org).
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #ifndef	_DWARF_H_
31 #define	_DWARF_H_
32 
33 #define DW_TAG_array_type		0x01
34 #define DW_TAG_class_type		0x02
35 #define DW_TAG_entry_point		0x03
36 #define DW_TAG_enumeration_type		0x04
37 #define DW_TAG_formal_parameter		0x05
38 #define DW_TAG_imported_declaration	0x08
39 #define DW_TAG_label			0x0a
40 #define DW_TAG_lexical_block		0x0b
41 #define DW_TAG_member			0x0d
42 #define DW_TAG_pointer_type		0x0f
43 #define DW_TAG_reference_type		0x10
44 #define DW_TAG_compile_unit		0x11
45 #define DW_TAG_string_type		0x12
46 #define DW_TAG_structure_type		0x13
47 #define DW_TAG_subroutine_type		0x15
48 #define DW_TAG_typedef			0x16
49 #define DW_TAG_union_type		0x17
50 #define DW_TAG_unspecified_parameters	0x18
51 #define DW_TAG_variant			0x19
52 #define DW_TAG_common_block		0x1a
53 #define DW_TAG_common_inclusion		0x1b
54 #define DW_TAG_inheritance		0x1c
55 #define DW_TAG_inlined_subroutine	0x1d
56 #define DW_TAG_module			0x1e
57 #define DW_TAG_ptr_to_member_type	0x1f
58 #define DW_TAG_set_type			0x20
59 #define DW_TAG_subrange_type		0x21
60 #define DW_TAG_with_stmt		0x22
61 #define DW_TAG_access_declaration	0x23
62 #define DW_TAG_base_type		0x24
63 #define DW_TAG_catch_block		0x25
64 #define DW_TAG_const_type		0x26
65 #define DW_TAG_constant			0x27
66 #define DW_TAG_enumerator		0x28
67 #define DW_TAG_friend			0x2a
68 #define DW_TAG_namelist			0x2b
69 #define DW_TAG_namelist_item		0x2c
70 #define DW_TAG_packed_type		0x2d
71 #define DW_TAG_subprogram		0x2e
72 #define DW_TAG_template_type_parameter	0x2f
73 #define DW_TAG_template_value_parameter	0x30
74 #define DW_TAG_thrown_type		0x31
75 #define DW_TAG_try_block		0x32
76 #define DW_TAG_variant_part		0x33
77 #define DW_TAG_variable			0x34
78 #define DW_TAG_volatile_type		0x35
79 #define DW_TAG_dwarf_procedure          0x36
80 #define DW_TAG_restrict_type            0x37
81 #define DW_TAG_interface_type           0x38
82 #define DW_TAG_namespace                0x39
83 #define DW_TAG_imported_module          0x3a
84 #define DW_TAG_unspecified_type         0x3b
85 #define DW_TAG_partial_unit             0x3c
86 #define DW_TAG_imported_unit            0x3d
87 #define DW_TAG_condition                0x3f
88 #define DW_TAG_shared_type              0x40
89 #define DW_TAG_type_unit		0x41
90 #define DW_TAG_rvalue_reference_type	0x42
91 #define DW_TAG_template_alias		0x43
92 #define DW_TAG_lo_user			0x4080
93 #define DW_TAG_hi_user			0xffff
94 
95 /* GNU extensions. */
96 #define	DW_TAG_format_label		0x4101
97 #define	DW_TAG_function_template	0x4102
98 #define	DW_TAG_class_template		0x4103
99 #define	DW_TAG_GNU_BINCL		0x4104
100 #define	DW_TAG_GNU_EINCL		0x4105
101 #define	DW_TAG_GNU_template_template_parameter	0x4106
102 #define	DW_TAG_GNU_template_template_param	0x4106
103 #define	DW_TAG_GNU_template_parameter_pack	0x4107
104 #define	DW_TAG_GNU_formal_parameter_pack	0x4108
105 #define	DW_TAG_GNU_call_site			0x4109
106 #define	DW_TAG_GNU_call_site_parameter		0x410a
107 
108 #define DW_TAG_NAMES							\
109 	"DW_TAG_array_type",						\
110 	"DW_TAG_class_type",						\
111 	"DW_TAG_entry_point",						\
112 	"DW_TAG_enumeration_type",					\
113 	"DW_TAG_formal_parameter",					\
114 	NULL,								\
115 	NULL,								\
116 	"DW_TAG_imported_declaration",					\
117 	NULL,								\
118 	"DW_TAG_label",							\
119 	"DW_TAG_lexical_block",						\
120 	NULL,								\
121 	"DW_TAG_member",						\
122 	NULL,								\
123 	"DW_TAG_pointer_type",						\
124 	"DW_TAG_reference_type",					\
125 	"DW_TAG_compile_unit",						\
126 	"DW_TAG_string_type",						\
127 	"DW_TAG_structure_type",					\
128 	NULL,								\
129 	"DW_TAG_subroutine_type",					\
130 	"DW_TAG_typedef",						\
131 	"DW_TAG_union_type",						\
132 	"DW_TAG_unspecified_parameters",				\
133 	"DW_TAG_variant",						\
134 	"DW_TAG_common_block",						\
135 	"DW_TAG_common_inclusion",					\
136 	"DW_TAG_inheritance",						\
137 	"DW_TAG_inlined_subroutine",					\
138 	"DW_TAG_module",						\
139 	"DW_TAG_ptr_to_member_type",					\
140 	"DW_TAG_set_type",						\
141 	"DW_TAG_subrange_type",						\
142 	"DW_TAG_with_stmt",						\
143 	"DW_TAG_access_declaration",					\
144 	"DW_TAG_base_type",						\
145 	"DW_TAG_catch_block",						\
146 	"DW_TAG_const_type",						\
147 	"DW_TAG_constant",						\
148 	"DW_TAG_enumerator",						\
149 	NULL,								\
150 	"DW_TAG_friend",						\
151 	"DW_TAG_namelist",						\
152 	"DW_TAG_namelist_item",						\
153 	"DW_TAG_packed_type",						\
154 	"DW_TAG_subprogram",						\
155 	"DW_TAG_template_type_parameter",				\
156 	"DW_TAG_template_value_parameter",				\
157 	"DW_TAG_thrown_type",						\
158 	"DW_TAG_try_block",						\
159 	"DW_TAG_variant_part",						\
160 	"DW_TAG_variable",						\
161 	"DW_TAG_volatile_type",						\
162 	"DW_TAG_dwarf_procedure",					\
163 	"DW_TAG_restrict_type",						\
164 	"DW_TAG_interface_type",					\
165 	"DW_TAG_namespace",						\
166 	"DW_TAG_imported_module",					\
167 	"DW_TAG_unspecified_type",					\
168 	"DW_TAG_partial_unit",						\
169 	"DW_TAG_imported_unit",						\
170 	NULL,								\
171 	"DW_TAG_condition",						\
172 	"DW_TAG_shared_type",						\
173 	"DW_TAG_type_unit",						\
174 	"DW_TAG_rvalue_reference_type",					\
175 	"DW_TAG_template_alias",
176 
177 #define DW_CHILDREN_no			0x00
178 #define DW_CHILDREN_yes			0x01
179 
180 #define DW_AT_sibling			0x01
181 #define DW_AT_location			0x02
182 #define DW_AT_name			0x03
183 #define DW_AT_ordering			0x09
184 #define DW_AT_subscr_data		0x0a
185 #define DW_AT_byte_size			0x0b
186 #define DW_AT_bit_offset		0x0c
187 #define DW_AT_bit_size			0x0d
188 #define DW_AT_element_list		0x0f
189 #define DW_AT_stmt_list			0x10
190 #define DW_AT_low_pc			0x11
191 #define DW_AT_high_pc			0x12
192 #define DW_AT_language			0x13
193 #define DW_AT_member			0x14
194 #define DW_AT_discr			0x15
195 #define DW_AT_discr_value		0x16
196 #define DW_AT_visibility		0x17
197 #define DW_AT_import			0x18
198 #define DW_AT_string_length		0x19
199 #define DW_AT_common_reference		0x1a
200 #define DW_AT_comp_dir			0x1b
201 #define DW_AT_const_value		0x1c
202 #define DW_AT_containing_type		0x1d
203 #define DW_AT_default_value		0x1e
204 #define DW_AT_inline			0x20
205 #define DW_AT_is_optional		0x21
206 #define DW_AT_lower_bound		0x22
207 #define DW_AT_producer			0x25
208 #define DW_AT_prototyped		0x27
209 #define DW_AT_return_addr		0x2a
210 #define DW_AT_start_scope		0x2c
211 #define DW_AT_bit_stride		0x2e
212 #define DW_AT_stride_size		0x2e
213 #define DW_AT_upper_bound		0x2f
214 #define DW_AT_abstract_origin		0x31
215 #define DW_AT_accessibility		0x32
216 #define DW_AT_address_class		0x33
217 #define DW_AT_artificial		0x34
218 #define DW_AT_base_types		0x35
219 #define DW_AT_calling_convention	0x36
220 #define DW_AT_count			0x37
221 #define DW_AT_data_member_location	0x38
222 #define DW_AT_decl_column		0x39
223 #define DW_AT_decl_file			0x3a
224 #define DW_AT_decl_line			0x3b
225 #define DW_AT_declaration		0x3c
226 #define DW_AT_discr_list		0x3d
227 #define DW_AT_encoding			0x3e
228 #define DW_AT_external			0x3f
229 #define DW_AT_frame_base		0x40
230 #define DW_AT_friend			0x41
231 #define DW_AT_identifier_case		0x42
232 #define DW_AT_macro_info		0x43
233 #define DW_AT_namelist_item		0x44
234 #define DW_AT_priority			0x45
235 #define DW_AT_segment			0x46
236 #define DW_AT_specification		0x47
237 #define DW_AT_static_link		0x48
238 #define DW_AT_type			0x49
239 #define DW_AT_use_location		0x4a
240 #define DW_AT_variable_parameter	0x4b
241 #define DW_AT_virtuality		0x4c
242 #define DW_AT_vtable_elem_location	0x4d
243 #define DW_AT_allocated			0x4e
244 #define DW_AT_associated		0x4f
245 #define DW_AT_data_location		0x50
246 #define DW_AT_byte_stride		0x51
247 #define DW_AT_entry_pc			0x52
248 #define DW_AT_use_UTF8			0x53
249 #define DW_AT_extension			0x54
250 #define DW_AT_ranges			0x55
251 #define DW_AT_trampoline		0x56
252 #define DW_AT_call_column		0x57
253 #define DW_AT_call_file			0x58
254 #define DW_AT_call_line			0x59
255 #define DW_AT_description		0x5a
256 #define DW_AT_binary_scale		0x5b
257 #define DW_AT_decimal_scale		0x5c
258 #define DW_AT_small			0x5d
259 #define DW_AT_decimal_sign		0x5e
260 #define DW_AT_digit_count		0x5f
261 #define DW_AT_picture_string		0x60
262 #define DW_AT_mutable			0x61
263 #define DW_AT_threads_scaled		0x62
264 #define DW_AT_explicit			0x63
265 #define DW_AT_object_pointer		0x64
266 #define DW_AT_endianity			0x65
267 #define DW_AT_elemental			0x66
268 #define DW_AT_pure			0x67
269 #define DW_AT_recursive			0x68
270 #define DW_AT_signature			0x69
271 #define DW_AT_main_subprogram		0x6a
272 #define DW_AT_data_bit_offset		0x6b
273 #define DW_AT_const_expr		0x6c
274 #define DW_AT_enum_class		0x6d
275 #define DW_AT_linkage_name		0x6e
276 #define DW_AT_noreturn			0x87
277 #define DW_AT_lo_user			0x2000
278 #define DW_AT_hi_user			0x3fff
279 
280 /* GNU extensions. */
281 #define	DW_AT_sf_names				0x2101
282 #define	DW_AT_src_info				0x2102
283 #define	DW_AT_mac_info				0x2103
284 #define	DW_AT_src_coords			0x2104
285 #define	DW_AT_body_begin			0x2105
286 #define	DW_AT_body_end				0x2106
287 #define	DW_AT_GNU_vector			0x2107
288 #define	DW_AT_GNU_guarded_by			0x2108
289 #define	DW_AT_GNU_pt_guarded_by			0x2109
290 #define	DW_AT_GNU_guarded			0x210a
291 #define	DW_AT_GNU_pt_guarded			0x210b
292 #define	DW_AT_GNU_locks_excluded		0x210c
293 #define	DW_AT_GNU_exclusive_locks_required	0x210d
294 #define	DW_AT_GNU_shared_locks_required		0x210e
295 #define	DW_AT_GNU_odr_signature			0x210f
296 #define	DW_AT_GNU_template_name			0x2110
297 #define	DW_AT_GNU_call_site_value		0x2111
298 #define	DW_AT_GNU_call_site_data_value		0x2112
299 #define	DW_AT_GNU_call_site_target		0x2113
300 #define	DW_AT_GNU_call_site_target_clobbered	0x2114
301 #define	DW_AT_GNU_tail_call			0x2115
302 #define	DW_AT_GNU_all_tail_call_sites		0x2116
303 #define	DW_AT_GNU_all_call_sites		0x2117
304 #define	DW_AT_GNU_all_source_call_sites		0x2118
305 
306 #define DW_AT_NAMES							\
307 	"DW_AT_sibling",						\
308 	"DW_AT_location",						\
309 	"DW_AT_name",							\
310 	NULL,								\
311 	NULL,								\
312 	NULL,								\
313 	NULL,								\
314 	NULL,								\
315 	"DW_AT_ordering",						\
316 	"DW_AT_subscr_data",						\
317 	"DW_AT_byte_size",						\
318 	"DW_AT_bit_offset",						\
319 	"DW_AT_bit_size",						\
320 	NULL,								\
321 	"DW_AT_element_list",						\
322 	"DW_AT_stmt_list",						\
323 	"DW_AT_low_pc",							\
324 	"DW_AT_high_pc",						\
325 	"DW_AT_language",						\
326 	"DW_AT_member",							\
327 	"DW_AT_discr",							\
328 	"DW_AT_discr_value",						\
329 	"DW_AT_visibility",						\
330 	"DW_AT_import",							\
331 	"DW_AT_string_length",						\
332 	"DW_AT_common_reference",					\
333 	"DW_AT_comp_dir",						\
334 	"DW_AT_const_value",						\
335 	"DW_AT_containing_type",					\
336 	"DW_AT_default_value",						\
337 	NULL,								\
338 	"DW_AT_inline",							\
339 	"DW_AT_is_optional",						\
340 	"DW_AT_lower_bound",						\
341 	NULL,								\
342 	NULL,								\
343 	"DW_AT_producer",						\
344 	NULL,								\
345 	"DW_AT_prototyped",						\
346 	NULL,								\
347 	NULL,								\
348 	"DW_AT_return_addr",						\
349 	NULL,								\
350 	"DW_AT_start_scope",						\
351 	NULL,								\
352 	"DW_AT_bit_stride",						\
353 	"DW_AT_upper_bound",						\
354 	NULL,								\
355 	"DW_AT_abstract_origin",					\
356 	"DW_AT_accessibility",						\
357 	"DW_AT_address_class",						\
358 	"DW_AT_artificial",						\
359 	"DW_AT_base_types",						\
360 	"DW_AT_calling_convention",					\
361 	"DW_AT_count",							\
362 	"DW_AT_data_member_location",					\
363 	"DW_AT_decl_column",						\
364 	"DW_AT_decl_file",						\
365 	"DW_AT_decl_line",						\
366 	"DW_AT_declaration",						\
367 	"DW_AT_discr_list",						\
368 	"DW_AT_encoding",						\
369 	"DW_AT_external",						\
370 	"DW_AT_frame_base",						\
371 	"DW_AT_friend",							\
372 	"DW_AT_identifier_case",					\
373 	"DW_AT_macro_info",						\
374 	"DW_AT_namelist_item",						\
375 	"DW_AT_priority",						\
376 	"DW_AT_segment",						\
377 	"DW_AT_specification",						\
378 	"DW_AT_static_link",						\
379 	"DW_AT_type",							\
380 	"DW_AT_use_location",						\
381 	"DW_AT_variable_parameter",					\
382 	"DW_AT_virtuality",						\
383 	"DW_AT_vtable_elem_location",					\
384 	"DW_AT_allocated",						\
385 	"DW_AT_associated",						\
386 	"DW_AT_data_location",						\
387 	"DW_AT_byte_stride",						\
388 	"DW_AT_entry_pc",						\
389 	"DW_AT_use_UTF8",						\
390 	"DW_AT_extension",						\
391 	"DW_AT_ranges",							\
392 	"DW_AT_trampoline",						\
393 	"DW_AT_call_column",						\
394 	"DW_AT_call_file",						\
395 	"DW_AT_call_line",						\
396 	"DW_AT_description",						\
397 	"DW_AT_binary_scale",						\
398 	"DW_AT_decimal_scale",						\
399 	"DW_AT_small",							\
400 	"DW_AT_decimal_sign",						\
401 	"DW_AT_digit_count",						\
402 	"DW_AT_picture_string",						\
403 	"DW_AT_mutable",						\
404 	"DW_AT_threads_scaled",						\
405 	"DW_AT_explicit",						\
406 	"DW_AT_object_pointer",						\
407 	"DW_AT_endianity",						\
408 	"DW_AT_elemental",						\
409 	"DW_AT_pure",							\
410 	"DW_AT_recursive",						\
411 	"DW_AT_signature",						\
412 	"DW_AT_main_subprogram",					\
413 	"DW_AT_data_bit_offset",					\
414 	"DW_AT_const_expr",						\
415 	"DW_AT_enum_class",						\
416 	"DW_AT_linkage_name",						\
417 	[0x87 - 1] = "DW_AT_noreturn",					\
418 
419 #define DW_FORM_addr			0x01
420 #define DW_FORM_block2			0x03
421 #define DW_FORM_block4			0x04
422 #define DW_FORM_data2			0x05
423 #define DW_FORM_data4			0x06
424 #define DW_FORM_data8			0x07
425 #define DW_FORM_string			0x08
426 #define DW_FORM_block			0x09
427 #define DW_FORM_block1			0x0a
428 #define DW_FORM_data1			0x0b
429 #define DW_FORM_flag			0x0c
430 #define DW_FORM_sdata			0x0d
431 #define DW_FORM_strp			0x0e
432 #define DW_FORM_udata			0x0f
433 #define DW_FORM_ref_addr		0x10
434 #define DW_FORM_ref1			0x11
435 #define DW_FORM_ref2			0x12
436 #define DW_FORM_ref4			0x13
437 #define DW_FORM_ref8			0x14
438 #define DW_FORM_ref_udata		0x15
439 #define DW_FORM_indirect		0x16
440 #define DW_FORM_sec_offset		0x17
441 #define DW_FORM_exprloc			0x18
442 #define DW_FORM_flag_present		0x19
443 #define DW_FORM_ref_sig8		0x20
444 #define	DW_FORM_GNU_ref_alt		0x1f20
445 #define	DW_FORM_GNU_strp_alt		0x1f21
446 
447 #define DW_FORM_NAMES							\
448 	"DW_FORM_addr",							\
449 	NULL,								\
450 	"DW_FORM_block2",						\
451 	"DW_FORM_block4",						\
452 	"DW_FORM_data2",						\
453 	"DW_FORM_data4",						\
454 	"DW_FORM_data8",						\
455 	"DW_FORM_string",						\
456 	"DW_FORM_block",						\
457 	"DW_FORM_block1",						\
458 	"DW_FORM_data1",						\
459 	"DW_FORM_flag",							\
460 	"DW_FORM_sdata",						\
461 	"DW_FORM_strp",							\
462 	"DW_FORM_udata",						\
463 	"DW_FORM_ref_addr",						\
464 	"DW_FORM_ref1",							\
465 	"DW_FORM_ref2",							\
466 	"DW_FORM_ref4",							\
467 	"DW_FORM_ref8",							\
468 	"DW_FORM_ref_udata",						\
469 	"DW_FORM_indirect",						\
470 	"DW_FORM_sec_offset",						\
471 	"DW_FORM_exprloc",						\
472 	"DW_FORM_flag_present",						\
473 	NULL,								\
474 	NULL,								\
475 	NULL,								\
476 	NULL,								\
477 	NULL,								\
478 	NULL,								\
479 	"DW_FORM_ref_sig8",						\
480 
481 #define DW_OP_addr			0x03
482 #define DW_OP_deref			0x06
483 #define DW_OP_const1u			0x08
484 #define DW_OP_const1s			0x09
485 #define DW_OP_const2u			0x0a
486 #define DW_OP_const2s			0x0b
487 #define DW_OP_const4u			0x0c
488 #define DW_OP_const4s			0x0d
489 #define DW_OP_const8u			0x0e
490 #define DW_OP_const8s			0x0f
491 #define DW_OP_constu			0x10
492 #define DW_OP_consts			0x11
493 #define DW_OP_dup			0x12
494 #define DW_OP_drop			0x13
495 #define DW_OP_over			0x14
496 #define DW_OP_pick			0x15
497 #define DW_OP_swap			0x16
498 #define DW_OP_rot			0x17
499 #define DW_OP_xderef			0x18
500 #define DW_OP_abs			0x19
501 #define DW_OP_and			0x1a
502 #define DW_OP_div			0x1b
503 #define DW_OP_minus			0x1c
504 #define DW_OP_mod			0x1d
505 #define DW_OP_mul			0x1e
506 #define DW_OP_neg			0x1f
507 #define DW_OP_not			0x20
508 #define DW_OP_or			0x21
509 #define DW_OP_plus			0x22
510 #define DW_OP_plus_uconst		0x23
511 #define DW_OP_shl			0x24
512 #define DW_OP_shr			0x25
513 #define DW_OP_shra			0x26
514 #define DW_OP_xor			0x27
515 #define DW_OP_bra			0x28
516 #define DW_OP_eq			0x29
517 #define DW_OP_ge			0x2a
518 #define DW_OP_gt			0x2b
519 #define DW_OP_le			0x2c
520 #define DW_OP_lt			0x2d
521 #define DW_OP_ne			0x2e
522 #define DW_OP_skip			0x2f
523 #define DW_OP_lit0			0x30
524 #define DW_OP_lit1			0x31
525 #define DW_OP_lit2			0x32
526 #define DW_OP_lit3			0x33
527 #define DW_OP_lit4			0x34
528 #define DW_OP_lit5			0x35
529 #define DW_OP_lit6			0x36
530 #define DW_OP_lit7			0x37
531 #define DW_OP_lit8			0x38
532 #define DW_OP_lit9			0x39
533 #define DW_OP_lit10			0x3a
534 #define DW_OP_lit11			0x3b
535 #define DW_OP_lit12			0x3c
536 #define DW_OP_lit13			0x3d
537 #define DW_OP_lit14			0x3e
538 #define DW_OP_lit15			0x3f
539 #define DW_OP_lit16			0x40
540 #define DW_OP_lit17			0x41
541 #define DW_OP_lit18			0x42
542 #define DW_OP_lit19			0x43
543 #define DW_OP_lit20			0x44
544 #define DW_OP_lit21			0x45
545 #define DW_OP_lit22			0x46
546 #define DW_OP_lit23			0x47
547 #define DW_OP_lit24			0x48
548 #define DW_OP_lit25			0x49
549 #define DW_OP_lit26			0x4a
550 #define DW_OP_lit27			0x4b
551 #define DW_OP_lit28			0x4c
552 #define DW_OP_lit29			0x4d
553 #define DW_OP_lit30			0x4e
554 #define DW_OP_lit31			0x4f
555 #define DW_OP_reg0			0x50
556 #define DW_OP_reg1			0x51
557 #define DW_OP_reg2			0x52
558 #define DW_OP_reg3			0x53
559 #define DW_OP_reg4			0x54
560 #define DW_OP_reg5			0x55
561 #define DW_OP_reg6			0x56
562 #define DW_OP_reg7			0x57
563 #define DW_OP_reg8			0x58
564 #define DW_OP_reg9			0x59
565 #define DW_OP_reg10			0x5a
566 #define DW_OP_reg11			0x5b
567 #define DW_OP_reg12			0x5c
568 #define DW_OP_reg13			0x5d
569 #define DW_OP_reg14			0x5e
570 #define DW_OP_reg15			0x5f
571 #define DW_OP_reg16			0x60
572 #define DW_OP_reg17			0x61
573 #define DW_OP_reg18			0x62
574 #define DW_OP_reg19			0x63
575 #define DW_OP_reg20			0x64
576 #define DW_OP_reg21			0x65
577 #define DW_OP_reg22			0x66
578 #define DW_OP_reg23			0x67
579 #define DW_OP_reg24			0x68
580 #define DW_OP_reg25			0x69
581 #define DW_OP_reg26			0x6a
582 #define DW_OP_reg27			0x6b
583 #define DW_OP_reg28			0x6c
584 #define DW_OP_reg29			0x6d
585 #define DW_OP_reg30			0x6e
586 #define DW_OP_reg31			0x6f
587 #define DW_OP_breg0			0x70
588 #define DW_OP_breg1			0x71
589 #define DW_OP_breg2			0x72
590 #define DW_OP_breg3			0x73
591 #define DW_OP_breg4			0x74
592 #define DW_OP_breg5			0x75
593 #define DW_OP_breg6			0x76
594 #define DW_OP_breg7			0x77
595 #define DW_OP_breg8			0x78
596 #define DW_OP_breg9			0x79
597 #define DW_OP_breg10			0x7a
598 #define DW_OP_breg11			0x7b
599 #define DW_OP_breg12			0x7c
600 #define DW_OP_breg13			0x7d
601 #define DW_OP_breg14			0x7e
602 #define DW_OP_breg15			0x7f
603 #define DW_OP_breg16			0x80
604 #define DW_OP_breg17			0x81
605 #define DW_OP_breg18			0x82
606 #define DW_OP_breg19			0x83
607 #define DW_OP_breg20			0x84
608 #define DW_OP_breg21			0x85
609 #define DW_OP_breg22			0x86
610 #define DW_OP_breg23			0x87
611 #define DW_OP_breg24			0x88
612 #define DW_OP_breg25			0x89
613 #define DW_OP_breg26			0x8a
614 #define DW_OP_breg27			0x8b
615 #define DW_OP_breg28			0x8c
616 #define DW_OP_breg29			0x8d
617 #define DW_OP_breg30			0x8e
618 #define DW_OP_breg31			0x8f
619 #define DW_OP_regx			0x90
620 #define DW_OP_fbreg			0x91
621 #define DW_OP_bregx			0x92
622 #define DW_OP_piece			0x93
623 #define DW_OP_deref_size		0x94
624 #define DW_OP_xderef_size		0x95
625 #define DW_OP_nop			0x96
626 #define DW_OP_push_object_address	0x97
627 #define DW_OP_call2			0x98
628 #define DW_OP_call4			0x99
629 #define DW_OP_call_ref			0x9a
630 #define DW_OP_form_tls_address		0x9b
631 #define DW_OP_call_frame_cfa		0x9c
632 #define DW_OP_bit_piece			0x9d
633 #define DW_OP_implicit_value		0x9e
634 #define DW_OP_stack_value		0x9f
635 #define DW_OP_lo_user		 	0xe0
636 #define DW_OP_hi_user		 	0xff
637 
638 /* GNU extensions. */
639 #define	DW_OP_GNU_push_tls_address	0xe0
640 #define	DW_OP_GNU_uninit		0xf0
641 #define	DW_OP_GNU_encoded_addr		0xf1
642 #define	DW_OP_GNU_implicit_pointer	0xf2
643 #define	DW_OP_GNU_entry_value		0xf3
644 #define	DW_OP_GNU_const_type		0xf4
645 #define	DW_OP_GNU_regval_type		0xf5
646 #define	DW_OP_GNU_deref_type		0xf6
647 #define	DW_OP_GNU_convert		0xf7
648 #define	DW_OP_GNU_reinterpret		0xf9
649 #define	DW_OP_GNU_parameter_ref		0xfa
650 #define	DW_OP_GNU_addr_index		0xfb
651 #define	DW_OP_GNU_const_index		0xfc
652 
653 #define DW_OP_NAMES							\
654 	NULL,								\
655 	NULL,								\
656 	"DW_OP_addr",							\
657 	NULL,								\
658 	NULL,								\
659 	"DW_OP_deref",							\
660 	NULL,								\
661 	"DW_OP_const1u",						\
662 	"DW_OP_const1s",						\
663 	"DW_OP_const2u",						\
664 	"DW_OP_const2s",						\
665 	"DW_OP_const4u",						\
666 	"DW_OP_const4s",						\
667 	"DW_OP_const8u",						\
668 	"DW_OP_const8s",						\
669 	"DW_OP_constu",							\
670 	"DW_OP_consts",							\
671 	"DW_OP_dup",							\
672 	"DW_OP_drop",							\
673 	"DW_OP_over",							\
674 	"DW_OP_pick",							\
675 	"DW_OP_swap",							\
676 	"DW_OP_rot",							\
677 	"DW_OP_xderef",							\
678 	"DW_OP_abs",							\
679 	"DW_OP_and",							\
680 	"DW_OP_div",							\
681 	"DW_OP_minus",							\
682 	"DW_OP_mod",							\
683 	"DW_OP_mul",							\
684 	"DW_OP_neg",							\
685 	"DW_OP_not",							\
686 	"DW_OP_or",							\
687 	"DW_OP_plus",							\
688 	"DW_OP_plus_uconst",						\
689 	"DW_OP_shl",							\
690 	"DW_OP_shr",							\
691 	"DW_OP_shra",							\
692 	"DW_OP_xor",							\
693 	"DW_OP_bra",							\
694 	"DW_OP_eq",							\
695 	"DW_OP_ge",							\
696 	"DW_OP_gt",							\
697 	"DW_OP_le",							\
698 	"DW_OP_lt",							\
699 	"DW_OP_ne",							\
700 	"DW_OP_skip",							\
701 	"DW_OP_lit0",							\
702 	"DW_OP_lit1",							\
703 	"DW_OP_lit2",							\
704 	"DW_OP_lit3",							\
705 	"DW_OP_lit4",							\
706 	"DW_OP_lit5",							\
707 	"DW_OP_lit6",							\
708 	"DW_OP_lit7",							\
709 	"DW_OP_lit8",							\
710 	"DW_OP_lit9",							\
711 	"DW_OP_lit10",							\
712 	"DW_OP_lit11",							\
713 	"DW_OP_lit12",							\
714 	"DW_OP_lit13",							\
715 	"DW_OP_lit14",							\
716 	"DW_OP_lit15",							\
717 	"DW_OP_lit16",							\
718 	"DW_OP_lit17",							\
719 	"DW_OP_lit18",							\
720 	"DW_OP_lit19",							\
721 	"DW_OP_lit20",							\
722 	"DW_OP_lit21",							\
723 	"DW_OP_lit22",							\
724 	"DW_OP_lit23",							\
725 	"DW_OP_lit24",							\
726 	"DW_OP_lit25",							\
727 	"DW_OP_lit26",							\
728 	"DW_OP_lit27",							\
729 	"DW_OP_lit28",							\
730 	"DW_OP_lit29",							\
731 	"DW_OP_lit30",							\
732 	"DW_OP_lit31",							\
733 	"DW_OP_reg0",							\
734 	"DW_OP_reg1",							\
735 	"DW_OP_reg2",							\
736 	"DW_OP_reg3",							\
737 	"DW_OP_reg4",							\
738 	"DW_OP_reg5",							\
739 	"DW_OP_reg6",							\
740 	"DW_OP_reg7",							\
741 	"DW_OP_reg8",							\
742 	"DW_OP_reg9",							\
743 	"DW_OP_reg10",							\
744 	"DW_OP_reg11",							\
745 	"DW_OP_reg12",							\
746 	"DW_OP_reg13",							\
747 	"DW_OP_reg14",							\
748 	"DW_OP_reg15",							\
749 	"DW_OP_reg16",							\
750 	"DW_OP_reg17",							\
751 	"DW_OP_reg18",							\
752 	"DW_OP_reg19",							\
753 	"DW_OP_reg20",							\
754 	"DW_OP_reg21",							\
755 	"DW_OP_reg22",							\
756 	"DW_OP_reg23",							\
757 	"DW_OP_reg24",							\
758 	"DW_OP_reg25",							\
759 	"DW_OP_reg26",							\
760 	"DW_OP_reg27",							\
761 	"DW_OP_reg28",							\
762 	"DW_OP_reg29",							\
763 	"DW_OP_reg30",							\
764 	"DW_OP_reg31",							\
765 	"DW_OP_breg0",							\
766 	"DW_OP_breg1",							\
767 	"DW_OP_breg2",							\
768 	"DW_OP_breg3",							\
769 	"DW_OP_breg4",							\
770 	"DW_OP_breg5",							\
771 	"DW_OP_breg6",							\
772 	"DW_OP_breg7",							\
773 	"DW_OP_breg8",							\
774 	"DW_OP_breg9",							\
775 	"DW_OP_breg10",							\
776 	"DW_OP_breg11",							\
777 	"DW_OP_breg12",							\
778 	"DW_OP_breg13",							\
779 	"DW_OP_breg14",							\
780 	"DW_OP_breg15",							\
781 	"DW_OP_breg16",							\
782 	"DW_OP_breg17",							\
783 	"DW_OP_breg18",							\
784 	"DW_OP_breg19",							\
785 	"DW_OP_breg20",							\
786 	"DW_OP_breg21",							\
787 	"DW_OP_breg22",							\
788 	"DW_OP_breg23",							\
789 	"DW_OP_breg24",							\
790 	"DW_OP_breg25",							\
791 	"DW_OP_breg26",							\
792 	"DW_OP_breg27",							\
793 	"DW_OP_breg28",							\
794 	"DW_OP_breg29",							\
795 	"DW_OP_breg30",							\
796 	"DW_OP_breg31",							\
797 	"DW_OP_regx",							\
798 	"DW_OP_fbreg",							\
799 	"DW_OP_bregx",							\
800 	"DW_OP_piece",							\
801 	"DW_OP_deref_size",						\
802 	"DW_OP_xderef_size",						\
803 	"DW_OP_nop",							\
804 	"DW_OP_push_object_address",					\
805 	"DW_OP_call2",							\
806 	"DW_OP_call4",							\
807 	"DW_OP_call_ref",						\
808 	"DW_OP_form_tls_address",					\
809 	"DW_OP_call_frame_cfa",						\
810 	"DW_OP_bit_piece",						\
811 	"DW_OP_implicit_value",						\
812 	"DW_OP_stack_value",						\
813 
814 #define DW_ATE_address		 	0x1
815 #define DW_ATE_boolean		 	0x2
816 #define DW_ATE_complex_float	 	0x3
817 #define DW_ATE_float		 	0x4
818 #define DW_ATE_signed		 	0x5
819 #define DW_ATE_signed_char	 	0x6
820 #define DW_ATE_unsigned		 	0x7
821 #define DW_ATE_unsigned_char	 	0x8
822 #define DW_ATE_imaginary_float	 	0x9
823 #define DW_ATE_packed_decimal	 	0xa
824 #define DW_ATE_numeric_string	 	0xb
825 #define DW_ATE_edited		 	0xc
826 #define DW_ATE_signed_fixed	 	0xd
827 #define DW_ATE_unsigned_fixed	 	0xe
828 #define DW_ATE_decimal_float	 	0xf
829 #define DW_ATE_lo_user		 	0x80
830 #define DW_ATE_hi_user		 	0xff
831 
832 #define DW_ACCESS_public		0x01
833 #define DW_ACCESS_protected	 	0x02
834 #define DW_ACCESS_private	 	0x03
835 
836 #define	DW_END_default			0x00
837 #define	DW_END_big			0x01
838 #define	DW_END_little			0x02
839 #define	DW_END_lo_user			0x40
840 #define	DW_END_high_user		0xff
841 
842 #define DW_VIS_local		 	0x01
843 #define DW_VIS_exported		 	0x02
844 #define DW_VIS_qualified		0x03
845 
846 #define DW_VIRTUALITY_none	 	0x00
847 #define DW_VIRTUALITY_virtual	 	0x01
848 #define DW_VIRTUALITY_pure_virtual 	0x02
849 
850 #define DW_LANG_C89		 	0x0001
851 #define DW_LANG_C		 	0x0002
852 #define DW_LANG_Ada83		 	0x0003
853 #define DW_LANG_C_plus_plus	 	0x0004
854 #define DW_LANG_Cobol74		 	0x0005
855 #define DW_LANG_Cobol85		 	0x0006
856 #define DW_LANG_Fortran77	 	0x0007
857 #define DW_LANG_Fortran90	 	0x0008
858 #define DW_LANG_Pascal83		0x0009
859 #define DW_LANG_Modula2		 	0x000a
860 #define DW_LANG_Java		 	0x000b
861 #define DW_LANG_C99		 	0x000c
862 #define DW_LANG_Ada95		 	0x000d
863 #define DW_LANG_Fortran95	 	0x000e
864 #define DW_LANG_PLI		 	0x000f
865 #define DW_LANG_ObjC		 	0x0010
866 #define DW_LANG_ObjC_plus_plus	 	0x0011
867 #define DW_LANG_UPC		 	0x0012
868 #define DW_LANG_D		 	0x0013
869 #define DW_LANG_lo_user		 	0x8000
870 #define DW_LANG_hi_user		 	0xffff
871 
872 #define DW_ID_case_sensitive	 	0x00
873 #define DW_ID_up_case		 	0x01
874 #define DW_ID_down_case		 	0x02
875 #define DW_ID_case_insensitive	 	0x03
876 
877 #define DW_CC_normal		 	0x01
878 #define DW_CC_program		 	0x02
879 #define DW_CC_nocall		 	0x03
880 #define DW_CC_lo_user		 	0x40
881 #define DW_CC_hi_user		 	0xff
882 
883 #define DW_INL_not_inlined	 	0x00
884 #define DW_INL_inlined		 	0x01
885 #define DW_INL_declared_not_inlined 	0x02
886 #define DW_INL_declared_inlined	 	0x03
887 
888 #define DW_ORD_row_major		0x00
889 #define DW_ORD_col_major		0x01
890 
891 #define	DW_DS_unsigned			0x01
892 #define	DW_DS_leading_overpunch		0x02
893 #define	DW_DS_trailing_overpunch	0x03
894 #define	DW_DS_leading_separate		0x04
895 #define	DW_DS_trailing_separate		0x05
896 
897 #define DW_DSC_label		 	0x00
898 #define DW_DSC_range		 	0x01
899 
900 #define DW_LNS_copy		 	0x01
901 #define DW_LNS_advance_pc	 	0x02
902 #define DW_LNS_advance_line	 	0x03
903 #define DW_LNS_set_file		 	0x04
904 #define DW_LNS_set_column	 	0x05
905 #define DW_LNS_negate_stmt	 	0x06
906 #define DW_LNS_set_basic_block	 	0x07
907 #define DW_LNS_const_add_pc	 	0x08
908 #define DW_LNS_fixed_advance_pc	 	0x09
909 #define DW_LNS_set_prologue_end	 	0x0a
910 #define DW_LNS_set_epilogue_begin 	0x0b
911 #define DW_LNS_set_isa		 	0x0c
912 
913 #define DW_LNE_end_sequence	 	0x01
914 #define DW_LNE_set_address	 	0x02
915 #define DW_LNE_define_file	 	0x03
916 #define DW_LNE_lo_user		 	0x80
917 #define DW_LNE_hi_user		 	0xff
918 
919 #define DW_MACINFO_define	 	0x01
920 #define DW_MACINFO_undef		0x02
921 #define DW_MACINFO_start_file	 	0x03
922 #define DW_MACINFO_end_file	 	0x04
923 #define DW_MACINFO_vendor_ext	 	0xff
924 
925 #define DW_CFA_advance_loc		0x40
926 #define DW_CFA_offset	 		0x80
927 #define DW_CFA_restore	 		0xc0
928 #define DW_CFA_extended			0
929 
930 #define DW_CFA_nop	 		0x00
931 #define DW_CFA_set_loc	 		0x01
932 #define DW_CFA_advance_loc1 		0x02
933 #define DW_CFA_advance_loc2 		0x03
934 #define DW_CFA_advance_loc4 		0x04
935 #define DW_CFA_offset_extended 		0x05
936 #define DW_CFA_restore_extended 	0x06
937 #define DW_CFA_undefined		0x07
938 #define DW_CFA_same_value 		0x08
939 #define DW_CFA_register	 		0x09
940 #define DW_CFA_remember_state 		0x0a
941 #define DW_CFA_restore_state 		0x0b
942 #define DW_CFA_def_cfa	 		0x0c
943 #define DW_CFA_def_cfa_register 	0x0d
944 #define DW_CFA_def_cfa_offset 		0x0e
945 #define DW_CFA_def_cfa_expression 	0x0f
946 #define DW_CFA_expression 		0x10
947 #define DW_CFA_offset_extended_sf 	0x11
948 #define DW_CFA_def_cfa_sf 		0x12
949 #define DW_CFA_def_cfa_offset_sf 	0x13
950 #define DW_CFA_val_offset		0x14
951 #define DW_CFA_val_offset_sf 		0x15
952 #define DW_CFA_val_expression 		0x16
953 #define DW_CFA_lo_user	 		0x1c
954 #define DW_CFA_high_user	 	0x3f
955 
956 /*
957  * LSB(Linux Standard Base) extension to DWARF2.
958  */
959 
960 #define	DW_EH_PE_absptr			0x00
961 #define	DW_EH_PE_uleb128		0x01
962 #define	DW_EH_PE_udata2			0x02
963 #define	DW_EH_PE_udata4			0x03
964 #define	DW_EH_PE_udata8			0x04
965 #define	DW_EH_PE_sleb128		0x09
966 #define	DW_EH_PE_sdata2			0x0a
967 #define	DW_EH_PE_sdata4			0x0b
968 #define	DW_EH_PE_sdata8			0x0c
969 #define	DW_EH_PE_pcrel			0x10
970 #define	DW_EH_PE_textrel		0x20
971 #define	DW_EH_PE_datarel		0x30
972 #define	DW_EH_PE_funcrel		0x40
973 #define	DW_EH_PE_aligned		0x50
974 #define	DW_EH_PE_omit			0xff
975 
976 #endif /* !_DWARF_H_ */
977