1cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
2c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar//
3c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// setuid(0) hangs on powerpc64 big endian.  When this is fixed remove
4c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// the unsupported flag.
5c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// https://llvm.org/bugs/show_bug.cgi?id=25799
6c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar//
7c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar// UNSUPPORTED: powerpc64-unknown-linux-gnu
8cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include "test.h"
9cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include <sys/types.h>
10cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include <unistd.h>
11cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar
12cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// Setuid call used to hang because the background tsan thread did not handle
13cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// SIGSETXID signal. Note that we don't care whether setuid call succeeds
14cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// or not.
15cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar
16cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainarstatic void *thread(void *arg) {
17cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  (void)arg;
18cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  sleep(1);
19cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  return 0;
20cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar}
21cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar
22cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainarint main() {
23cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  // Create another thread just for completeness of the picture.
24cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  pthread_t th;
25cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  pthread_create(&th, 0, thread, 0);
26cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  setuid(0);
27cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  pthread_join(th, 0);
28cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  fprintf(stderr, "DONE\n");
29cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar  return 0;
30cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar}
31cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar
32cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar// CHECK: DONE
33