From: Petr Machata Date: Wed, 6 Apr 2011 10:06:37 +0000 (+0200) Subject: dwarflint: highlevel_check_i holds Dwarf et.al., pass it to die_check X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b0c30fafe5f382c211b1c2056c148a9b83237c98;p=thirdparty%2Felfutils.git dwarflint: highlevel_check_i holds Dwarf et.al., pass it to die_check --- diff --git a/dwarflint/Makefile.am b/dwarflint/Makefile.am index 6bc9113e2..b9d7ef0e4 100644 --- a/dwarflint/Makefile.am +++ b/dwarflint/Makefile.am @@ -59,7 +59,7 @@ dwarflint_SOURCES = \ elf_file.hh elf_file.ii \ expected-at.cc expected.hh \ files.cc files.hh \ - highlevel_check.cc highlevel_check.hh \ + highlevel_check.cc highlevel_check.hh highlevel_check.ii \ main.cc \ messages.cc messages.hh \ misc.cc misc.hh \ diff --git a/dwarflint/check_die_tree.cc b/dwarflint/check_die_tree.cc index 96f1bab52..d7f0786c3 100644 --- a/dwarflint/check_die_tree.cc +++ b/dwarflint/check_die_tree.cc @@ -41,7 +41,9 @@ class die_check_context checkdescriptor const *_m_cd; public: - die_check_context (checkdescriptor const *cd, dwarflint &lint, + die_check_context (highlevel_check_i *check, + checkdescriptor const *cd, + dwarflint &lint, die_check_registrar const ®istrar) : _m_cd (cd) { @@ -61,7 +63,7 @@ public: stack.push_back ((*it)->descriptor ()); popper p (stack); if (lint.rules ().should_check (stack)) - push_back ((*it)->create (stack, lint)); + push_back ((*it)->create (check, stack, lint)); } } @@ -125,7 +127,7 @@ public: check_die_tree::check_die_tree (checkstack &stack, dwarflint &lint) : highlevel_check (stack, lint) { - die_check_context ctx (descriptor (), lint, *dwarflint::die_registrar ()); + die_check_context ctx (this, descriptor (), lint, *dwarflint::die_registrar ()); for (all_dies_iterator it = all_dies_iterator (dw); it != all_dies_iterator (); ++it) diff --git a/dwarflint/check_die_tree.hh b/dwarflint/check_die_tree.hh index cd0a14ed3..7f9a4ec04 100644 --- a/dwarflint/check_die_tree.hh +++ b/dwarflint/check_die_tree.hh @@ -69,9 +69,10 @@ struct reg_die_check dwarflint::die_registrar ()->push_back (this); } - virtual die_check *create (checkstack &stack, dwarflint &lint) + virtual die_check *create (highlevel_check_i *check, + checkstack &stack, dwarflint &lint) { - return new T (stack, lint); + return new T (check, stack, lint); } virtual checkdescriptor const *descriptor () const diff --git a/dwarflint/check_duplicate_DW_tag_variable.cc b/dwarflint/check_duplicate_DW_tag_variable.cc index cd6f4abfa..84ab34f67 100644 --- a/dwarflint/check_duplicate_DW_tag_variable.cc +++ b/dwarflint/check_duplicate_DW_tag_variable.cc @@ -64,7 +64,8 @@ namespace return &cd; } - check_duplicate_DW_tag_variable (checkstack &, dwarflint &) {} + check_duplicate_DW_tag_variable (highlevel_check_i *, + checkstack &, dwarflint &) {} virtual void die (all_dies_iterator const &it) diff --git a/dwarflint/dwarflint.hh b/dwarflint/dwarflint.hh index 6ee64943d..199ed7ea6 100644 --- a/dwarflint/dwarflint.hh +++ b/dwarflint/dwarflint.hh @@ -37,6 +37,7 @@ #include "checkrule.hh" #include "check_registrar.hh" #include "dwarflint.ii" +#include "highlevel_check.ii" // Classes for full-blown check passes. struct main_check_item @@ -59,7 +60,8 @@ struct die_check_item { virtual checkdescriptor const *descriptor () const = 0; virtual ~die_check_item () {} - virtual die_check *create (checkstack &stack, dwarflint &lint) = 0; + virtual die_check *create (highlevel_check_i *check, + checkstack &stack, dwarflint &lint) = 0; }; class die_check_registrar diff --git a/dwarflint/highlevel_check.hh b/dwarflint/highlevel_check.hh index ddeb9e293..26dfbd355 100644 --- a/dwarflint/highlevel_check.hh +++ b/dwarflint/highlevel_check.hh @@ -52,26 +52,35 @@ public: ~open_highlevel_dwarf (); }; +struct highlevel_check_i +{ + open_highlevel_dwarf *_m_loader; + Dwarf *const c_dw; + elfutils::dwarf const &dw; + + highlevel_check_i (checkstack &stack, dwarflint &lint) + : _m_loader (lint.check (stack, _m_loader)) + , c_dw (_m_loader->c_dw) + , dw (_m_loader->dw) + {} +}; + template class highlevel_check : public check > + , public highlevel_check_i { open_highlevel_dwarf *_m_loader; public: static checkdescriptor const *descriptor () { static checkdescriptor cd (checkdescriptor::create ("highlevel_check") - .prereq ()); + .prereq ()); return &cd; } - Dwarf *const c_dw; - elfutils::dwarf const &dw; - highlevel_check (checkstack &stack, dwarflint &lint) - : _m_loader (lint.check (stack, _m_loader)) - , c_dw (_m_loader->c_dw) - , dw (_m_loader->dw) + : highlevel_check_i (stack, lint) {} }; diff --git a/dwarflint/highlevel_check.ii b/dwarflint/highlevel_check.ii new file mode 100644 index 000000000..ddf38e666 --- /dev/null +++ b/dwarflint/highlevel_check.ii @@ -0,0 +1 @@ +class highlevel_check_i;