1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/** Test whether DRD recognizes LinuxThreads as LinuxThreads and NPTL as
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *  NPTL.
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <pthread.h>
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <semaphore.h>
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <unistd.h>
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic pid_t s_main_thread_pid;
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid* thread_func(void* arg)
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (s_main_thread_pid == getpid())
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    write(STDOUT_FILENO, "NPTL or non-Linux POSIX threads implementation detected.\n", 57);
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  else
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    write(STDOUT_FILENO, "Detected LinuxThreads as POSIX threads implementation.\n", 55);
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main(int argc, char** argv)
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pthread_t threadid;
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  s_main_thread_pid = getpid();
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pthread_create(&threadid, 0, thread_func, 0);
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pthread_join(threadid, 0);
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
36