[MCJIT] Check if there have been errors during RuntimeDyld execution.
authorJuergen Ributzka <juergen@apple.com>
Wed, 26 Mar 2014 18:19:27 +0000 (18:19 +0000)
committerJuergen Ributzka <juergen@apple.com>
Wed, 26 Mar 2014 18:19:27 +0000 (18:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204837 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ExecutionEngine/RuntimeDyld.h
lib/ExecutionEngine/MCJIT/MCJIT.cpp
lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp

index 0b6b75be48b37275e2020344052c5dd04c02034b..8d7b81bb6e2b700df6977b1f91df6c6225e8caf1 100644 (file)
@@ -84,6 +84,7 @@ public:
 
   void deregisterEHFrames();
 
+  bool hasError();
   StringRef getErrorString();
 
   /// By default, only sections that are "required for execution" are passed to
index aa5f7240245106b64282300d8548e8fe6a76978d..49b67275615cb1d63aa00b9dafd04bd29ef7480f 100644 (file)
@@ -115,7 +115,7 @@ bool MCJIT::removeModule(Module *M) {
 
 void MCJIT::addObjectFile(object::ObjectFile *Obj) {
   ObjectImage *LoadedObject = Dyld.loadObject(Obj);
-  if (!LoadedObject)
+  if (!LoadedObject || Dyld.hasError())
     report_fatal_error(Dyld.getErrorString());
 
   LoadedObjects.push_back(LoadedObject);
index 7f35083748269f5388d298dca1ea9e62d4812e09..12cd81931ffd2fc250c2b5046c6b39b060861c19 100644 (file)
@@ -761,6 +761,8 @@ void RuntimeDyld::mapSectionAddress(const void *LocalAddress,
   Dyld->mapSectionAddress(LocalAddress, TargetAddress);
 }
 
+bool RuntimeDyld::hasError() { return Dyld->hasError(); }
+
 StringRef RuntimeDyld::getErrorString() { return Dyld->getErrorString(); }
 
 void RuntimeDyld::registerEHFrames() {