/* * __static_init.c * * This function takes the raw data block set up by the ELF loader * in the kernel and parses it. It is invoked by crt0.S which makes * any necessary adjustments and passes calls this function using * the standard C calling convention. * * The arguments are: * uintptr_t *elfdata -- The ELF loader data block; usually from the stack. * Basically a pointer to argc. * void (*onexit)(void) -- Function to install into onexit */ #include #include #include #include #include char **environ; extern int main(int, char **, char **); __noreturn __libc_init(uintptr_t *elfdata, void (*onexit)(void)) { int argc; char **argv, **envp; (void)onexit; /* For now, we ignore this... */ argc = (int)*elfdata++; argv = (char **)elfdata; envp = argv+(argc+1); environ = envp; exit(main(argc, argv, envp)); }