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