• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/gdb/gdb/testsuite/gdb.threads/
1/* Pthreads test program.
2   Copyright 1996, 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
3
4   Written by Fred Fish of Cygnus Support
5   Contributed by Cygnus Support
6
7   This file is part of GDB.
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 3 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22#include <stdio.h>
23#include <stdlib.h>
24#include <pthread.h>
25
26/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
27   is prototyped to be just a "pthread_attr_t", while under Solaris it
28   is a "pthread_attr_t *".  Arg! */
29
30#if defined (__osf__) || defined (__hpux__)
31#define PTHREAD_CREATE_ARG2(arg) arg
32#define PTHREAD_CREATE_NULL_ARG2 null_attr
33static pthread_attr_t null_attr;
34#else
35#define PTHREAD_CREATE_ARG2(arg) &arg
36#define PTHREAD_CREATE_NULL_ARG2 NULL
37#endif
38
39static int verbose = 0;
40
41static void
42common_routine (arg)
43     int arg;
44{
45  static int from_thread1;
46  static int from_thread2;
47  static int from_main;
48  static int hits;
49  static int full_coverage;
50
51  if (verbose) printf("common_routine (%d)\n", arg);
52  hits++;
53  switch (arg)
54    {
55    case 0:
56      from_main++;
57      break;
58    case 1:
59      from_thread1++;
60      break;
61    case 2:
62      from_thread2++;
63      break;
64    }
65  if (from_main && from_thread1 && from_thread2)
66    full_coverage = 1;
67}
68
69static void *
70thread1 (void *arg)
71{
72  int i;
73  int z = 0;
74
75  if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ());
76  for (i=1; i <= 10000000; i++)
77    {
78      if (verbose) printf("thread1 %d\n", pthread_self ());
79      z += i;
80      common_routine (1);
81      sleep(1);
82    }
83  return (void *) 0;
84}
85
86static void *
87thread2 (void * arg)
88{
89  int i;
90  int k = 0;
91
92  if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ());
93  for (i=1; i <= 10000000; i++)
94    {
95      if (verbose) printf("thread2 %d\n", pthread_self ());
96      k += i;
97      common_routine (2);
98      sleep(1);
99    }
100  sleep(100);
101  return (void *) 0;
102}
103
104void
105foo (a, b, c)
106     int a, b, c;
107{
108  int d, e, f;
109
110  if (verbose) printf("a=%d\n", a);
111}
112
113main(argc, argv)
114     int argc;
115     char **argv;
116{
117  pthread_t tid1, tid2;
118  int j;
119  int t = 0;
120  void (*xxx) ();
121  pthread_attr_t attr;
122
123  if (verbose) printf ("pid = %d\n", getpid());
124
125  foo (1, 2, 3);
126
127#ifndef __osf__
128  if (pthread_attr_init (&attr))
129    {
130      perror ("pthread_attr_init 1");
131      exit (1);
132    }
133#endif
134
135#ifdef PTHREAD_SCOPE_SYSTEM
136  if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))
137    {
138      perror ("pthread_attr_setscope 1");
139      exit (1);
140    }
141#endif
142
143  if (pthread_create (&tid1, PTHREAD_CREATE_ARG2(attr), thread1, (void *) 0xfeedface))
144    {
145      perror ("pthread_create 1");
146      exit (1);
147    }
148  if (verbose) printf ("Made thread %d\n", tid1);
149  sleep (1);
150
151  if (pthread_create (&tid2, PTHREAD_CREATE_NULL_ARG2, thread2, (void *) 0xdeadbeef))
152    {
153      perror ("pthread_create 2");
154      exit (1);
155    }
156  if (verbose) printf("Made thread %d\n", tid2);
157
158  sleep (1);
159
160  for (j = 1; j <= 10000000; j++)
161    {
162      if (verbose) printf("top %d\n", pthread_self ());
163      common_routine (0);
164      sleep(1);
165      t += j;
166    }
167
168  exit(0);
169}
170
171