From 82acb2685351bac138327d5db5a9710b81765ac9 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Mon, 27 Nov 2023 16:55:41 -0500 Subject: add weak main() symbol so __main.o can go in the .a and .so --- Makefile | 2 +- src/__main.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index f92a5b77..55c34cd6 100644 --- a/Makefile +++ b/Makefile @@ -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 #include #include #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) {} +*/ -- cgit v1.2.1