diff options
Diffstat (limited to 'lib/ExecutionEngine/MCJIT/MCJIT.cpp')
| -rw-r--r-- | lib/ExecutionEngine/MCJIT/MCJIT.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 2c663c2e1edf..ffc6707e1488 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -95,7 +95,7 @@ MCJIT::~MCJIT() { for (auto &Obj : LoadedObjects) if (Obj) - NotifyFreeingObject(*Obj); + notifyFreeingObject(*Obj); Archives.clear(); } @@ -119,7 +119,7 @@ void MCJIT::addObjectFile(std::unique_ptr<object::ObjectFile> Obj) { if (Dyld.hasError()) report_fatal_error(Dyld.getErrorString()); - NotifyObjectEmitted(*Obj, *L); + notifyObjectLoaded(*Obj, *L); LoadedObjects.push_back(std::move(Obj)); } @@ -216,7 +216,7 @@ void MCJIT::generateCodeForModule(Module *M) { if (!LoadedObject) { std::string Buf; raw_string_ostream OS(Buf); - logAllUnhandledErrors(LoadedObject.takeError(), OS, ""); + logAllUnhandledErrors(LoadedObject.takeError(), OS); OS.flush(); report_fatal_error(Buf); } @@ -226,7 +226,7 @@ void MCJIT::generateCodeForModule(Module *M) { if (Dyld.hasError()) report_fatal_error(Dyld.getErrorString()); - NotifyObjectEmitted(*LoadedObject.get(), *L); + notifyObjectLoaded(*LoadedObject.get(), *L); Buffers.push_back(std::move(ObjectToLoad)); LoadedObjects.push_back(std::move(*LoadedObject)); @@ -326,8 +326,9 @@ uint64_t MCJIT::getSymbolAddress(const std::string &Name, return *AddrOrErr; else report_fatal_error(AddrOrErr.takeError()); - } else + } else if (auto Err = Sym.takeError()) report_fatal_error(Sym.takeError()); + return 0; } JITSymbol MCJIT::findSymbol(const std::string &Name, @@ -647,19 +648,23 @@ void MCJIT::UnregisterJITEventListener(JITEventListener *L) { } } -void MCJIT::NotifyObjectEmitted(const object::ObjectFile& Obj, - const RuntimeDyld::LoadedObjectInfo &L) { +void MCJIT::notifyObjectLoaded(const object::ObjectFile &Obj, + const RuntimeDyld::LoadedObjectInfo &L) { + uint64_t Key = + static_cast<uint64_t>(reinterpret_cast<uintptr_t>(Obj.getData().data())); MutexGuard locked(lock); MemMgr->notifyObjectLoaded(this, Obj); for (unsigned I = 0, S = EventListeners.size(); I < S; ++I) { - EventListeners[I]->NotifyObjectEmitted(Obj, L); + EventListeners[I]->notifyObjectLoaded(Key, Obj, L); } } -void MCJIT::NotifyFreeingObject(const object::ObjectFile& Obj) { +void MCJIT::notifyFreeingObject(const object::ObjectFile &Obj) { + uint64_t Key = + static_cast<uint64_t>(reinterpret_cast<uintptr_t>(Obj.getData().data())); MutexGuard locked(lock); for (JITEventListener *L : EventListeners) - L->NotifyFreeingObject(Obj); + L->notifyFreeingObject(Key); } JITSymbol |
