67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
|
//===- 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
|