summaryrefslogtreecommitdiff
path: root/src/__main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/__main.c')
-rw-r--r--src/__main.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/__main.c b/src/__main.c
index 1cfb5119..4f56efa0 100644
--- a/src/__main.c
+++ b/src/__main.c
@@ -1,16 +1,16 @@
-#if 0
-
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include "stdio/_stdio.h"
#include "stdlib/_stdlib.h"
-void __main(int argc, char **argv)
+void __init_libc(void)
{
- extern int main(int, char*[]);
-
- environ = argv + argc + 1;
+ static int init = 0;
+ if (init) {
+ return;
+ }
+ init = 1;
stdin = __stdio.FILES + 0;
stdin->fd = 0;
@@ -24,11 +24,29 @@ void __main(int argc, char **argv)
stderr->fd = 2;
freopen(NULL, "w", stderr);
setvbuf(stderr, NULL, _IONBF, 0);
+}
+
+void __main(int argc, char **argv)
+{
+ extern int main(int, char*[]);
+
+ environ = argv + argc + 1;
+ __init_libc();
exit(main(argc, argv));
}
-void __stack_chk_fail(void) {}
+__attribute__((weak))
+int main(int argc, char *argv[])
+{
+ (void)argc;
+ (void)argv;
+ return 0;
+}
+void __stack_chk_fail(void) {}
-#endif
+/*
+void _init(void) {}
+void _fini(void) {}
+*/