mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-10 22:00:58 +00:00
[Orc] Move some code up into the JITCompileCallbackManager base class. NFC.
llvm-svn: 254778
This commit is contained in:
parent
2c7e9b8d27
commit
c8c41976a3
@ -84,7 +84,11 @@ public:
|
||||
}
|
||||
|
||||
/// @brief Reserve a compile callback.
|
||||
virtual CompileCallbackInfo getCompileCallback() = 0;
|
||||
CompileCallbackInfo getCompileCallback() {
|
||||
TargetAddress TrampolineAddr = getAvailableTrampolineAddr();
|
||||
auto &Compile = this->ActiveTrampolines[TrampolineAddr];
|
||||
return CompileCallbackInfo(TrampolineAddr, Compile);
|
||||
}
|
||||
|
||||
/// @brief Get a CompileCallbackInfo for an existing callback.
|
||||
CompileCallbackInfo getCompileCallbackInfo(TargetAddress TrampolineAddr) {
|
||||
@ -113,6 +117,20 @@ protected:
|
||||
std::vector<TargetAddress> AvailableTrampolines;
|
||||
|
||||
private:
|
||||
|
||||
TargetAddress getAvailableTrampolineAddr() {
|
||||
if (this->AvailableTrampolines.empty())
|
||||
grow();
|
||||
assert(!this->AvailableTrampolines.empty() &&
|
||||
"Failed to grow available trampolines.");
|
||||
TargetAddress TrampolineAddr = this->AvailableTrampolines.back();
|
||||
this->AvailableTrampolines.pop_back();
|
||||
return TrampolineAddr;
|
||||
}
|
||||
|
||||
// Create new trampolines - to be implemented in subclasses.
|
||||
virtual void grow() = 0;
|
||||
|
||||
virtual void anchor();
|
||||
};
|
||||
|
||||
@ -145,13 +163,6 @@ public:
|
||||
assert(!EC && "Failed to mprotect resolver block");
|
||||
}
|
||||
|
||||
/// @brief Get/create a compile callback with the given signature.
|
||||
CompileCallbackInfo getCompileCallback() final {
|
||||
TargetAddress TrampolineAddr = getAvailableTrampolineAddr();
|
||||
auto &Compile = this->ActiveTrampolines[TrampolineAddr];
|
||||
return CompileCallbackInfo(TrampolineAddr, Compile);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
static TargetAddress reenter(void *CCMgr, void *TrampolineId) {
|
||||
@ -162,17 +173,7 @@ private:
|
||||
reinterpret_cast<uintptr_t>(TrampolineId)));
|
||||
}
|
||||
|
||||
TargetAddress getAvailableTrampolineAddr() {
|
||||
if (this->AvailableTrampolines.empty())
|
||||
grow();
|
||||
assert(!this->AvailableTrampolines.empty() &&
|
||||
"Failed to grow available trampolines.");
|
||||
TargetAddress TrampolineAddr = this->AvailableTrampolines.back();
|
||||
this->AvailableTrampolines.pop_back();
|
||||
return TrampolineAddr;
|
||||
}
|
||||
|
||||
void grow() {
|
||||
void grow() override {
|
||||
assert(this->AvailableTrampolines.empty() && "Growing prematurely?");
|
||||
|
||||
std::error_code EC;
|
||||
|
@ -18,17 +18,9 @@ namespace {
|
||||
|
||||
class DummyCallbackManager : public orc::JITCompileCallbackManager {
|
||||
public:
|
||||
DummyCallbackManager()
|
||||
: JITCompileCallbackManager(0), NextStubAddress(0),
|
||||
UniversalCompile([]() { return 0; }) {
|
||||
}
|
||||
|
||||
CompileCallbackInfo getCompileCallback() override {
|
||||
return CompileCallbackInfo(++NextStubAddress, UniversalCompile);
|
||||
}
|
||||
DummyCallbackManager() : JITCompileCallbackManager(0) { }
|
||||
public:
|
||||
TargetAddress NextStubAddress;
|
||||
CompileFtor UniversalCompile;
|
||||
void grow() override { llvm_unreachable("not implemented"); }
|
||||
};
|
||||
|
||||
class DummyStubsManager : public orc::IndirectStubsManagerBase {
|
||||
|
Loading…
x
Reference in New Issue
Block a user