summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-12-13 16:48:57 +0000
committerChris Lattner <sabre@nondot.org>2002-12-13 16:48:57 +0000
commit78576164024dac1a7a89d0530ef218a88778ca73 (patch)
tree7292797843c7b18f9d247c3ac8d74edd2a78a235 /llvm/tools
parentbf6ad7d307369fe809dea2af1ccb88d2fe3103c1 (diff)
downloadbcm5719-llvm-78576164024dac1a7a89d0530ef218a88778ca73.tar.gz
bcm5719-llvm-78576164024dac1a7a89d0530ef218a88778ca73.zip
Pass command line arguments to main
llvm-svn: 5027
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/jello/VM.cpp9
-rw-r--r--llvm/tools/jello/VM.h5
-rw-r--r--llvm/tools/jello/jello.cpp15
3 files changed, 24 insertions, 5 deletions
diff --git a/llvm/tools/jello/VM.cpp b/llvm/tools/jello/VM.cpp
index 5b0bf2f4ec3..e5e77c3e275 100644
--- a/llvm/tools/jello/VM.cpp
+++ b/llvm/tools/jello/VM.cpp
@@ -38,9 +38,14 @@ void VM::setupPassManager() {
}
int VM::run(Function *F) {
- int(*PF)() = (int(*)())getPointerToFunction(F);
+ int(*PF)(int, char**) = (int(*)(int, char**))getPointerToFunction(F);
assert(PF != 0 && "Null pointer to function?");
- return PF();
+
+ unsigned NumArgs = 0;
+ for (; Argv[NumArgs]; ++NumArgs)
+ ;
+
+ return PF(NumArgs, Argv);
}
void *VM::resolveFunctionReference(void *RefAddr) {
diff --git a/llvm/tools/jello/VM.h b/llvm/tools/jello/VM.h
index 783b7dc12eb..c02b4044f75 100644
--- a/llvm/tools/jello/VM.h
+++ b/llvm/tools/jello/VM.h
@@ -24,6 +24,7 @@ class VM {
TargetMachine &TM; // The current target we are compiling to
PassManager PM; // Passes to compile a function
MachineCodeEmitter *MCE; // MCE object
+ char **Argv;
// GlobalAddress - A mapping between LLVM values and their native code
// generated versions...
@@ -35,8 +36,8 @@ class VM {
//
std::map<void*, Function*> FunctionRefs;
public:
- VM(const std::string &name, Module &m, TargetMachine &tm)
- : ExeName(name), M(m), TM(tm) {
+ VM(const std::string &name, char **AV, Module &m, TargetMachine &tm)
+ : ExeName(name), M(m), TM(tm), Argv(AV) {
MCE = createEmitter(*this); // Initialize MCE
setupPassManager();
registerCallback();
diff --git a/llvm/tools/jello/jello.cpp b/llvm/tools/jello/jello.cpp
index 52541f012c7..7fe37b02f65 100644
--- a/llvm/tools/jello/jello.cpp
+++ b/llvm/tools/jello/jello.cpp
@@ -16,6 +16,9 @@ namespace {
cl::opt<std::string>
InputFile(cl::desc("<input bytecode>"), cl::Positional, cl::init("-"));
+ cl::list<std::string>
+ InputArgv(cl::ConsumeAfter, cl::desc("<program arguments>..."));
+
cl::opt<std::string>
MainFunction("f", cl::desc("Function to execute"), cl::init("main"),
cl::value_desc("function name"));
@@ -41,8 +44,18 @@ int main(int argc, char **argv) {
return 1;
}
+ // Build an argv vector...
+ InputArgv.insert(InputArgv.begin(), InputFile);
+ char **Argv = new char*[InputArgv.size()+1];
+ for (unsigned i = 0, e = InputArgv.size(); i != e; ++i) {
+ Argv[i] = new char[InputArgv[i].size()+1];
+ std::copy(InputArgv[i].begin(), InputArgv[i].end(), Argv[i]);
+ Argv[i][InputArgv[i].size()] = 0;
+ }
+ Argv[InputArgv.size()] = 0;
+
// Create the virtual machine object...
- VM TheVM(argv[0], *M.get(), *Target.get());
+ VM TheVM(argv[0], Argv, *M.get(), *Target.get());
Function *F = M.get()->getNamedFunction(MainFunction);
if (F == 0) {
OpenPOWER on IntegriCloud