Network licensing program, please visit www.openinventionnetwork.com
<http://www.openinventionnetwork.com>. */
+#include "check_debug_pub.hh"
#include "check_debug_info.hh"
#include "sections.hh"
#include "pri.hh"
namespace
{
- template<section_id sec_id>
- class check_debug_pub
- : public check<check_debug_pub<sec_id> >
+ template <class A, class B>
+ struct where xwhere (A a, B b)
{
- protected:
- typedef section<sec_id> section_t;
- section_t *_m_sec;
- elf_file const &_m_file;
- check_debug_info *_m_cus;
-
- bool check_pub_structural ();
+ return WHERE (a, b);
+ }
+}
- public:
- check_debug_pub (checkstack &stack, dwarflint &lint)
- : _m_sec (lint.check (stack, _m_sec))
- , _m_file (_m_sec->file)
- , _m_cus (lint.toplev_check (stack, _m_cus))
- {
- check_pub_structural ();
- }
- };
+template<section_id sec_id>
+check_debug_pub<sec_id>::check_debug_pub (checkstack &stack, dwarflint &lint)
+ : _m_sec (lint.check (stack, _m_sec))
+ , _m_file (_m_sec->file)
+ , _m_cus (lint.toplev_check (stack, _m_cus))
+{
+ check_pub_structural ();
+}
- class check_debug_pubnames
- : public check_debug_pub<sec_pubnames>
- {
- public:
- check_debug_pubnames (checkstack &stack, dwarflint &lint)
- : check_debug_pub<sec_pubnames> (stack, lint)
- {}
- static checkdescriptor const &descriptor () {
- static checkdescriptor cd
- (checkdescriptor::create ("check_debug_pubnames")
- .groups ("@low")
- .prereq<typeof (*_m_sec)> ()
- .prereq<check_debug_info> ()
- .description (
+checkdescriptor const &
+check_debug_pubnames::descriptor ()
+{
+ static checkdescriptor cd
+ (checkdescriptor::create ("check_debug_pubnames")
+ .groups ("@low")
+ .prereq<typeof (*_m_sec)> ()
+ .prereq<check_debug_info> ()
+ .description (
"Checks for low-level structure of .debug_pubnames. In addition it\n"
"checks:\n"
" - for garbage inside padding\n"
"Furthermore, if .debug_info is valid, it is checked:\n"
" - that references point to actual CUs and DIEs\n"
" - that there's only one pub section per CU\n"));
- return cd;
- }
- };
- reg<check_debug_pubnames> reg_debug_pubnames;
-
- class check_debug_pubtypes
- : public check_debug_pub<sec_pubtypes>
- {
- public:
- check_debug_pubtypes (checkstack &stack, dwarflint &lint)
- : check_debug_pub<sec_pubtypes> (stack, lint)
- {}
+ return cd;
+}
+static reg<check_debug_pubnames> reg_debug_pubnames;
+template check_debug_pub<sec_pubnames>::check_debug_pub (checkstack &stack,
+ dwarflint &lint);
- static checkdescriptor const &descriptor () {
- static checkdescriptor cd
- (checkdescriptor::create ("check_debug_pubtypes")
- .groups ("@low")
- .prereq<typeof (*_m_sec)> ()
- .prereq<check_debug_info> ()
- .description (
+checkdescriptor const &
+check_debug_pubtypes::descriptor ()
+{
+ static checkdescriptor cd
+ (checkdescriptor::create ("check_debug_pubtypes")
+ .groups ("@low")
+ .prereq<typeof (*_m_sec)> ()
+ .prereq<check_debug_info> ()
+ .description (
"Checks for low-level structure of .debug_pubtypes. In addition it\n"
"makes the same checks as check_debug_pubnames.\n"));
- return cd;
- }
- };
- reg<check_debug_pubtypes> reg_debug_pubtypes;
-
- template <class A, class B>
- struct where xwhere (A a, B b)
- {
- return WHERE (a, b);
- }
+ return cd;
}
+static reg<check_debug_pubtypes> reg_debug_pubtypes;
+template check_debug_pub<sec_pubtypes>::check_debug_pub (checkstack &stack,
+ dwarflint &lint);
template <section_id sec_id>
bool
--- /dev/null
+/* Low-level checking of .debug_pub*.
+ Copyright (C) 2009 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
+ <http://www.openinventionnetwork.com>. */
+
+#ifndef DWARFLINT_CHECK_DEBUG_PUB_HH
+#define DWARFLINT_CHECK_DEBUG_PUB_HH
+
+#include "sections.ii"
+#include "check_debug_info.ii"
+#include "checks.hh"
+#include "low.h"
+
+template<section_id sec_id>
+class check_debug_pub
+ : public check<check_debug_pub<sec_id> >
+{
+protected:
+ typedef section<sec_id> section_t;
+ section_t *_m_sec;
+ elf_file const &_m_file;
+ check_debug_info *_m_cus;
+
+ bool check_pub_structural ();
+
+public:
+ // instantiated in .cc for each subclass
+ check_debug_pub (checkstack &stack, dwarflint &lint);
+};
+
+struct check_debug_pubnames
+ : public check_debug_pub<sec_pubnames>
+{
+ static checkdescriptor const &descriptor ();
+
+ check_debug_pubnames (checkstack &stack, dwarflint &lint)
+ : check_debug_pub<sec_pubnames> (stack, lint)
+ {}
+};
+
+struct check_debug_pubtypes
+ : public check_debug_pub<sec_pubtypes>
+{
+ static checkdescriptor const &descriptor ();
+
+ check_debug_pubtypes (checkstack &stack, dwarflint &lint)
+ : check_debug_pub<sec_pubtypes> (stack, lint)
+ {}
+};
+
+#endif//DWARFLINT_CHECK_DEBUG_PUB_HH