OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [testsuite/] [gdb.threads/] [pthreads.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
#include <stdio.h>
2
 
3
#include "config.h"
4
 
5
#ifndef HAVE_PTHREAD_H
6
 
7
/* Don't even try to compile.  In fact, cause a syntax error that we can
8
   look for as a compiler error message and know that we have no pthread
9
   support.  In that case we can just suppress the test completely. */
10
 
11
#error "no posix threads support"
12
 
13
#else
14
 
15
/* OK.  We have the right header.  If we try to compile this and fail, then
16
   there is something wrong and the user should know about it so the testsuite
17
   should issue an ERROR result.. */
18
 
19
#ifdef __linux__
20
#define  _MIT_POSIX_THREADS 1   /* GNU/Linux (or at least RedHat 4.0)
21
                                   needs this */
22
#endif
23
 
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
33
static pthread_attr_t null_attr;
34
#else
35
#define PTHREAD_CREATE_ARG2(arg) &arg
36
#define PTHREAD_CREATE_NULL_ARG2 NULL
37
#endif
38
 
39
static int verbose = 0;
40
 
41
static void
42
common_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
 
69
static void *
70
thread1 (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
 
86
static void *
87
thread2 (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
 
104
void
105
foo (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
 
113
main(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
#endif  /* ifndef HAVE_PTHREAD_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.