From: Mark Wielaard Date: Tue, 5 Apr 2011 15:59:48 +0000 (+0200) Subject: Turn check_self_referential_die into a die_check class. X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9cd163d105333c3b6c9e785f96ae0c02031821e6;p=thirdparty%2Felfutils.git Turn check_self_referential_die into a die_check class. --- diff --git a/dwarflint/check_self_referential_die.cc b/dwarflint/check_self_referential_die.cc index 196193b65..47fde9916 100644 --- a/dwarflint/check_self_referential_die.cc +++ b/dwarflint/check_self_referential_die.cc @@ -1,4 +1,4 @@ -/* Pedantic checking of DWARF files. +/* Check for DIEs with attributes referencing the DIE itself. Copyright (C) 2011 Red Hat, Inc. This file is part of Red Hat elfutils. @@ -23,23 +23,16 @@ Network licensing program, please visit www.openinventionnetwork.com . */ -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "highlevel_check.hh" -#include "../src/dwarfstrings.h" -#include "all-dies-it.hh" +#include "check_die_tree.hh" #include "pri.hh" #include "messages.hh" -#include using elfutils::dwarf; namespace { class check_self_referential_die - : public highlevel_check + : public die_check { public: static checkdescriptor const *descriptor () @@ -55,31 +48,33 @@ namespace return &cd; } - explicit check_self_referential_die (checkstack &stack, dwarflint &lint) - : highlevel_check (stack, lint) + check_self_referential_die (checkstack &, dwarflint &) + { + // We don't keep any state for this die check. + } + + virtual void + die (all_dies_iterator const &it) { - for (all_dies_iterator it = all_dies_iterator (dw); - it != all_dies_iterator (); ++it) + dwarf::debug_info_entry const &entry = *it; + for (dwarf::debug_info_entry::attributes_type::const_iterator + at = entry.attributes ().begin (); + at != entry.attributes ().end (); ++at) { - dwarf::debug_info_entry const &die = *it; - for (dwarf::debug_info_entry::attributes_type::const_iterator - at = die.attributes ().begin (); - at != die.attributes ().end (); ++at) + dwarf::attr_value const &val = (*at).second; + if (val.what_space () == dwarf::VS_reference) { - dwarf::attr_value const &val = (*at).second; - if (val.what_space () == dwarf::VS_reference) - { - dwarf::debug_info_entry ref = *val.reference (); - if (ref.identity () == die.identity ()) - wr_message (to_where (die), - mc_impact_3 | mc_acc_suboptimal | mc_die_rel) - << "attribute " << dwarf::attributes::name ((*at).first) - << " references DIE itself." << std::endl; - } + dwarf::debug_info_entry ref = *val.reference (); + if (ref.identity () == entry.identity ()) + wr_message (to_where (entry), + mc_impact_3 | mc_acc_suboptimal | mc_die_rel) + << dwarf::tags::name (entry.tag ()) + << " attribute " << dwarf::attributes::name ((*at).first) + << " references DIE itself." << std::endl; } } } }; - reg reg; + reg_die_check reg; }