PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
crt0.c
1#include <stdio.h>
2typedef void (*func_ptr)(void);
3extern func_ptr __CTOR_END__[];
4extern func_ptr __DTOR_LIST__[];
5extern func_ptr __DTOR_END__[];
6
7static void __do_global_ctors(void)
8{
9 func_ptr *p = __CTOR_END__ - 1;
10
11 if (*(int *)p != -1) {
12 for (; *(int *)p != -1; p--) {
13 (*p)();
14 }
15 }
16}
17
18static void __do_global_dtors(void)
19{
20 int num = __DTOR_END__ - __DTOR_LIST__ - 1;
21 int idx = 0;
22
23 while (idx < num) {
24 idx++;
25 __DTOR_LIST__[idx]();
26 }
27}
28
29extern int main(int argc, char *argv[]);
30
31int _start(int argc, char *argv[])
32{
33 int ret;
34
35 if (argc >= 0) {
36 __do_global_ctors();
37 ret = main(argc, argv);
38 } else {
39 ret = main(argc, argv);
40 __do_global_dtors();
41 }
42
43 return ret;
44}