tools/elf4rom/src/dwarfutils.cpp
changeset 34 92d87f2e53c2
equal deleted inserted replaced
33:1af5c1be89f8 34:92d87f2e53c2
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 *
       
     5 * This program is free software: you can redistribute it and/or modify
       
     6 * it under the terms of the GNU Lesser General Public License as published by
       
     7 * the Free Software Foundation, either version 3 of the License, or
       
     8 * (at your option) any later version.
       
     9 *
       
    10 * This program is distributed in the hope that it will be useful,
       
    11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    13 * GNU Lesser General Public License for more details.
       
    14 * 
       
    15 * You should have received a copy of the GNU Lesser General Public License
       
    16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
       
    17 */
       
    18 
       
    19 #include "dwarfdefs.h"
       
    20 #include "dwarf.h"
       
    21 
       
    22 char * GetDwarfTag(Dwarf_Unsigned aTag){
       
    23 	switch (aTag){
       
    24 	case DW_TAG_array_type: return "DW_TAG_array_type";
       
    25 	case DW_TAG_class_type: return "DW_TAG_class_type";
       
    26 	case DW_TAG_entry_point: return "DW_TAG_entry_point";
       
    27 	case DW_TAG_enumeration_type: return "DW_TAG_enumeration_type";
       
    28 	case DW_TAG_formal_parameter: return "DW_TAG_formal_parameter";
       
    29 	case DW_TAG_imported_declaration: return "DW_TAG_imported_declaration";
       
    30 	case DW_TAG_label: return "DW_TAG_label";
       
    31 	case DW_TAG_lexical_block: return "DW_TAG_lexical_block";
       
    32 	case DW_TAG_member: return "DW_TAG_member";
       
    33 	case DW_TAG_pointer_type: return "DW_TAG_pointer_type";
       
    34 	case DW_TAG_reference_type: return "DW_TAG_reference_type";
       
    35 	case DW_TAG_compile_unit: return "DW_TAG_compile_unit";
       
    36 	case DW_TAG_string_type: return "DW_TAG_string_type";
       
    37 	case DW_TAG_structure_type: return "DW_TAG_structure_type";
       
    38 	case DW_TAG_subroutine_type: return "DW_TAG_subroutine_type";
       
    39 	case DW_TAG_typedef: return "DW_TAG_typedef";
       
    40 	case DW_TAG_union_type: return "DW_TAG_union_type";
       
    41 	case DW_TAG_unspecified_parameters: return "DW_TAG_unspecified_parameters";
       
    42 	case DW_TAG_variant: return "DW_TAG_variant";
       
    43 	case DW_TAG_common_block: return "DW_TAG_common_block";
       
    44 	case DW_TAG_common_inclusion: return "DW_TAG_common_inclusion";
       
    45 	case DW_TAG_inheritance: return "DW_TAG_inheritance";
       
    46 	case DW_TAG_inlined_subroutine: return "DW_TAG_inlined_subroutine";
       
    47 	case DW_TAG_module: return "DW_TAG_module";
       
    48 	case DW_TAG_ptr_to_member_type: return "DW_TAG_ptr_to_member_type";
       
    49 	case DW_TAG_set_type: return "DW_TAG_set_type";
       
    50 	case DW_TAG_subrange_type: return "DW_TAG_subrange_type";
       
    51 	case DW_TAG_with_stmt: return "DW_TAG_with_stmt";
       
    52 	case DW_TAG_access_declaration: return "DW_TAG_access_declaration";
       
    53 	case DW_TAG_base_type: return "DW_TAG_base_type";
       
    54 	case DW_TAG_catch_block: return "DW_TAG_catch_block";
       
    55 	case DW_TAG_const_type: return "DW_TAG_const_type";
       
    56 	case DW_TAG_constant: return "DW_TAG_constant";
       
    57 	case DW_TAG_enumerator: return "DW_TAG_enumerator";
       
    58 	case DW_TAG_file_type: return "DW_TAG_file_type";
       
    59 	case DW_TAG_friend: return "DW_TAG_friend";
       
    60 	case DW_TAG_namelist: return "DW_TAG_namelist";
       
    61 	case DW_TAG_namelist_item: return "DW_TAG_namelist_item";
       
    62 	case DW_TAG_packed_type: return "DW_TAG_packed_type";
       
    63 	case DW_TAG_subprogram: return "DW_TAG_subprogram";
       
    64 	case DW_TAG_template_type_parameter: return "DW_TAG_template_type_parameter";
       
    65 	case DW_TAG_template_value_parameter: return "DW_TAG_template_value_parameter";
       
    66 	case DW_TAG_thrown_type: return "DW_TAG_thrown_type";
       
    67 	case DW_TAG_try_block: return "DW_TAG_try_block";
       
    68 	case DW_TAG_variant_part: return "DW_TAG_variant_part";
       
    69 	case DW_TAG_variable: return "DW_TAG_variable";
       
    70 	case DW_TAG_volatile_type: return "DW_TAG_volatile_type";
       
    71 	case DW_TAG_dwarf_procedure: return "DW_TAG_dwarf_procedure";
       
    72 	case DW_TAG_restrict_type: return "DW_TAG_restrict_type";
       
    73 	case DW_TAG_interface_type: return "DW_TAG_interface_type";
       
    74 	case DW_TAG_namespace: return "DW_TAG_namespace";
       
    75 	case DW_TAG_imported_module: return "DW_TAG_imported_module";
       
    76 	case DW_TAG_unspecified_type: return "DW_TAG_unspecified_type";
       
    77 	case DW_TAG_partial_unit: return "DW_TAG_partial_unit";
       
    78 	case DW_TAG_imported_unit: return "DW_TAG_imported_unit";
       
    79 	case DW_TAG_mutable_type: return "DW_TAG_mutable_type";
       
    80 	case DW_TAG_condition: return "DW_TAG_condition";
       
    81 	case DW_TAG_shared_type: return "DW_TAG_shared_type";
       
    82 	default: return "Unrecognised TAG";
       
    83 	}
       
    84 }
       
    85 
       
    86 char * GetDwarfAttr(Dwarf_Half attr){
       
    87 	switch (attr){
       
    88 	case DW_AT_sibling: return "DW_AT_sibling";
       
    89 	case DW_AT_location: return "DW_AT_location";
       
    90 	case DW_AT_name: return "DW_AT_name";
       
    91 	case DW_AT_ordering: return "DW_AT_ordering";
       
    92 	case DW_AT_subscr_data: return "DW_AT_subscr_data";
       
    93 	case DW_AT_byte_size: return "DW_AT_byte_size";
       
    94 	case DW_AT_bit_offset: return "DW_AT_bit_offset";
       
    95 	case DW_AT_bit_size: return "DW_AT_bit_size";
       
    96 	case DW_AT_element_list: return "DW_AT_element_list";
       
    97 	case DW_AT_stmt_list: return "DW_AT_stmt_list";
       
    98 	case DW_AT_low_pc: return "DW_AT_low_pc";
       
    99 	case DW_AT_high_pc: return "DW_AT_high_pc";
       
   100 	case DW_AT_language: return "DW_AT_language";
       
   101 	case DW_AT_member: return "DW_AT_member";
       
   102 	case DW_AT_discr: return "DW_AT_discr";
       
   103 	case DW_AT_discr_value: return "DW_AT_discr_value";
       
   104 	case DW_AT_visibility: return "DW_AT_visibility";
       
   105 	case DW_AT_import: return "DW_AT_import";
       
   106 	case DW_AT_string_length: return "DW_AT_string_length";
       
   107 	case DW_AT_common_reference: return "DW_AT_common_reference";
       
   108 	case DW_AT_comp_dir: return "DW_AT_comp_dir";
       
   109 	case DW_AT_const_value: return "DW_AT_const_value";
       
   110 	case DW_AT_containing_type: return "DW_AT_containing_type";
       
   111 	case DW_AT_default_value: return "DW_AT_default_value";
       
   112 	case DW_AT_inline: return "DW_AT_inline";
       
   113 	case DW_AT_is_optional: return "DW_AT_is_optional";
       
   114 	case DW_AT_lower_bound: return "DW_AT_lower_bound";
       
   115 	case DW_AT_producer: return "DW_AT_producer";
       
   116 	case DW_AT_prototyped: return "DW_AT_prototyped";
       
   117 	case DW_AT_return_addr: return "DW_AT_return_addr";
       
   118 	case DW_AT_start_scope: return "DW_AT_start_scope";
       
   119 	case DW_AT_bit_stride: return "DW_AT_bit_stride";
       
   120 	case DW_AT_upper_bound: return "DW_AT_upper_bound";
       
   121 	case DW_AT_abstract_origin: return "DW_AT_abstract_origin";
       
   122 	case DW_AT_accessibility: return "DW_AT_accessibility";
       
   123 	case DW_AT_address_class: return "DW_AT_address_class";
       
   124 	case DW_AT_artificial: return "DW_AT_artificial";
       
   125 	case DW_AT_base_types: return "DW_AT_base_types";
       
   126 	case DW_AT_calling_convention: return "DW_AT_calling_convention";
       
   127 	case DW_AT_count: return "DW_AT_count";
       
   128 	case DW_AT_data_member_location: return "DW_AT_data_member_location";
       
   129 	case DW_AT_decl_column: return "DW_AT_decl_column";
       
   130 	case DW_AT_decl_file: return "DW_AT_decl_file";
       
   131 	case DW_AT_decl_line: return "DW_AT_decl_line";
       
   132 	case DW_AT_declaration: return "DW_AT_declaration";
       
   133 	case DW_AT_discr_list: return "DW_AT_discr_list";
       
   134 	case DW_AT_encoding: return "DW_AT_encoding";
       
   135 	case DW_AT_external: return "DW_AT_external";
       
   136 	case DW_AT_frame_base: return "DW_AT_frame_base";
       
   137 	case DW_AT_friend: return "DW_AT_friend";
       
   138 	case DW_AT_identifier_case: return "DW_AT_identifier_case";
       
   139 	case DW_AT_macro_info: return "DW_AT_macro_info";
       
   140 	case DW_AT_namelist_item: return "DW_AT_namelist_item";
       
   141 	case DW_AT_priority: return "DW_AT_priority";
       
   142 	case DW_AT_segment: return "DW_AT_segment";
       
   143 	case DW_AT_specification: return "DW_AT_specification";
       
   144 	case DW_AT_static_link: return "DW_AT_static_link";
       
   145 	case DW_AT_type: return "DW_AT_type";
       
   146 	case DW_AT_use_location: return "DW_AT_use_location";
       
   147 	case DW_AT_variable_parameter: return "DW_AT_variable_parameter";
       
   148 	case DW_AT_virtuality: return "DW_AT_virtuality";
       
   149 	case DW_AT_vtable_elem_location: return "DW_AT_vtable_elem_location";
       
   150 	case DW_AT_allocated: return "DW_AT_allocated";
       
   151 	case DW_AT_associated: return "DW_AT_associated";
       
   152 	case DW_AT_data_location: return "DW_AT_data_location";
       
   153 	case DW_AT_byte_stride: return "DW_AT_byte_stride";
       
   154 	case DW_AT_entry_pc: return "DW_AT_entry_pc";
       
   155 	case DW_AT_use_UTF8: return "DW_AT_use_UTF8";
       
   156 	case DW_AT_extension: return "DW_AT_extension";
       
   157 	case DW_AT_ranges: return "DW_AT_ranges";
       
   158 	case DW_AT_trampoline: return "DW_AT_trampoline";
       
   159 	case DW_AT_call_column: return "DW_AT_call_column";
       
   160 	case DW_AT_call_file: return "DW_AT_call_file";
       
   161 	case DW_AT_call_line: return "DW_AT_call_line";
       
   162 	case DW_AT_description: return "DW_AT_description";
       
   163 	case DW_AT_binary_scale: return "DW_AT_binary_scale";
       
   164 	case DW_AT_decimal_scale: return "DW_AT_decimal_scale";
       
   165 	case DW_AT_small: return "DW_AT_small";
       
   166 	case DW_AT_decimal_sign: return "DW_AT_decimal_sign";
       
   167 	case DW_AT_digit_count: return "DW_AT_digit_count";
       
   168 	case DW_AT_picture_string: return "DW_AT_picture_string";
       
   169 	case DW_AT_mutable: return "DW_AT_mutable";
       
   170 	case DW_AT_threads_scaled: return "DW_AT_threads_scaled";
       
   171 	case DW_AT_explicit: return "DW_AT_explicit";
       
   172 	case DW_AT_object_pointer: return "DW_AT_object_pointer";
       
   173 	case DW_AT_endianity: return "DW_AT_endianity";
       
   174 	case DW_AT_elemental: return "DW_AT_elemental";
       
   175 	case DW_AT_pure: return "DW_AT_pure";
       
   176 	case DW_AT_recursive: return "DW_AT_recursive";
       
   177 
       
   178 	default: return "Unrecognised ATTR";
       
   179 	}
       
   180 	
       
   181 }
       
   182 
       
   183 char * GetDwarfForm(Dwarf_Half form){
       
   184 	switch (form){
       
   185 	case DW_FORM_addr: return "DW_FORM_addr";
       
   186 	case DW_FORM_block2: return "DW_FORM_block2";
       
   187 	case DW_FORM_block4: return "DW_FORM_block4";
       
   188 	case DW_FORM_data2: return "DW_FORM_data2";
       
   189 	case DW_FORM_data4: return "DW_FORM_data4";
       
   190 	case DW_FORM_data8: return "DW_FORM_data8";
       
   191 	case DW_FORM_string: return "DW_FORM_string";
       
   192 	case DW_FORM_block: return "DW_FORM_block";
       
   193 	case DW_FORM_block1: return "DW_FORM_block1";
       
   194 	case DW_FORM_data1: return "DW_FORM_data1";
       
   195 	case DW_FORM_flag: return "DW_FORM_flag";
       
   196 	case DW_FORM_sdata: return "DW_FORM_sdata";
       
   197 	case DW_FORM_strp: return "DW_FORM_strp";
       
   198 	case DW_FORM_udata: return "DW_FORM_udata";
       
   199 	case DW_FORM_ref_addr: return "DW_FORM_ref_addr";
       
   200 	case DW_FORM_ref1: return "DW_FORM_ref1";
       
   201 	case DW_FORM_ref2: return "DW_FORM_ref2";
       
   202 	case DW_FORM_ref4: return "DW_FORM_ref4";
       
   203 	case DW_FORM_ref8: return "DW_FORM_ref8";
       
   204 	case DW_FORM_ref_udata: return "DW_FORM_ref_udata";
       
   205 	case DW_FORM_indirect: return "DW_FORM_indirect";
       
   206 	default: return "Unrecognised FORM";
       
   207 	}
       
   208 }