File indexing completed on 2024-05-12 05:43:32
0001 /* 0002 Copyright (C) 2013-2014 Volker Krause <vkrause@kde.org> 0003 0004 This program is free software; you can redistribute it and/or modify it 0005 under the terms of the GNU Library General Public License as published by 0006 the Free Software Foundation; either version 2 of the License, or (at your 0007 option) any later version. 0008 0009 This program is distributed in the hope that it will be useful, but WITHOUT 0010 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0011 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 0012 License for more details. 0013 0014 You should have received a copy of the GNU General Public License 0015 along with this program. If not, see <https://www.gnu.org/licenses/>. 0016 */ 0017 0018 #ifndef DATAVISITOR_H 0019 #define DATAVISITOR_H 0020 0021 #include "elfnodevisitor.h" 0022 0023 #include <QVariant> 0024 0025 class ElfModel; 0026 0027 class DataVisitor : public ElfNodeVisitor<QVariant> 0028 { 0029 public: 0030 explicit DataVisitor(const ElfModel* model, int column); 0031 0032 protected: 0033 using ElfNodeVisitor<QVariant>::doVisit; 0034 QVariant doVisit(ElfFile* file, int arg) const override; 0035 QVariant doVisit(ElfSection* section, int arg) const override; 0036 QVariant doVisit(ElfSymbolTableSection* symtab, int arg) const override; 0037 QVariant doVisit(ElfSymbolTableEntry* entry, int arg) const override; 0038 QVariant doVisit(ElfGnuDebugLinkSection *section, int role) const override; 0039 QVariant doVisit(ElfDynamicEntry* entry, int arg) const override; 0040 QVariant doVisit(ElfHashSection* section, int role) const override; 0041 QVariant doVisit(ElfGNUSymbolVersionDefinition *verDef, int role) const override; 0042 QVariant doVisit(ElfGNUSymbolVersionDefinitionAuxiliaryEntry *auxEntry, int role) const override; 0043 QVariant doVisit(ElfGNUSymbolVersionRequirement *verNeed, int role) const override; 0044 QVariant doVisit(ElfGNUSymbolVersionRequirementAuxiliaryEntry *auxEntry, int role) const override; 0045 QVariant doVisit(ElfGotEntry *entry, int role) const override; 0046 QVariant doVisit(ElfNoteEntry *entry, int role) const override; 0047 QVariant doVisit(ElfPltEntry *entry, int role) const override; 0048 QVariant doVisit(ElfRelocationEntry *entry, int arg) const override; 0049 #if HAVE_DWARF 0050 QVariant doVisit(DwarfInfo *info, int arg) const override; 0051 QVariant doVisit(DwarfDie *die, int arg) const override; 0052 #endif 0053 0054 private: 0055 friend class NavigatingDisassembler; 0056 QString printSectionName(ElfSection *section) const; 0057 QString printSymbolName(ElfSymbolTableEntry *symbol) const; 0058 QString printRelocation(ElfRelocationEntry *entry) const; 0059 #if HAVE_DWARF 0060 QString printDwarfDie(DwarfDie* die) const; 0061 QString printDwarfDieName(DwarfDie* die) const; 0062 #endif 0063 0064 private: 0065 const ElfModel* const m_model; 0066 int m_column; 0067 }; 0068 0069 #endif // DATAVISITOR_H