From: Arnaud Giersch Date: Tue, 31 Oct 2017 17:23:39 +0000 (+0100) Subject: Use a static map for dwarf attr and tag names. X-Git-Tag: v3.18~333 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/3127045e2918a4d164aa788f276c21fe23933ecd Use a static map for dwarf attr and tag names. --- diff --git a/src/mc/mc_dwarf_attrnames.cpp b/src/mc/mc_dwarf_attrnames.cpp index ce4ddd4432..4f6dbd2abd 100644 --- a/src/mc/mc_dwarf_attrnames.cpp +++ b/src/mc/mc_dwarf_attrnames.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2015. The SimGrid Team. +/* Copyright (c) 2014-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -6,10 +6,156 @@ /* Warning: autogenerated, do not edit! */ -#include -#include +#include +#include -#include "xbt/base.h" +#include "src/mc/mc_dwarf.hpp" + +namespace { +const std::unordered_map attrname_map = { + {0x01, "DW_AT_sibling"}, + {0x02, "DW_AT_location"}, + {0x03, "DW_AT_name"}, + {0x09, "DW_AT_ordering"}, + {0x0a, "DW_AT_subscr_data"}, + {0x0b, "DW_AT_byte_size"}, + {0x0c, "DW_AT_bit_offset"}, + {0x0d, "DW_AT_bit_size"}, + {0x0f, "DW_AT_element_list"}, + {0x10, "DW_AT_stmt_list"}, + {0x11, "DW_AT_low_pc"}, + {0x12, "DW_AT_high_pc"}, + {0x13, "DW_AT_language"}, + {0x14, "DW_AT_member"}, + {0x15, "DW_AT_discr"}, + {0x16, "DW_AT_discr_value"}, + {0x17, "DW_AT_visibility"}, + {0x18, "DW_AT_import"}, + {0x19, "DW_AT_string_length"}, + {0x1a, "DW_AT_common_reference"}, + {0x1b, "DW_AT_comp_dir"}, + {0x1c, "DW_AT_const_value"}, + {0x1d, "DW_AT_containing_type"}, + {0x1e, "DW_AT_default_value"}, + {0x20, "DW_AT_inline"}, + {0x21, "DW_AT_is_optional"}, + {0x22, "DW_AT_lower_bound"}, + {0x25, "DW_AT_producer"}, + {0x27, "DW_AT_prototyped"}, + {0x2a, "DW_AT_return_addr"}, + {0x2c, "DW_AT_start_scope"}, + {0x2e, "DW_AT_bit_stride"}, + {0x2f, "DW_AT_upper_bound"}, + {0x31, "DW_AT_abstract_origin"}, + {0x32, "DW_AT_accessibility"}, + {0x33, "DW_AT_address_class"}, + {0x34, "DW_AT_artificial"}, + {0x35, "DW_AT_base_types"}, + {0x36, "DW_AT_calling_convention"}, + {0x37, "DW_AT_count"}, + {0x38, "DW_AT_data_member_location"}, + {0x39, "DW_AT_decl_column"}, + {0x3a, "DW_AT_decl_file"}, + {0x3b, "DW_AT_decl_line"}, + {0x3c, "DW_AT_declaration"}, + {0x3d, "DW_AT_discr_list"}, + {0x3e, "DW_AT_encoding"}, + {0x3f, "DW_AT_external"}, + {0x40, "DW_AT_frame_base"}, + {0x41, "DW_AT_friend"}, + {0x42, "DW_AT_identifier_case"}, + {0x43, "DW_AT_macro_info"}, + {0x44, "DW_AT_namelist_item"}, + {0x45, "DW_AT_priority"}, + {0x46, "DW_AT_segment"}, + {0x47, "DW_AT_specification"}, + {0x48, "DW_AT_static_link"}, + {0x49, "DW_AT_type"}, + {0x4a, "DW_AT_use_location"}, + {0x4b, "DW_AT_variable_parameter"}, + {0x4c, "DW_AT_virtuality"}, + {0x4d, "DW_AT_vtable_elem_location"}, + {0x4e, "DW_AT_allocated"}, + {0x4f, "DW_AT_associated"}, + {0x50, "DW_AT_data_location"}, + {0x51, "DW_AT_byte_stride"}, + {0x52, "DW_AT_entry_pc"}, + {0x53, "DW_AT_use_UTF8"}, + {0x54, "DW_AT_extension"}, + {0x55, "DW_AT_ranges"}, + {0x56, "DW_AT_trampoline"}, + {0x57, "DW_AT_call_column"}, + {0x58, "DW_AT_call_file"}, + {0x59, "DW_AT_call_line"}, + {0x5a, "DW_AT_description"}, + {0x5b, "DW_AT_binary_scale"}, + {0x5c, "DW_AT_decimal_scale"}, + {0x5d, "DW_AT_small"}, + {0x5e, "DW_AT_decimal_sign"}, + {0x5f, "DW_AT_digit_count"}, + {0x60, "DW_AT_picture_string"}, + {0x61, "DW_AT_mutable"}, + {0x62, "DW_AT_threads_scaled"}, + {0x63, "DW_AT_explicit"}, + {0x64, "DW_AT_object_pointer"}, + {0x65, "DW_AT_endianity"}, + {0x66, "DW_AT_elemental"}, + {0x67, "DW_AT_pure"}, + {0x68, "DW_AT_recursive"}, + {0x69, "DW_AT_signature"}, + {0x6a, "DW_AT_main_subprogram"}, + {0x6b, "DW_AT_data_bit_offset"}, + {0x6c, "DW_AT_const_expr"}, + {0x6d, "DW_AT_enum_class"}, + {0x6e, "DW_AT_linkage_name"}, + {0x87, "DW_AT_noreturn"}, + {0x2000, "DW_AT_lo_user"}, + {0x2001, "DW_AT_MIPS_fde"}, + {0x2002, "DW_AT_MIPS_loop_begin"}, + {0x2003, "DW_AT_MIPS_tail_loop_begin"}, + {0x2004, "DW_AT_MIPS_epilog_begin"}, + {0x2005, "DW_AT_MIPS_loop_unroll_factor"}, + {0x2006, "DW_AT_MIPS_software_pipeline_depth"}, + {0x2007, "DW_AT_MIPS_linkage_name"}, + {0x2008, "DW_AT_MIPS_stride"}, + {0x2009, "DW_AT_MIPS_abstract_name"}, + {0x200a, "DW_AT_MIPS_clone_origin"}, + {0x200b, "DW_AT_MIPS_has_inlines"}, + {0x200c, "DW_AT_MIPS_stride_byte"}, + {0x200d, "DW_AT_MIPS_stride_elem"}, + {0x200e, "DW_AT_MIPS_ptr_dopetype"}, + {0x200f, "DW_AT_MIPS_allocatable_dopetype"}, + {0x2010, "DW_AT_MIPS_assumed_shape_dopetype"}, + {0x2011, "DW_AT_MIPS_assumed_size"}, + {0x2101, "DW_AT_sf_names"}, + {0x2102, "DW_AT_src_info"}, + {0x2103, "DW_AT_mac_info"}, + {0x2104, "DW_AT_src_coords"}, + {0x2105, "DW_AT_body_begin"}, + {0x2106, "DW_AT_body_end"}, + {0x2107, "DW_AT_GNU_vector"}, + {0x2108, "DW_AT_GNU_guarded_by"}, + {0x2109, "DW_AT_GNU_pt_guarded_by"}, + {0x210a, "DW_AT_GNU_guarded"}, + {0x210b, "DW_AT_GNU_pt_guarded"}, + {0x210c, "DW_AT_GNU_locks_excluded"}, + {0x210d, "DW_AT_GNU_exclusive_locks_required"}, + {0x210e, "DW_AT_GNU_shared_locks_required"}, + {0x210f, "DW_AT_GNU_odr_signature"}, + {0x2110, "DW_AT_GNU_template_name"}, + {0x2111, "DW_AT_GNU_call_site_value"}, + {0x2112, "DW_AT_GNU_call_site_data_value"}, + {0x2113, "DW_AT_GNU_call_site_target"}, + {0x2114, "DW_AT_GNU_call_site_target_clobbered"}, + {0x2115, "DW_AT_GNU_tail_call"}, + {0x2116, "DW_AT_GNU_all_tail_call_sites"}, + {0x2117, "DW_AT_GNU_all_call_sites"}, + {0x2118, "DW_AT_GNU_all_source_call_sites"}, + {0x2119, "DW_AT_GNU_macros"}, + {0x211a, "DW_AT_GNU_deleted"}, + {0x3fff, "DW_AT_hi_user"}, +}; +} namespace simgrid { namespace dwarf { @@ -22,149 +168,8 @@ namespace dwarf { XBT_PRIVATE const char *attrname(int attr) { - switch (attr) { - case 0x01: return "DW_AT_sibling"; - case 0x02: return "DW_AT_location"; - case 0x03: return "DW_AT_name"; - case 0x09: return "DW_AT_ordering"; - case 0x0a: return "DW_AT_subscr_data"; - case 0x0b: return "DW_AT_byte_size"; - case 0x0c: return "DW_AT_bit_offset"; - case 0x0d: return "DW_AT_bit_size"; - case 0x0f: return "DW_AT_element_list"; - case 0x10: return "DW_AT_stmt_list"; - case 0x11: return "DW_AT_low_pc"; - case 0x12: return "DW_AT_high_pc"; - case 0x13: return "DW_AT_language"; - case 0x14: return "DW_AT_member"; - case 0x15: return "DW_AT_discr"; - case 0x16: return "DW_AT_discr_value"; - case 0x17: return "DW_AT_visibility"; - case 0x18: return "DW_AT_import"; - case 0x19: return "DW_AT_string_length"; - case 0x1a: return "DW_AT_common_reference"; - case 0x1b: return "DW_AT_comp_dir"; - case 0x1c: return "DW_AT_const_value"; - case 0x1d: return "DW_AT_containing_type"; - case 0x1e: return "DW_AT_default_value"; - case 0x20: return "DW_AT_inline"; - case 0x21: return "DW_AT_is_optional"; - case 0x22: return "DW_AT_lower_bound"; - case 0x25: return "DW_AT_producer"; - case 0x27: return "DW_AT_prototyped"; - case 0x2a: return "DW_AT_return_addr"; - case 0x2c: return "DW_AT_start_scope"; - case 0x2e: return "DW_AT_bit_stride"; - case 0x2f: return "DW_AT_upper_bound"; - case 0x31: return "DW_AT_abstract_origin"; - case 0x32: return "DW_AT_accessibility"; - case 0x33: return "DW_AT_address_class"; - case 0x34: return "DW_AT_artificial"; - case 0x35: return "DW_AT_base_types"; - case 0x36: return "DW_AT_calling_convention"; - case 0x37: return "DW_AT_count"; - case 0x38: return "DW_AT_data_member_location"; - case 0x39: return "DW_AT_decl_column"; - case 0x3a: return "DW_AT_decl_file"; - case 0x3b: return "DW_AT_decl_line"; - case 0x3c: return "DW_AT_declaration"; - case 0x3d: return "DW_AT_discr_list"; - case 0x3e: return "DW_AT_encoding"; - case 0x3f: return "DW_AT_external"; - case 0x40: return "DW_AT_frame_base"; - case 0x41: return "DW_AT_friend"; - case 0x42: return "DW_AT_identifier_case"; - case 0x43: return "DW_AT_macro_info"; - case 0x44: return "DW_AT_namelist_item"; - case 0x45: return "DW_AT_priority"; - case 0x46: return "DW_AT_segment"; - case 0x47: return "DW_AT_specification"; - case 0x48: return "DW_AT_static_link"; - case 0x49: return "DW_AT_type"; - case 0x4a: return "DW_AT_use_location"; - case 0x4b: return "DW_AT_variable_parameter"; - case 0x4c: return "DW_AT_virtuality"; - case 0x4d: return "DW_AT_vtable_elem_location"; - case 0x4e: return "DW_AT_allocated"; - case 0x4f: return "DW_AT_associated"; - case 0x50: return "DW_AT_data_location"; - case 0x51: return "DW_AT_byte_stride"; - case 0x52: return "DW_AT_entry_pc"; - case 0x53: return "DW_AT_use_UTF8"; - case 0x54: return "DW_AT_extension"; - case 0x55: return "DW_AT_ranges"; - case 0x56: return "DW_AT_trampoline"; - case 0x57: return "DW_AT_call_column"; - case 0x58: return "DW_AT_call_file"; - case 0x59: return "DW_AT_call_line"; - case 0x5a: return "DW_AT_description"; - case 0x5b: return "DW_AT_binary_scale"; - case 0x5c: return "DW_AT_decimal_scale"; - case 0x5d: return "DW_AT_small"; - case 0x5e: return "DW_AT_decimal_sign"; - case 0x5f: return "DW_AT_digit_count"; - case 0x60: return "DW_AT_picture_string"; - case 0x61: return "DW_AT_mutable"; - case 0x62: return "DW_AT_threads_scaled"; - case 0x63: return "DW_AT_explicit"; - case 0x64: return "DW_AT_object_pointer"; - case 0x65: return "DW_AT_endianity"; - case 0x66: return "DW_AT_elemental"; - case 0x67: return "DW_AT_pure"; - case 0x68: return "DW_AT_recursive"; - case 0x69: return "DW_AT_signature"; - case 0x6a: return "DW_AT_main_subprogram"; - case 0x6b: return "DW_AT_data_bit_offset"; - case 0x6c: return "DW_AT_const_expr"; - case 0x6d: return "DW_AT_enum_class"; - case 0x6e: return "DW_AT_linkage_name"; - case 0x2000: return "DW_AT_lo_user"; - case 0x2001: return "DW_AT_MIPS_fde"; - case 0x2002: return "DW_AT_MIPS_loop_begin"; - case 0x2003: return "DW_AT_MIPS_tail_loop_begin"; - case 0x2004: return "DW_AT_MIPS_epilog_begin"; - case 0x2005: return "DW_AT_MIPS_loop_unroll_factor"; - case 0x2006: return "DW_AT_MIPS_software_pipeline_depth"; - case 0x2007: return "DW_AT_MIPS_linkage_name"; - case 0x2008: return "DW_AT_MIPS_stride"; - case 0x2009: return "DW_AT_MIPS_abstract_name"; - case 0x200a: return "DW_AT_MIPS_clone_origin"; - case 0x200b: return "DW_AT_MIPS_has_inlines"; - case 0x200c: return "DW_AT_MIPS_stride_byte"; - case 0x200d: return "DW_AT_MIPS_stride_elem"; - case 0x200e: return "DW_AT_MIPS_ptr_dopetype"; - case 0x200f: return "DW_AT_MIPS_allocatable_dopetype"; - case 0x2010: return "DW_AT_MIPS_assumed_shape_dopetype"; - case 0x2011: return "DW_AT_MIPS_assumed_size"; - case 0x2101: return "DW_AT_sf_names"; - case 0x2102: return "DW_AT_src_info"; - case 0x2103: return "DW_AT_mac_info"; - case 0x2104: return "DW_AT_src_coords"; - case 0x2105: return "DW_AT_body_begin"; - case 0x2106: return "DW_AT_body_end"; - case 0x2107: return "DW_AT_GNU_vector"; - case 0x2108: return "DW_AT_GNU_guarded_by"; - case 0x2109: return "DW_AT_GNU_pt_guarded_by"; - case 0x210a: return "DW_AT_GNU_guarded"; - case 0x210b: return "DW_AT_GNU_pt_guarded"; - case 0x210c: return "DW_AT_GNU_locks_excluded"; - case 0x210d: return "DW_AT_GNU_exclusive_locks_required"; - case 0x210e: return "DW_AT_GNU_shared_locks_required"; - case 0x210f: return "DW_AT_GNU_odr_signature"; - case 0x2110: return "DW_AT_GNU_template_name"; - case 0x2111: return "DW_AT_GNU_call_site_value"; - case 0x2112: return "DW_AT_GNU_call_site_data_value"; - case 0x2113: return "DW_AT_GNU_call_site_target"; - case 0x2114: return "DW_AT_GNU_call_site_target_clobbered"; - case 0x2115: return "DW_AT_GNU_tail_call"; - case 0x2116: return "DW_AT_GNU_all_tail_call_sites"; - case 0x2117: return "DW_AT_GNU_all_call_sites"; - case 0x2118: return "DW_AT_GNU_all_source_call_sites"; - case 0x2119: return "DW_AT_GNU_macros"; - case 0x3fff: return "DW_AT_hi_user"; - default: - return "DW_AT_unknown"; - } + auto name = attrname_map.find(attr); + return name == attrname_map.end() ? "DW_AT_unknown" : name->second; } } diff --git a/src/mc/mc_dwarf_tagnames.cpp b/src/mc/mc_dwarf_tagnames.cpp index f19d0f497f..f656b08e11 100644 --- a/src/mc/mc_dwarf_tagnames.cpp +++ b/src/mc/mc_dwarf_tagnames.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2015. The SimGrid Team. +/* Copyright (c) 2014-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -6,11 +6,90 @@ /* Warning: autogenerated, do not edit! */ -#include -#include +#include +#include + #include "src/mc/mc_dwarf.hpp" -#include "xbt/base.h" +namespace { +const std::unordered_map tagname_map = { + {0x00, "DW_TAG_invalid"}, + {0x01, "DW_TAG_array_type"}, + {0x02, "DW_TAG_class_type"}, + {0x03, "DW_TAG_entry_point"}, + {0x04, "DW_TAG_enumeration_type"}, + {0x05, "DW_TAG_formal_parameter"}, + {0x08, "DW_TAG_imported_declaration"}, + {0x0a, "DW_TAG_label"}, + {0x0b, "DW_TAG_lexical_block"}, + {0x0d, "DW_TAG_member"}, + {0x0f, "DW_TAG_pointer_type"}, + {0x10, "DW_TAG_reference_type"}, + {0x11, "DW_TAG_compile_unit"}, + {0x12, "DW_TAG_string_type"}, + {0x13, "DW_TAG_structure_type"}, + {0x15, "DW_TAG_subroutine_type"}, + {0x16, "DW_TAG_typedef"}, + {0x17, "DW_TAG_union_type"}, + {0x18, "DW_TAG_unspecified_parameters"}, + {0x19, "DW_TAG_variant"}, + {0x1a, "DW_TAG_common_block"}, + {0x1b, "DW_TAG_common_inclusion"}, + {0x1c, "DW_TAG_inheritance"}, + {0x1d, "DW_TAG_inlined_subroutine"}, + {0x1e, "DW_TAG_module"}, + {0x1f, "DW_TAG_ptr_to_member_type"}, + {0x20, "DW_TAG_set_type"}, + {0x21, "DW_TAG_subrange_type"}, + {0x22, "DW_TAG_with_stmt"}, + {0x23, "DW_TAG_access_declaration"}, + {0x24, "DW_TAG_base_type"}, + {0x25, "DW_TAG_catch_block"}, + {0x26, "DW_TAG_const_type"}, + {0x27, "DW_TAG_constant"}, + {0x28, "DW_TAG_enumerator"}, + {0x29, "DW_TAG_file_type"}, + {0x2a, "DW_TAG_friend"}, + {0x2b, "DW_TAG_namelist"}, + {0x2c, "DW_TAG_namelist_item"}, + {0x2d, "DW_TAG_packed_type"}, + {0x2e, "DW_TAG_subprogram"}, + {0x2f, "DW_TAG_template_type_parameter"}, + {0x30, "DW_TAG_template_value_parameter"}, + {0x31, "DW_TAG_thrown_type"}, + {0x32, "DW_TAG_try_block"}, + {0x33, "DW_TAG_variant_part"}, + {0x34, "DW_TAG_variable"}, + {0x35, "DW_TAG_volatile_type"}, + {0x36, "DW_TAG_dwarf_procedure"}, + {0x37, "DW_TAG_restrict_type"}, + {0x38, "DW_TAG_interface_type"}, + {0x39, "DW_TAG_namespace"}, + {0x3a, "DW_TAG_imported_module"}, + {0x3b, "DW_TAG_unspecified_type"}, + {0x3c, "DW_TAG_partial_unit"}, + {0x3d, "DW_TAG_imported_unit"}, + {0x3f, "DW_TAG_condition"}, + {0x40, "DW_TAG_shared_type"}, + {0x41, "DW_TAG_type_unit"}, + {0x42, "DW_TAG_rvalue_reference_type"}, + {0x43, "DW_TAG_template_alias"}, + {0x47, "DW_TAG_atomic_type"}, + {0x4080, "DW_TAG_lo_user"}, + {0x4081, "DW_TAG_MIPS_loop"}, + {0x4101, "DW_TAG_format_label"}, + {0x4102, "DW_TAG_function_template"}, + {0x4103, "DW_TAG_class_template"}, + {0x4104, "DW_TAG_GNU_BINCL"}, + {0x4105, "DW_TAG_GNU_EINCL"}, + {0x4106, "DW_TAG_GNU_template_template_param"}, + {0x4107, "DW_TAG_GNU_template_parameter_pack"}, + {0x4108, "DW_TAG_GNU_formal_parameter_pack"}, + {0x4109, "DW_TAG_GNU_call_site"}, + {0x410a, "DW_TAG_GNU_call_site_parameter"}, + {0xffff, "DW_TAG_hi_user"}, +}; +} namespace simgrid { namespace dwarf { @@ -23,86 +102,8 @@ namespace dwarf { XBT_PRIVATE const char *tagname(int tag) { - switch (tag) { - case 0x01: return "DW_TAG_array_type"; - case 0x02: return "DW_TAG_class_type"; - case 0x03: return "DW_TAG_entry_point"; - case 0x04: return "DW_TAG_enumeration_type"; - case 0x05: return "DW_TAG_formal_parameter"; - case 0x08: return "DW_TAG_imported_declaration"; - case 0x0a: return "DW_TAG_label"; - case 0x0b: return "DW_TAG_lexical_block"; - case 0x0d: return "DW_TAG_member"; - case 0x0f: return "DW_TAG_pointer_type"; - case 0x10: return "DW_TAG_reference_type"; - case 0x11: return "DW_TAG_compile_unit"; - case 0x12: return "DW_TAG_string_type"; - case 0x13: return "DW_TAG_structure_type"; - case 0x15: return "DW_TAG_subroutine_type"; - case 0x16: return "DW_TAG_typedef"; - case 0x17: return "DW_TAG_union_type"; - case 0x18: return "DW_TAG_unspecified_parameters"; - case 0x19: return "DW_TAG_variant"; - case 0x1a: return "DW_TAG_common_block"; - case 0x1b: return "DW_TAG_common_inclusion"; - case 0x1c: return "DW_TAG_inheritance"; - case 0x1d: return "DW_TAG_inlined_subroutine"; - case 0x1e: return "DW_TAG_module"; - case 0x1f: return "DW_TAG_ptr_to_member_type"; - case 0x20: return "DW_TAG_set_type"; - case 0x21: return "DW_TAG_subrange_type"; - case 0x22: return "DW_TAG_with_stmt"; - case 0x23: return "DW_TAG_access_declaration"; - case 0x24: return "DW_TAG_base_type"; - case 0x25: return "DW_TAG_catch_block"; - case 0x26: return "DW_TAG_const_type"; - case 0x27: return "DW_TAG_constant"; - case 0x28: return "DW_TAG_enumerator"; - case 0x29: return "DW_TAG_file_type"; - case 0x2a: return "DW_TAG_friend"; - case 0x2b: return "DW_TAG_namelist"; - case 0x2c: return "DW_TAG_namelist_item"; - case 0x2d: return "DW_TAG_packed_type"; - case 0x2e: return "DW_TAG_subprogram"; - case 0x2f: return "DW_TAG_template_type_parameter"; - case 0x30: return "DW_TAG_template_value_parameter"; - case 0x31: return "DW_TAG_thrown_type"; - case 0x32: return "DW_TAG_try_block"; - case 0x33: return "DW_TAG_variant_part"; - case 0x34: return "DW_TAG_variable"; - case 0x35: return "DW_TAG_volatile_type"; - case 0x36: return "DW_TAG_dwarf_procedure"; - case 0x37: return "DW_TAG_restrict_type"; - case 0x38: return "DW_TAG_interface_type"; - case 0x39: return "DW_TAG_namespace"; - case 0x3a: return "DW_TAG_imported_module"; - case 0x3b: return "DW_TAG_unspecified_type"; - case 0x3c: return "DW_TAG_partial_unit"; - case 0x3d: return "DW_TAG_imported_unit"; - case 0x3e: return "DW_TAG_mutable_type"; - case 0x3f: return "DW_TAG_condition"; - case 0x40: return "DW_TAG_shared_type"; - case 0x41: return "DW_TAG_type_unit"; - case 0x42: return "DW_TAG_rvalue_reference_type"; - case 0x43: return "DW_TAG_template_alias"; - case 0x4080: return "DW_TAG_lo_user"; - case 0x4081: return "DW_TAG_MIPS_loop"; - case 0x4101: return "DW_TAG_format_label"; - case 0x4102: return "DW_TAG_function_template"; - case 0x4103: return "DW_TAG_class_template"; - case 0x4104: return "DW_TAG_GNU_BINCL"; - case 0x4105: return "DW_TAG_GNU_EINCL"; - case 0x4106: return "DW_TAG_GNU_template_template_param"; - case 0x4107: return "DW_TAG_GNU_template_parameter_pack"; - case 0x4108: return "DW_TAG_GNU_formal_parameter_pack"; - case 0x4109: return "DW_TAG_GNU_call_site"; - case 0x410a: return "DW_TAG_GNU_call_site_parameter"; - case 0xffff: return "DW_TAG_hi_user"; - case DW_TAG_invalid: - return "DW_TAG_invalid"; - default: - return "DW_TAG_unknown"; - } + auto name = tagname_map.find(tag); + return name == tagname_map.end() ? "DW_TAG_unknown" : name->second; } } diff --git a/tools/generate-dwarf-functions b/tools/generate-dwarf-functions index 6f503c2cb0..f47bec3c92 100755 --- a/tools/generate-dwarf-functions +++ b/tools/generate-dwarf-functions @@ -2,8 +2,8 @@ # Generate files from a given dwarf.h # Usage: tools/generate-dwarf-functions /usr/include/dwarf.h -cat - > src/mc/mc_dwarf_tagnames.cpp < +cat - > src/mc/mc_dwarf_tagnames.cpp < tagname_map = { + {0x00, "DW_TAG_invalid"}, +$(cat "$1" | grep DW_TAG_ | sed 's/.*\(DW_TAG_[^ ]*\) = \(0x[0-9a-f]*\).*/ {\2, "\1"},/') +}; +} namespace simgrid { namespace dwarf { @@ -27,13 +37,8 @@ namespace dwarf { XBT_PRIVATE const char *tagname(int tag) { - switch (tag) { -$(cat "$1" | grep DW_TAG_ | sed 's/.*\(DW_TAG_[^ ]*\) = \(0x[0-9a-f]*\).*/ case \2: return "\1";/') - case DW_TAG_invalid: - return "DW_TAG_invalid"; - default: - return "DW_TAG_unknown"; - } + auto name = tagname_map.find(tag); + return name == tagname_map.end() ? "DW_TAG_unknown" : name->second; } } @@ -41,17 +46,13 @@ $(cat "$1" | grep DW_TAG_ | sed 's/.*\(DW_TAG_[^ ]*\) = \(0x[0-9a-f]*\).*/ case EOF cat - > src/mc/mc_dwarf_attrnames.cpp << EOF -/* Copyright (c) 2014-2015. The SimGrid Team. - * All rights reserved. */ +$HEADER -/* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. */ - -/* Warning: autogenerated, do not edit! */ - -#include - -#include +namespace { +const std::unordered_map attrname_map = { +$(cat "$1" | grep DW_AT_ | sed 's/.*\(DW_AT_[^ ]*\) = \(0x[0-9a-f]*\).*/ {\2, "\1"},/') +}; +} namespace simgrid { namespace dwarf { @@ -64,11 +65,8 @@ namespace dwarf { XBT_PRIVATE const char *attrname(int attr) { - switch (attr) { -$(cat "$1" | grep DW_AT_ | sed 's/.*\(DW_AT_[^ ]*\) = \(0x[0-9a-f]*\).*/ case \2: return "\1";/') - default: - return "DW_AT_unknown"; - } + auto name = attrname_map.find(attr); + return name == attrname_map.end() ? "DW_AT_unknown" : name->second; } }