From: Petr Machata Date: Thu, 7 Oct 2010 01:47:18 +0000 (+0200) Subject: dwarflint: Move more code from dwarf_version.hh to .cc X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c12bd93ee9b078dc9f896f1f87c85d110dde80d2;p=thirdparty%2Felfutils.git dwarflint: Move more code from dwarf_version.hh to .cc - And drop selwidth_form, which was overly general for the two uses that we have. Implement corresponding classes directly. --- diff --git a/dwarflint/dwarf_4.cc b/dwarflint/dwarf_4.cc index 7793aee2b..1733582ea 100644 --- a/dwarflint/dwarf_4.cc +++ b/dwarflint/dwarf_4.cc @@ -90,7 +90,8 @@ namespace add (new const_form (DW_FORM_data8, fw_8)); add (new offset_form (DW_FORM_sec_offset, - cl_lineptr, cl_loclistptr, cl_macptr, cl_rangelistptr)); + dw_class_set (cl_lineptr, cl_loclistptr, + cl_macptr, cl_rangelistptr))); add (new exprloc_form (DW_FORM_exprloc)); add (new flag_form (DW_FORM_flag_present, fw_0)); add (new ref_form (DW_FORM_ref_sig8, fw_8)); diff --git a/dwarflint/dwarf_version-imp.cc b/dwarflint/dwarf_version-imp.cc index e8e6b1d6d..bc03d88eb 100644 --- a/dwarflint/dwarf_version-imp.cc +++ b/dwarflint/dwarf_version-imp.cc @@ -26,6 +26,50 @@ #include "dwarf_version-imp.hh" #include "check_debug_info.hh" +template +void +dwver_index_table::add (T const *f) +{ + _m_data[f->name ()] = f; +} + +template +T const * +dwver_index_table::get (int f) const +{ + typename _map_t::const_iterator it = _m_data.find (f); + if (it != _m_data.end ()) + return it->second; + else + return NULL; +} + +template class dwver_index_table
; +template class dwver_index_table; + +template +dwver_basic::dwver_basic (int a_name, dw_class_set a_classes) + : _m_name (a_name) + , _m_classes (a_classes) +{} + +template +dw_class_set const & +dwver_basic::classes () const +{ + return _m_classes; +} + +template +int +dwver_basic::name () const +{ + return _m_name; +} + +template class dwver_basic; +template class dwver_basic; + full_form::full_form (int a_name, dw_class_set a_classes, form_width_t a_width, storage_class_t a_storclass) : basic_form (a_name, a_classes) @@ -45,18 +89,41 @@ full_form::storage_class () const return _m_storclass; } + +offset_form::offset_form (int a_name, dw_class_set a_classes) + : basic_form (a_name, a_classes) +{} + form_width_t -width_off::width (cu const *cu) +offset_form::width (cu const *cu) const { return static_cast (cu->head->offset_size); } +storage_class_t +offset_form::storage_class () const +{ + return sc_value; +} + + +address_form::address_form (int a_name, dw_class_set a_classes) + : basic_form (a_name, a_classes) +{} + form_width_t -width_addr::width (struct cu const *cu) +address_form::width (cu const *cu) const { return static_cast (cu->head->address_size); } +storage_class_t +address_form::storage_class () const +{ + return sc_value; +} + + string_form::string_form (int a_name) : preset_form (a_name, fw_unknown) {} diff --git a/dwarflint/dwarf_version-imp.hh b/dwarflint/dwarf_version-imp.hh index e6c360953..e2d1b601c 100644 --- a/dwarflint/dwarf_version-imp.hh +++ b/dwarflint/dwarf_version-imp.hh @@ -36,21 +36,10 @@ class dwver_index_table _map_t _m_data; protected: - void add (T const *f) - { - _m_data[f->name ()] = f; - } + void add (T const *f); public: - T const * - get (int f) const - { - typename _map_t::const_iterator it = _m_data.find (f); - if (it != _m_data.end ()) - return it->second; - else - return NULL; - } + T const *get (int f) const; }; typedef dwver_index_table form_table; @@ -64,22 +53,10 @@ class dwver_basic dw_class_set _m_classes; public: - dwver_basic (int a_name, dw_class_set a_classes) - : _m_name (a_name) - , _m_classes (a_classes) - {} + dwver_basic (int a_name, dw_class_set a_classes); - dw_class_set const & - classes () const - { - return _m_classes; - } - - int - name () const - { - return _m_name; - } + dw_class_set const &classes () const; + int name () const; }; typedef dwver_basic basic_form; @@ -100,35 +77,22 @@ public: storage_class_t storage_class () const; }; -struct width_off { - static form_width_t width (cu const *cu); -}; +struct offset_form + : public basic_form +{ + offset_form (int a_name, dw_class_set a_classes); -struct width_addr { - static form_width_t width (cu const *cu); + form_width_t width (cu const *cu) const; + storage_class_t storage_class () const; }; -template -class selwidth_form +struct address_form : public basic_form { -public: - template - selwidth_form (int a_name, Clss... a_classes) - : basic_form (a_name, dw_class_set (a_classes...)) - {} + address_form (int a_name, dw_class_set a_classes); - form_width_t - width (struct cu const *cu) const - { - return WidthSel::width (cu); - } - - storage_class_t - storage_class () const - { - return StorClass; - } + form_width_t width (cu const *cu) const; + storage_class_t storage_class () const; }; template @@ -155,8 +119,6 @@ struct preset_attribute {} }; -typedef selwidth_form offset_form; -typedef selwidth_form address_form; typedef preset_form block_form; typedef preset_form const_form; typedef preset_form ref_form;