f31222b226b7e31b2b3d02a72880afd13e721244
[musl] / src / env / __libc_start_main.c
1 #include "libc.h"
2
3 void __init_security(size_t *);
4
5 int __libc_start_main(
6         int (*main)(int, char **, char **), int argc, char **argv,
7         int (*init)(int, char **, char **), void (*fini)(void),
8         void (*ldso_fini)(void))
9 {
10         char **envp = argv+argc+1, **auxv = envp;
11
12         __environ = envp;
13         do auxv++; while (*auxv);
14         libc.auxv = (void *)++auxv;
15         libc.ldso_fini = ldso_fini;
16         libc.fini = fini;
17
18         __init_security((void *)auxv);
19
20         /* Execute constructors (static) linked into the application */
21         if (init) init(argc, argv, envp);
22
23         /* Pass control to to application */
24         exit(main(argc, argv, envp));
25         return 0;
26 }