diff --git a/llvm/tools/lli/OrcLazyJIT.cpp b/llvm/tools/lli/OrcLazyJIT.cpp index 40c9a5c4dc6c..38224b41f581 100644 --- a/llvm/tools/lli/OrcLazyJIT.cpp +++ b/llvm/tools/lli/OrcLazyJIT.cpp @@ -104,8 +104,8 @@ static PtrTy fromTargetAddress(JITTargetAddress Addr) { return reinterpret_cast(static_cast(Addr)); } -int llvm::runOrcLazyJIT(std::vector> Ms, int ArgC, - char* ArgV[]) { +int llvm::runOrcLazyJIT(std::vector> Ms, + const std::vector &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> Ms, int ArgC, } typedef int (*MainFnPtr)(int, char*[]); + std::vector ArgV; + for (auto &Arg : Args) + ArgV.push_back(Arg.c_str()); auto Main = fromTargetAddress(MainSym.getAddress()); - return Main(ArgC, ArgV); + return Main(ArgV.size(), (char**)ArgV.data()); } diff --git a/llvm/tools/lli/OrcLazyJIT.h b/llvm/tools/lli/OrcLazyJIT.h index 80d2de361e84..05319c345484 100644 --- a/llvm/tools/lli/OrcLazyJIT.h +++ b/llvm/tools/lli/OrcLazyJIT.h @@ -167,8 +167,8 @@ private: std::vector> IRStaticDestructorRunners; }; -int runOrcLazyJIT(std::vector> Ms, int ArgC, - char* ArgV[]); +int runOrcLazyJIT(std::vector> Ms, + const std::vector &Args); } // end namespace llvm diff --git a/llvm/tools/lli/lli.cpp b/llvm/tools/lli/lli.cpp index 2bbd22877345..532d21fbdbf1 100644 --- a/llvm/tools/lli/lli.cpp +++ b/llvm/tools/lli/lli.cpp @@ -403,7 +403,11 @@ int main(int argc, char **argv, char * const *envp) { return 1; } } - return runOrcLazyJIT(std::move(Ms), argc, argv); + std::vector Args; + Args.push_back(InputFile); + for (auto &Arg : InputArgv) + Args.push_back(Arg); + return runOrcLazyJIT(std::move(Ms), Args); } if (EnableCacheManager) {