diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | src/__main.c | 34 |
2 files changed, 27 insertions, 9 deletions
@@ -22,7 +22,7 @@ newdeps: cleandeps for i in $$(find src -name \*.$(ARCHITECTURE)-$(WORDSIZE).s); do sh mk/deps.sh $$i; done libung.so: libc.a libm.a - $(CC) -o libung.so -shared $$(ls -1 obj/*.o | grep -v __main.o) + $(CC) -o libung.so -shared obj/*.o deps: $(MAKE) -f mk/deps.mk 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) {} +*/ |