This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]