imported brians code
[nestedvm.git] / src / org / xwt / mips / crt0.c
diff --git a/src/org/xwt/mips/crt0.c b/src/org/xwt/mips/crt0.c
new file mode 100644 (file)
index 0000000..a85cdbc
--- /dev/null
@@ -0,0 +1,31 @@
+#include <stddef.h>
+
+extern int _gp[];
+
+extern int main(int argc, char **argv, char **envp);
+extern void exit(int status);
+extern int atexit(void (*f)());
+
+/* For constuctors/destructors */
+extern void _init();
+extern void _fini();
+
+char **environ;
+    
+void _start(char **argv, char **environ_) {
+    int argc;
+    
+    environ = environ_;
+    
+    /* Call global constructors */
+    _init();
+    
+    /* Register _fini() to be called on exit */
+    atexit(_fini);
+    
+    /* Count the arguments */
+    for(argc=0;argv[argc];argc++);
+        
+    /* Call main and exit */
+    exit(main(argc,argv,environ));
+}