1b725ae77Skettenis /* Pthreads test program.
2b725ae77Skettenis Copyright 1996, 2002, 2003, 2004
3b725ae77Skettenis Free Software Foundation, Inc.
4b725ae77Skettenis
5b725ae77Skettenis Written by Keith Seitz of Red Hat.
6b725ae77Skettenis Copied from gdb.threads/pthreads.c.
7b725ae77Skettenis Contributed by Red Hat.
8b725ae77Skettenis
9b725ae77Skettenis This file is part of GDB.
10b725ae77Skettenis
11b725ae77Skettenis This program is free software; you can redistribute it and/or modify
12b725ae77Skettenis it under the terms of the GNU General Public License as published by
13b725ae77Skettenis the Free Software Foundation; either version 2 of the License, or
14b725ae77Skettenis (at your option) any later version.
15b725ae77Skettenis
16b725ae77Skettenis This program is distributed in the hope that it will be useful,
17b725ae77Skettenis but WITHOUT ANY WARRANTY; without even the implied warranty of
18b725ae77Skettenis MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19b725ae77Skettenis GNU General Public License for more details.
20b725ae77Skettenis
21b725ae77Skettenis You should have received a copy of the GNU General Public License
22b725ae77Skettenis along with this program; if not, write to the Free Software
23b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330,
24b725ae77Skettenis Boston, MA 02111-1307, USA. */
25b725ae77Skettenis
26b725ae77Skettenis #include <stdio.h>
27*11efff7fSkettenis #include <stdlib.h>
28b725ae77Skettenis #include <pthread.h>
29b725ae77Skettenis
30b725ae77Skettenis /* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
31b725ae77Skettenis is prototyped to be just a "pthread_attr_t", while under Solaris it
32b725ae77Skettenis is a "pthread_attr_t *". Arg! */
33b725ae77Skettenis
34b725ae77Skettenis #if defined (__osf__) || defined (__hpux__)
35b725ae77Skettenis #define PTHREAD_CREATE_ARG2(arg) arg
36b725ae77Skettenis #define PTHREAD_CREATE_NULL_ARG2 null_attr
37b725ae77Skettenis static pthread_attr_t null_attr;
38b725ae77Skettenis #else
39b725ae77Skettenis #define PTHREAD_CREATE_ARG2(arg) &arg
40b725ae77Skettenis #define PTHREAD_CREATE_NULL_ARG2 NULL
41b725ae77Skettenis #endif
42b725ae77Skettenis
43b725ae77Skettenis void *
routine(void * arg)44b725ae77Skettenis routine (void *arg)
45b725ae77Skettenis {
46b725ae77Skettenis /* When gdb is running, it sets hidden breakpoints in the thread
47b725ae77Skettenis library. The signals caused by these hidden breakpoints can
48b725ae77Skettenis cause system calls such as 'sleep' to return early. Pay attention
49b725ae77Skettenis to the return value from 'sleep' to get the full sleep. */
50b725ae77Skettenis int unslept = 9;
51b725ae77Skettenis while (unslept > 0)
52b725ae77Skettenis unslept = sleep (unslept);
53b725ae77Skettenis
54b725ae77Skettenis printf ("hello thread\n");
55b725ae77Skettenis }
56b725ae77Skettenis
57b725ae77Skettenis /* Marker function for the testsuite */
58b725ae77Skettenis void
done_making_threads(void)59b725ae77Skettenis done_making_threads (void)
60b725ae77Skettenis {
61b725ae77Skettenis /* Nothing */
62b725ae77Skettenis }
63b725ae77Skettenis
64b725ae77Skettenis void
create_thread(void)65b725ae77Skettenis create_thread (void)
66b725ae77Skettenis {
67b725ae77Skettenis pthread_t tid;
68b725ae77Skettenis
69b725ae77Skettenis if (pthread_create (&tid, PTHREAD_CREATE_NULL_ARG2, routine, (void *) 0xfeedface))
70b725ae77Skettenis {
71b725ae77Skettenis perror ("pthread_create 1");
72b725ae77Skettenis exit (1);
73b725ae77Skettenis }
74b725ae77Skettenis }
75b725ae77Skettenis
76b725ae77Skettenis int
main(int argc,char * argv[])77b725ae77Skettenis main (int argc, char *argv[])
78b725ae77Skettenis {
79b725ae77Skettenis int i;
80b725ae77Skettenis
81b725ae77Skettenis /* Create a few threads */
82b725ae77Skettenis for (i = 0; i < 5; i++)
83b725ae77Skettenis create_thread ();
84b725ae77Skettenis done_making_threads ();
85b725ae77Skettenis
86b725ae77Skettenis printf ("hello\n");
87b725ae77Skettenis printf ("hello\n");
88b725ae77Skettenis return 0;
89b725ae77Skettenis }
90b725ae77Skettenis
91