15389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* Copyright (C) 2007-2010 The Android Open Source Project 25389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** 35389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** This software is licensed under the terms of the GNU General Public 45389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** License version 2, as published by the Free Software Foundation, and 55389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** may be copied, distributed, and modified under those terms. 65389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** 75389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** This program is distributed in the hope that it will be useful, 85389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** but WITHOUT ANY WARRANTY; without even the implied warranty of 95389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine** GNU General Public License for more details. 115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine*/ 125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* 145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine * Contains implementation of misc. DWARF utility routines. 155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine */ 165389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 17c7389bd69e570a2c8432b37399aff1976b021f0fAndrew Hsieh#include <stdio.h> 18c7389bd69e570a2c8432b37399aff1976b021f0fAndrew Hsieh#define __STDC_FORMAT_MACROS 1 19c7389bd69e570a2c8432b37399aff1976b021f0fAndrew Hsieh#include <inttypes.h> 205389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#include "dwarf_utils.h" 215389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 225389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* "Stringifies" the parameter. */ 235389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define DWARF_NAMEFY(val) case val: return "" #val "" 245389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 255389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine/* "Stringifies" two parameters. */ 265389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine#define DWARF_NAMEFY2(val1, val2) case val1: return "" #val1 " | " #val2 "" 275389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 285389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkineconst char* 295389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinedwarf_at_name(Dwarf_At at) { 305389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine switch (at) { 315389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_sibling); 325389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_location); 335389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_name); 345389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_ordering); 355389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_subscr_data); 365389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_byte_size); 375389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_bit_offset); 385389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_bit_size); 395389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_element_list); 405389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_stmt_list); 415389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_low_pc); 425389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_high_pc); 435389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_language); 445389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_member); 455389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_discr); 465389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_discr_value); 475389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_visibility); 485389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_import); 495389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_string_length); 505389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_common_reference); 515389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_comp_dir); 525389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_const_value); 535389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_containing_type); 545389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_default_value); 555389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_inline); 565389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_is_optional); 575389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_lower_bound); 585389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_producer); 595389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_prototyped); 605389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_return_addr); 615389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_start_scope); 625389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY2(DW_AT_bit_stride, DW_AT_stride_size); 635389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_upper_bound); 645389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_abstract_origin); 655389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_accessibility); 665389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_address_class); 675389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_artificial); 685389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_base_types); 695389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_calling_convention); 705389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_count); 715389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_data_member_location); 725389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_decl_column); 735389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_decl_file); 745389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_decl_line); 755389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_declaration); 765389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_discr_list); 775389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_encoding); 785389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_external); 795389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_frame_base); 805389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_friend); 815389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_identifier_case); 825389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_macro_info); 835389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_namelist_item); 845389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_priority); 855389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_segment); 865389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_specification); 875389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_static_link); 885389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_type); 895389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_use_location); 905389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_variable_parameter); 915389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_virtuality); 925389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_vtable_elem_location); 935389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_allocated); 945389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_associated); 955389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_data_location); 965389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY2(DW_AT_byte_stride, DW_AT_stride); 975389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_entry_pc); 985389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_use_UTF8); 995389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_extension); 1005389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_ranges); 1015389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_trampoline); 1025389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_call_column); 1035389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_call_file); 1045389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_call_line); 1055389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_description); 1065389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_binary_scale); 1075389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_decimal_scale); 1085389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_small); 1095389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_decimal_sign); 1105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_digit_count); 1115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_picture_string); 1125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_mutable); 1135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_threads_scaled); 1145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_explicit); 1155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_object_pointer); 1165389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_endianity); 1175389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_elemental); 1185389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_pure); 1195389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_recursive); 1205389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_signature); 1215389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_main_subprogram); 1225389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_data_bit_offset); 1235389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_const_expr); 1245389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_enum_class); 1255389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_AT_linkage_name); 1265389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine default: 1275389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine return "DW_AT_Unknown"; 1285389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } 1295389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine} 1305389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1315389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkineconst char* 1325389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinedwarf_form_name(Dwarf_Form form) { 1335389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine switch (form) { 1345389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_addr); 1355389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_block2); 1365389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_block4); 1375389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_data2); 1385389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_data4); 1395389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_data8); 1405389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_string); 1415389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_block); 1425389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_block1); 1435389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_data1); 1445389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_flag); 1455389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_sdata); 1465389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_strp); 1475389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_udata); 1485389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref_addr); 1495389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref1); 1505389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref2); 1515389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref4); 1525389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref8); 1535389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref_udata); 1545389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_indirect); 1555389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_sec_offset); 1565389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_exprloc); 1575389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_flag_present); 1585389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_FORM_ref_sig8); 1595389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine default: 1605389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine return "DW_FORM_Unknown"; 1615389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } 1625389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine} 1635389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 1645389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkineconst char* 1655389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinedwarf_tag_name(Dwarf_Tag tag) { 1665389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine switch (tag) { 1675389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_array_type); 1685389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_class_type); 1695389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_entry_point); 1705389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_enumeration_type); 1715389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_formal_parameter); 1725389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_imported_declaration); 1735389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_label); 1745389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_lexical_block); 1755389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_member); 1765389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_pointer_type); 1775389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_reference_type); 1785389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_compile_unit); 1795389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_string_type); 1805389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_structure_type); 1815389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_subroutine_type); 1825389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_typedef); 1835389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_union_type); 1845389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_unspecified_parameters); 1855389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_variant); 1865389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_common_block); 1875389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_common_inclusion); 1885389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_inheritance); 1895389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_inlined_subroutine); 1905389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_module); 1915389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_ptr_to_member_type); 1925389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_set_type); 1935389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_subrange_type); 1945389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_with_stmt); 1955389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_access_declaration); 1965389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_base_type); 1975389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_catch_block); 1985389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_const_type); 1995389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_constant); 2005389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_enumerator); 2015389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_file_type); 2025389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_friend); 2035389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_namelist); 2045389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY2(DW_TAG_namelist_item, DW_TAG_namelist_items); 2055389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_packed_type); 2065389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_subprogram); 2075389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY2(DW_TAG_template_type_parameter, DW_TAG_template_type_param); 2085389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY2(DW_TAG_template_value_parameter, 2095389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DW_TAG_template_value_param); 2105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_thrown_type); 2115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_try_block); 2125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_variant_part); 2135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_variable); 2145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_volatile_type); 2155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_dwarf_procedure); 2165389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_restrict_type); 2175389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_interface_type); 2185389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_namespace); 2195389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_imported_module); 2205389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_unspecified_type); 2215389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_partial_unit); 2225389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_imported_unit); 2235389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_mutable_type); 2245389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_condition); 2255389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_shared_type); 2265389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_type_unit); 2275389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_rvalue_reference_type); 2285389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine DWARF_NAMEFY(DW_TAG_template_alias); 2295389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine default: 2305389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine return "DW_TAG_Unknown"; 2315389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } 2325389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine} 2335389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2345389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinevoid 2355389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinedump_attrib(Dwarf_At at, Dwarf_Form form, const Dwarf_Value* val) { 2365389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine if (form != 0) { 2375389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf(" +++ Attribute: %s [%s]\n", 2385389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine dwarf_at_name(at), dwarf_form_name(form)); 2395389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } else { 2405389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf(" +++ Attribute: %s\n", dwarf_at_name(at)); 2415389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } 2425389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine dump_value(val); 2435389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine} 2445389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2455389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinevoid 2465389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkinedump_value(const Dwarf_Value* attr_value) { 2475389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf(" Data[%03u]: (", attr_value->encoded_size); 2485389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine switch (attr_value->type) { 2495389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_U8: 2505389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("BYTE) = %u (x%02X)\n", (Elf_Word)attr_value->u8, 2515389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine (Elf_Word)attr_value->u8); 2525389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2535389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2545389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_S8: 2555389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("SBYTE) = %d (x%02X)\n", (Elf_Sword)attr_value->s8, 2565389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine (Elf_Sword)attr_value->s8); 2575389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2585389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2595389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_U16: 2605389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("WORD) = %u (x%04X)\n", (Elf_Word)attr_value->u16, 2615389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine (Elf_Word)attr_value->u16); 2625389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2635389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2645389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_S16: 2655389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("SWORD) = %d (x%04X)\n", (Elf_Sword)attr_value->s16, 2665389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine (Elf_Sword)attr_value->s16); 2675389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2685389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2695389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_U32: 2705389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("DWORD) = %u (x%08X)\n", attr_value->u32, 2715389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine attr_value->u32); 2725389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2735389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2745389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_S32: 2755389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("SDWORD) = %d (x%08X)\n", attr_value->s32, 2765389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine attr_value->s32); 2775389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2785389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2795389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_U64: 280c7389bd69e570a2c8432b37399aff1976b021f0fAndrew Hsieh printf("XWORD) = %" PRIu64 " (x%" PRIX64 ")\n", attr_value->u64, 2815389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine attr_value->u64); 2825389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2835389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2845389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_S64: 285c7389bd69e570a2c8432b37399aff1976b021f0fAndrew Hsieh printf("SXWORD) = %" PRId64 " (x%" PRIX64 ")\n", attr_value->s64, 2865389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine attr_value->s64); 2875389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2885389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2895389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_STR: 2905389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("STRING) = %s\n", attr_value->str); 2915389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2925389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2935389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_PTR32: 2945389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("PTR32) = x%08X\n", attr_value->ptr32); 2955389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 2965389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 2975389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_PTR64: 298c7389bd69e570a2c8432b37399aff1976b021f0fAndrew Hsieh printf("PTR64) = x%08" PRIX64 "\n", attr_value->ptr64); 2995389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 3005389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 3015389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_BLOCK: 3024e024bb4f5c8aa8b07459f7fbd65c35122127fd1David 'Digit' Turner printf("BLOCK) = [%u]:", attr_value->block.block_size); 3035389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine for (Elf_Xword i = 0; i < attr_value->block.block_size; i++) { 3045389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine Elf_Byte prnt = *((const Elf_Byte*)attr_value->block.block_ptr + i); 3055389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf(" x%02X", prnt); 3065389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } 3075389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("\n"); 3085389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 3095389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine 3105389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine case DWARF_VALUE_UNKNOWN: 3115389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine default: 3125389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine printf("UNKNOWN)"); 3135389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine break; 3145389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine } 3155389aa19033153c09556d1362a8b8a56abccb8f5Vladimir Chtchetkine} 316