mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Sanitize MCJIT remote execution
MCJIT remote execution (ChildTarget+RemoteTargetExternal) protocol was in dire need of refactoring. It was fail-prone, had no error reporting and implemented the same message logic on every single function. This patch rectifies it, and makes it work on ARM, where it was randomly failing. Other architectures shall profit from this change as well, making their buildbots and releases more reliable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199261 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -56,34 +56,35 @@ bool RemoteTarget::allocateSpace(size_t Size, unsigned Alignment,
|
||||
sys::MemoryBlock *Prev = Allocations.size() ? &Allocations.back() : NULL;
|
||||
sys::MemoryBlock Mem = sys::Memory::AllocateRWX(Size, Prev, &ErrorMsg);
|
||||
if (Mem.base() == NULL)
|
||||
return true;
|
||||
return false;
|
||||
if ((uintptr_t)Mem.base() % Alignment) {
|
||||
ErrorMsg = "unable to allocate sufficiently aligned memory";
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
Address = reinterpret_cast<uint64_t>(Mem.base());
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoteTarget::loadData(uint64_t Address, const void *Data, size_t Size) {
|
||||
memcpy ((void*)Address, Data, Size);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoteTarget::loadCode(uint64_t Address, const void *Data, size_t Size) {
|
||||
memcpy ((void*)Address, Data, Size);
|
||||
sys::MemoryBlock Mem((void*)Address, Size);
|
||||
sys::Memory::setExecutable(Mem, &ErrorMsg);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoteTarget::executeCode(uint64_t Address, int &RetVal) {
|
||||
int (*fn)(void) = (int(*)(void))Address;
|
||||
RetVal = fn();
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void RemoteTarget::create() {
|
||||
bool RemoteTarget::create() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void RemoteTarget::stop() {
|
||||
|
||||
Reference in New Issue
Block a user