1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- 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 <set>
- #include <vector>
- 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
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|