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