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