diff options
-rw-r--r-- | gdb/testsuite/gdb.chill/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.chill/tests2.exp | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/pthreads.c | 164 |
3 files changed, 171 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.chill/ChangeLog b/gdb/testsuite/gdb.chill/ChangeLog index 466b5c5..3f90c652 100644 --- a/gdb/testsuite/gdb.chill/ChangeLog +++ b/gdb/testsuite/gdb.chill/ChangeLog @@ -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 diff --git a/gdb/testsuite/gdb.chill/tests2.exp b/gdb/testsuite/gdb.chill/tests2.exp index 2630a16..719572f 100644 --- a/gdb/testsuite/gdb.chill/tests2.exp +++ b/gdb/testsuite/gdb.chill/tests2.exp @@ -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 index 0000000..9e55996 --- /dev/null +++ b/gdb/testsuite/gdb.threads/pthreads.c @@ -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 */ |