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