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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [testsuite/] [gdb.threads/] [pthreads.c] - Diff between revs 106 and 107

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 106 Rev 107
#include <stdio.h>
#include <stdio.h>
 
 
#include "config.h"
#include "config.h"
 
 
#ifndef HAVE_PTHREAD_H
#ifndef HAVE_PTHREAD_H
 
 
/* Don't even try to compile.  In fact, cause a syntax error that we can
/* Don't even try to compile.  In fact, cause a syntax error that we can
   look for as a compiler error message and know that we have no pthread
   look for as a compiler error message and know that we have no pthread
   support.  In that case we can just suppress the test completely. */
   support.  In that case we can just suppress the test completely. */
 
 
#error "no posix threads support"
#error "no posix threads support"
 
 
#else
#else
 
 
/* OK.  We have the right header.  If we try to compile this and fail, then
/* OK.  We have the right header.  If we try to compile this and fail, then
   there is something wrong and the user should know about it so the testsuite
   there is something wrong and the user should know about it so the testsuite
   should issue an ERROR result.. */
   should issue an ERROR result.. */
 
 
#ifdef __linux__
#ifdef __linux__
#define  _MIT_POSIX_THREADS 1   /* Linux (or at least RedHat 4.0) needs this */
#define  _MIT_POSIX_THREADS 1   /* Linux (or at least RedHat 4.0) needs this */
#endif
#endif
 
 
#include <pthread.h>
#include <pthread.h>
 
 
/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
/* Under OSF 2.0 & 3.0 and HPUX 10, the second arg of pthread_create
   is prototyped to be just a "pthread_attr_t", while under Solaris it
   is prototyped to be just a "pthread_attr_t", while under Solaris it
   is a "pthread_attr_t *".  Arg! */
   is a "pthread_attr_t *".  Arg! */
 
 
