blob: 0c6b6276be37187f486418b1c25b0afd8879f230 [file] [log] [blame]
/* -*- Mode: C; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
#include "util.h"
int main(void) {
pid_t child;
int ret;
int status;
child = syscall(SYS_clone, CLONE_SETTLS | SIGCHLD, (void*)0, (void*)0, (void*)0, 0L);
if (child < 0) {
/* On x86-32 null TLS produces EFAULT */
test_assert(EFAULT == errno);
atomic_puts("EXIT-SUCCESS");
return 0;
}
if (!child) {
/* Use `syscall` here so we don't do any dl_runtime_resolve stuff that
* might use TLS. */
syscall(SYS_write, STDOUT_FILENO, "EXIT-SUCCESS\n", 13);
syscall(SYS_exit_group, 77);
}
ret = wait(&status);
test_assert(child == ret);
test_assert(WIFEXITED(status) && 77 == WEXITSTATUS(status));
return 0;
}