* gdb.threads/pthreads.c (PTHREAD_CREATE_ARG2,

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.
This commit is contained in:
Fred Fish 1996-08-19 17:59:46 +00:00
parent 9099ec8fb4
commit 6f5fbad328
3 changed files with 171 additions and 2 deletions

View 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

View 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\]\]}\

View file

@ -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 */