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 ELFNODEVARIANT_H
0019 #define ELFNODEVARIANT_H
0020 
0021 struct ElfNodeVariant
0022 {
0023     enum Type {
0024         Invalid,
0025         FileSet,
0026         File,
0027         Section,
0028         SymbolTableSection,
0029         SymbolTableEntry,
0030         DebugLinkSection,
0031         DynamicSection,
0032         DynamicEntry,
0033         GotSection,
0034         GotEntry,
0035         HashSection,
0036         NoteSection,
0037         NoteEntry,
0038         PltSection,
0039         PltEntry,
0040         RelocationSection,
0041         RelocationEntry,
0042         VersionDefinitionSection,
0043         VersionDefinitionEntry,
0044         VersionDefinitionAuxiliaryEntry,
0045         VersionRequirementsSection,
0046         VersionRequirementEntry,
0047         VersionRequirementAuxiliaryEntry,
0048         DwarfInfo,
0049         DwarfDie
0050     };
0051 
0052     template <typename T> T* value() const
0053     {
0054         return static_cast<T*>(payload);
0055     }
0056 
0057     void *payload = nullptr;
0058     Type type = Invalid;
0059 };
0060 
0061 #endif