provide optimized a_ctz_32 for arm
[musl] / src / env / __libc_start_main.c
index 5c79be2..0583f68 100644 (file)
@@ -30,10 +30,10 @@ void __init_libc(char **envp, char *pn)
        __sysinfo = aux[AT_SYSINFO];
        libc.page_size = aux[AT_PAGESZ];
 
-       if (pn) {
-               __progname = __progname_full = pn;
-               for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1;
-       }
+       if (!pn) pn = (void*)aux[AT_EXECFN];
+       if (!pn) pn = "";
+       __progname = __progname_full = pn;
+       for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1;
 
        __init_tls(aux);
        __init_ssp((void *)aux[AT_RANDOM]);
@@ -42,11 +42,13 @@ void __init_libc(char **envp, char *pn)
                && !aux[AT_SECURE]) return;
 
        struct pollfd pfd[3] = { {.fd=0}, {.fd=1}, {.fd=2} };
+       int r =
 #ifdef SYS_poll
        __syscall(SYS_poll, pfd, 3, 0);
 #else
        __syscall(SYS_ppoll, pfd, 3, &(struct timespec){0}, 0, _NSIG/8);
 #endif
+       if (r<0) a_crash();
        for (i=0; i<3; i++) if (pfd[i].revents&POLLNVAL)
                if (__sys_open("/dev/null", O_RDWR)<0)
                        a_crash();
@@ -58,7 +60,7 @@ static void libc_start_init(void)
        _init();
        uintptr_t a = (uintptr_t)&__init_array_start;
        for (; a<(uintptr_t)&__init_array_end; a+=sizeof(void(*)()))
-               (*(void (**)())a)();
+               (*(void (**)(void))a)();
 }
 
 weak_alias(libc_start_init, __libc_start_init);