Usermode/crt0 - Replaced crtbegin/crtend with crti/crtn
[tpg/acess2.git] / Usermode / Libraries / crt0.o_src / crt0.c
1 /*
2  * Acess2
3  * - C Runtime 0 Common Code
4  */
5
6 typedef void    (*exithandler_t)(void);
7 typedef void    (*constructor_t)(void);
8
9 constructor_t   _crtbegin_ctors[0] __attribute__((section(".ctors")));
10
11 exithandler_t   _crt0_exit_handler;
12 //extern constructor_t  _crtbegin_ctors[];
13 extern void     _init(void);
14 extern void     _fini(void);
15 extern void     _exit(int status) __attribute__((noreturn));
16 extern int      main(int argc, char *argv[], char **envp);
17
18 void _start(int argc, char *argv[], char **envp) __attribute__ ((alias("start")));
19
20 void start(int argc, char *argv[], char **envp)
21 {
22          int    i;
23          int    rv;
24         
25         for( i = 0; _crtbegin_ctors[i]; i ++ )
26                 _crtbegin_ctors[i]();
27         
28         _init();
29
30         rv = main(argc, argv, envp);
31         
32         if( _crt0_exit_handler )
33                 _crt0_exit_handler();
34         _fini();
35         _exit(rv);
36 }

UCC git Repository :: git.ucc.asn.au