diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.cpp | 43 | 
1 files changed, 43 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.cpp new file mode 100644 index 000000000000..a8e6c049cf4b --- /dev/null +++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.cpp @@ -0,0 +1,43 @@ +//===--- TargetExecutionUtils.cpp - Execution utils for target processes --===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.h" + +#include <vector> + +namespace llvm { +namespace orc { + +int runAsMain(int (*Main)(int, char *[]), ArrayRef<std::string> Args, +              Optional<StringRef> ProgramName) { +  std::vector<std::unique_ptr<char[]>> ArgVStorage; +  std::vector<char *> ArgV; + +  ArgVStorage.reserve(Args.size() + (ProgramName ? 1 : 0)); +  ArgV.reserve(Args.size() + 1 + (ProgramName ? 1 : 0)); + +  if (ProgramName) { +    ArgVStorage.push_back(std::make_unique<char[]>(ProgramName->size() + 1)); +    llvm::copy(*ProgramName, &ArgVStorage.back()[0]); +    ArgVStorage.back()[ProgramName->size()] = '\0'; +    ArgV.push_back(ArgVStorage.back().get()); +  } + +  for (const auto &Arg : Args) { +    ArgVStorage.push_back(std::make_unique<char[]>(Arg.size() + 1)); +    llvm::copy(Arg, &ArgVStorage.back()[0]); +    ArgVStorage.back()[Arg.size()] = '\0'; +    ArgV.push_back(ArgVStorage.back().get()); +  } +  ArgV.push_back(nullptr); + +  return Main(Args.size() + !!ProgramName, ArgV.data()); +} + +} // End namespace orc. +} // End namespace llvm.  | 
