This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
FYI: Update dwarf-knowledge.cc and expected-at.cc with DWARF4 tags and attributes.
- From: Mark Wielaard <mjw at redhat dot com>
- To: elfutils-devel at lists dot fedorahosted dot org
- Date: Mon, 04 Apr 2011 16:14:22 +0200
- Subject: FYI: Update dwarf-knowledge.cc and expected-at.cc with DWARF4 tags and attributes.
Hi,
I updated dwarf-knowledge.cc and expected-at.cc on the dwarf branch with
the missing tags and attributes from the DWARF4 spec.
Cheers,
Mark
commit d3037523d4f8e010093e7c0a7c3cf6ea0f16d669
Author: Mark Wielaard <mjw@redhat.com>
Date: Mon Apr 4 16:10:20 2011 +0200
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 72a2104..046394b 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 c49e618..2c30de9 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;