Add command line option -entry-funcion to override entry function (default is main).
authorEvan Cheng <evan.cheng@apple.com>
Wed, 5 Nov 2008 23:21:52 +0000 (23:21 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 5 Nov 2008 23:21:52 +0000 (23:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58779 91177308-0d34-0410-b5e6-96231b3b80d8

tools/lli/lli.cpp

index 74ea3dd415424077b19f2535f64b2aa092d73c8c..fee48ed2101803374bd3b7586a04e8e1b11bf798 100644 (file)
@@ -49,6 +49,13 @@ namespace {
 
   cl::opt<std::string>
   TargetTriple("mtriple", cl::desc("Override target triple for module"));
+
+  cl::opt<std::string>
+  EntryFunc("entry-function",
+            cl::desc("Specify the entry function (default = 'main') "
+                     "of the executable"),
+            cl::value_desc("function"),
+            cl::init("main"));
   
   cl::opt<std::string>
   FakeArgv0("fake-argv0",
@@ -140,9 +147,9 @@ int main(int argc, char **argv, char * const *envp) {
   // using the contents of Args to determine argc & argv, and the contents of
   // EnvVars to determine envp.
   //
-  Function *MainFn = Mod->getFunction("main");
-  if (!MainFn) {
-    std::cerr << "'main' function not found in module.\n";
+  Function *EntryFn = Mod->getFunction(EntryFunc);
+  if (!EntryFn) {
+    std::cerr << '\'' << EntryFunc << "\' function not found in module.\n";
     return -1;
   }
 
@@ -160,13 +167,13 @@ int main(int argc, char **argv, char * const *envp) {
   if (NoLazyCompilation) {
     for (Module::iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) {
       Function *Fn = &*I;
-      if (Fn != MainFn && !Fn->isDeclaration())
+      if (Fn != EntryFn && !Fn->isDeclaration())
         EE->getPointerToFunction(Fn);
     }
   }
 
   // Run main.
-  int Result = EE->runFunctionAsMain(MainFn, InputArgv, envp);
+  int Result = EE->runFunctionAsMain(EntryFn, InputArgv, envp);
 
   // Run static destructors.
   EE->runStaticConstructorsDestructors(true);