/* Low-level section handling. 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 . */ #ifndef DWARFLINT_SECTIONS_HH #define DWARFLINT_SECTIONS_HH #include "checks.hh" #include "elf_file.hh" class load_sections : public check { public: static checkdescriptor const *descriptor (); elf_file file; load_sections (checkstack &stack, dwarflint &lint); ~load_sections (); }; class section_base { load_sections *sections; sec &get_sec_or_throw (section_id secid); public: static checkdescriptor const *descriptor (); sec § elf_file &file; section_base (checkstack &stack, dwarflint &lint, section_id secid); relocation_data *reldata () const { return sect.rel.size > 0 ? §.rel : NULL; } }; template class section : public section_base , public check > { public: static checkdescriptor const *descriptor () { static checkdescriptor cd (checkdescriptor::create (section_name[sec_id]) .hidden ()); return &cd; } explicit section (checkstack &stack, dwarflint &lint) : section_base (stack, lint, sec_id) {} }; #endif//DWARFLINT_SECTIONS_HH