X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fcrt0.o_src%2Fcrt0.c;h=3cdbe119df16cb2fe37bd203fc2a95ec876f442e;hb=eeb449278c0ad4d378232c322dc3becfbb4cef1b;hp=f506d72bb195ff4fdc5fc14c9e7deb15ede0adb2;hpb=7ba570fe3cc5418f42decf5b72ac2295cce9e60f;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/crt0.o_src/crt0.c b/Usermode/Libraries/crt0.o_src/crt0.c index f506d72b..3cdbe119 100644 --- a/Usermode/Libraries/crt0.o_src/crt0.c +++ b/Usermode/Libraries/crt0.o_src/crt0.c @@ -6,23 +6,28 @@ typedef void (*exithandler_t)(void); typedef void (*constructor_t)(void); +constructor_t _crtbegin_ctors[0] __attribute__((section(".ctors"))); + exithandler_t _crt0_exit_handler; -extern constructor_t _crtbegin_ctors[]; +extern void _init(void); +extern void _fini(void); extern void _exit(int status) __attribute__((noreturn)); extern int main(int argc, char *argv[], char **envp); +void _start(int argc, char *argv[], char **envp) __attribute__ ((alias("start"))); + void start(int argc, char *argv[], char **envp) { - int i; - int rv; - - for( i = 0; _crtbegin_ctors[i]; i ++ ) + // TODO: isn't this handled by _init? + for( int i = 0; _crtbegin_ctors[i]; i ++ ) _crtbegin_ctors[i](); + + _init(); - rv = main(argc, argv, envp); + int rv = main(argc, argv, envp); if( _crt0_exit_handler ) _crt0_exit_handler(); - + _fini(); _exit(rv); }