#if defined (__osf__) || defined (__hpux__)
#if defined (__osf__) || defined (__hpux__)
#define PTHREAD_CREATE_ARG2(arg) arg
#define PTHREAD_CREATE_ARG2(arg) arg
#define PTHREAD_CREATE_NULL_ARG2 null_attr
#define PTHREAD_CREATE_NULL_ARG2 null_attr
static pthread_attr_t null_attr;
static pthread_attr_t null_attr;
#else
#else
#define PTHREAD_CREATE_ARG2(arg) &arg
#define PTHREAD_CREATE_ARG2(arg) &arg
#define PTHREAD_CREATE_NULL_ARG2 NULL
#define PTHREAD_CREATE_NULL_ARG2 NULL
#endif
#endif
 
 
static int verbose = 0;
static int verbose = 0;
 
 
static void
static void
common_routine (arg)
common_routine (arg)
     int arg;
     int arg;
{
{
  static int from_thread1;
  static int from_thread1;
  static int from_thread2;
  static int from_thread2;
  static int from_main;
  static int from_main;
  static int hits;
  static int hits;
  static int full_coverage;
  static int full_coverage;
 
 
  if (verbose) printf("common_routine (%d)\n", arg);
  if (verbose) printf("common_routine (%d)\n", arg);
  hits++;
  hits++;
  switch (arg)
  switch (arg)
    {
    {
    case 0:
    case 0:
      from_main++;
      from_main++;
      break;
      break;
    case 1:
    case 1:
      from_thread1++;
      from_thread1++;
      break;
      break;
    case 2:
    case 2:
      from_thread2++;
      from_thread2++;
      break;
      break;
    }
    }
  if (from_main && from_thread1 && from_thread2)
  if (from_main && from_thread1 && from_thread2)
    full_coverage = 1;
    full_coverage = 1;
}
}
 
 
static void *
static void *
thread1 (void *arg)
thread1 (void *arg)
{
{
  int i;
  int i;
  int z = 0;
  int z = 0;
 
 
  if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ());
  if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ());
  for (i=1; i <= 10000000; i++)
  for (i=1; i <= 10000000; i++)
    {
    {
      if (verbose) printf("thread1 %d\n", pthread_self ());
      if (verbose) printf("thread1 %d\n", pthread_self ());
      z += i;
      z += i;
      common_routine (1);
      common_routine (1);
      sleep(1);
      sleep(1);
    }
    }
}
}
 
 
static void *
static void *
thread2 (void * arg)
thread2 (void * arg)
{
{
  int i;
  int i;
  int k = 0;
  int k = 0;
 
 
  if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ());
  if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ());
  for (i=1; i <= 10000000; i++)
  for (i=1; i <= 10000000; i++)
    {
    {
      if (verbose) printf("thread2 %d\n", pthread_self ());
      if (verbose) printf("thread2 %d\n", pthread_self ());
      k += i;
      k += i;
      common_routine (2);
      common_routine (2);
      sleep(1);
      sleep(1);
    }
    }
  sleep(100);
  sleep(100);
}
}
 
 
int
int
foo (a, b, c)
foo (a, b, c)
     int a, b, c;
     int a, b, c;
{
{
  int d, e, f;
  int d, e, f;
 
 
  if (verbose) printf("a=%d\n", a);
  if (verbose) printf("a=%d\n", a);
}
}
 
 
main(argc, argv)
main(argc, argv)
     int argc;
     int argc;
     char **argv;
     char **argv;
{
{
  pthread_t tid1, tid2;
  pthread_t tid1, tid2;
  int j;
  int j;
  int t = 0;
  int t = 0;
  void (*xxx) ();
  void (*xxx) ();
  pthread_attr_t attr;
  pthread_attr_t attr;
 
 
  if (verbose) printf ("pid = %d\n", getpid());
  if (verbose) printf ("pid = %d\n", getpid());
 
 
  foo (1, 2, 3);
  foo (1, 2, 3);
 
 
#ifndef __osf__
#ifndef __osf__
  if (pthread_attr_init (&attr))
  if (pthread_attr_init (&attr))
    {
    {
      perror ("pthread_attr_init 1");
      perror ("pthread_attr_init 1");
      exit (1);
      exit (1);
    }
    }
#endif
#endif
 
 
#ifdef PTHREAD_SCOPE_SYSTEM
#ifdef PTHREAD_SCOPE_SYSTEM
  if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))
  if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))
    {
    {
      perror ("pthread_attr_setscope 1");
      perror ("pthread_attr_setscope 1");
      exit (1);
      exit (1);
    }
    }
#endif
#endif
 
 
  if (pthread_create (&tid1, PTHREAD_CREATE_ARG2(attr), thread1, (void *) 0xfeedface))
  if (pthread_create (&tid1, PTHREAD_CREATE_ARG2(attr), thread1, (void *) 0xfeedface))
    {
    {
      perror ("pthread_create 1");
      perror ("pthread_create 1");
      exit (1);
      exit (1);
    }
    }
  if (verbose) printf ("Made thread %d\n", tid1);
  if (verbose) printf ("Made thread %d\n", tid1);
  sleep (1);
  sleep (1);
 
 
  if (pthread_create (&tid2, PTHREAD_CREATE_NULL_ARG2, thread2, (void *) 0xdeadbeef))
  if (pthread_create (&tid2, PTHREAD_CREATE_NULL_ARG2, thread2, (void *) 0xdeadbeef))
    {
    {
      perror ("pthread_create 2");
      perror ("pthread_create 2");
      exit (1);
      exit (1);
    }
    }
  if (verbose) printf("Made thread %d\n", tid2);
  if (verbose) printf("Made thread %d\n", tid2);
 
 
  sleep (1);
  sleep (1);
 
 
  for (j = 1; j <= 10000000; j++)
  for (j = 1; j <= 10000000; j++)
    {
    {
      if (verbose) printf("top %d\n", pthread_self ());
      if (verbose) printf("top %d\n", pthread_self ());
      common_routine (0);
      common_routine (0);
      sleep(1);
      sleep(1);
      t += j;
      t += j;
    }
    }
 
 
  exit(0);
  exit(0);
}
}
 
 
#endif  /* ifndef HAVE_PTHREAD_H */
#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.