1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Test program that invokes pthread_create@GLIBC_2.0().
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Note: pthread_create@GLIBC_2.0() is only available in 32-bit glibc versions,
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * not in 64-bit versions.
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <pthread.h>
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern int pthread_create_glibc_2_0(pthread_t*, const pthread_attr_t*,
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                    void *(*)(void*), void*);
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown__asm__(".symver pthread_create_glibc_2_0, pthread_create@GLIBC_2.0");
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void* thread_func(void *arg)
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  fprintf(stderr, "The thread.\n");
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main(int argc, char** argv)
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int result;
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pthread_t thr;
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  result = (*pthread_create_glibc_2_0)(&thr, 0, thread_func, 0);
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  if (result != 0)
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  {
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    fprintf(stderr, "pthread_create() failed.\n");
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    return 1;
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  }
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  pthread_join(thr, 0);
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  fprintf(stderr, "Finished.\n");
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  return 0;
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
40