diff options
Diffstat (limited to 'clang-r353983e/include/llvm/TextAPI/ELF/ELFStub.h')
| -rw-r--r-- | clang-r353983e/include/llvm/TextAPI/ELF/ELFStub.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/clang-r353983e/include/llvm/TextAPI/ELF/ELFStub.h b/clang-r353983e/include/llvm/TextAPI/ELF/ELFStub.h new file mode 100644 index 00000000..76b2af12 --- /dev/null +++ b/clang-r353983e/include/llvm/TextAPI/ELF/ELFStub.h @@ -0,0 +1,68 @@ +//===- ELFStub.h ------------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===-----------------------------------------------------------------------===/ +/// +/// \file +/// This file defines an internal representation of an ELF stub. +/// +//===-----------------------------------------------------------------------===/ + +#ifndef LLVM_TEXTAPI_ELF_ELFSTUB_H +#define LLVM_TEXTAPI_ELF_ELFSTUB_H + +#include "llvm/BinaryFormat/ELF.h" +#include "llvm/Support/VersionTuple.h" +#include <vector> +#include <set> + +namespace llvm { +namespace elfabi { + +typedef uint16_t ELFArch; + +enum class ELFSymbolType { + NoType = ELF::STT_NOTYPE, + Object = ELF::STT_OBJECT, + Func = ELF::STT_FUNC, + TLS = ELF::STT_TLS, + + // Type information is 4 bits, so 16 is safely out of range. + Unknown = 16, +}; + +struct ELFSymbol { + ELFSymbol(std::string SymbolName) : Name(SymbolName) {} + std::string Name; + uint64_t Size; + ELFSymbolType Type; + bool Undefined; + bool Weak; + Optional<std::string> Warning; + bool operator<(const ELFSymbol &RHS) const { + return Name < RHS.Name; + } +}; + +// A cumulative representation of ELF stubs. +// Both textual and binary stubs will read into and write from this object. +class ELFStub { +// TODO: Add support for symbol versioning. +public: + VersionTuple TbeVersion; + Optional<std::string> SoName; + ELFArch Arch; + std::vector<std::string> NeededLibs; + std::set<ELFSymbol> Symbols; + + ELFStub() {} + ELFStub(const ELFStub &Stub); + ELFStub(ELFStub &&Stub); +}; +} // end namespace elfabi +} // end namespace llvm + +#endif // LLVM_TEXTAPI_ELF_ELFSTUB_H |
