]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
Move expected_at_map to file of its own, drop acceptable_form
authorPetr Machata <pmachata@redhat.com>
Wed, 25 Feb 2009 14:44:58 +0000 (15:44 +0100)
committerPetr Machata <pmachata@redhat.com>
Wed, 25 Feb 2009 14:44:58 +0000 (15:44 +0100)
src/Makefile.am
src/dwarflint-expected-at.cc [new file with mode: 0644]
src/dwarflint-expected.hh [new file with mode: 0644]
src/dwarflint-hl.cc

index a44cd5e427781395ba804421f2541acb71b8d2cc..33cbf098a08f5cba8b2b669f5871fcf65c91a222 100644 (file)
@@ -89,7 +89,7 @@ libdwplusplus_SOURCES = ../libdw/c++/values.cc ../libdw/c++/known.cc \
 dwarfcmp_SOURCES = dwarfcmp.cc
 dwarfcmp_SOURCES += $(libdwplusplus_SOURCES)
 
-dwarflint_SOURCES = dwarflint.c dwarflint-hl.cc dwarfstrings.c
+dwarflint_SOURCES = dwarflint.c dwarflint-hl.cc dwarflint-expected-at.cc dwarfstrings.c
 dwarflint_SOURCES += $(libdwplusplus_SOURCES) # XXX drop when we have the DSO
 
 readelf_SOURCES = readelf.c dwarfstrings.c
