* gdb.threads/pthreads.c (PTHREAD_CREATE_ARG2,
authorFred Fish <fnf@specifix.com>
Mon, 19 Aug 1996 17:59:46 +0000 (17:59 +0000)
committerFred Fish <fnf@specifix.com>
Mon, 19 Aug 1996 17:59:46 +0000 (17:59 +0000)
  PTHREAD_CREATE_NULL_ARG2): Accomodate old pthreads implementations.
* gdb.threads/pthreads.exp: Try linking with both -lpthread (Solaris)
  and -lpthreads (everybody else).
(test_startup): Fail gracefully if threads are not supported.
* gdb.base/nodebug.exp: Add setup_xfail hppa*-*-hpux* for
"p/c array_index("abcdef",2)" when not gcc compiled.
* gdb.base/corefile.exp: Add setup_xfail hppa*-*-hpux* for
"print func2::coremaker_local" when not gcc compiled.
* gdb.base/opaque.exp: Remove setup_xfail hppa*-*-hpux* for
"ptype on opaque struct tagname (statically)",
"ptype on opaque struct tagname (dynamically) 1", and
"ptype on opaque struct tagname (dynamically) 2"
for not compiled with gcc.
* gdb.base/mips_pro.exp: Only do setup_xfail hppa*-*-* for
backtrace when compiled with gcc.
* lib/gdb.exp (runto_main): Return result of "runto main" rather
than always return success.

gdb/testsuite/gdb.chill/ChangeLog
gdb/testsuite/gdb.chill/tests2.exp
gdb/testsuite/gdb.threads/pthreads.c [new file with mode: 0644]

index 466b5c5e12e075044ba44fa4b533ae0c1062331f..3f90c65219be36045fd46010302ac14083df805f 100644 (file)
@@ -1,3 +1,8 @@
+Sun Aug 18 13:29:48 1996  Fred Fish  <fnf@cygnus.com>
+
+       * tests2.exp: Remove mips-sgi-irix* setup_xfail for
+       "real write 4" and "real write 8".
+
 Mon Jun 10 14:04:05 1996  Fred Fish  <fnf@cygnus.com>
 
        * tests1.exp (test_modes): Remove *-*-* setup_sfail for 
index 2630a16d449f38310feae17ca9d2577e10d254b3..719572f687079095d34c2cea7223cc04ca8a210e 100644 (file)
@@ -211,12 +211,12 @@ proc write_access { } {
     test_write re1 0 "real write 2"
     test_write re1 "1e+38" {1e\+38|1\.0[0-9]*e\+38|9\.9[0-9]*e\+37} \
        "real write 3"
-    setup_xfail "i*86-*-linux" "mips-sgi-irix*"
+    setup_xfail "i*86-*-linux"
     test_write re1 "1e+39" $infinity "real write 4"
     test_write re2 42.03 {42.0[0-9]*} "real write 5"
     test_write re2 0 "real write 6"
     test_write re2 "1e+308" {1e\+308} "real write 7"
-    setup_xfail "i*86-*-linux" "mips-sgi-irix*"
+    setup_xfail "i*86-*-linux"
     test_write re2 "1e+309" $infinity "real write 8"
     # array modes
     test_write arrl1 {[(1:3): [(1:2): -128]]} {\[\(1:3\): \[\(1:2\): -128\]\]}\
diff --git a/gdb/testsuite/gdb.threads/pthreads.c b/gdb/testsuite/gdb.threads/pthreads.c
new file mode 100644 (file)
index 0000000..9e55996
--- /dev/null
@@ -0,0 +1,164 @@
+#include <stdio.h>
+
+#include "config.h"
+
+#ifndef HAVE_PTHREAD_H
+
+/* 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
+   support.  In that case we can just suppress the test completely. */
+
+#error "no posix threads support"
+
+#else
+
+/* 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
+   should issue an ERROR result.. */
+
+#include <pthread.h>
+
+/* Under OSF, the second arg of pthread_create is prototyped to be just
+   a "pthread_attr_t", while under Solaris it is a "pthread_attr_t *".
+   Arg! */
+
+#ifdef __osf__
+#define PTHREAD_CREATE_ARG2(arg) arg
+#define PTHREAD_CREATE_NULL_ARG2 null_attr
+static pthread_attr_t null_attr;
+#else
+#define PTHREAD_CREATE_ARG2(arg) &arg
+#define PTHREAD_CREATE_NULL_ARG2 NULL
+#endif
+
+static int verbose = 0;
+
+static void
+common_routine (arg)
+     int arg;
+{
+  static int from_thread1;
+  static int from_thread2;
+  static int from_main;
+  static int hits;
+  static int full_coverage;
+
+  if (verbose) printf("common_routine (%d)\n", arg);
+  hits++;
+  switch (arg)
+    {
+    case 0:
+      from_main++;
+      break;
+    case 1:
+      from_thread1++;
+      break;
+    case 2:
+      from_thread2++;
+      break;
+    }
+  if (from_main && from_thread1 && from_thread2)
+    full_coverage = 1;
+}
+
+static void *
+thread1 (void *arg)
+{
+  int i;
+  int z = 0;
+
+  if (verbose) printf ("thread1 (%0x) ; pid = %d\n", arg, getpid ());
+  for (i=1; i <= 10000000; i++)
+    {
+      if (verbose) printf("thread1 %d\n", pthread_self ());
+      z += i;
+      common_routine (1);
+      sleep(1);
+    }
+}
+
+static void *
+thread2 (void * arg)
+{
+  int i;
+  int k = 0;
+
+  if (verbose) printf ("thread2 (%0x) ; pid = %d\n", arg, getpid ());
+  for (i=1; i <= 10000000; i++)
+    {
+      if (verbose) printf("thread2 %d\n", pthread_self ());
+      k += i;
+      common_routine (2);
+      sleep(1);
+    }
+  sleep(100);
+}
+
+int
+foo (a, b, c)
+     int a, b, c;
+{
+  int d, e, f;
+
+  if (verbose) printf("a=%d\n", a);
+}
+
+main(argc, argv)
+     int argc;
+     char **argv;
+{
+  pthread_t tid1, tid2;
+  int j;
+  int t = 0;
+  void (*xxx) ();
+  pthread_attr_t attr;
+
+  if (verbose) printf ("pid = %d\n", getpid());
+
+  foo (1, 2, 3);
+
+#ifndef __osf__
+  if (pthread_attr_init (&attr))
+    {
+      perror ("pthread_attr_init 1");
+      exit (1);
+    }
+#endif
+
+#ifdef PTHREAD_SCOPE_SYSTEM
+  if (pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM))
+    {
+      perror ("pthread_attr_setscope 1");
+      exit (1);
+    }
+#endif
+
+  if (pthread_create (&tid1, PTHREAD_CREATE_ARG2(attr), thread1, (void *) 0xfeedface))
+    {
+      perror ("pthread_create 1");
+      exit (1);
+    }
+  if (verbose) printf ("Made thread %d\n", tid1);
+  sleep (1);
+
+  if (pthread_create (&tid2, PTHREAD_CREATE_NULL_ARG2, thread2, (void *) 0xdeadbeef))
+    {
+      perror ("pthread_create 2");
+      exit (1);
+    }
+  if (verbose) printf("Made thread %d\n", tid2);
+
+  sleep (1);
+
+  for (j = 1; j <= 10000000; j++)
+    {
+      if (verbose) printf("top %d\n", pthread_self ());
+      common_routine (0);
+      sleep(1);
+      t += j;
+    }
+  
+  exit(0);
+}
+
+#endif /* ifndef HAVE_PTHREAD_H */