xref: /netbsd-src/external/bsd/elftoolchain/dist/libdwarf/dwarf_dump.c (revision 53b02e147d4ed531c0d2a5ca9b3e8026ba3e99b5)
1 /*	$NetBSD: dwarf_dump.c,v 1.3 2016/02/20 02:43:41 christos Exp $	*/
2 
3 /*-
4  * Copyright (c) 2007 John Birrell (jb@freebsd.org)
5  * Copyright (c) 2009 Kai Wang
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 #include "_libdwarf.h"
31 
32 __RCSID("$NetBSD: dwarf_dump.c,v 1.3 2016/02/20 02:43:41 christos Exp $");
33 ELFTC_VCSID("Id: dwarf_dump.c 3052 2014-05-26 20:36:24Z kaiwang27 ");
34 
35 int
36 dwarf_get_ACCESS_name(unsigned access, const char **s)
37 {
38 
39 	assert(s != NULL);
40 
41 	switch (access) {
42 	case DW_ACCESS_public:
43 		*s = "DW_ACCESS_public"; break;
44 	case DW_ACCESS_protected:
45 		*s = "DW_ACCESS_protected"; break;
46 	case DW_ACCESS_private:
47 		*s = "DW_ACCESS_private"; break;
48 	default:
49 		return (DW_DLV_NO_ENTRY);
50 	}
51 
52 	return (DW_DLV_OK);
53 }
54 
55 int
56 dwarf_get_AT_name(unsigned attr, const char **s)
57 {
58 
59 	assert(s != NULL);
60 
61 	switch (attr) {
62 	case DW_AT_abstract_origin:
63 		*s = "DW_AT_abstract_origin"; break;
64 	case DW_AT_accessibility:
65 		*s = "DW_AT_accessibility"; break;
66 	case DW_AT_address_class:
67 		*s = "DW_AT_address_class"; break;
68 	case DW_AT_artificial:
69 		*s = "DW_AT_artificial"; break;
70 	case DW_AT_allocated:
71 		*s = "DW_AT_allocated"; break;
72 	case DW_AT_associated:
73 		*s = "DW_AT_associated"; break;
74 	case DW_AT_base_types:
75 		*s = "DW_AT_base_types"; break;
76 	case DW_AT_binary_scale:
77 		*s = "DW_AT_binary_scale"; break;
78 	case DW_AT_bit_offset:
79 		*s = "DW_AT_bit_offset"; break;
80 	case DW_AT_bit_size:
81 		*s = "DW_AT_bit_size"; break;
82 	case DW_AT_bit_stride:
83 		*s = "DW_AT_bit_stride"; break;
84 	case DW_AT_byte_size:
85 		*s = "DW_AT_byte_size"; break;
86 	case DW_AT_byte_stride:
87 		*s = "DW_AT_byte_stride"; break;
88 	case DW_AT_calling_convention:
89 		*s = "DW_AT_calling_convention"; break;
90 	case DW_AT_common_reference:
91 		*s = "DW_AT_common_reference"; break;
92 	case DW_AT_comp_dir:
93 		*s = "DW_AT_comp_dir"; break;
94 	case DW_AT_const_expr:
95 		*s = "DW_AT_const_expr"; break;
96 	case DW_AT_const_value:
97 		*s = "DW_AT_const_value"; break;
98 	case DW_AT_containing_type:
99 		*s = "DW_AT_containing_type"; break;
100 	case DW_AT_count:
101 		*s = "DW_AT_count"; break;
102 	case DW_AT_call_column:
103 		*s = "DW_AT_call_column"; break;
104 	case DW_AT_call_file:
105 		*s = "DW_AT_call_file"; break;
106 	case DW_AT_call_line:
107 		*s = "DW_AT_call_line"; break;
108 	case DW_AT_data_bit_offset:
109 		*s = "DW_AT_data_bit_offset"; break;
110 	case DW_AT_data_location:
111 		*s = "DW_AT_data_location"; break;
112 	case DW_AT_data_member_location:
113 		*s = "DW_AT_data_member_location"; break;
114 	case DW_AT_decl_column:
115 		*s = "DW_AT_decl_column"; break;
116 	case DW_AT_decl_file:
117 		*s = "DW_AT_decl_file"; break;
118 	case DW_AT_decl_line:
119 		*s = "DW_AT_decl_line"; break;
120 	case DW_AT_declaration:
121 		*s = "DW_AT_declaration"; break;
122 	case DW_AT_default_value:
123 		*s = "DW_AT_default_value"; break;
124 	case DW_AT_decimal_scale:
125 		*s = "DW_AT_decimal_scale"; break;
126 	case DW_AT_decimal_sign:
127 		*s = "DW_AT_decimal_sign"; break;
128 	case DW_AT_description:
129 		*s = "DW_AT_description"; break;
130 	case DW_AT_digit_count:
131 		*s = "DW_AT_digit_count"; break;
132 	case DW_AT_discr:
133 		*s = "DW_AT_discr"; break;
134 	case DW_AT_discr_list:
135 		*s = "DW_AT_discr_list"; break;
136 	case DW_AT_discr_value:
137 		*s = "DW_AT_discr_value"; break;
138 	case DW_AT_element_list:
139 		*s = "DW_AT_element_list"; break;
140 	case DW_AT_encoding:
141 		*s = "DW_AT_encoding"; break;
142 	case DW_AT_enum_class:
143 		*s = "DW_AT_enum_class"; break;
144 	case DW_AT_external:
145 		*s = "DW_AT_external"; break;
146 	case DW_AT_entry_pc:
147 		*s = "DW_AT_entry_pc"; break;
148 	case DW_AT_extension:
149 		*s = "DW_AT_extension"; break;
150 	case DW_AT_explicit:
151 		*s = "DW_AT_explicit"; break;
152 	case DW_AT_endianity:
153 		*s = "DW_AT_endianity"; break;
154 	case DW_AT_elemental:
155 		*s = "DW_AT_elemental"; break;
156 	case DW_AT_frame_base:
157 		*s = "DW_AT_frame_base"; break;
158 	case DW_AT_friend:
159 		*s = "DW_AT_friend"; break;
160 	case DW_AT_high_pc:
161 		*s = "DW_AT_high_pc"; break;
162 	case DW_AT_hi_user:
163 		*s = "DW_AT_hi_user"; break;
164 	case DW_AT_identifier_case:
165 		*s = "DW_AT_identifier_case"; break;
166 	case DW_AT_import:
167 		*s = "DW_AT_import"; break;
168 	case DW_AT_inline:
169 		*s = "DW_AT_inline"; break;
170 	case DW_AT_is_optional:
171 		*s = "DW_AT_is_optional"; break;
172 	case DW_AT_language:
173 		*s = "DW_AT_language"; break;
174 	case DW_AT_linkage_name:
175 		*s = "DW_AT_linkage_name"; break;
176 	case DW_AT_lo_user:
177 		*s = "DW_AT_lo_user"; break;
178 	case DW_AT_location:
179 		*s = "DW_AT_location"; break;
180 	case DW_AT_low_pc:
181 		*s = "DW_AT_low_pc"; break;
182 	case DW_AT_lower_bound:
183 		*s = "DW_AT_lower_bound"; break;
184 	case DW_AT_macro_info:
185 		*s = "DW_AT_macro_info"; break;
186 	case DW_AT_main_subprogram:
187 		*s = "DW_AT_main_subprogram"; break;
188 	case DW_AT_mutable:
189 		*s = "DW_AT_mutable"; break;
190 	case DW_AT_member:
191 		*s = "DW_AT_member"; break;
192 	case DW_AT_name:
193 		*s = "DW_AT_name"; break;
194 	case DW_AT_namelist_item:
195 		*s = "DW_AT_namelist_item"; break;
196 	case DW_AT_ordering:
197 		*s = "DW_AT_ordering"; break;
198 	case DW_AT_object_pointer:
199 		*s = "DW_AT_object_pointer"; break;
200 	case DW_AT_priority:
201 		*s = "DW_AT_priority"; break;
202 	case DW_AT_producer:
203 		*s = "DW_AT_producer"; break;
204 	case DW_AT_prototyped:
205 		*s = "DW_AT_prototyped"; break;
206 	case DW_AT_picture_string:
207 		*s = "DW_AT_picture_string"; break;
208 	case DW_AT_pure:
209 		*s = "DW_AT_pure"; break;
210 	case DW_AT_return_addr:
211 		*s = "DW_AT_return_addr"; break;
212 	case DW_AT_ranges:
213 		*s = "DW_AT_ranges"; break;
214 	case DW_AT_recursive:
215 		*s = "DW_AT_recursive"; break;
216 	case DW_AT_segment:
217 		*s = "DW_AT_segment"; break;
218 	case DW_AT_sibling:
219 		*s = "DW_AT_sibling"; break;
220 	case DW_AT_signature:
221 		*s = "DW_AT_signature"; break;
222 	case DW_AT_specification:
223 		*s = "DW_AT_specification"; break;
224 	case DW_AT_start_scope:
225 		*s = "DW_AT_start_scope"; break;
226 	case DW_AT_static_link:
227 		*s = "DW_AT_static_link"; break;
228 	case DW_AT_stmt_list:
229 		*s = "DW_AT_stmt_list"; break;
230 	case DW_AT_string_length:
231 		*s = "DW_AT_string_length"; break;
232 	case DW_AT_subscr_data:
233 		*s = "DW_AT_subscr_data"; break;
234 	case DW_AT_small:
235 		*s = "DW_AT_small"; break;
236 	case DW_AT_type:
237 		*s = "DW_AT_type"; break;
238 	case DW_AT_trampoline:
239 		*s = "DW_AT_trampoline"; break;
240 	case DW_AT_threads_scaled:
241 		*s = "DW_AT_threads_scaled"; break;
242 	case DW_AT_upper_bound:
243 		*s = "DW_AT_upper_bound"; break;
244 	case DW_AT_use_location:
245 		*s = "DW_AT_use_location"; break;
246 	case DW_AT_use_UTF8:
247 		*s = "DW_AT_use_UTF8"; break;
248 	case DW_AT_variable_parameter:
249 		*s = "DW_AT_variable_parameter"; break;
250 	case DW_AT_virtuality:
251 		*s = "DW_AT_virtuality"; break;
252 	case DW_AT_visibility:
253 		*s = "DW_AT_visibility"; break;
254 	case DW_AT_vtable_elem_location:
255 		*s = "DW_AT_vtable_elem_location"; break;
256 	case DW_AT_sf_names:
257 		*s = "DW_AT_sf_names"; break;
258 	case DW_AT_src_info:
259 		*s = "DW_AT_src_info"; break;
260 	case DW_AT_mac_info:
261 		*s = "DW_AT_mac_info"; break;
262 	case DW_AT_src_coords:
263 		*s = "DW_AT_src_coords"; break;
264 	case DW_AT_body_begin:
265 		*s = "DW_AT_body_begin"; break;
266 	case DW_AT_body_end:
267 		*s = "DW_AT_body_end"; break;
268 	case DW_AT_GNU_vector:
269 		*s = "DW_AT_GNU_vector"; break;
270 	case DW_AT_GNU_guarded_by:
271 		*s = "DW_AT_GNU_guarded_by"; break;
272 	case DW_AT_GNU_pt_guarded_by:
273 		*s = "DW_AT_GNU_pt_guarded_by"; break;
274 	case DW_AT_GNU_guarded:
275 		*s = "DW_AT_GNU_guarded"; break;
276 	case DW_AT_GNU_pt_guarded:
277 		*s = "DW_AT_GNU_pt_guarded"; break;
278 	case DW_AT_GNU_locks_excluded:
279 		*s = "DW_AT_GNU_locks_excluded"; break;
280 	case DW_AT_GNU_exclusive_locks_required:
281 		*s = "DW_AT_GNU_exclusive_locks_required"; break;
282 	case DW_AT_GNU_shared_locks_required:
283 		*s = "DW_AT_GNU_shared_locks_required"; break;
284 	case DW_AT_GNU_odr_signature:
285 		*s = "DW_AT_GNU_odr_signature"; break;
286 	case DW_AT_GNU_template_name:
287 		*s = "DW_AT_GNU_template_name"; break;
288 	case DW_AT_GNU_call_site_value:
289 		*s = "DW_AT_GNU_call_site_value"; break;
290 	case DW_AT_GNU_call_site_data_value:
291 		*s = "DW_AT_GNU_call_site_data_value"; break;
292 	case DW_AT_GNU_call_site_target:
293 		*s = "DW_AT_GNU_call_site_target"; break;
294 	case DW_AT_GNU_call_site_target_clobbered:
295 		*s = "DW_AT_GNU_call_site_target_clobbered"; break;
296 	case DW_AT_GNU_tail_call:
297 		*s = "DW_AT_GNU_tail_call"; break;
298 	case DW_AT_GNU_all_tail_call_sites:
299 		*s = "DW_AT_GNU_all_tail_call_sites"; break;
300 	case DW_AT_GNU_all_call_sites:
301 		*s = "DW_AT_GNU_all_call_sites"; break;
302 	case DW_AT_GNU_all_source_call_sites:
303 		*s = "DW_AT_GNU_all_source_call_sites"; break;
304 	default:
305 		return (DW_DLV_NO_ENTRY);
306 	}
307 
308 	return (DW_DLV_OK);
309 }
310 
311 int
312 dwarf_get_ATE_name(unsigned ate, const char **s)
313 {
314 
315 	assert(s != NULL);
316 
317 	switch(ate) {
318 	case DW_ATE_address:
319 		*s = "DW_ATE_address"; break;
320 	case DW_ATE_boolean:
321 		*s = "DW_ATE_boolean"; break;
322 	case DW_ATE_complex_float:
323 		*s = "DW_ATE_complex_float"; break;
324 	case DW_ATE_float:
325 		*s = "DW_ATE_float"; break;
326 	case DW_ATE_signed:
327 		*s = "DW_ATE_signed"; break;
328 	case DW_ATE_signed_char:
329 		*s = "DW_ATE_signed_char"; break;
330 	case DW_ATE_unsigned:
331 		*s = "DW_ATE_unsigned"; break;
332 	case DW_ATE_unsigned_char:
333 		*s = "DW_ATE_unsigned_char"; break;
334 	case DW_ATE_imaginary_float:
335 		*s = "DW_ATE_imaginary_float"; break;
336 	case DW_ATE_packed_decimal:
337 		*s = "DW_ATE_packed_decimal"; break;
338 	case DW_ATE_numeric_string:
339 		*s = "DW_ATE_numeric_string"; break;
340 	case DW_ATE_edited:
341 		*s = "DW_ATE_edited"; break;
342 	case DW_ATE_signed_fixed:
343 		*s = "DW_ATE_signed_fixed"; break;
344 	case DW_ATE_unsigned_fixed:
345 		*s = "DW_ATE_unsigned_fixed"; break;
346 	case DW_ATE_decimal_float:
347 		*s = "DW_ATE_decimal_float"; break;
348 	case DW_ATE_lo_user:
349 		*s = "DW_ATE_lo_user"; break;
350 	case DW_ATE_hi_user:
351 		*s = "DW_ATE_hi_user"; break;
352 	default:
353 		return (DW_DLV_NO_ENTRY);
354 	}
355 
356 	return (DW_DLV_OK);
357 }
358 
359 int
360 dwarf_get_CC_name(unsigned cc, const char **s)
361 {
362 
363 	assert(s != NULL);
364 
365 	switch (cc) {
366 	case DW_CC_normal:
367 		*s = "DW_CC_normal"; break;
368 	case DW_CC_program:
369 		*s = "DW_CC_program"; break;
370 	case DW_CC_nocall:
371 		*s = "DW_CC_nocall"; break;
372 	case DW_CC_lo_user:
373 		*s = "DW_CC_lo_user"; break;
374 	case DW_CC_hi_user:
375 		*s = "DW_CC_hi_user"; break;
376 	default:
377 		return (DW_DLV_NO_ENTRY);
378 	}
379 
380 	return (DW_DLV_OK);
381 }
382 
383 int
384 dwarf_get_CFA_name(unsigned cfa, const char **s)
385 {
386 
387 	assert(s != NULL);
388 
389 	switch (cfa) {
390 	case DW_CFA_advance_loc:
391 		*s = "DW_CFA_advance_loc"; break;
392 	case DW_CFA_offset:
393 		*s = "DW_CFA_offset"; break;
394 	case DW_CFA_restore:
395 		*s = "DW_CFA_restore"; break;
396 	case DW_CFA_nop:
397 		*s = "DW_CFA_nop"; break;
398 	case DW_CFA_set_loc:
399 		*s = "DW_CFA_set_loc"; break;
400 	case DW_CFA_advance_loc1:
401 		*s = "DW_CFA_advance_loc1"; break;
402 	case DW_CFA_advance_loc2:
403 		*s = "DW_CFA_advance_loc2"; break;
404 	case DW_CFA_advance_loc4:
405 		*s = "DW_CFA_advance_loc4"; break;
406 	case DW_CFA_offset_extended:
407 		*s = "DW_CFA_offset_extended"; break;
408 	case DW_CFA_restore_extended:
409 		*s = "DW_CFA_restore_extended"; break;
410 	case DW_CFA_undefined:
411 		*s = "DW_CFA_undefined"; break;
412 	case DW_CFA_same_value:
413 		*s = "DW_CFA_same_value"; break;
414 	case DW_CFA_register:
415 		*s = "DW_CFA_register"; break;
416 	case DW_CFA_remember_state:
417 		*s = "DW_CFA_remember_state"; break;
418 	case DW_CFA_restore_state:
419 		*s = "DW_CFA_restore_state"; break;
420 	case DW_CFA_def_cfa:
421 		*s = "DW_CFA_def_cfa"; break;
422 	case DW_CFA_def_cfa_register:
423 		*s = "DW_CFA_def_cfa_register"; break;
424 	case DW_CFA_def_cfa_offset:
425 		*s = "DW_CFA_def_cfa_offset"; break;
426 	case DW_CFA_def_cfa_expression:
427 		*s = "DW_CFA_def_cfa_expression"; break;
428 	case DW_CFA_expression:
429 		*s = "DW_CFA_expression"; break;
430 	case DW_CFA_offset_extended_sf:
431 		*s = "DW_CFA_offset_extended_sf"; break;
432 	case DW_CFA_def_cfa_sf:
433 		*s = "DW_CFA_def_cfa_sf"; break;
434 	case DW_CFA_def_cfa_offset_sf:
435 		*s = "DW_CFA_def_cfa_offset_sf"; break;
436 	case DW_CFA_val_offset:
437 		*s = "DW_CFA_val_offset"; break;
438 	case DW_CFA_val_offset_sf:
439 		*s = "DW_CFA_val_offset_sf"; break;
440 	case DW_CFA_val_expression:
441 		*s = "DW_CFA_val_expression"; break;
442 	case DW_CFA_lo_user:
443 		*s = "DW_CFA_lo_user"; break;
444 	case DW_CFA_high_user:
445 		*s = "DW_CFA_high_user"; break;
446 	default:
447 		return (DW_DLV_NO_ENTRY);
448 	}
449 
450 	return (DW_DLV_OK);
451 }
452 
453 int
454 dwarf_get_CHILDREN_name(unsigned children, const char **s)
455 {
456 
457 	assert(s != NULL);
458 
459 	switch (children) {
460 	case DW_CHILDREN_no:
461 		*s = "DW_CHILDREN_no"; break;
462 	case DW_CHILDREN_yes:
463 		*s = "DW_CHILDREN_yes"; break;
464 	default:
465 		return (DW_DLV_NO_ENTRY);
466 	}
467 
468 	return (DW_DLV_OK);
469 }
470 
471 int
472 dwarf_get_FORM_name(unsigned form, const char **s)
473 {
474 
475 	assert(s != NULL);
476 
477 	switch (form) {
478 	case DW_FORM_addr:
479 		*s = "DW_FORM_addr"; break;
480 	case DW_FORM_block:
481 		*s = "DW_FORM_block"; break;
482 	case DW_FORM_block1:
483 		*s = "DW_FORM_block1"; break;
484 	case DW_FORM_block2:
485 		*s = "DW_FORM_block2"; break;
486 	case DW_FORM_block4:
487 		*s = "DW_FORM_block4"; break;
488 	case DW_FORM_data1:
489 		*s = "DW_FORM_data1"; break;
490 	case DW_FORM_data2:
491 		*s = "DW_FORM_data2"; break;
492 	case DW_FORM_data4:
493 		*s = "DW_FORM_data4"; break;
494 	case DW_FORM_data8:
495 		*s = "DW_FORM_data8"; break;
496 	case DW_FORM_exprloc:
497 		*s = "DW_FORM_exprloc"; break;
498 	case DW_FORM_flag:
499 		*s = "DW_FORM_flag"; break;
500 	case DW_FORM_flag_present:
501 		*s = "DW_FORM_flag_present"; break;
502 	case DW_FORM_indirect:
503 		*s = "DW_FORM_indirect"; break;
504 	case DW_FORM_ref1:
505 		*s = "DW_FORM_ref1"; break;
506 	case DW_FORM_ref2:
507 		*s = "DW_FORM_ref2"; break;
508 	case DW_FORM_ref4:
509 		*s = "DW_FORM_ref4"; break;
510 	case DW_FORM_ref8:
511 		*s = "DW_FORM_ref8"; break;
512 	case DW_FORM_ref_addr:
513 		*s = "DW_FORM_ref_addr"; break;
514 	case DW_FORM_ref_sig8:
515 		*s = "DW_FORM_ref_sig8"; break;
516 	case DW_FORM_ref_udata:
517 		*s = "DW_FORM_ref_udata"; break;
518 	case DW_FORM_sdata:
519 		*s = "DW_FORM_sdata"; break;
520 	case DW_FORM_sec_offset:
521 		*s = "DW_FORM_sec_offset"; break;
522 	case DW_FORM_string:
523 		*s = "DW_FORM_string"; break;
524 	case DW_FORM_strp:
525 		*s = "DW_FORM_strp"; break;
526 	case DW_FORM_udata:
527 		*s = "DW_FORM_udata"; break;
528 	default:
529 		return (DW_DLV_NO_ENTRY);
530 	}
531 
532 	return (DW_DLV_OK);
533 }
534 
535 int
536 dwarf_get_DS_name(unsigned ds, const char **s)
537 {
538 
539 	assert(s != NULL);
540 
541 	switch (ds) {
542 	case DW_DS_unsigned:
543 		*s = "DW_DS_unsigned"; break;
544 	case DW_DS_leading_overpunch:
545 		*s = "DW_DS_leading_overpunch"; break;
546 	case DW_DS_trailing_overpunch:
547 		*s = "DW_DS_trailing_overpunch"; break;
548 	case DW_DS_leading_separate:
549 		*s = "DW_DS_leading_separate"; break;
550 	case DW_DS_trailing_separate:
551 		*s = "DW_DS_trailing_separate";
552 	default:
553 		return (DW_DLV_NO_ENTRY);
554 	}
555 
556 	return (DW_DLV_OK);
557 }
558 
559 int
560 dwarf_get_DSC_name(unsigned dsc, const char **s)
561 {
562 
563 	assert(s != NULL);
564 
565 	switch (dsc) {
566 	case DW_DSC_label:
567 		*s = "DW_DSC_label"; break;
568 	case DW_DSC_range:
569 		*s = "DW_DSC_range"; break;
570 	default:
571 		return (DW_DLV_NO_ENTRY);
572 	}
573 
574 	return (DW_DLV_OK);
575 }
576 
577 int
578 dwarf_get_EH_name(unsigned eh, const char **s)
579 {
580 
581 	assert(s != NULL);
582 
583 	switch (eh) {
584 	case DW_EH_PE_absptr:
585 		*s = "DW_EH_PE_absptr"; break;
586 	case DW_EH_PE_uleb128:
587 		*s = "DW_EH_PE_uleb128"; break;
588 	case DW_EH_PE_udata2:
589 		*s = "DW_EH_PE_udata2"; break;
590 	case DW_EH_PE_udata4:
591 		*s = "DW_EH_PE_udata4"; break;
592 	case DW_EH_PE_udata8:
593 		*s = "DW_EH_PE_udata8"; break;
594 	case DW_EH_PE_sleb128:
595 		*s = "DW_EH_PE_sleb128"; break;
596 	case DW_EH_PE_sdata2:
597 		*s = "DW_EH_PE_sdata2"; break;
598 	case DW_EH_PE_sdata4:
599 		*s = "DW_EH_PE_sdata4"; break;
600 	case DW_EH_PE_sdata8:
601 		*s = "DW_EH_PE_sdata8"; break;
602 	case DW_EH_PE_pcrel:
603 		*s = "DW_EH_PE_pcrel"; break;
604 	case DW_EH_PE_textrel:
605 		*s = "DW_EH_PE_textrel"; break;
606 	case DW_EH_PE_datarel:
607 		*s = "DW_EH_PE_datarel"; break;
608 	case DW_EH_PE_funcrel:
609 		*s = "DW_EH_PE_funcrel"; break;
610 	case DW_EH_PE_aligned:
611 		*s = "DW_EH_PE_aligned"; break;
612 	case DW_EH_PE_omit:
613 		*s = "DW_EH_PE_omit"; break;
614 	default:
615 		return (DW_DLV_NO_ENTRY);
616 	}
617 
618 	return (DW_DLV_OK);
619 }
620 
621 int
622 dwarf_get_END_name(unsigned end, const char **s)
623 {
624 
625 	assert(s != NULL);
626 
627 	switch (end) {
628 	case DW_END_default:
629 		*s = "DW_END_default"; break;
630 	case DW_END_big:
631 		*s = "DW_END_big"; break;
632 	case DW_END_little:
633 		*s = "DW_END_little"; break;
634 	case DW_END_lo_user:
635 		*s = "DW_END_lo_user"; break;
636 	case DW_END_high_user:
637 		*s = "DW_END_high_user"; break;
638 	default:
639 		return (DW_DLV_NO_ENTRY);
640 	}
641 
642 	return (DW_DLV_OK);
643 }
644 
645 int
646 dwarf_get_ID_name(unsigned id, const char **s)
647 {
648 
649 	assert(s != NULL);
650 
651 	switch (id) {
652 	case DW_ID_case_sensitive:
653 		*s = "DW_ID_case_sensitive"; break;
654 	case DW_ID_up_case:
655 		*s = "DW_ID_up_case"; break;
656 	case DW_ID_down_case:
657 		*s = "DW_ID_down_case"; break;
658 	case DW_ID_case_insensitive:
659 		*s = "DW_ID_case_insensitive"; break;
660 	default:
661 		return (DW_DLV_NO_ENTRY);
662 	}
663 
664 	return (DW_DLV_OK);
665 }
666 
667 int
668 dwarf_get_INL_name(unsigned inl, const char **s)
669 {
670 
671 	assert(s != NULL);
672 
673 	switch (inl) {
674 	case DW_INL_not_inlined:
675 		*s = "DW_INL_not_inlined"; break;
676 	case DW_INL_inlined:
677 		*s = "DW_INL_inlined"; break;
678 	case DW_INL_declared_not_inlined:
679 		*s = "DW_INL_declared_not_inlined"; break;
680 	case DW_INL_declared_inlined:
681 		*s = "DW_INL_declared_inlined"; break;
682 	default:
683 		return (DW_DLV_NO_ENTRY);
684 	}
685 
686 	return (DW_DLV_OK);
687 }
688 
689 int
690 dwarf_get_LANG_name(unsigned lang, const char **s)
691 {
692 
693 	assert(s != NULL);
694 
695 	switch (lang) {
696 	case DW_LANG_C89:
697 		*s = "DW_LANG_C89"; break;
698 	case DW_LANG_C:
699 		*s = "DW_LANG_C"; break;
700 	case DW_LANG_Ada83:
701 		*s = "DW_LANG_Ada83"; break;
702 	case DW_LANG_C_plus_plus:
703 		*s = "DW_LANG_C_plus_plus"; break;
704 	case DW_LANG_Cobol74:
705 		*s = "DW_LANG_Cobol74"; break;
706 	case DW_LANG_Cobol85:
707 		*s = "DW_LANG_Cobol85"; break;
708 	case DW_LANG_Fortran77:
709 		*s = "DW_LANG_Fortran77"; break;
710 	case DW_LANG_Fortran90:
711 		*s = "DW_LANG_Fortran90"; break;
712 	case DW_LANG_Pascal83:
713 		*s = "DW_LANG_Pascal83"; break;
714 	case DW_LANG_Modula2:
715 		*s = "DW_LANG_Modula2"; break;
716 	case DW_LANG_Java:
717 		*s = "DW_LANG_Java"; break;
718 	case DW_LANG_C99:
719 		*s = "DW_LANG_C99"; break;
720 	case DW_LANG_Ada95:
721 		*s = "DW_LANG_Ada95"; break;
722 	case DW_LANG_Fortran95:
723 		*s = "DW_LANG_Fortran95"; break;
724 	case DW_LANG_PLI:
725 		*s = "DW_LANG_PLI"; break;
726 	case DW_LANG_ObjC:
727 		*s = "DW_LANG_ObjC"; break;
728 	case DW_LANG_ObjC_plus_plus:
729 		*s = "DW_LANG_ObjC_plus_plus"; break;
730 	case DW_LANG_UPC:
731 		*s = "DW_LANG_UPC"; break;
732 	case DW_LANG_D:
733 		*s = "DW_LANG_D"; break;
734 	case DW_LANG_lo_user:
735 		*s = "DW_LANG_lo_user"; break;
736 	case DW_LANG_hi_user:
737 		*s = "DW_LANG_hi_user"; break;
738 	default:
739 		return (DW_DLV_NO_ENTRY);
740 	}
741 
742 	return (DW_DLV_OK);
743 }
744 
745 int
746 dwarf_get_LNE_name(unsigned lne, const char **s)
747 {
748 
749 	assert(s != NULL);
750 
751 	switch (lne) {
752 	case DW_LNE_end_sequence:
753 		*s = "DW_LNE_end_sequence"; break;
754 	case DW_LNE_set_address:
755 		*s = "DW_LNE_set_address"; break;
756 	case DW_LNE_define_file:
757 		*s = "DW_LNE_define_file"; break;
758 	case DW_LNE_lo_user:
759 		*s = "DW_LNE_lo_user"; break;
760 	case DW_LNE_hi_user:
761 		*s = "DW_LNE_hi_user"; break;
762 	default:
763 		return (DW_DLV_NO_ENTRY);
764 	}
765 
766 	return (DW_DLV_OK);
767 }
768 
769 int
770 dwarf_get_LNS_name(unsigned lns, const char **s)
771 {
772 
773 	assert(s != NULL);
774 
775 	switch (lns) {
776 	case DW_LNS_copy:
777 		*s = "DW_LNS_copy"; break;
778 	case DW_LNS_advance_pc:
779 		*s = "DW_LNS_advance_pc"; break;
780 	case DW_LNS_advance_line:
781 		*s = "DW_LNS_advance_line"; break;
782 	case DW_LNS_set_file:
783 		*s = "DW_LNS_set_file"; break;
784 	case DW_LNS_set_column:
785 		*s = "DW_LNS_set_column"; break;
786 	case DW_LNS_negate_stmt:
787 		*s = "DW_LNS_negate_stmt"; break;
788 	case DW_LNS_set_basic_block:
789 		*s = "DW_LNS_set_basic_block"; break;
790 	case DW_LNS_const_add_pc:
791 		*s = "DW_LNS_const_add_pc"; break;
792 	case DW_LNS_fixed_advance_pc:
793 		*s = "DW_LNS_fixed_advance_pc"; break;
794 	case DW_LNS_set_prologue_end:
795 		*s = "DW_LNS_set_prologue_end"; break;
796 	case DW_LNS_set_epilogue_begin:
797 		*s = "DW_LNS_set_epilogue_begin"; break;
798 	case DW_LNS_set_isa:
799 		*s = "DW_LNS_set_isa"; break;
800 	default:
801 		return (DW_DLV_NO_ENTRY);
802 	}
803 
804 	return (DW_DLV_OK);
805 }
806 
807 int
808 dwarf_get_MACINFO_name(unsigned mi, const char **s)
809 {
810 
811 	assert(s != NULL);
812 
813 	switch (mi) {
814 	case DW_MACINFO_define:
815 		*s = "DW_MACINFO_define"; break;
816 	case DW_MACINFO_undef:
817 		*s = "DW_MACINFO_undef"; break;
818 	case DW_MACINFO_start_file:
819 		*s = "DW_MACINFO_start_file"; break;
820 	case DW_MACINFO_end_file:
821 		*s = "DW_MACINFO_end_file"; break;
822 	case DW_MACINFO_vendor_ext:
823 		*s = "DW_MACINFO_vendor_ext"; break;
824 	default:
825 		return (DW_DLV_NO_ENTRY);
826 	}
827 
828 	return (DW_DLV_OK);
829 }
830 
831 int
832 dwarf_get_OP_name(unsigned op, const char **s)
833 {
834 
835 	assert(s != NULL);
836 
837 	switch (op) {
838 	case DW_OP_deref:
839 		*s = "DW_OP_deref"; break;
840 	case DW_OP_reg0:
841 		*s = "DW_OP_reg0"; break;
842 	case DW_OP_reg1:
843 		*s = "DW_OP_reg1"; break;
844 	case DW_OP_reg2:
845 		*s = "DW_OP_reg2"; break;
846 	case DW_OP_reg3:
847 		*s = "DW_OP_reg3"; break;
848 	case DW_OP_reg4:
849 		*s = "DW_OP_reg4"; break;
850 	case DW_OP_reg5:
851 		*s = "DW_OP_reg5"; break;
852 	case DW_OP_reg6:
853 		*s = "DW_OP_reg6"; break;
854 	case DW_OP_reg7:
855 		*s = "DW_OP_reg7"; break;
856 	case DW_OP_reg8:
857 		*s = "DW_OP_reg8"; break;
858 	case DW_OP_reg9:
859 		*s = "DW_OP_reg9"; break;
860 	case DW_OP_reg10:
861 		*s = "DW_OP_reg10"; break;
862 	case DW_OP_reg11:
863 		*s = "DW_OP_reg11"; break;
864 	case DW_OP_reg12:
865 		*s = "DW_OP_reg12"; break;
866 	case DW_OP_reg13:
867 		*s = "DW_OP_reg13"; break;
868 	case DW_OP_reg14:
869 		*s = "DW_OP_reg14"; break;
870 	case DW_OP_reg15:
871 		*s = "DW_OP_reg15"; break;
872 	case DW_OP_reg16:
873 		*s = "DW_OP_reg16"; break;
874 	case DW_OP_reg17:
875 		*s = "DW_OP_reg17"; break;
876 	case DW_OP_reg18:
877 		*s = "DW_OP_reg18"; break;
878 	case DW_OP_reg19:
879 		*s = "DW_OP_reg19"; break;
880 	case DW_OP_reg20:
881 		*s = "DW_OP_reg20"; break;
882 	case DW_OP_reg21:
883 		*s = "DW_OP_reg21"; break;
884 	case DW_OP_reg22:
885 		*s = "DW_OP_reg22"; break;
886 	case DW_OP_reg23:
887 		*s = "DW_OP_reg23"; break;
888 	case DW_OP_reg24:
889 		*s = "DW_OP_reg24"; break;
890 	case DW_OP_reg25:
891 		*s = "DW_OP_reg25"; break;
892 	case DW_OP_reg26:
893 		*s = "DW_OP_reg26"; break;
894 	case DW_OP_reg27:
895 		*s = "DW_OP_reg27"; break;
896 	case DW_OP_reg28:
897 		*s = "DW_OP_reg28"; break;
898 	case DW_OP_reg29:
899 		*s = "DW_OP_reg29"; break;
900 	case DW_OP_reg30:
901 		*s = "DW_OP_reg30"; break;
902 	case DW_OP_reg31:
903 		*s = "DW_OP_reg31"; break;
904 	case DW_OP_lit0:
905 		*s = "DW_OP_lit0"; break;
906 	case DW_OP_lit1:
907 		*s = "DW_OP_lit1"; break;
908 	case DW_OP_lit2:
909 		*s = "DW_OP_lit2"; break;
910 	case DW_OP_lit3:
911 		*s = "DW_OP_lit3"; break;
912 	case DW_OP_lit4:
913 		*s = "DW_OP_lit4"; break;
914 	case DW_OP_lit5:
915 		*s = "DW_OP_lit5"; break;
916 	case DW_OP_lit6:
917 		*s = "DW_OP_lit6"; break;
918 	case DW_OP_lit7:
919 		*s = "DW_OP_lit7"; break;
920 	case DW_OP_lit8:
921 		*s = "DW_OP_lit8"; break;
922 	case DW_OP_lit9:
923 		*s = "DW_OP_lit9"; break;
924 	case DW_OP_lit10:
925 		*s = "DW_OP_lit10"; break;
926 	case DW_OP_lit11:
927 		*s = "DW_OP_lit11"; break;
928 	case DW_OP_lit12:
929 		*s = "DW_OP_lit12"; break;
930 	case DW_OP_lit13:
931 		*s = "DW_OP_lit13"; break;
932 	case DW_OP_lit14:
933 		*s = "DW_OP_lit14"; break;
934 	case DW_OP_lit15:
935 		*s = "DW_OP_lit15"; break;
936 	case DW_OP_lit16:
937 		*s = "DW_OP_lit16"; break;
938 	case DW_OP_lit17:
939 		*s = "DW_OP_lit17"; break;
940 	case DW_OP_lit18:
941 		*s = "DW_OP_lit18"; break;
942 	case DW_OP_lit19:
943 		*s = "DW_OP_lit19"; break;
944 	case DW_OP_lit20:
945 		*s = "DW_OP_lit20"; break;
946 	case DW_OP_lit21:
947 		*s = "DW_OP_lit21"; break;
948 	case DW_OP_lit22:
949 		*s = "DW_OP_lit22"; break;
950 	case DW_OP_lit23:
951 		*s = "DW_OP_lit23"; break;
952 	case DW_OP_lit24:
953 		*s = "DW_OP_lit24"; break;
954 	case DW_OP_lit25:
955 		*s = "DW_OP_lit25"; break;
956 	case DW_OP_lit26:
957 		*s = "DW_OP_lit26"; break;
958 	case DW_OP_lit27:
959 		*s = "DW_OP_lit27"; break;
960 	case DW_OP_lit28:
961 		*s = "DW_OP_lit28"; break;
962 	case DW_OP_lit29:
963 		*s = "DW_OP_lit29"; break;
964 	case DW_OP_lit30:
965 		*s = "DW_OP_lit30"; break;
966 	case DW_OP_lit31:
967 		*s = "DW_OP_lit31"; break;
968 	case DW_OP_dup:
969 		*s = "DW_OP_dup"; break;
970 	case DW_OP_drop:
971 		*s = "DW_OP_drop"; break;
972 	case DW_OP_over:
973 		*s = "DW_OP_over"; break;
974 	case DW_OP_swap:
975 		*s = "DW_OP_swap"; break;
976 	case DW_OP_rot:
977 		*s = "DW_OP_rot"; break;
978 	case DW_OP_xderef:
979 		*s = "DW_OP_xderef"; break;
980 	case DW_OP_abs:
981 		*s = "DW_OP_abs"; break;
982 	case DW_OP_and:
983 		*s = "DW_OP_and"; break;
984 	case DW_OP_div:
985 		*s = "DW_OP_div"; break;
986 	case DW_OP_minus:
987 		*s = "DW_OP_minus"; break;
988 	case DW_OP_mod:
989 		*s = "DW_OP_mod"; break;
990 	case DW_OP_mul:
991 		*s = "DW_OP_mul"; break;
992 	case DW_OP_neg:
993 		*s = "DW_OP_neg"; break;
994 	case DW_OP_not:
995 		*s = "DW_OP_not"; break;
996 	case DW_OP_or:
997 		*s = "DW_OP_or"; break;
998 	case DW_OP_plus:
999 		*s = "DW_OP_plus"; break;
1000 	case DW_OP_shl:
1001 		*s = "DW_OP_shl"; break;
1002 	case DW_OP_shr:
1003 		*s = "DW_OP_shr"; break;
1004 	case DW_OP_shra:
1005 		*s = "DW_OP_shra"; break;
1006 	case DW_OP_xor:
1007 		*s = "DW_OP_xor"; break;
1008 	case DW_OP_eq:
1009 		*s = "DW_OP_eq"; break;
1010 	case DW_OP_ge:
1011 		*s = "DW_OP_ge"; break;
1012 	case DW_OP_gt:
1013 		*s = "DW_OP_gt"; break;
1014 	case DW_OP_le:
1015 		*s = "DW_OP_le"; break;
1016 	case DW_OP_lt:
1017 		*s = "DW_OP_lt"; break;
1018 	case DW_OP_ne:
1019 		*s = "DW_OP_ne"; break;
1020 	case DW_OP_nop:
1021 		*s = "DW_OP_nop"; break;
1022 	case DW_OP_const1u:
1023 		*s = "DW_OP_const1u"; break;
1024 	case DW_OP_const1s:
1025 		*s = "DW_OP_const1s"; break;
1026 	case DW_OP_pick:
1027 		*s = "DW_OP_pick"; break;
1028 	case DW_OP_deref_size:
1029 		*s = "DW_OP_deref_size"; break;
1030 	case DW_OP_xderef_size:
1031 		*s = "DW_OP_xderef_size"; break;
1032 	case DW_OP_const2u:
1033 		*s = "DW_OP_const2u"; break;
1034 	case DW_OP_const2s:
1035 		*s = "DW_OP_const2s"; break;
1036 	case DW_OP_bra:
1037 		*s = "DW_OP_bra"; break;
1038 	case DW_OP_skip:
1039 		*s = "DW_OP_skip"; break;
1040 	case DW_OP_const4u:
1041 		*s = "DW_OP_const4u"; break;
1042 	case DW_OP_const4s:
1043 		*s = "DW_OP_const4s"; break;
1044 	case DW_OP_const8u:
1045 		*s = "DW_OP_const8u"; break;
1046 	case DW_OP_const8s:
1047 		*s = "DW_OP_const8s"; break;
1048 	case DW_OP_constu:
1049 		*s = "DW_OP_constu"; break;
1050 	case DW_OP_plus_uconst:
1051 		*s = "DW_OP_plus_uconst"; break;
1052 	case DW_OP_regx:
1053 		*s = "DW_OP_regx"; break;
1054 	case DW_OP_piece:
1055 		*s = "DW_OP_piece"; break;
1056 	case DW_OP_consts:
1057 		*s = "DW_OP_consts"; break;
1058 	case DW_OP_breg0:
1059 		*s = "DW_OP_breg0"; break;
1060 	case DW_OP_breg1:
1061 		*s = "DW_OP_breg1"; break;
1062 	case DW_OP_breg2:
1063 		*s = "DW_OP_breg2"; break;
1064 	case DW_OP_breg3:
1065 		*s = "DW_OP_breg3"; break;
1066 	case DW_OP_breg4:
1067 		*s = "DW_OP_breg4"; break;
1068 	case DW_OP_breg5:
1069 		*s = "DW_OP_breg5"; break;
1070 	case DW_OP_breg6:
1071 		*s = "DW_OP_breg6"; break;
1072 	case DW_OP_breg7:
1073 		*s = "DW_OP_breg7"; break;
1074 	case DW_OP_breg8:
1075 		*s = "DW_OP_breg8"; break;
1076 	case DW_OP_breg9:
1077 		*s = "DW_OP_breg9"; break;
1078 	case DW_OP_breg10:
1079 		*s = "DW_OP_breg10"; break;
1080 	case DW_OP_breg11:
1081 		*s = "DW_OP_breg11"; break;
1082 	case DW_OP_breg12:
1083 		*s = "DW_OP_breg12"; break;
1084 	case DW_OP_breg13:
1085 		*s = "DW_OP_breg13"; break;
1086 	case DW_OP_breg14:
1087 		*s = "DW_OP_breg14"; break;
1088 	case DW_OP_breg15:
1089 		*s = "DW_OP_breg15"; break;
1090 	case DW_OP_breg16:
1091 		*s = "DW_OP_breg16"; break;
1092 	case DW_OP_breg17:
1093 		*s = "DW_OP_breg17"; break;
1094 	case DW_OP_breg18:
1095 		*s = "DW_OP_breg18"; break;
1096 	case DW_OP_breg19:
1097 		*s = "DW_OP_breg19"; break;
1098 	case DW_OP_breg20:
1099 		*s = "DW_OP_breg20"; break;
1100 	case DW_OP_breg21:
1101 		*s = "DW_OP_breg21"; break;
1102 	case DW_OP_breg22:
1103 		*s = "DW_OP_breg22"; break;
1104 	case DW_OP_breg23:
1105 		*s = "DW_OP_breg23"; break;
1106 	case DW_OP_breg24:
1107 		*s = "DW_OP_breg24"; break;
1108 	case DW_OP_breg25:
1109 		*s = "DW_OP_breg25"; break;
1110 	case DW_OP_breg26:
1111 		*s = "DW_OP_breg26"; break;
1112 	case DW_OP_breg27:
1113 		*s = "DW_OP_breg27"; break;
1114 	case DW_OP_breg28:
1115 		*s = "DW_OP_breg28"; break;
1116 	case DW_OP_breg29:
1117 		*s = "DW_OP_breg29"; break;
1118 	case DW_OP_breg30:
1119 		*s = "DW_OP_breg30"; break;
1120 	case DW_OP_breg31:
1121 		*s = "DW_OP_breg31"; break;
1122 	case DW_OP_fbreg:
1123 		*s = "DW_OP_fbreg"; break;
1124 	case DW_OP_bregx:
1125 		*s = "DW_OP_bregx"; break;
1126 	case DW_OP_addr:
1127 		*s = "DW_OP_addr"; break;
1128 	case DW_OP_push_object_address:
1129 		*s = "DW_OP_push_object_address"; break;
1130 	case DW_OP_call2:
1131 		*s = "DW_OP_call2"; break;
1132 	case DW_OP_call4:
1133 		*s = "DW_OP_call4"; break;
1134 	case DW_OP_call_ref:
1135 		*s = "DW_OP_call_ref"; break;
1136 	case DW_OP_form_tls_address:
1137 		*s = "DW_OP_form_tls_address"; break;
1138 	case DW_OP_call_frame_cfa:
1139 		*s = "DW_OP_call_frame_cfa"; break;
1140 	case DW_OP_bit_piece:
1141 		*s = "DW_OP_bit_piece"; break;
1142 	case DW_OP_implicit_value:
1143 		*s = "DW_OP_implicit_value"; break;
1144 	case DW_OP_stack_value:
1145 		*s = "DW_OP_stack_value"; break;
1146 	case DW_OP_GNU_push_tls_address:
1147 		*s = "DW_OP_GNU_push_tls_address"; break;
1148 	case DW_OP_GNU_uninit:
1149 		*s = "DW_OP_GNU_uninit"; break;
1150 	case DW_OP_GNU_encoded_addr:
1151 		*s = "DW_OP_GNU_encoded_addr"; break;
1152 	case DW_OP_GNU_implicit_pointer:
1153 		*s = "DW_OP_GNU_implicit_pointer"; break;
1154 	case DW_OP_GNU_entry_value:
1155 		*s = "DW_OP_GNU_entry_value"; break;
1156 	case DW_OP_GNU_const_type:
1157 		*s = "DW_OP_GNU_const_type"; break;
1158 	case DW_OP_GNU_regval_type:
1159 		*s = "DW_OP_GNU_regval_type"; break;
1160 	case DW_OP_GNU_deref_type:
1161 		*s = "DW_OP_GNU_deref_type"; break;
1162 	case DW_OP_GNU_convert:
1163 		*s = "DW_OP_GNU_convert"; break;
1164 	case DW_OP_GNU_reinterpret:
1165 		*s = "DW_OP_GNU_reinterpret"; break;
1166 	case DW_OP_GNU_parameter_ref:
1167 		*s = "DW_OP_GNU_parameter_ref"; break;
1168 	case DW_OP_GNU_addr_index:
1169 		*s = "DW_OP_GNU_addr_index"; break;
1170 	case DW_OP_GNU_const_index:
1171 		*s = "DW_OP_GNU_const_index"; break;
1172 	default:
1173 		return (DW_DLV_NO_ENTRY);
1174 	}
1175 
1176 	return (DW_DLV_OK);
1177 }
1178 
1179 int
1180 dwarf_get_ORD_name(unsigned ord, const char **s)
1181 {
1182 
1183 	assert(s != NULL);
1184 
1185 	switch (ord) {
1186 	case DW_ORD_row_major:
1187 		*s = "DW_ORD_row_major"; break;
1188 	case DW_ORD_col_major:
1189 		*s = "DW_ORD_col_major"; break;
1190 	default:
1191 		return (DW_DLV_NO_ENTRY);
1192 	}
1193 
1194 	return (DW_DLV_OK);
1195 }
1196 
1197 int
1198 dwarf_get_TAG_name(unsigned tag, const char **s)
1199 {
1200 
1201 	assert(s != NULL);
1202 
1203 	switch (tag) {
1204 	case DW_TAG_access_declaration:
1205 		*s = "DW_TAG_access_declaration"; break;
1206 	case DW_TAG_array_type:
1207 		*s = "DW_TAG_array_type"; break;
1208 	case DW_TAG_base_type:
1209 		*s = "DW_TAG_base_type"; break;
1210 	case DW_TAG_catch_block:
1211 		*s = "DW_TAG_catch_block"; break;
1212 	case DW_TAG_class_type:
1213 		*s = "DW_TAG_class_type"; break;
1214 	case DW_TAG_common_block:
1215 		*s = "DW_TAG_common_block"; break;
1216 	case DW_TAG_common_inclusion:
1217 		*s = "DW_TAG_common_inclusion"; break;
1218 	case DW_TAG_compile_unit:
1219 		*s = "DW_TAG_compile_unit"; break;
1220 	case DW_TAG_condition:
1221 		*s = "DW_TAG_condition"; break;
1222 	case DW_TAG_const_type:
1223 		*s = "DW_TAG_const_type"; break;
1224 	case DW_TAG_constant:
1225 		*s = "DW_TAG_constant"; break;
1226 	case DW_TAG_dwarf_procedure:
1227 		*s = "DW_TAG_dwarf_procedure"; break;
1228 	case DW_TAG_entry_point:
1229 		*s = "DW_TAG_entry_point"; break;
1230 	case DW_TAG_enumeration_type:
1231 		*s = "DW_TAG_enumeration_type"; break;
1232 	case DW_TAG_enumerator:
1233 		*s = "DW_TAG_enumerator"; break;
1234 	case DW_TAG_formal_parameter:
1235 		*s = "DW_TAG_formal_parameter"; break;
1236 	case DW_TAG_friend:
1237 		*s = "DW_TAG_friend"; break;
1238 	case DW_TAG_imported_declaration:
1239 		*s = "DW_TAG_imported_declaration"; break;
1240 	case DW_TAG_imported_module:
1241 		*s = "DW_TAG_imported_module"; break;
1242 	case DW_TAG_imported_unit:
1243 		*s = "DW_TAG_imported_unit"; break;
1244 	case DW_TAG_inheritance:
1245 		*s = "DW_TAG_inheritance"; break;
1246 	case DW_TAG_inlined_subroutine:
1247 		*s = "DW_TAG_inlined_subroutine"; break;
1248 	case DW_TAG_interface_type:
1249 		*s = "DW_TAG_interface_type"; break;
1250 	case DW_TAG_label:
1251 		*s = "DW_TAG_label"; break;
1252 	case DW_TAG_lexical_block:
1253 		*s = "DW_TAG_lexical_block"; break;
1254 	case DW_TAG_member:
1255 		*s = "DW_TAG_member"; break;
1256 	case DW_TAG_module:
1257 		*s = "DW_TAG_module"; break;
1258 	case DW_TAG_namelist:
1259 		*s = "DW_TAG_namelist"; break;
1260 	case DW_TAG_namelist_item:
1261 		*s = "DW_TAG_namelist_item"; break;
1262 	case DW_TAG_namespace:
1263 		*s = "DW_TAG_namespace"; break;
1264 	case DW_TAG_packed_type:
1265 		*s = "DW_TAG_packed_type"; break;
1266 	case DW_TAG_partial_unit:
1267 		*s = "DW_TAG_partial_unit"; break;
1268 	case DW_TAG_pointer_type:
1269 		*s = "DW_TAG_pointer_type"; break;
1270 	case DW_TAG_ptr_to_member_type:
1271 		*s = "DW_TAG_ptr_to_member_type"; break;
1272 	case DW_TAG_reference_type:
1273 		*s = "DW_TAG_reference_type"; break;
1274 	case DW_TAG_restrict_type:
1275 		*s = "DW_TAG_restrict_type"; break;
1276 	case DW_TAG_rvalue_reference_type:
1277 		*s = "DW_TAG_rvalue_reference_type"; break;
1278 	case DW_TAG_set_type:
1279 		*s = "DW_TAG_set_type"; break;
1280 	case DW_TAG_shared_type:
1281 		*s = "DW_TAG_shared_type"; break;
1282 	case DW_TAG_string_type:
1283 		*s = "DW_TAG_string_type"; break;
1284 	case DW_TAG_structure_type:
1285 		*s = "DW_TAG_structure_type"; break;
1286 	case DW_TAG_subprogram:
1287 		*s = "DW_TAG_subprogram"; break;
1288 	case DW_TAG_subrange_type:
1289 		*s = "DW_TAG_subrange_type"; break;
1290 	case DW_TAG_subroutine_type:
1291 		*s = "DW_TAG_subroutine_type"; break;
1292 	case DW_TAG_template_alias:
1293 		*s = "DW_TAG_template_alias"; break;
1294 	case DW_TAG_template_type_parameter:
1295 		*s = "DW_TAG_template_type_parameter"; break;
1296 	case DW_TAG_template_value_parameter:
1297 		*s = "DW_TAG_template_value_parameter"; break;
1298 	case DW_TAG_thrown_type:
1299 		*s = "DW_TAG_thrown_type"; break;
1300 	case DW_TAG_try_block:
1301 		*s = "DW_TAG_try_block"; break;
1302 	case DW_TAG_type_unit:
1303 		*s = "DW_TAG_type_unit"; break;
1304 	case DW_TAG_typedef:
1305 		*s = "DW_TAG_typedef"; break;
1306 	case DW_TAG_union_type:
1307 		*s = "DW_TAG_union_type"; break;
1308 	case DW_TAG_unspecified_parameters:
1309 		*s = "DW_TAG_unspecified_parameters"; break;
1310 	case DW_TAG_unspecified_type:
1311 		*s = "DW_TAG_unspecified_type"; break;
1312 	case DW_TAG_variable:
1313 		*s = "DW_TAG_variable"; break;
1314 	case DW_TAG_variant:
1315 		*s = "DW_TAG_variant"; break;
1316 	case DW_TAG_variant_part:
1317 		*s = "DW_TAG_variant_part"; break;
1318 	case DW_TAG_volatile_type:
1319 		*s = "DW_TAG_volatile_type"; break;
1320 	case DW_TAG_with_stmt:
1321 		*s = "DW_TAG_with_stmt"; break;
1322 	case DW_TAG_format_label:
1323 		*s = "DW_TAG_format_label"; break;
1324 	case DW_TAG_function_template:
1325 		*s = "DW_TAG_function_template"; break;
1326 	case DW_TAG_class_template:
1327 		*s = "DW_TAG_class_template"; break;
1328 	case DW_TAG_GNU_BINCL:
1329 		*s = "DW_TAG_GNU_BINCL"; break;
1330 	case DW_TAG_GNU_EINCL:
1331 		*s = "DW_TAG_GNU_EINCL"; break;
1332 	case DW_TAG_GNU_template_template_param:
1333 		*s = "DW_TAG_GNU_template_template_param"; break;
1334 	case DW_TAG_GNU_template_parameter_pack:
1335 		*s = "DW_TAG_GNU_template_parameter_pack"; break;
1336 	case DW_TAG_GNU_formal_parameter_pack:
1337 		*s = "DW_TAG_GNU_formal_parameter_pack"; break;
1338 	case DW_TAG_GNU_call_site:
1339 		*s = "DW_TAG_GNU_call_site"; break;
1340 	case DW_TAG_GNU_call_site_parameter:
1341 		*s = "DW_TAG_GNU_call_site_parameter"; break;
1342 	default:
1343 		return (DW_DLV_NO_ENTRY);
1344 	}
1345 
1346 	return (DW_DLV_OK);
1347 }
1348 
1349 int
1350 dwarf_get_VIRTUALITY_name(unsigned vir, const char **s)
1351 {
1352 
1353 	assert(s != NULL);
1354 
1355 	switch (vir) {
1356 	case DW_VIRTUALITY_none:
1357 		*s = "DW_VIRTUALITY_none"; break;
1358 	case DW_VIRTUALITY_virtual:
1359 		*s = "DW_VIRTUALITY_virtual"; break;
1360 	case DW_VIRTUALITY_pure_virtual:
1361 		*s = "DW_VIRTUALITY_pure_virtual"; break;
1362 	default:
1363 		return (DW_DLV_NO_ENTRY);
1364 	}
1365 
1366 	return (DW_DLV_OK);
1367 }
1368 
1369 int
1370 dwarf_get_VIS_name(unsigned vis, const char **s)
1371 {
1372 
1373 	assert(s != NULL);
1374 
1375 	switch (vis) {
1376 	case DW_VIS_local:
1377 		*s = "DW_VIS_local"; break;
1378 	case DW_VIS_exported:
1379 		*s = "DW_VIS_exported"; break;
1380 	case DW_VIS_qualified:
1381 		*s = "DW_VIS_qualified"; break;
1382 	default:
1383 		return (DW_DLV_NO_ENTRY);
1384 	}
1385 
1386 	return (DW_DLV_OK);
1387 }
1388