diff --git a/src/dwarflint-expected-at.cc b/src/dwarflint-expected-at.cc
new file mode 100644 (file)
index 0000000..ed47121
--- /dev/null
@@ -0,0 +1,729 @@
+#include "dwarflint-expected.hh"
+#include "../libdw/dwarf.h"
+
+expected_at_map::expected_at_map ()
+{
+  std::set <int> at_set_decl;
+  at_set_decl.insert (DW_AT_decl_column);
+  at_set_decl.insert (DW_AT_decl_file);
+  at_set_decl.insert (DW_AT_decl_line);
+
+  m_map [DW_TAG_access_declaration]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map[DW_TAG_array_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_stride)
+    .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_ordering)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_base_type]
+    .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_location)
+    .optional (DW_AT_decimal_scale)
+    .optional (DW_AT_decimal_sign)
+    .optional (DW_AT_description)
+    .optional (DW_AT_digit_count)
+    .optional (DW_AT_encoding)
+    .optional (DW_AT_endianity)
+    .optional (DW_AT_name)
+    .optional (DW_AT_picture_string)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_small)
+    ;
+
+  m_map [DW_TAG_catch_block]
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_class_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_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_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_visibility)
+    .optional (DW_AT_containing_type) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_common_block]
+    .optional (at_set_decl)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_location)
+    .optional (DW_AT_name)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_common_inclusion]
+    .optional (at_set_decl)
+    .optional (DW_AT_common_reference)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_compile_unit]
+    .optional (DW_AT_base_types)
+    .optional (DW_AT_comp_dir)
+    .optional (DW_AT_identifier_case)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_language)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_macro_info)
+    .optional (DW_AT_name)
+    .optional (DW_AT_producer)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_stmt_list)
+    .optional (DW_AT_use_UTF8)
+    .optional (DW_AT_entry_pc) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_condition]
+    .optional (at_set_decl)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_const_type]
+    .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_constant]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_const_value)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_endianity)
+    .optional (DW_AT_external)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_dwarf_procedure]
+    .optional (DW_AT_location)
+    ;
+
+  m_map [DW_TAG_entry_point]
+    .optional (DW_AT_address_class)
+    .optional (DW_AT_description)
+    .optional (DW_AT_frame_base)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_name)
+    .optional (DW_AT_return_addr)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_static_link)
+    .optional (DW_AT_type)
+    ;
+
+  m_map [DW_TAG_enumeration_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_stride)
+    .optional (DW_AT_byte_size)
+    .optional (DW_AT_byte_stride)
+    .optional (DW_AT_data_location)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_enumerator]
+    .optional (at_set_decl)
+    .optional (DW_AT_const_value)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_file_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_allocated)
+    .optional (DW_AT_associated)
+    .optional (DW_AT_byte_size)
+    .optional (DW_AT_data_location)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_formal_parameter]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_artificial)
+    .optional (DW_AT_const_value)
+    .optional (DW_AT_default_value)
+    .optional (DW_AT_description)
+    .optional (DW_AT_endianity)
+    .optional (DW_AT_is_optional)
+    .optional (DW_AT_location)
+    .optional (DW_AT_name)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    .optional (DW_AT_variable_parameter)
+    ;
+
+  m_map [DW_TAG_friend]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_friend)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_imported_declaration]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_description)
+    .optional (DW_AT_import)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    ;
+
+  m_map [DW_TAG_imported_module]
+    .optional (at_set_decl)
+    .optional (DW_AT_import)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    ;
+
+  m_map [DW_TAG_imported_unit]
+    .optional (DW_AT_import)
+    ;
+
+  m_map [DW_TAG_inheritance]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_data_member_location)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    .optional (DW_AT_virtuality)
+    ;
+
+  m_map [DW_TAG_inlined_subroutine]
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_call_column)
+    .optional (DW_AT_call_file)
+    .optional (DW_AT_call_line)
+    .optional (DW_AT_entry_pc)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_return_addr)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_trampoline)
+    ;
+
+  m_map [DW_TAG_interface_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    ;
+
+  m_map [DW_TAG_label]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_description)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_name)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_lexical_block]
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_description)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_name)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_member]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_bit_offset)
+    .optional (DW_AT_bit_size)
+    .optional (DW_AT_byte_size)
+    .optional (DW_AT_data_member_location)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_mutable)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_module]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_entry_pc)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_name)
+    .optional (DW_AT_priority)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_specification)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_namelist]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_namelist_item]
+    .optional (at_set_decl)
+    .optional (DW_AT_namelist_item)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_namespace]
+    .optional (at_set_decl)
+    .optional (DW_AT_description)
+    .optional (DW_AT_extension)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_start_scope)
+    ;
+
+  m_map [DW_TAG_packed_type]
+    .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_partial_unit]
+    .optional (DW_AT_base_types)
+    .optional (DW_AT_comp_dir)
+    .optional (DW_AT_description)
+    .optional (DW_AT_identifier_case)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_language)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_macro_info)
+    .optional (DW_AT_name)
+    .optional (DW_AT_producer)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_stmt_list)
+    .optional (DW_AT_use_UTF8)
+    ;
+
+  m_map [DW_TAG_pointer_type]
+    .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_specification)
+    .optional (DW_AT_type)
+    .optional (DW_AT_byte_size) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_ptr_to_member_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_address_class)
+    .optional (DW_AT_allocated)
+    .optional (DW_AT_associated)
+    .optional (DW_AT_containing_type)
+    .optional (DW_AT_data_location)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    .optional (DW_AT_use_location)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_reference_type]
+    .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)
+    .optional (DW_AT_byte_size) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_restrict_type]
+    .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_byte_size)
+    .optional (DW_AT_data_location)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_shared_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_count)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    ;
+
+  m_map [DW_TAG_string_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_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_start_scope)
+    .optional (DW_AT_string_length)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_structure_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_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_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_visibility)
+    .optional (DW_AT_containing_type) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_subprogram]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_address_class)
+    .optional (DW_AT_artificial)
+    .optional (DW_AT_calling_convention)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_elemental)
+    .optional (DW_AT_entry_pc)
+    .optional (DW_AT_explicit)
+    .optional (DW_AT_external)
+    .optional (DW_AT_frame_base)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_inline)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_name)
+    .optional (DW_AT_object_pointer)
+    .optional (DW_AT_prototyped)
+    .optional (DW_AT_pure)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_recursive)
+    .optional (DW_AT_return_addr)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_static_link)
+    .optional (DW_AT_trampoline)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    .optional (DW_AT_virtuality)
+    .optional (DW_AT_vtable_elem_location)
+    .optional (DW_AT_MIPS_linkage_name) // XXX added to reflect reality
+    .optional (DW_AT_containing_type) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_subrange_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_stride)
+    .optional (DW_AT_byte_size)
+    .optional (DW_AT_byte_stride)
+    .optional (DW_AT_count)
+    .optional (DW_AT_data_location)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_lower_bound)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_threads_scaled)
+    .optional (DW_AT_type)
+    .optional (DW_AT_upper_bound)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_subroutine_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_address_class)
+    .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_prototyped)
+    .optional (DW_AT_sibling)
+    .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)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    ;
+
+  m_map [DW_TAG_template_value_parameter ]
+    .optional (at_set_decl)
+    .optional (DW_AT_const_value)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    ;
+
+  m_map [DW_TAG_thrown_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_allocated)
+    .optional (DW_AT_associated)
+    .optional (DW_AT_data_location)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    ;
+
+  m_map [DW_TAG_try_block]
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_typedef]
+    .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_start_scope)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+
+  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_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_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_visibility)
+    ;
+
+  m_map [DW_TAG_unspecified_parameters]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_artificial)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_unspecified_type]
+    .optional (at_set_decl)
+    .optional (DW_AT_description)
+    .optional (DW_AT_name)
+    ;
+
+  m_map [DW_TAG_variable]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_const_value)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_description)
+    .optional (DW_AT_endianity)
+    .optional (DW_AT_external)
+    .optional (DW_AT_location)
+    .optional (DW_AT_name)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_specification)
+    .optional (DW_AT_start_scope)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    .optional (DW_AT_MIPS_linkage_name) // XXX added to reflect reality
+    .optional (DW_AT_artificial) // XXX added to reflect reality
+    ;
+
+  m_map [DW_TAG_variant]
+    .optional (at_set_decl)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_discr_list)
+    .optional (DW_AT_discr_value)
+    .optional (DW_AT_sibling)
+    ;
+
+  m_map [DW_TAG_variant_part]
+    .optional (at_set_decl)
+    .optional (DW_AT_abstract_origin)
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_discr)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    ;
+
+  m_map [DW_TAG_volatile_type]
+    .optional (at_set_decl)
+    .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_with_stmt]
+    .optional (DW_AT_accessibility)
+    .optional (DW_AT_address_class)
+    .optional (DW_AT_declaration)
+    .optional (DW_AT_high_pc)
+    .optional (DW_AT_location)
+    .optional (DW_AT_low_pc)
+    .optional (DW_AT_ranges)
+    .optional (DW_AT_segment)
+    .optional (DW_AT_sibling)
+    .optional (DW_AT_type)
+    .optional (DW_AT_visibility)
+    ;
+}
diff --git a/src/dwarflint-expected.hh b/src/dwarflint-expected.hh
new file mode 100644 (file)
index 0000000..429d64c
--- /dev/null
@@ -0,0 +1,79 @@
+#include <map>
+#include <set>
+#include <stdexcept>
+#include <sstream>
+#include <cassert>
+
+enum optionality
+{
+  opt_optional = 0,    // may or may not be present
+  opt_required,                // bogus if missing
+  opt_expected,                // suspicious if missing
+};
+
+template <class T>
+std::string
+to_string (T x)
+{
+  std::ostringstream o;
+  o << x;
+  return o.str();
+}
+
+struct expected_set
+{
+  typedef std::map <int, optionality> expectation_map;
+
+private:
+  expectation_map m_map;
+
+public:
+#define DEF_FILLER(WHAT)                                               \
+  expected_set &WHAT (int attribute)                                   \
+  {                                                                    \
+    assert (m_map.find (attribute) == m_map.end ());                   \
+    m_map.insert (std::make_pair (attribute, opt_##WHAT));             \
+    return *this;                                                      \
+  }                                                                    \
+  expected_set &WHAT (std::set <int> const &attributes)                        \
+  {                                                                    \
+    for (std::set <int>::const_iterator it = attributes.begin ();      \
+        it != attributes.end (); ++it)                                 \
+      WHAT (*it);                                                      \
+    return *this;                                                      \
+  }
+
+  DEF_FILLER (required)
+  DEF_FILLER (expected)
+  DEF_FILLER (optional)
+#undef DEF_FILLER
+
+  expectation_map const &map () const
+  {
+    return m_map;
+  }
+};
+
+class expected_map
+{
+  typedef std::map <int, expected_set> expected_map_t;
+
+protected:
+  expected_map_t m_map;
+  expected_map () {}
+
+public:
+  expected_set::expectation_map const &map (int tag) const
+  {
+    expected_map_t::const_iterator it = m_map.find (tag);
+    if (it == m_map.end ())
+      throw std::runtime_error ("Unknown tag #" + to_string (tag));
+    return it->second.map ();
+  }
+};
+
+struct expected_at_map
+  : public expected_map
+{
+  expected_at_map ();
+};
index b6198e5cbfaa4dd31d066fee04508ce9f56370be..75bbbd81b0151900c31f5adaa3e845dd8e45df9c 100644 (file)
@@ -40,6 +40,7 @@
 #include "dwarfstrings.h"
 #include "c++/dwarf"
 #include "../libdw/libdwP.h"
+#include "../libdw/c++/dwarf-knowledge.cc"
 
 namespace
 {
@@ -49,15 +50,6 @@ namespace
   {
     return static_cast<message_category> (c1 | c2 | c3);
   }
-
-  template <class T>
-  std::string
-  to_string (T x)
-  {
-    std::ostringstream o;
-    o << x;
-    return o.str();
-  }
 }
 
 struct hl_ctx
@@ -82,951 +74,6 @@ hl_ctx_delete (hl_ctx *hlctx)
   delete hlctx;
 }
 
-class acceptable_form
-{
-  typedef std::set <int> form_set;
-  form_set m_forms;
-
-public:
-  acceptable_form () {}
-
-  acceptable_form (int f, ...)
-  {
-    va_list ap;
-    va_start (ap, f);
-    m_forms.insert (f);
-    while ((f = va_arg (ap, int)))
-      m_forms.insert (f);
-    va_end (ap);
-  }
-
-  acceptable_form operator+ (acceptable_form const &other) const
-  {
-    acceptable_form ret;
-    ret.m_forms.insert (m_forms.begin (), m_forms.end ());
-    ret.m_forms.insert (other.m_forms.begin (), other.m_forms.end ());
-    return ret;
-  }
-
-  virtual bool acceptable (int form) const
-  {
-    return m_forms.find (form) != m_forms.end ();
-  }
-};
-
-class acceptable_form_map
-{
-  typedef std::map <int, acceptable_form> acceptable_map;
-  acceptable_map m_map;
-
-public:
-  acceptable_form_map ()
-  {
-    acceptable_form form_c_address (DW_FORM_addr, 0);
-    acceptable_form form_c_block (DW_FORM_block1, DW_FORM_block2,
-                                 DW_FORM_block4, DW_FORM_block, 0);
-    acceptable_form form_c_constant (DW_FORM_data1, DW_FORM_data2,
-                                    DW_FORM_data4, DW_FORM_data8,
-                                    DW_FORM_sdata, DW_FORM_udata, 0);
-    acceptable_form form_c_flag (DW_FORM_flag, 0);
-    acceptable_form form_c_ptr (DW_FORM_data4, DW_FORM_data8, 0);
-    // ^^ lineptr, loclistptr, macptr, rangelistptr
-    acceptable_form form_c_reference (DW_FORM_ref1, DW_FORM_ref2,
-                                     DW_FORM_ref4, DW_FORM_ref8,
-                                     DW_FORM_ref_udata, DW_FORM_ref_addr, 0);
-    acceptable_form form_c_string (DW_FORM_strp, DW_FORM_string, 0);
-    acceptable_form form_c_bcr = form_c_block + form_c_constant + form_c_reference;
-
-    std::map <int, acceptable_form> acceptable_forms;
-    m_map[DW_AT_sibling] = form_c_reference;
-    m_map[DW_AT_location] = form_c_block + form_c_ptr;
-    m_map[DW_AT_name] = form_c_string;
-    m_map[DW_AT_ordering] = form_c_constant;
-    m_map[DW_AT_byte_size] = form_c_bcr;
-    m_map[DW_AT_bit_offset] = form_c_bcr;
-    m_map[DW_AT_bit_size] = form_c_bcr;
-    m_map[DW_AT_stmt_list] = form_c_ptr;
-    m_map[DW_AT_low_pc] = form_c_address;
-    m_map[DW_AT_high_pc] = form_c_address;
-    m_map[DW_AT_language] = form_c_constant;
-    m_map[DW_AT_discr] = form_c_reference;
-    m_map[DW_AT_discr_value] = form_c_constant;
-    m_map[DW_AT_visibility] = form_c_constant;
-    m_map[DW_AT_import] = form_c_reference;
-    m_map[DW_AT_string_length] = form_c_block + form_c_ptr;
-    m_map[DW_AT_common_reference] = form_c_reference;
-    m_map[DW_AT_comp_dir] = form_c_string;
-    m_map[DW_AT_const_value] = form_c_block + form_c_constant + form_c_string;
-    m_map[DW_AT_containing_type] = form_c_reference;
-    m_map[DW_AT_default_value] = form_c_reference;
-    m_map[DW_AT_inline] = form_c_constant;
-    m_map[DW_AT_is_optional] = form_c_flag;
-    m_map[DW_AT_lower_bound] = form_c_block + form_c_constant + form_c_reference;
-    m_map[DW_AT_producer] = form_c_string;
-    m_map[DW_AT_prototyped] = form_c_flag;
-    m_map[DW_AT_return_addr] = form_c_block + form_c_ptr;
-    m_map[DW_AT_start_scope] = form_c_constant;
-    m_map[DW_AT_bit_stride] = form_c_constant;
-    m_map[DW_AT_upper_bound] = form_c_bcr;
-    m_map[DW_AT_abstract_origin] = form_c_reference;
-    m_map[DW_AT_accessibility] = form_c_constant;
-    m_map[DW_AT_address_class] = form_c_constant;
-    m_map[DW_AT_artificial] = form_c_flag;
-    m_map[DW_AT_base_types] = form_c_reference;
-    m_map[DW_AT_calling_convention] = form_c_constant;
-    m_map[DW_AT_count] = form_c_bcr;
-    m_map[DW_AT_data_member_location] = form_c_block + form_c_constant + form_c_ptr;
-    m_map[DW_AT_decl_column] = form_c_constant;
-    m_map[DW_AT_decl_file] = form_c_constant;
-    m_map[DW_AT_decl_line] = form_c_constant;
-    m_map[DW_AT_declaration] = form_c_flag;
-    m_map[DW_AT_discr_list] = form_c_block;
-    m_map[DW_AT_encoding] = form_c_constant;
-    m_map[DW_AT_external] = form_c_flag;
-    m_map[DW_AT_frame_base] = form_c_block + form_c_ptr;
-    m_map[DW_AT_friend] = form_c_reference;
-    m_map[DW_AT_identifier_case] = form_c_constant;
-    m_map[DW_AT_macro_info] = form_c_ptr;
-    m_map[DW_AT_namelist_item] = form_c_block;
-    m_map[DW_AT_priority] = form_c_reference;
-    m_map[DW_AT_segment] = form_c_block + form_c_ptr;
-    m_map[DW_AT_specification] = form_c_reference;
-    m_map[DW_AT_static_link] = form_c_block + form_c_ptr;
-    m_map[DW_AT_type] = form_c_reference;
-    m_map[DW_AT_use_location] = form_c_block + form_c_ptr;
-    m_map[DW_AT_variable_parameter] = form_c_flag;
-    m_map[DW_AT_virtuality] = form_c_constant;
-    m_map[DW_AT_vtable_elem_location] = form_c_block + form_c_ptr;
-    m_map[DW_AT_allocated] = form_c_bcr;
-    m_map[DW_AT_associated] = form_c_bcr;
-    m_map[DW_AT_data_location] = form_c_block;
-    m_map[DW_AT_byte_stride] = form_c_bcr;
-    m_map[DW_AT_entry_pc] = form_c_address;
-    m_map[DW_AT_use_UTF8] = form_c_flag;
-    m_map[DW_AT_extension] = form_c_reference;
-    m_map[DW_AT_ranges] = form_c_ptr;
-    m_map[DW_AT_trampoline] = form_c_address + form_c_flag + form_c_reference + form_c_string;
-    m_map[DW_AT_call_column] = form_c_constant;
-    m_map[DW_AT_call_file] = form_c_constant;
-    m_map[DW_AT_call_line] = form_c_constant;
-    m_map[DW_AT_description] = form_c_string;
-    m_map[DW_AT_binary_scale] = form_c_constant;
-    m_map[DW_AT_decimal_scale] = form_c_constant;
-    m_map[DW_AT_small] = form_c_reference;
-    m_map[DW_AT_decimal_sign] = form_c_constant;
-    m_map[DW_AT_digit_count] = form_c_constant;
-    m_map[DW_AT_picture_string] = form_c_string;
-    m_map[DW_AT_mutable] = form_c_flag;
-    m_map[DW_AT_threads_scaled] = form_c_flag;
-    m_map[DW_AT_explicit] = form_c_flag;
-    m_map[DW_AT_object_pointer] = form_c_reference;
-    m_map[DW_AT_endianity] = form_c_constant;
-    m_map[DW_AT_elemental] = form_c_flag;
-    m_map[DW_AT_pure] = form_c_flag;
-    m_map[DW_AT_recursive] = form_c_flag;
-  }
-
-  bool acceptable (int attribute, int form) const
-  {
-    acceptable_map::const_iterator it = m_map.find (attribute);
-    if (it != m_map.end ())
-      throw std::runtime_error ("Unknown attribute #" + ::to_string (attribute));
-    else
-      return it->second.acceptable (form);
-  }
-};
-
-enum optionality
-{
-  opt_optional = 0,    // may or may not be present
-  opt_required,                // bogus if missing
-  opt_expected,                // suspicious if missing
-};
-
-struct expected_set
-{
-  typedef std::map <int, optionality> expectation_map;
-
-private:
-  expectation_map m_map;
-
-public:
-#define DEF_FILLER(WHAT)                                               \
-  expected_set &WHAT (int attribute)                                   \
-  {                                                                    \
-    assert (m_map.find (attribute) == m_map.end ());                   \
-    m_map.insert (std::make_pair (attribute, opt_##WHAT));             \
-    return *this;                                                      \
-  }                                                                    \
-  expected_set &WHAT (std::set <int> const &attributes)                        \
-  {                                                                    \
-    for (std::set <int>::const_iterator it = attributes.begin ();      \
-        it != attributes.end (); ++it)                                 \
-      WHAT (*it);                                                      \
-    return *this;                                                      \
-  }
-
-  DEF_FILLER (required)
-  DEF_FILLER (expected)
-  DEF_FILLER (optional)
-#undef DEF_FILLER
-
-  expectation_map const &map () const
-  {
-    return m_map;
-  }
-};
-
-class expected_map
-{
-  typedef std::map <int, expected_set> expected_map_t;
-
-protected:
-  expected_map_t m_map;
-  expected_map () {}
-
-public:
-  expected_set::expectation_map const &map (int tag) const
-  {
-    expected_map_t::const_iterator it = m_map.find (tag);
-    if (it == m_map.end ())
-      throw std::runtime_error ("Unknown tag #" + ::to_string (tag));
-    return it->second.map ();
-  }
-};
-
-struct expected_at_map
-  : public expected_map
-{
-  expected_at_map ()
-  {
-    std::set <int> at_set_decl;
-    at_set_decl.insert (DW_AT_decl_column);
-    at_set_decl.insert (DW_AT_decl_file);
-    at_set_decl.insert (DW_AT_decl_line);
-
-    m_map [DW_TAG_access_declaration]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map[DW_TAG_array_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_stride)
-      .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_ordering)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_base_type]
-      .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_location)
-      .optional (DW_AT_decimal_scale)
-      .optional (DW_AT_decimal_sign)
-      .optional (DW_AT_description)
-      .optional (DW_AT_digit_count)
-      .optional (DW_AT_encoding)
-      .optional (DW_AT_endianity)
-      .optional (DW_AT_name)
-      .optional (DW_AT_picture_string)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_small)
-      ;
-
-    m_map [DW_TAG_catch_block]
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_class_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_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_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_visibility)
-      .optional (DW_AT_containing_type) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_common_block]
-      .optional (at_set_decl)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_location)
-      .optional (DW_AT_name)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_common_inclusion]
-      .optional (at_set_decl)
-      .optional (DW_AT_common_reference)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_compile_unit]
-      .optional (DW_AT_base_types)
-      .optional (DW_AT_comp_dir)
-      .optional (DW_AT_identifier_case)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_language)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_macro_info)
-      .optional (DW_AT_name)
-      .optional (DW_AT_producer)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_stmt_list)
-      .optional (DW_AT_use_UTF8)
-      .optional (DW_AT_entry_pc) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_condition]
-      .optional (at_set_decl)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_const_type]
-      .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_constant]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_const_value)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_endianity)
-      .optional (DW_AT_external)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_dwarf_procedure]
-      .optional (DW_AT_location)
-      ;
-
-    m_map [DW_TAG_entry_point]
-      .optional (DW_AT_address_class)
-      .optional (DW_AT_description)
-      .optional (DW_AT_frame_base)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_name)
-      .optional (DW_AT_return_addr)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_static_link)
-      .optional (DW_AT_type)
-      ;
-
-    m_map [DW_TAG_enumeration_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_stride)
-      .optional (DW_AT_byte_size)
-      .optional (DW_AT_byte_stride)
-      .optional (DW_AT_data_location)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_enumerator]
-      .optional (at_set_decl)
-      .optional (DW_AT_const_value)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_file_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_allocated)
-      .optional (DW_AT_associated)
-      .optional (DW_AT_byte_size)
-      .optional (DW_AT_data_location)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_formal_parameter]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_artificial)
-      .optional (DW_AT_const_value)
-      .optional (DW_AT_default_value)
-      .optional (DW_AT_description)
-      .optional (DW_AT_endianity)
-      .optional (DW_AT_is_optional)
-      .optional (DW_AT_location)
-      .optional (DW_AT_name)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      .optional (DW_AT_variable_parameter)
-      ;
-
-    m_map [DW_TAG_friend]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_friend)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_imported_declaration]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_description)
-      .optional (DW_AT_import)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      ;
-
-    m_map [DW_TAG_imported_module]
-      .optional (at_set_decl)
-      .optional (DW_AT_import)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      ;
-
-    m_map [DW_TAG_imported_unit]
-      .optional (DW_AT_import)
-      ;
-
-    m_map [DW_TAG_inheritance]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_data_member_location)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      .optional (DW_AT_virtuality)
-      ;
-
-    m_map [DW_TAG_inlined_subroutine]
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_call_column)
-      .optional (DW_AT_call_file)
-      .optional (DW_AT_call_line)
-      .optional (DW_AT_entry_pc)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_return_addr)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_trampoline)
-      ;
-
-    m_map [DW_TAG_interface_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      ;
-
-    m_map [DW_TAG_label]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_description)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_name)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_lexical_block]
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_description)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_name)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_member]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_bit_offset)
-      .optional (DW_AT_bit_size)
-      .optional (DW_AT_byte_size)
-      .optional (DW_AT_data_member_location)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_mutable)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_module]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_entry_pc)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_name)
-      .optional (DW_AT_priority)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_specification)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_namelist]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_namelist_item]
-      .optional (at_set_decl)
-      .optional (DW_AT_namelist_item)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_namespace]
-      .optional (at_set_decl)
-      .optional (DW_AT_description)
-      .optional (DW_AT_extension)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_start_scope)
-      ;
-
-    m_map [DW_TAG_packed_type]
-      .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_partial_unit]
-      .optional (DW_AT_base_types)
-      .optional (DW_AT_comp_dir)
-      .optional (DW_AT_description)
-      .optional (DW_AT_identifier_case)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_language)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_macro_info)
-      .optional (DW_AT_name)
-      .optional (DW_AT_producer)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_stmt_list)
-      .optional (DW_AT_use_UTF8)
-      ;
-
-    m_map [DW_TAG_pointer_type]
-      .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_specification)
-      .optional (DW_AT_type)
-      .optional (DW_AT_byte_size) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_ptr_to_member_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_address_class)
-      .optional (DW_AT_allocated)
-      .optional (DW_AT_associated)
-      .optional (DW_AT_containing_type)
-      .optional (DW_AT_data_location)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      .optional (DW_AT_use_location)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_reference_type]
-      .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)
-      .optional (DW_AT_byte_size) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_restrict_type]
-      .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_byte_size)
-      .optional (DW_AT_data_location)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_shared_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_count)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      ;
-
-    m_map [DW_TAG_string_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_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_start_scope)
-      .optional (DW_AT_string_length)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_structure_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_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_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_visibility)
-      .optional (DW_AT_containing_type) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_subprogram]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_address_class)
-      .optional (DW_AT_artificial)
-      .optional (DW_AT_calling_convention)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_elemental)
-      .optional (DW_AT_entry_pc)
-      .optional (DW_AT_explicit)
-      .optional (DW_AT_external)
-      .optional (DW_AT_frame_base)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_inline)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_name)
-      .optional (DW_AT_object_pointer)
-      .optional (DW_AT_prototyped)
-      .optional (DW_AT_pure)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_recursive)
-      .optional (DW_AT_return_addr)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_static_link)
-      .optional (DW_AT_trampoline)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      .optional (DW_AT_virtuality)
-      .optional (DW_AT_vtable_elem_location)
-      .optional (DW_AT_MIPS_linkage_name) // XXX added to reflect reality
-      .optional (DW_AT_containing_type) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_subrange_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_stride)
-      .optional (DW_AT_byte_size)
-      .optional (DW_AT_byte_stride)
-      .optional (DW_AT_count)
-      .optional (DW_AT_data_location)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_lower_bound)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_threads_scaled)
-      .optional (DW_AT_type)
-      .optional (DW_AT_upper_bound)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_subroutine_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_address_class)
-      .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_prototyped)
-      .optional (DW_AT_sibling)
-      .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)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      ;
-
-    m_map [DW_TAG_template_value_parameter ]
-      .optional (at_set_decl)
-      .optional (DW_AT_const_value)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      ;
-
-    m_map [DW_TAG_thrown_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_allocated)
-      .optional (DW_AT_associated)
-      .optional (DW_AT_data_location)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      ;
-
-    m_map [DW_TAG_try_block]
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_typedef]
-      .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_start_scope)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-
-    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_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_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_visibility)
-      ;
-
-    m_map [DW_TAG_unspecified_parameters]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_artificial)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_unspecified_type]
-      .optional (at_set_decl)
-      .optional (DW_AT_description)
-      .optional (DW_AT_name)
-      ;
-
-    m_map [DW_TAG_variable]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_const_value)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_description)
-      .optional (DW_AT_endianity)
-      .optional (DW_AT_external)
-      .optional (DW_AT_location)
-      .optional (DW_AT_name)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_specification)
-      .optional (DW_AT_start_scope)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      .optional (DW_AT_MIPS_linkage_name) // XXX added to reflect reality
-      .optional (DW_AT_artificial) // XXX added to reflect reality
-      ;
-
-    m_map [DW_TAG_variant]
-      .optional (at_set_decl)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_discr_list)
-      .optional (DW_AT_discr_value)
-      .optional (DW_AT_sibling)
-      ;
-
-    m_map [DW_TAG_variant_part]
-      .optional (at_set_decl)
-      .optional (DW_AT_abstract_origin)
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_discr)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      ;
-
-    m_map [DW_TAG_volatile_type]
-      .optional (at_set_decl)
-      .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_with_stmt]
-      .optional (DW_AT_accessibility)
-      .optional (DW_AT_address_class)
-      .optional (DW_AT_declaration)
-      .optional (DW_AT_high_pc)
-      .optional (DW_AT_location)
-      .optional (DW_AT_low_pc)
-      .optional (DW_AT_ranges)
-      .optional (DW_AT_segment)
-      .optional (DW_AT_sibling)
-      .optional (DW_AT_type)
-      .optional (DW_AT_visibility)
-      ;
-  }
-};
-
-static const acceptable_form_map acceptable_form;
 static const expected_at_map expected_at;
 //static const expected_children_map expected_children;