diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp')
| -rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 94741f5f01d5..144329aa8bea 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -11,6 +11,7 @@  #include "llvm/ExecutionEngine/GenericValue.h"  #include "llvm/ExecutionEngine/JITEventListener.h"  #include "llvm/ExecutionEngine/MCJIT.h" +#include "llvm/ExecutionEngine/ObjectCache.h"  #include "llvm/ExecutionEngine/SectionMemoryManager.h"  #include "llvm/IR/DataLayout.h"  #include "llvm/IR/DerivedTypes.h" @@ -23,6 +24,7 @@  #include "llvm/Support/DynamicLibrary.h"  #include "llvm/Support/ErrorHandling.h"  #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/SmallVectorMemoryBuffer.h"  #include <mutex>  using namespace llvm; @@ -239,6 +241,10 @@ void MCJIT::finalizeLoadedModules() {    // Resolve any outstanding relocations.    Dyld.resolveRelocations(); +  // Check for Dyld error. +  if (Dyld.hasError()) +    ErrMsg = Dyld.getErrorString().str(); +    OwnedModules.markAllLoadedModulesAsFinalized();    // Register EH frame data for any module we own which has been loaded @@ -609,7 +615,7 @@ GenericValue MCJIT::runFunction(Function *F, ArrayRef<GenericValue> ArgValues) {  void *MCJIT::getPointerToNamedFunction(StringRef Name, bool AbortOnFailure) {    if (!isSymbolSearchingDisabled()) { -    if (auto Sym = Resolver.findSymbol(Name)) { +    if (auto Sym = Resolver.findSymbol(std::string(Name))) {        if (auto AddrOrErr = Sym.getAddress())          return reinterpret_cast<void*>(                   static_cast<uintptr_t>(*AddrOrErr)); @@ -619,7 +625,7 @@ void *MCJIT::getPointerToNamedFunction(StringRef Name, bool AbortOnFailure) {    /// If a LazyFunctionCreator is installed, use it to get/create the function.    if (LazyFunctionCreator) -    if (void *RP = LazyFunctionCreator(Name)) +    if (void *RP = LazyFunctionCreator(std::string(Name)))        return RP;    if (AbortOnFailure) {  | 
