From: Petr Machata Date: Sat, 9 Oct 2010 17:20:56 +0000 (+0200) Subject: dwarflint: Add DW_FORM_indirect to DWARF 2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21a0a98c195730415ec3f8bd5334244b62498712;p=thirdparty%2Felfutils.git dwarflint: Add DW_FORM_indirect to DWARF 2 - add cl_indirect to facilitate the indirect form. Make this the implicit class of all attributes. --- diff --git a/dwarflint/dwarf_2.cc b/dwarflint/dwarf_2.cc index f3c4aec60..69c45953c 100644 --- a/dwarflint/dwarf_2.cc +++ b/dwarflint/dwarf_2.cc @@ -155,6 +155,8 @@ namespace add (offset_form (DW_FORM_strp, cl_string)); add (address_form (DW_FORM_addr, cl_address)); add (address_form (DW_FORM_ref_addr, cl_reference)); + + add (form (DW_FORM_indirect, cl_indirect, fw_uleb, sc_value)); } }; diff --git a/dwarflint/dwarf_version.cc b/dwarflint/dwarf_version.cc index 66e85e437..dc8aab37c 100644 --- a/dwarflint/dwarf_version.cc +++ b/dwarflint/dwarf_version.cc @@ -97,9 +97,19 @@ form::width (cu const *cu) const return static_cast (_m_width); } -attribute::attribute (int a_name, dw_class_set a_classes) +namespace +{ + dw_class_set + include_indirect (dw_class_set a_classes) + { + a_classes.set (cl_indirect); + return a_classes; + } +} + +attribute::attribute (int a_name, dw_class_set const &a_classes) : _m_name (a_name) - , _m_classes (a_classes) + , _m_classes (include_indirect (a_classes)) {} diff --git a/dwarflint/dwarf_version.hh b/dwarflint/dwarf_version.hh index dd1fd45bb..8108b42b2 100644 --- a/dwarflint/dwarf_version.hh +++ b/dwarflint/dwarf_version.hh @@ -33,6 +33,7 @@ enum dw_class { + cl_indirect, cl_address, cl_block, cl_constant, @@ -137,7 +138,8 @@ class attribute dw_class_set const _m_classes; public: - attribute (int a_name, dw_class_set a_classes); + /// NB this ctor automatically adds cl_indirect to a_classes. + attribute (int a_name, dw_class_set const &a_classes); int name () const