[llvm-commits] CVS: llvm/tools/llvm-stub/Makefile llvm-stub.c
Chris Lattner
lattner at cs.uiuc.edu
Tue Jun 1 18:53:01 PDT 2004
Changes in directory llvm/tools/llvm-stub:
Makefile added (r1.1)
llvm-stub.c added (r1.1)
---
Log message:
Initial checkin of a stub executable that can be used by gccld to forward to
bytecode files on systems that don't support #!/bin/sh natively (ie, win32).
---
Diffs of the changes: (+64 -0)
Index: llvm/tools/llvm-stub/Makefile
diff -c /dev/null llvm/tools/llvm-stub/Makefile:1.1
*** /dev/null Tue Jun 1 18:48:55 2004
--- llvm/tools/llvm-stub/Makefile Tue Jun 1 18:48:45 2004
***************
*** 0 ****
--- 1,13 ----
+ ##===- tools/llvm-stub/Makefile ----------------------------*- Makefile -*-===##
+ #
+ # The LLVM Compiler Infrastructure
+ #
+ # This file was developed by the LLVM research group and is distributed under
+ # the University of Illinois Open Source License. See LICENSE.TXT for details.
+ #
+ ##===----------------------------------------------------------------------===##
+
+ LEVEL = ../..
+ TOOLNAME = llvm-stub
+ include $(LEVEL)/Makefile.common
+
Index: llvm/tools/llvm-stub/llvm-stub.c
diff -c /dev/null llvm/tools/llvm-stub/llvm-stub.c:1.1
*** /dev/null Tue Jun 1 18:48:55 2004
--- llvm/tools/llvm-stub/llvm-stub.c Tue Jun 1 18:48:45 2004
***************
*** 0 ****
--- 1,51 ----
+ /*===- llvm-stub.c - Stub executable to run llvm bytecode files -----------===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This tool is used by the gccld program to enable transparent execution of
+ // bytecode files by the user. Specifically, gccld outputs two files when asked
+ // to compile a <program> file:
+ // 1. It outputs the LLVM bytecode file to <program>.bc
+ // 2. It outputs a stub executable that runs lli on <program>.bc
+ //
+ // This allows the end user to just say ./<program> and have the JIT executed
+ // automatically. On unix, the stub executable emitted is actually a bourne
+ // shell script that does the forwarding. Windows doesn't not like #!/bin/sh
+ // programs in .exe files, so we make it an actual program, defined here.
+ //
+ //===----------------------------------------------------------------------===*/
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include "Config/unistd.h" /* provides definition of execve */
+
+ int main(int argc, char** argv) {
+ const char *Interp = getenv("LLVMINTERP");
+ const char **Args;
+ if (Interp == 0) Interp = "lli";
+
+ /* Set up the command line options to pass to the JIT. */
+ Args = (const char**)malloc(sizeof(char*) * (argc+2));
+ /* argv[0] is the JIT */
+ Args[0] = Interp;
+ /* argv[1] is argv[0] + ".bc". */
+ Args[1] = strcat(strcpy((char*)malloc(strlen(argv[0])+4), argv[0]), ".bc");
+
+ /* The rest of the args are as before. */
+ memcpy(Args+2, argv+1, sizeof(char*)*argc);
+
+ /* Run the JIT. */
+ execvp(Interp, (char *const*)Args);
+
+ /* if _execv returns, the JIT could not be started. */
+ fprintf(stderr, "Could not execute the LLVM JIT. Either add 'lli' to your"
+ " path, or set the\ninterpreter you want to use in the LLVMINTERP "
+ "environment variable.\n");
+ return 1;
+ }
More information about the llvm-commits
mailing list