From: Mark Wielaard Date: Mon, 4 Apr 2011 14:10:20 +0000 (+0200) Subject: Update dwarf-knowledge.cc and expected-at.cc with DWARF4 tags and attributes. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3037523d4f8e010093e7c0a7c3cf6ea0f16d669;p=thirdparty%2Felfutils.git Update dwarf-knowledge.cc and expected-at.cc with DWARF4 tags and attributes. --- diff --git a/dwarflint/expected-at.cc b/dwarflint/expected-at.cc index 72a2104b2..046394b5a 100644 --- a/dwarflint/expected-at.cc +++ b/dwarflint/expected-at.cc @@ -53,6 +53,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_bit_stride) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) @@ -69,12 +70,14 @@ expected_at_map::expected_at_map () ; m_map [DW_TAG_base_type] + .optional (at_set_decl) .optional (DW_AT_allocated) .optional (DW_AT_associated) .optional (DW_AT_binary_scale) .optional (DW_AT_bit_offset) .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) + .optional (DW_AT_data_bit_offset) .optional (DW_AT_data_location) .optional (DW_AT_decimal_scale) .optional (DW_AT_decimal_sign) @@ -89,6 +92,7 @@ expected_at_map::expected_at_map () ; m_map [DW_TAG_catch_block] + .optional (at_set_decl) .optional (DW_AT_abstract_origin) .optional (DW_AT_high_pc) .optional (DW_AT_low_pc) @@ -103,12 +107,14 @@ expected_at_map::expected_at_map () .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) .optional (DW_AT_declaration) .optional (DW_AT_description) .optional (DW_AT_name) .optional (DW_AT_sibling) + .optional (DW_AT_signature) .optional (DW_AT_specification) .optional (DW_AT_start_scope) .optional (DW_AT_visibility) @@ -119,12 +125,12 @@ expected_at_map::expected_at_map () .optional (at_set_decl) .optional (DW_AT_declaration) .optional (DW_AT_description) + .optional (at_linkage_name) .optional (DW_AT_location) .optional (DW_AT_name) .optional (DW_AT_segment) .optional (DW_AT_sibling) .optional (DW_AT_visibility) - .optional (at_linkage_name) ; m_map [DW_TAG_common_inclusion] @@ -143,6 +149,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_language) .optional (DW_AT_low_pc) .optional (DW_AT_macro_info) + .optional (DW_AT_main_subprogram) .optional (DW_AT_name) .optional (DW_AT_producer) .optional (DW_AT_ranges) @@ -175,12 +182,12 @@ expected_at_map::expected_at_map () .optional (DW_AT_description) .optional (DW_AT_endianity) .optional (DW_AT_external) + .optional (at_linkage_name) .optional (DW_AT_name) .optional (DW_AT_sibling) .optional (DW_AT_start_scope) .optional (DW_AT_type) .optional (DW_AT_visibility) - .optional (at_linkage_name) ; m_map [DW_TAG_dwarf_procedure] @@ -188,9 +195,11 @@ expected_at_map::expected_at_map () ; m_map [DW_TAG_entry_point] + .optional (at_set_decl) .optional (DW_AT_address_class) .optional (DW_AT_description) .optional (DW_AT_frame_base) + .optional (at_linkage_name) .optional (DW_AT_low_pc) .optional (DW_AT_name) .optional (DW_AT_return_addr) @@ -201,7 +210,6 @@ expected_at_map::expected_at_map () .optional (DW_AT_GNU_all_tail_call_sites) .optional (DW_AT_GNU_all_call_sites) .optional (DW_AT_GNU_all_source_call_sites) - .optional (at_linkage_name) ; m_map [DW_TAG_enumeration_type] @@ -210,6 +218,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_bit_stride) .optional (DW_AT_byte_size) .optional (DW_AT_byte_stride) @@ -218,6 +227,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_description) .optional (DW_AT_name) .optional (DW_AT_sibling) + .optional (DW_AT_signature) .optional (DW_AT_specification) .optional (DW_AT_start_scope) .optional (DW_AT_type) @@ -237,6 +247,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_abstract_origin) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) .optional (DW_AT_description) @@ -306,6 +317,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_call_column) .optional (DW_AT_call_file) .optional (DW_AT_call_line) + .optional (DW_AT_const_expr) .optional (DW_AT_entry_pc) .optional (DW_AT_high_pc) .optional (DW_AT_low_pc) @@ -357,6 +369,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_bit_offset) .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) + .optional (DW_AT_data_bit_offset) .optional (DW_AT_data_member_location) .optional (DW_AT_declaration) .optional (DW_AT_description) @@ -442,7 +455,6 @@ expected_at_map::expected_at_map () .optional (DW_AT_data_location) .optional (DW_AT_name) .optional (DW_AT_sibling) - .optional (DW_AT_specification) .optional (DW_AT_type) .optional (DW_AT_byte_size) // XXX added to reflect reality ; @@ -484,12 +496,24 @@ expected_at_map::expected_at_map () .optional (DW_AT_type) ; + m_map [DW_TAG_rvalue_reference_type] + .optional (at_set_decl) + .optional (DW_AT_address_class) + .optional (DW_AT_allocated) + .optional (DW_AT_associated) + .optional (DW_AT_data_location) + .optional (DW_AT_name) + .optional (DW_AT_sibling) + .optional (DW_AT_type) + ; + m_map [DW_TAG_set_type] .optional (at_set_decl) .optional (DW_AT_abstract_origin) .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) .optional (DW_AT_declaration) @@ -502,8 +526,10 @@ expected_at_map::expected_at_map () ; m_map [DW_TAG_shared_type] - .optional (at_set_decl) + .optional (DW_AT_allocated) + .optional (DW_AT_associated) .optional (DW_AT_count) + .optional (DW_AT_data_location) .optional (DW_AT_name) .optional (DW_AT_sibling) .optional (DW_AT_type) @@ -515,6 +541,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) .optional (DW_AT_declaration) @@ -532,12 +559,14 @@ expected_at_map::expected_at_map () .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) .optional (DW_AT_declaration) .optional (DW_AT_description) .optional (DW_AT_name) .optional (DW_AT_sibling) + .optional (DW_AT_signature) .optional (DW_AT_specification) .optional (DW_AT_start_scope) .optional (DW_AT_visibility) @@ -560,6 +589,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_frame_base) .optional (DW_AT_high_pc) .optional (DW_AT_inline) + .optional (at_linkage_name) .optional (DW_AT_low_pc) .optional (DW_AT_name) .optional (DW_AT_object_pointer) @@ -578,7 +608,6 @@ expected_at_map::expected_at_map () .optional (DW_AT_visibility) .optional (DW_AT_virtuality) .optional (DW_AT_vtable_elem_location) - .optional (at_linkage_name) .optional (DW_AT_containing_type) // XXX added to reflect reality .optional (DW_AT_GNU_all_tail_call_sites) .optional (DW_AT_GNU_all_call_sites) @@ -591,6 +620,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_bit_stride) .optional (DW_AT_byte_size) .optional (DW_AT_byte_stride) @@ -625,6 +655,23 @@ expected_at_map::expected_at_map () .optional (DW_AT_visibility) ; + m_map [DW_TAG_template_alias] + .optional (at_set_decl) + .optional (DW_AT_abstract_origin) + .optional (DW_AT_accessibility) + .optional (DW_AT_allocated) + .optional (DW_AT_associated) + .optional (DW_AT_data_location) + .optional (DW_AT_declaration) + .optional (DW_AT_description) + .optional (DW_AT_name) + .optional (DW_AT_sibling) + .optional (DW_AT_signature) + .optional (DW_AT_start_scope) + .optional (DW_AT_type) + .optional (DW_AT_visibility) + ; + m_map [DW_TAG_template_type_parameter] .optional (at_set_decl) .optional (DW_AT_description) @@ -652,6 +699,7 @@ expected_at_map::expected_at_map () ; m_map [DW_TAG_try_block] + .optional (at_set_decl) .optional (DW_AT_abstract_origin) .optional (DW_AT_high_pc) .optional (DW_AT_low_pc) @@ -676,18 +724,24 @@ expected_at_map::expected_at_map () .optional (DW_AT_visibility) ; + m_map [DW_TAG_type_unit] + .optional (DW_AT_language) + ; + m_map [DW_TAG_union_type] .optional (at_set_decl) .optional (DW_AT_abstract_origin) .optional (DW_AT_accessibility) .optional (DW_AT_allocated) .optional (DW_AT_associated) + .optional (DW_AT_bit_size) .optional (DW_AT_byte_size) .optional (DW_AT_data_location) .optional (DW_AT_declaration) .optional (DW_AT_description) .optional (DW_AT_name) .optional (DW_AT_sibling) + .optional (DW_AT_signature) .optional (DW_AT_specification) .optional (DW_AT_start_scope) .optional (DW_AT_visibility) @@ -710,11 +764,13 @@ expected_at_map::expected_at_map () .optional (at_set_decl) .optional (DW_AT_abstract_origin) .optional (DW_AT_accessibility) + .optional (DW_AT_const_expr) .optional (DW_AT_const_value) .optional (DW_AT_declaration) .optional (DW_AT_description) .optional (DW_AT_endianity) .optional (DW_AT_external) + .optional (at_linkage_name) .optional (DW_AT_location) .optional (DW_AT_name) .optional (DW_AT_segment) @@ -723,7 +779,6 @@ expected_at_map::expected_at_map () .optional (DW_AT_start_scope) .optional (DW_AT_type) .optional (DW_AT_visibility) - .optional (at_linkage_name) .optional (DW_AT_artificial) // XXX added to reflect reality ; @@ -748,7 +803,6 @@ expected_at_map::expected_at_map () ; m_map [DW_TAG_volatile_type] - .optional (at_set_decl) .optional (DW_AT_allocated) .optional (DW_AT_associated) .optional (DW_AT_data_location) @@ -771,6 +825,7 @@ expected_at_map::expected_at_map () .optional (DW_AT_visibility) ; + // http://gcc.gnu.org/wiki/summit2010?action=AttachFile&do=get&target=jelinek.pdf m_map [DW_TAG_GNU_call_site] .optional (DW_AT_abstract_origin) .optional (DW_AT_call_column) diff --git a/libdw/c++/dwarf-knowledge.cc b/libdw/c++/dwarf-knowledge.cc index c49e6189b..2c30de994 100644 --- a/libdw/c++/dwarf-knowledge.cc +++ b/libdw/c++/dwarf-knowledge.cc @@ -7,7 +7,8 @@ using namespace elfutils; #define VS(what) (1U << dwarf::VS_##what) /* Return a bitmask of value spaces expected for this attribute of this tag. - Primarily culled from the DWARF 3 spec: 7.5.4, Figure 20. */ + Primarily culled from the DWARF 3 spec: 7.5.4, Figure 20. Updated to + DWARF 4, plus some GNU additions. */ static unsigned int expected_value_space (int attr, int tag) @@ -119,11 +120,14 @@ expected_value_space (int attr, int tag) case DW_AT_variable_parameter: case DW_AT_use_UTF8: case DW_AT_mutable: + case DW_AT_main_subprogram: case DW_AT_threads_scaled: case DW_AT_explicit: case DW_AT_elemental: case DW_AT_pure: case DW_AT_recursive: + case DW_AT_const_expr: + case DW_AT_enum_class: case DW_AT_GNU_tail_call: case DW_AT_GNU_all_tail_call_sites: case DW_AT_GNU_all_call_sites: @@ -135,6 +139,7 @@ expected_value_space (int attr, int tag) return VS(string); case DW_AT_start_scope: + case DW_AT_data_bit_offset: return VS(constant); case DW_AT_binary_scale: @@ -165,8 +170,13 @@ expected_value_space (int attr, int tag) case DW_AT_GNU_template_name: return VS(identifier); + /* XXX Note these are not the same, the first is related to C++ + ODR (one-definition-rule checking), the later to .debug_type + references. Should be its own class really. */ case DW_AT_GNU_odr_signature: return VS(constant); + case DW_AT_signature: + return VS(reference); } return 0;