overhaul syscall interface
[musl] / src / thread / pthread_create.c
index 9b6385f..fccfa19 100644 (file)
@@ -91,7 +91,7 @@ static void rsyscall_handler(int sig, siginfo_t *si, void *ctx)
                return;
        }
 
-       if (syscall6(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],
+       if (__syscall(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],
                rs.arg[3], rs.arg[4], rs.arg[5]) < 0 && !rs.err) rs.err=errno;
 
        a_inc(&rs.cnt);
@@ -140,7 +140,7 @@ static int rsyscall(int nr, long a, long b, long c, long d, long e, long f)
        while((i=rs.cnt)) __wait(&rs.cnt, 0, i, 1);
 
        if (rs.err) errno = rs.err, ret = -1;
-       else ret = syscall6(nr, a, b, c, d, e, f);
+       else ret = __syscall(nr, a, b, c, d, e, f);
 
        UNLOCK(&rs.lock);
        return ret;
@@ -195,7 +195,7 @@ int pthread_create(pthread_t *res, const pthread_attr_t *attr, void *(*entry)(vo
        size += __pthread_tsd_size;
        map = mmap(0, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1, 0);
        if (!map) return EAGAIN;
-       mprotect(map, guard, PROT_NONE);
+       if (guard) mprotect(map, guard, PROT_NONE);
 
        tsd = map + size - __pthread_tsd_size;
        new = (void *)(tsd - sizeof *new - PAGE_SIZE%sizeof *new);