[llvm] 4871a9c - Revert "[jitlink/rtdydl][checker] Add TargetFlag dependent disassembler switching support"
Tom Weaver via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 8 05:41:54 PDT 2023
Author: Tom Weaver
Date: 2023-09-08T13:41:11+01:00
New Revision: 4871a9ca54674be336a800f207652b8737a76d71
URL: https://github.com/llvm/llvm-project/commit/4871a9ca54674be336a800f207652b8737a76d71
DIFF: https://github.com/llvm/llvm-project/commit/4871a9ca54674be336a800f207652b8737a76d71.diff
LOG: Revert "[jitlink/rtdydl][checker] Add TargetFlag dependent disassembler switching support"
This reverts commit 4b17c81d5a5d3e0f514026c2b7f9b623d901cc04.
Caused buildbot failures:
https://lab.llvm.org/buildbot/#/builders/230/builds/18341
https://lab.llvm.org/buildbot/#/builders/109/builds/73169
https://lab.llvm.org/buildbot/#/builders/67/builds/12597
Added:
Modified:
llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h
llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
llvm/lib/ExecutionEngine/JITLink/aarch32.cpp
llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp
llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h
llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFThumb.h
llvm/test/ExecutionEngine/JITLink/AArch32/ELF_static_thumb_reloc.s
llvm/test/ExecutionEngine/RuntimeDyld/ARM/COFF_Thumb.s
llvm/tools/llvm-jitlink/llvm-jitlink-coff.cpp
llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
llvm/tools/llvm-jitlink/llvm-jitlink.cpp
llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index ab4441fbec4606d..48268aa9f6899b9 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -623,8 +623,10 @@ class Symbol {
this->S = static_cast<uint8_t>(S);
}
- /// Get the target flags of this Symbol.
- TargetFlagsType getTargetFlags() const { return TargetFlags; }
+ /// Check whether the given target flags are set for this Symbol.
+ bool hasTargetFlags(TargetFlagsType Flags) const {
+ return static_cast<TargetFlagsType>(TargetFlags) & Flags;
+ }
/// Set the target flags for this Symbol.
void setTargetFlags(TargetFlagsType Flags) {
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h b/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h
index d1d54c0ca633362..b21c9e2a1cd8260 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h
@@ -23,9 +23,6 @@ namespace llvm {
namespace jitlink {
namespace aarch32 {
-/// Check whether the given target flags are set for this Symbol.
-bool hasTargetFlags(Symbol &Sym, TargetFlagsType Flags);
-
/// JITLink-internal AArch32 fixup kinds
enum EdgeKind_aarch32 : Edge::Kind {
diff --git a/llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h b/llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
index ae6764c1a3ac3b3..5904250c9a72208 100644
--- a/llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
+++ b/llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
@@ -12,8 +12,6 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ExecutionEngine/JITSymbol.h"
#include "llvm/Support/Endian.h"
-#include "llvm/TargetParser/SubtargetFeature.h"
-#include "llvm/TargetParser/Triple.h"
#include <optional>
#include <cstdint>
@@ -31,9 +29,6 @@ class RuntimeDyld;
class RuntimeDyldCheckerImpl;
class raw_ostream;
-/// Holds target-specific properties for a symbol.
-using TargetFlagsType = uint8_t;
-
/// RuntimeDyld invariant checker for verifying that RuntimeDyld has
/// correctly applied relocations.
///
@@ -83,11 +78,10 @@ class RuntimeDyldChecker {
public:
MemoryRegionInfo() = default;
- /// Constructor for symbols/sections with content and TargetFlag.
- MemoryRegionInfo(ArrayRef<char> Content, JITTargetAddress TargetAddress,
- TargetFlagsType TargetFlags)
+ /// Constructor for symbols/sections with content.
+ MemoryRegionInfo(ArrayRef<char> Content, JITTargetAddress TargetAddress)
: ContentPtr(Content.data()), Size(Content.size()),
- TargetAddress(TargetAddress), TargetFlags(TargetFlags) {}
+ TargetAddress(TargetAddress) {}
/// Constructor for zero-fill symbols/sections.
MemoryRegionInfo(uint64_t Size, JITTargetAddress TargetAddress)
@@ -133,20 +127,10 @@ class RuntimeDyldChecker {
/// Return the target address for this region.
JITTargetAddress getTargetAddress() const { return TargetAddress; }
- /// Get the target flags for this Symbol.
- TargetFlagsType getTargetFlags() const { return TargetFlags; }
-
- /// Set the target flags for this Symbol.
- void setTargetFlags(TargetFlagsType Flags) {
- assert(Flags <= 1 && "Add more bits to store more than one flag");
- TargetFlags = Flags;
- }
-
private:
const char *ContentPtr = nullptr;
uint64_t Size = 0;
JITTargetAddress TargetAddress = 0;
- TargetFlagsType TargetFlags = 0;
};
using IsSymbolValidFunction = std::function<bool(StringRef Symbol)>;
@@ -164,8 +148,9 @@ class RuntimeDyldChecker {
GetSectionInfoFunction GetSectionInfo,
GetStubInfoFunction GetStubInfo,
GetGOTInfoFunction GetGOTInfo,
- support::endianness Endianness, Triple TT,
- SubtargetFeatures TF, raw_ostream &ErrStream);
+ support::endianness Endianness,
+ MCDisassembler *Disassembler, MCInstPrinter *InstPrinter,
+ raw_ostream &ErrStream);
~RuntimeDyldChecker();
/// Check a single expression against the attached RuntimeDyld
diff --git a/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp b/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp
index 01c9e8b4fd9d18e..e9221a898ff63da 100644
--- a/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/aarch32.cpp
@@ -25,11 +25,6 @@ namespace llvm {
namespace jitlink {
namespace aarch32 {
-/// Check whether the given target flags are set for this Symbol.
-bool hasTargetFlags(Symbol &Sym, TargetFlagsType Flags) {
- return static_cast<TargetFlagsType>(Sym.getTargetFlags()) & Flags;
-}
-
/// Encode 22-bit immediate value for branch instructions without J1J2 range
/// extension (formats B T4, BL T1 and BLX T2).
///
@@ -292,7 +287,7 @@ Error applyFixupData(LinkGraph &G, Block &B, const Edge &E) {
int64_t Addend = E.getAddend();
Symbol &TargetSymbol = E.getTarget();
uint64_t TargetAddress = TargetSymbol.getAddress().getValue();
- assert(!hasTargetFlags(TargetSymbol, ThumbSymbol));
+ assert(!TargetSymbol.hasTargetFlags(ThumbSymbol));
// Regular data relocations have size 4, alignment 1 and write the full 32-bit
// result to the place; no need for overflow checking. There are three
@@ -346,14 +341,14 @@ Error applyFixupThumb(LinkGraph &G, Block &B, const Edge &E,
int64_t Addend = E.getAddend();
Symbol &TargetSymbol = E.getTarget();
uint64_t TargetAddress = TargetSymbol.getAddress().getValue();
- if (hasTargetFlags(TargetSymbol, ThumbSymbol))
+ if (TargetSymbol.hasTargetFlags(ThumbSymbol))
TargetAddress |= 0x01;
switch (Kind) {
case Thumb_Jump24: {
if (!checkOpcode<Thumb_Jump24>(R))
return makeUnexpectedOpcodeError(G, R, Kind);
- if (!hasTargetFlags(TargetSymbol, ThumbSymbol))
+ if (!(TargetSymbol.hasTargetFlags(ThumbSymbol)))
return make_error<JITLinkError>("Branch relocation needs interworking "
"stub when bridging to ARM: " +
StringRef(G.getEdgeKindName(Kind)));
@@ -380,7 +375,7 @@ Error applyFixupThumb(LinkGraph &G, Block &B, const Edge &E,
// The call instruction itself is Thumb. The call destination can either be
// Thumb or Arm. We use BL to stay in Thumb and BLX to change to Arm.
- bool TargetIsArm = !hasTargetFlags(TargetSymbol, ThumbSymbol);
+ bool TargetIsArm = !TargetSymbol.hasTargetFlags(ThumbSymbol);
bool InstrIsBlx = (R.Lo & FixupInfo<Thumb_Call>::LoBitNoBlx) == 0;
if (TargetIsArm != InstrIsBlx) {
if (LLVM_LIKELY(TargetIsArm)) {
diff --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
index 3d77f82e65696a8..a29f3d1c3aec8da 100644
--- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
@@ -46,7 +46,7 @@ ExecutorAddr getJITSymbolPtrForSymbol(Symbol &Sym, const Triple &TT) {
case Triple::armeb:
case Triple::thumb:
case Triple::thumbeb:
- if (hasTargetFlags(Sym, aarch32::ThumbSymbol)) {
+ if (Sym.hasTargetFlags(aarch32::ThumbSymbol)) {
// Set LSB to indicate thumb target
assert(Sym.isCallable() && "Only callable symbols can have thumb flag");
assert((Sym.getAddress().getValue() & 0x01) == 0 && "LSB is clear");
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp
index b4f0a718fda6d26..ab561ecd0057984 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp
@@ -10,16 +10,9 @@
#include "RuntimeDyldCheckerImpl.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
-#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCDisassembler/MCDisassembler.h"
#include "llvm/MC/MCInst.h"
-#include "llvm/MC/MCInstPrinter.h"
-#include "llvm/MC/MCInstrInfo.h"
-#include "llvm/MC/MCRegisterInfo.h"
-#include "llvm/MC/MCSubtargetInfo.h"
-#include "llvm/MC/MCTargetOptions.h"
-#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/MSVCErrorWorkarounds.h"
#include "llvm/Support/MemoryBuffer.h"
@@ -32,19 +25,6 @@
using namespace llvm;
-namespace {
-struct TargetInfo {
- const Target *TheTarget;
- std::unique_ptr<MCSubtargetInfo> STI;
- std::unique_ptr<MCRegisterInfo> MRI;
- std::unique_ptr<MCAsmInfo> MAI;
- std::unique_ptr<MCContext> Ctx;
- std::unique_ptr<MCDisassembler> Disassembler;
- std::unique_ptr<MCInstrInfo> MII;
- std::unique_ptr<MCInstPrinter> InstPrinter;
-};
-} // anonymous namespace
-
namespace llvm {
// Helper class that implements the language evaluated by RuntimeDyldChecker.
@@ -296,20 +276,6 @@ class RuntimeDyldCheckerExprEval {
"");
unsigned OpIdx = OpIdxExpr.getValue();
-
- auto printInst = [this](StringRef Symbol, MCInst Inst,
- raw_string_ostream &ErrMsgStream) {
- auto TI = getTargetInfo(
- Checker.getTripleFromTargetFlag(Checker.getTargetFlag(Symbol)));
- if (auto E = TI.takeError()) {
- errs() << "Error obtaining instruction printer: "
- << toString(std::move(E)) << "\n";
- return std::make_pair(EvalResult(ErrMsgStream.str()), "");
- }
- Inst.dump_pretty(ErrMsgStream, TI->InstPrinter.get());
- return std::make_pair(EvalResult(ErrMsgStream.str()), "");
- };
-
if (OpIdx >= Inst.getNumOperands()) {
std::string ErrMsg;
raw_string_ostream ErrMsgStream(ErrMsg);
@@ -318,8 +284,8 @@ class RuntimeDyldCheckerExprEval {
<< "'. Instruction has only "
<< format("%i", Inst.getNumOperands())
<< " operands.\nInstruction is:\n ";
-
- return printInst(Symbol, Inst, ErrMsgStream);
+ Inst.dump_pretty(ErrMsgStream, Checker.InstPrinter);
+ return std::make_pair(EvalResult(ErrMsgStream.str()), "");
}
const MCOperand &Op = Inst.getOperand(OpIdx);
@@ -328,8 +294,9 @@ class RuntimeDyldCheckerExprEval {
raw_string_ostream ErrMsgStream(ErrMsg);
ErrMsgStream << "Operand '" << format("%i", OpIdx) << "' of instruction '"
<< Symbol << "' is not an immediate.\nInstruction is:\n ";
+ Inst.dump_pretty(ErrMsgStream, Checker.InstPrinter);
- return printInst(Symbol, Inst, ErrMsgStream);
+ return std::make_pair(EvalResult(ErrMsgStream.str()), "");
}
return std::make_pair(EvalResult(Op.getImm()), RemainingExpr);
@@ -720,101 +687,31 @@ class RuntimeDyldCheckerExprEval {
bool decodeInst(StringRef Symbol, MCInst &Inst, uint64_t &Size,
int64_t Offset) const {
- auto TI = getTargetInfo(
- Checker.getTripleFromTargetFlag(Checker.getTargetFlag(Symbol)));
-
- if (auto E = TI.takeError()) {
- errs() << "Error obtaining disassembler: " << toString(std::move(E))
- << "\n";
- return false;
- }
-
+ MCDisassembler *Dis = Checker.Disassembler;
StringRef SymbolMem = Checker.getSymbolContent(Symbol);
ArrayRef<uint8_t> SymbolBytes(SymbolMem.bytes_begin() + Offset,
SymbolMem.size() - Offset);
MCDisassembler::DecodeStatus S =
- TI->Disassembler->getInstruction(Inst, Size, SymbolBytes, 0, nulls());
+ Dis->getInstruction(Inst, Size, SymbolBytes, 0, nulls());
return (S == MCDisassembler::Success);
}
-
- Expected<TargetInfo>
- getTargetInfo(const Triple &TT,
- const SubtargetFeatures &TF = SubtargetFeatures()) const {
-
- auto TripleName = TT.str();
- std::string ErrorStr;
- const Target *TheTarget =
- TargetRegistry::lookupTarget(TripleName, ErrorStr);
- if (!TheTarget)
- return make_error<StringError>("Error accessing target '" + TripleName +
- "': " + ErrorStr,
- inconvertibleErrorCode());
-
- std::unique_ptr<MCSubtargetInfo> STI(
- TheTarget->createMCSubtargetInfo(TripleName, "", TF.getString()));
- if (!STI)
- return make_error<StringError>("Unable to create subtarget for " +
- TripleName,
- inconvertibleErrorCode());
-
- std::unique_ptr<MCRegisterInfo> MRI(TheTarget->createMCRegInfo(TripleName));
- if (!MRI)
- return make_error<StringError>("Unable to create target register info "
- "for " +
- TripleName,
- inconvertibleErrorCode());
-
- MCTargetOptions MCOptions;
- std::unique_ptr<MCAsmInfo> MAI(
- TheTarget->createMCAsmInfo(*MRI, TripleName, MCOptions));
- if (!MAI)
- return make_error<StringError>("Unable to create target asm info " +
- TripleName,
- inconvertibleErrorCode());
-
- auto Ctx = std::make_unique<MCContext>(Triple(TripleName), MAI.get(),
- MRI.get(), STI.get());
-
- std::unique_ptr<MCDisassembler> Disassembler(
- TheTarget->createMCDisassembler(*STI, *Ctx));
- if (!Disassembler)
- return make_error<StringError>("Unable to create disassembler for " +
- TripleName,
- inconvertibleErrorCode());
-
- std::unique_ptr<MCInstrInfo> MII(TheTarget->createMCInstrInfo());
- if (!MII)
- return make_error<StringError>("Unable to create instruction info for" +
- TripleName,
- inconvertibleErrorCode());
-
- std::unique_ptr<MCInstPrinter> InstPrinter(TheTarget->createMCInstPrinter(
- Triple(TripleName), 0, *MAI, *MII, *MRI));
- if (!InstPrinter)
- return make_error<StringError>(
- "Unable to create instruction printer for" + TripleName,
- inconvertibleErrorCode());
-
- return TargetInfo({TheTarget, std::move(STI), std::move(MRI),
- std::move(MAI), std::move(Ctx), std::move(Disassembler),
- std::move(MII), std::move(InstPrinter)});
- }
};
} // namespace llvm
RuntimeDyldCheckerImpl::RuntimeDyldCheckerImpl(
IsSymbolValidFunction IsSymbolValid, GetSymbolInfoFunction GetSymbolInfo,
GetSectionInfoFunction GetSectionInfo, GetStubInfoFunction GetStubInfo,
- GetGOTInfoFunction GetGOTInfo, support::endianness Endianness, Triple TT,
- SubtargetFeatures TF, raw_ostream &ErrStream)
+ GetGOTInfoFunction GetGOTInfo, support::endianness Endianness,
+ MCDisassembler *Disassembler, MCInstPrinter *InstPrinter,
+ raw_ostream &ErrStream)
: IsSymbolValid(std::move(IsSymbolValid)),
GetSymbolInfo(std::move(GetSymbolInfo)),
GetSectionInfo(std::move(GetSectionInfo)),
GetStubInfo(std::move(GetStubInfo)), GetGOTInfo(std::move(GetGOTInfo)),
- Endianness(Endianness), TT(std::move(TT)), TF(std::move(TF)),
- ErrStream(ErrStream) {}
+ Endianness(Endianness), Disassembler(Disassembler),
+ InstPrinter(InstPrinter), ErrStream(ErrStream) {}
bool RuntimeDyldCheckerImpl::check(StringRef CheckExpr) const {
CheckExpr = CheckExpr.trim();
@@ -925,36 +822,6 @@ StringRef RuntimeDyldCheckerImpl::getSymbolContent(StringRef Symbol) const {
return {SymInfo->getContent().data(), SymInfo->getContent().size()};
}
-TargetFlagsType RuntimeDyldCheckerImpl::getTargetFlag(StringRef Symbol) const {
- auto SymInfo = GetSymbolInfo(Symbol);
- if (!SymInfo) {
- logAllUnhandledErrors(SymInfo.takeError(), errs(), "RTDyldChecker: ");
- return TargetFlagsType{};
- }
- return SymInfo->getTargetFlags();
-}
-
-Triple
-RuntimeDyldCheckerImpl::getTripleFromTargetFlag(TargetFlagsType Flag) const {
- Triple TheTriple = TT;
-
- switch (TT.getArch()) {
- case Triple::ArchType::arm:
- if (~Flag & 0x1)
- return TT;
- TheTriple.setArchName((Twine("thumb") + TT.getArchName().substr(3)).str());
- return TheTriple;
- case Triple::ArchType::thumb:
- if (Flag & 0x1)
- return TT;
- TheTriple.setArchName((Twine("arm") + TT.getArchName().substr(5)).str());
- return TheTriple;
-
- default:
- return TT;
- }
-}
-
std::pair<uint64_t, std::string> RuntimeDyldCheckerImpl::getSectionAddr(
StringRef FileName, StringRef SectionName, bool IsInsideLoad) const {
@@ -1017,12 +884,13 @@ std::pair<uint64_t, std::string> RuntimeDyldCheckerImpl::getStubOrGOTAddrFor(
RuntimeDyldChecker::RuntimeDyldChecker(
IsSymbolValidFunction IsSymbolValid, GetSymbolInfoFunction GetSymbolInfo,
GetSectionInfoFunction GetSectionInfo, GetStubInfoFunction GetStubInfo,
- GetGOTInfoFunction GetGOTInfo, support::endianness Endianness, Triple TT,
- SubtargetFeatures TF, raw_ostream &ErrStream)
+ GetGOTInfoFunction GetGOTInfo, support::endianness Endianness,
+ MCDisassembler *Disassembler, MCInstPrinter *InstPrinter,
+ raw_ostream &ErrStream)
: Impl(::std::make_unique<RuntimeDyldCheckerImpl>(
std::move(IsSymbolValid), std::move(GetSymbolInfo),
std::move(GetSectionInfo), std::move(GetStubInfo),
- std::move(GetGOTInfo), Endianness, std::move(TT), std::move(TF),
+ std::move(GetGOTInfo), Endianness, Disassembler, InstPrinter,
ErrStream)) {}
RuntimeDyldChecker::~RuntimeDyldChecker() = default;
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h
index 8596b3372b69358..f564b0035bffdec 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldCheckerImpl.h
@@ -13,9 +13,6 @@
namespace llvm {
-/// Holds target-specific properties for a symbol.
-using TargetFlagsType = uint8_t;
-
class RuntimeDyldCheckerImpl {
friend class RuntimeDyldChecker;
friend class RuntimeDyldCheckerExprEval;
@@ -28,13 +25,12 @@ class RuntimeDyldCheckerImpl {
using GetGOTInfoFunction = RuntimeDyldChecker::GetGOTInfoFunction;
public:
- RuntimeDyldCheckerImpl(IsSymbolValidFunction IsSymbolValid,
- GetSymbolInfoFunction GetSymbolInfo,
- GetSectionInfoFunction GetSectionInfo,
- GetStubInfoFunction GetStubInfo,
- GetGOTInfoFunction GetGOTInfo,
- support::endianness Endianness, Triple TT,
- SubtargetFeatures TF, llvm::raw_ostream &ErrStream);
+ RuntimeDyldCheckerImpl(
+ IsSymbolValidFunction IsSymbolValid, GetSymbolInfoFunction GetSymbolInfo,
+ GetSectionInfoFunction GetSectionInfo, GetStubInfoFunction GetStubInfo,
+ GetGOTInfoFunction GetGOTInfo, support::endianness Endianness,
+ MCDisassembler *Disassembler, MCInstPrinter *InstPrinter,
+ llvm::raw_ostream &ErrStream);
bool check(StringRef CheckExpr) const;
bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const;
@@ -53,9 +49,6 @@ class RuntimeDyldCheckerImpl {
StringRef getSymbolContent(StringRef Symbol) const;
- TargetFlagsType getTargetFlag(StringRef Symbol) const;
- Triple getTripleFromTargetFlag(TargetFlagsType Flag) const;
-
std::pair<uint64_t, std::string> getSectionAddr(StringRef FileName,
StringRef SectionName,
bool IsInsideLoad) const;
@@ -72,8 +65,8 @@ class RuntimeDyldCheckerImpl {
GetStubInfoFunction GetStubInfo;
GetGOTInfoFunction GetGOTInfo;
support::endianness Endianness;
- Triple TT;
- SubtargetFeatures TF;
+ MCDisassembler *Disassembler;
+ MCInstPrinter *InstPrinter;
llvm::raw_ostream &ErrStream;
};
}
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFThumb.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFThumb.h
index a3e66c6bc0ecdf8..22f1cf33158c8be 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFThumb.h
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFThumb.h
@@ -54,28 +54,6 @@ class RuntimeDyldCOFFThumb : public RuntimeDyldCOFF {
return 16; // 8-byte load instructions, 4-byte jump, 4-byte padding
}
- Expected<JITSymbolFlags> getJITSymbolFlags(const SymbolRef &SR) override {
-
- auto Flags = RuntimeDyldImpl::getJITSymbolFlags(SR);
-
- if (!Flags) {
- return Flags.takeError();
- }
- auto SectionIterOrErr = SR.getSection();
- if (!SectionIterOrErr) {
- return SectionIterOrErr.takeError();
- }
- SectionRef Sec = *SectionIterOrErr.get();
- const object::COFFObjectFile *COFFObjPtr =
- cast<object::COFFObjectFile>(Sec.getObject());
- const coff_section *CoffSec = COFFObjPtr->getCOFFSection(Sec);
- bool isThumb = CoffSec->Characteristics & COFF::IMAGE_SCN_MEM_16BIT;
-
- Flags->getTargetFlags() = isThumb;
-
- return Flags;
- }
-
Align getStubAlignment() override { return Align(1); }
Expected<object::relocation_iterator>
diff --git a/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_static_thumb_reloc.s b/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_static_thumb_reloc.s
index b0d6db045efd216..76c5f5807f7b86c 100644
--- a/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_static_thumb_reloc.s
+++ b/llvm/test/ExecutionEngine/JITLink/AArch32/ELF_static_thumb_reloc.s
@@ -4,6 +4,8 @@
# RUN: llvm-jitlink -noexec -slab-address 0x76ff0000 -slab-allocate 10Kb \
# RUN: -slab-page-size 4096 -show-entry-es -check %s %t.o
+# This test requires the RuntimeDyldChecker fix from review D158280
+# XFAIL: *
.text
.syntax unified
diff --git a/llvm/test/ExecutionEngine/RuntimeDyld/ARM/COFF_Thumb.s b/llvm/test/ExecutionEngine/RuntimeDyld/ARM/COFF_Thumb.s
index b4946880ff15523..aec4fdad4c58868 100644
--- a/llvm/test/ExecutionEngine/RuntimeDyld/ARM/COFF_Thumb.s
+++ b/llvm/test/ExecutionEngine/RuntimeDyld/ARM/COFF_Thumb.s
@@ -101,7 +101,7 @@ rel11:
bx r0
trap
- .text
+ .data
.p2align 2
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink-coff.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink-coff.cpp
index 283e655205d7809..415aee76b186345 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-coff.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-coff.cpp
@@ -118,8 +118,7 @@ Error registerCOFFGraphInfo(Session &S, LinkGraph &G) {
if (Sym->getSize() != 0) {
if (auto TS = getCOFFGOTTarget(G, Sym->getBlock()))
FileInfo.GOTEntryInfos[TS->getName()] = {
- Sym->getSymbolContent(), Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getSymbolContent(), Sym->getAddress().getValue()};
else
return TS.takeError();
}
@@ -131,8 +130,7 @@ Error registerCOFFGraphInfo(Session &S, LinkGraph &G) {
if (auto TS = getCOFFStubTarget(G, Sym->getBlock()))
FileInfo.StubInfos[TS->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getAddress().getValue()};
else
return TS.takeError();
SectionContainsContent = true;
@@ -145,8 +143,7 @@ Error registerCOFFGraphInfo(Session &S, LinkGraph &G) {
SectionContainsZeroFill = true;
} else {
S.SymbolInfos[Sym->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getAddress().getValue()};
SectionContainsContent = true;
}
}
@@ -167,7 +164,7 @@ Error registerCOFFGraphInfo(Session &S, LinkGraph &G) {
else
FileInfo.SectionInfos[Sec.getName()] = {
ArrayRef<char>(FirstSym->getBlock().getContent().data(), SecSize),
- SecAddr.getValue(), FirstSym->getTargetFlags()};
+ SecAddr.getValue()};
}
return Error::success();
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
index 7881660d1a73851..5200dbcf9036619 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
@@ -120,8 +120,7 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
if (Sym->getSize() != 0) {
if (auto TS = getELFGOTTarget(G, Sym->getBlock()))
FileInfo.GOTEntryInfos[TS->getName()] = {
- Sym->getSymbolContent(), Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getSymbolContent(), Sym->getAddress().getValue()};
else
return TS.takeError();
}
@@ -133,8 +132,7 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
if (auto TS = getELFStubTarget(G, Sym->getBlock()))
FileInfo.StubInfos[TS->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getAddress().getValue()};
else
return TS.takeError();
SectionContainsContent = true;
@@ -147,8 +145,7 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
SectionContainsZeroFill = true;
} else {
S.SymbolInfos[Sym->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getAddress().getValue()};
SectionContainsContent = true;
}
}
@@ -173,7 +170,7 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
else
FileInfo.SectionInfos[Sec.getName()] = {
ArrayRef<char>(FirstSym->getBlock().getContent().data(), SecSize),
- SecAddr.getValue(), FirstSym->getTargetFlags()};
+ SecAddr.getValue()};
}
return Error::success();
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
index 7dcadd94c2365a4..bcb2f251ece1c0c 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
@@ -117,9 +117,8 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
inconvertibleErrorCode());
if (auto TS = getMachOGOTTarget(G, Sym->getBlock()))
- FileInfo.GOTEntryInfos[TS->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ FileInfo.GOTEntryInfos[TS->getName()] = {
+ Sym->getSymbolContent(), Sym->getAddress().getValue()};
else
return TS.takeError();
SectionContainsContent = true;
@@ -130,8 +129,7 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
if (auto TS = getMachOStubTarget(G, Sym->getBlock()))
FileInfo.StubInfos[TS->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getAddress().getValue()};
else
return TS.takeError();
SectionContainsContent = true;
@@ -142,8 +140,7 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
SectionContainsZeroFill = true;
} else {
S.SymbolInfos[Sym->getName()] = {Sym->getSymbolContent(),
- Sym->getAddress().getValue(),
- Sym->getTargetFlags()};
+ Sym->getAddress().getValue()};
SectionContainsContent = true;
}
}
@@ -163,7 +160,7 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
else
FileInfo.SectionInfos[Sec.getName()] = {
ArrayRef<char>(FirstSym->getBlock().getContent().data(), SecSize),
- SecAddr.getValue(), FirstSym->getTargetFlags()};
+ SecAddr.getValue()};
}
return Error::success();
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index a8f056eab674ec0..00dd5206d75a756 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
@@ -1388,8 +1388,7 @@ static Error addAbsoluteSymbols(Session &S,
return Err;
// Register the absolute symbol with the session symbol infos.
- S.SymbolInfos[Name] = {ArrayRef<char>(), Addr,
- AbsDef.getFlags().getTargetFlags()};
+ S.SymbolInfos[Name] = {ArrayRef<char>(), Addr};
}
return Error::success();
@@ -1857,12 +1856,15 @@ getTargetInfo(const Triple &TT,
std::move(MAI), std::move(Ctx), std::move(Disassembler),
std::move(MII), std::move(MIA), std::move(InstPrinter)};
}
-static Error runChecks(Session &S, Triple TT, SubtargetFeatures Features) {
+
+static Error runChecks(Session &S) {
if (CheckFiles.empty())
return Error::success();
LLVM_DEBUG(dbgs() << "Running checks...\n");
+ auto TI = getTargetInfo(S.ES.getTargetTriple(), S.Features);
+
auto IsSymbolValid = [&S](StringRef Symbol) {
return S.isSymbolRegistered(Symbol);
};
@@ -1886,7 +1888,7 @@ static Error runChecks(Session &S, Triple TT, SubtargetFeatures Features) {
RuntimeDyldChecker Checker(
IsSymbolValid, GetSymbolInfo, GetSectionInfo, GetStubInfo, GetGOTInfo,
S.ES.getTargetTriple().isLittleEndian() ? support::little : support::big,
- TT, Features, dbgs());
+ TI.Disassembler.get(), TI.InstPrinter.get(), dbgs());
std::string CheckLineStart = "# " + CheckName + ":";
for (auto &CheckFile : CheckFiles) {
@@ -1998,7 +2000,7 @@ int main(int argc, char *argv[]) {
auto [TT, Features] = getFirstFileTripleAndFeatures();
ExitOnErr(sanitizeArguments(TT, argv[0]));
- auto S = ExitOnErr(Session::Create(TT, Features));
+ auto S = ExitOnErr(Session::Create(std::move(TT), std::move(Features)));
enableStatistics(*S, !OrcRuntime.empty());
@@ -2034,7 +2036,7 @@ int main(int argc, char *argv[]) {
exit(1);
}
- ExitOnErr(runChecks(*S, std::move(TT), std::move(Features)));
+ ExitOnErr(runChecks(*S));
int Result = 0;
if (!NoExec) {
diff --git a/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp b/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
index 7e621cba1871b32..df82fb04e8e680c 100644
--- a/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
+++ b/llvm/tools/llvm-rtdyld/llvm-rtdyld.cpp
@@ -892,8 +892,6 @@ static int linkAndVerify() {
StringRef SecContent = Dyld.getSectionContent(SectionID);
uint64_t SymSize = SecContent.size() - (CSymAddr - SecContent.data());
SymInfo.setContent(ArrayRef<char>(CSymAddr, SymSize));
- SymInfo.setTargetFlags(
- Dyld.getSymbol(Symbol).getFlags().getTargetFlags());
}
}
return SymInfo;
@@ -975,12 +973,11 @@ static int linkAndVerify() {
ObjectFile &Obj = **MaybeObj;
- SubtargetFeatures Features = SubtargetFeatures();
if (!Checker)
Checker = std::make_unique<RuntimeDyldChecker>(
IsSymbolValid, GetSymbolInfo, GetSectionInfo, GetStubInfo,
GetStubInfo, Obj.isLittleEndian() ? support::little : support::big,
- TheTriple, Features, dbgs());
+ Disassembler.get(), InstPrinter.get(), dbgs());
auto FileName = sys::path::filename(InputFile);
MemMgr.setSectionIDsMap(&FileToSecIDMap[FileName]);
More information about the llvm-commits
mailing list