From b9cff913a06e20bf4bce76fd79aa5a4ac1ec25ea Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Fri, 27 Aug 2010 16:31:57 +0200 Subject: [PATCH] dwarflint: Add a check for duplicate DW_TAG_variable entries - and a test case --- dwarflint/Makefile.am | 4 +- dwarflint/check_duplicate_DW_tag_variable.cc | 143 +++++++++++++++ dwarflint/tests/crc7.ko.debug.bz2 | Bin 0 -> 30999 bytes .../run-check_duplicate_DW_tag_variable.sh | 172 ++++++++++++++++++ 4 files changed, 318 insertions(+), 1 deletion(-) create mode 100644 dwarflint/check_duplicate_DW_tag_variable.cc create mode 100644 dwarflint/tests/crc7.ko.debug.bz2 create mode 100755 dwarflint/tests/run-check_duplicate_DW_tag_variable.sh diff --git a/dwarflint/Makefile.am b/dwarflint/Makefile.am index cfdd308a1..f9bbefb7a 100644 --- a/dwarflint/Makefile.am +++ b/dwarflint/Makefile.am @@ -66,9 +66,11 @@ dwarflint_SOURCES = \ check_range_out_of_scope.cc \ check_expected_trees.cc \ check_dups_abstract_origin.cc \ + check_duplicate_DW_tag_variable.cc \ ../src/dwarfstrings.c -TESTS = tests/run-debug_abbrev-duplicate-attribute.sh +TESTS = tests/run-debug_abbrev-duplicate-attribute.sh \ + tests/run-check_duplicate_DW_tag_variable.sh EXTRA_DIST = tests/run-debug_abbrev-duplicate-attribute.sh tests/run-debug_abbrev-duplicate-attribute.bz2 diff --git a/dwarflint/check_duplicate_DW_tag_variable.cc b/dwarflint/check_duplicate_DW_tag_variable.cc new file mode 100644 index 000000000..799aa1b2e --- /dev/null +++ b/dwarflint/check_duplicate_DW_tag_variable.cc @@ -0,0 +1,143 @@ +/* + Copyright (C) 2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by the + Free Software Foundation; version 2 of the License. + + Red Hat elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with Red Hat elfutils; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. + + Red Hat elfutils is an included package of the Open Invention Network. + An included package of the Open Invention Network is a package for which + Open Invention Network licensees cross-license their patents. No patent + license is granted, either expressly or impliedly, by designation as an + included package. Should you wish to participate in the Open Invention + Network licensing program, please visit www.openinventionnetwork.com + . */ + +// Implements a check for: +// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39524 +// (duplicate variable declaration) +// And for: +// https://fedorahosted.org/pipermail/elfutils-devel/2010-July/001497.html +// (variable having both decl and defn in one scope) + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "highlevel_check.hh" +#include "../src/dwarfstrings.h" +#include "all-dies-it.hh" +#include "pri.hh" +#include "messages.h" +#include + +using elfutils::dwarf; + +namespace +{ + class check_duplicate_DW_tag_variable + : public highlevel_check + { + struct varinfo + { + dwarf::debug_info_entry::children_type::const_iterator decl, def; + + explicit varinfo (dwarf::debug_info_entry::children_type const &children) + : decl (children.end ()) + , def (children.end ()) + {} + + varinfo (varinfo const &other) + : decl (other.decl) + , def (other.def) + {} + }; + + public: + static checkdescriptor descriptor () { + static checkdescriptor cd ("check_duplicate_DW_tag_variable"); + return cd; + } + + check_duplicate_DW_tag_variable (checkstack &stack, dwarflint &lint); + }; + + reg reg_duplicate_DW_tag_variable; +} + +check_duplicate_DW_tag_variable +::check_duplicate_DW_tag_variable (checkstack &stack, dwarflint &lint) + : highlevel_check (stack, lint) +{ + for (all_dies_iterator it = all_dies_iterator (dw); + it != all_dies_iterator (); ++it) + { + dwarf::debug_info_entry::children_type const &children + = it->children (); + + typedef std::map variables_map; + variables_map variables; + + for (dwarf::debug_info_entry::children_type::const_iterator + jt = children.begin (); jt != children.end (); ++jt) + { + if (jt->tag () == DW_TAG_variable) + { + dwarf::debug_info_entry::attributes_type const & + attrs = jt->attributes (); + dwarf::debug_info_entry::attributes_type::const_iterator + at, et = attrs.end (); + if ((at = attrs.find (DW_AT_name)) == et) + continue; + char const *cname = (*at).second.identifier (); + + bool declaration = false; + if ((at = attrs.find (DW_AT_declaration)) != et) + declaration = (*at).second.flag (); + + std::string name (cname); + variables_map::iterator old = variables.find (name); + if (old == variables.end ()) + { + varinfo i (children); + if (declaration) + i.decl = jt; + else + i.def = jt; + variables.insert (std::make_pair (name, i)); + } + else + { + varinfo &i = old->second; + if ((declaration && i.decl != children.end ()) + || (!declaration && i.def != children.end ())) + wr_error (to_where (*jt)) + << "Re" << (declaration ? "declaration" : "definition") + << " of variable '" << name << "', originally seen at " + << pri::ref (declaration ? *i.decl : *i.def) + << '.' << std::endl; + else + wr_error (to_where (*jt)) + << "Found " + << (declaration ? "declaration" : "definition") + << " of variable '" << name + << "' whose " + << (declaration ? "definition" : "declaration") + << " was seen at " + << pri::ref (declaration ? *i.def : *i.decl) + << '.' << std::endl; + } + } + } + } +} diff --git a/dwarflint/tests/crc7.ko.debug.bz2 b/dwarflint/tests/crc7.ko.debug.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..be66966e2574c58693359e45616a945500ddd4a7 GIT binary patch literal 30999 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. + +. $srcdir/../tests/test-subr.sh + +srcdir=$srcdir/tests + +testfiles crc7.ko.debug + +testrun_compare ./dwarflint --check check_duplicate_DW_tag_variable crc7.ko.debug <