blob: 46b4d386d31689277a698ae11f3ffa489ebe3315 [file] [log] [blame]
/* Pedantic checking of DWARF files.
Copyright (C) 2009, 2010, 2011 Red Hat, Inc.
This file is part of elfutils.
This file 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; either version 3 of the License, or
(at your option) any later version.
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 this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef DWARFLINT_CHECKS_HIGH_HH
#define DWARFLINT_CHECKS_HIGH_HH
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "checks.hh"
#include "check_debug_info.hh"
#include "../libdw/c++/dwarf"
#include "../libdwfl/libdwfl.h"
class open_highlevel_dwarf
: public check<open_highlevel_dwarf>
{
Dwfl *const _m_dwfl;
public:
static checkdescriptor const *descriptor () {
static checkdescriptor cd
(checkdescriptor::create ("open_highlevel_dwarf")
.hidden ());
return &cd;
}
Dwarf *const c_dw;
elfutils::dwarf const dw;
open_highlevel_dwarf (checkstack &stack, dwarflint &lint);
~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 T>
class highlevel_check
: public check<highlevel_check<T> >
, public highlevel_check_i
{
open_highlevel_dwarf *_m_loader;
public:
static checkdescriptor const *descriptor () {
static checkdescriptor cd ("highlevel_check");
return &cd;
}
highlevel_check (checkstack &stack, dwarflint &lint)
: highlevel_check_i (stack, lint)
{}
};
#endif//DWARFLINT_CHECKS_HIGH_HH