[lli] Pass command line arguments in to the orc-lazy JIT.
authorLang Hames <lhames@gmail.com>
Fri, 28 Oct 2016 16:52:34 +0000 (16:52 +0000)
committerLang Hames <lhames@gmail.com>
Fri, 28 Oct 2016 16:52:34 +0000 (16:52 +0000)
This brings the LLI orc-lazy JIT's behavior more closely in-line with LLI's
mcjit bahavior.

llvm-svn: 285413

llvm/tools/lli/OrcLazyJIT.cpp
llvm/tools/lli/OrcLazyJIT.h
llvm/tools/lli/lli.cpp

index 40c9a5c..38224b4 100644 (file)
@@ -104,8 +104,8 @@ static PtrTy fromTargetAddress(JITTargetAddress Addr) {
   return reinterpret_cast<PtrTy>(static_cast<uintptr_t>(Addr));
 }
 
-int llvm::runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
-                        char* ArgV[]) {
+int llvm::runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms,
+                        const std::vector<std::string> &Args) {
   // Add the program's symbols into the JIT's search space.
   if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) {
     errs() << "Error loading program symbols.\n";
@@ -152,7 +152,10 @@ int llvm::runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
   }
 
   typedef int (*MainFnPtr)(int, char*[]);
+  std::vector<const char *> ArgV;
+  for (auto &Arg : Args)
+    ArgV.push_back(Arg.c_str());
   auto Main = fromTargetAddress<MainFnPtr>(MainSym.getAddress());
-  return Main(ArgC, ArgV);
+  return Main(ArgV.size(), (char**)ArgV.data());
 }
 
index 80d2de3..05319c3 100644 (file)
@@ -167,8 +167,8 @@ private:
   std::vector<orc::CtorDtorRunner<CODLayerT>> IRStaticDestructorRunners;
 };
 
-int runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
-                  char* ArgV[]);
+int runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms,
+                  const std::vector<std::string> &Args);
 
 } // end namespace llvm
 
index 2bbd228..532d21f 100644 (file)
@@ -403,7 +403,11 @@ int main(int argc, char **argv, char * const *envp) {
         return 1;
       }
     }
-    return runOrcLazyJIT(std::move(Ms), argc, argv);
+    std::vector<std::string> Args;
+    Args.push_back(InputFile);
+    for (auto &Arg : InputArgv)
+      Args.push_back(Arg);
+    return runOrcLazyJIT(std::move(Ms), Args);
   }
 
   if (EnableCacheManager) {