xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.mi/pthreads.c (revision 11efff7f3ac2b3cfeff0c0cddc14294d9b3aca4f)
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