diff options
author | Vladimir Prus <vladimir@codesourcery.com> | 2008-08-19 14:13:29 +0000 |
---|---|---|
committer | Vladimir Prus <vladimir@codesourcery.com> | 2008-08-19 14:13:29 +0000 |
commit | 8cf6e61a08c6d0cb84692204a1a1ccd63a8ba50d (patch) | |
tree | 32cef3799ad8451241fdfb3cd47a85d7856131d3 /gdb/testsuite/gdb.mi/non-stop.c | |
parent | 7f7efbd95fbc488424ef541bc1ddb5f3e1964bbb (diff) | |
download | gdb-8cf6e61a08c6d0cb84692204a1a1ccd63a8ba50d.zip gdb-8cf6e61a08c6d0cb84692204a1a1ccd63a8ba50d.tar.gz gdb-8cf6e61a08c6d0cb84692204a1a1ccd63a8ba50d.tar.bz2 |
* lib/mi-support.exp (mi_expect_stop): Produce
more details on failures.
* gdb.mi/mi-nonstop.exp: New.
* gdb.mi/non-stop.c: New.
Diffstat (limited to 'gdb/testsuite/gdb.mi/non-stop.c')
-rw-r--r-- | gdb/testsuite/gdb.mi/non-stop.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.mi/non-stop.c b/gdb/testsuite/gdb.mi/non-stop.c new file mode 100644 index 0000000..9b006eb --- /dev/null +++ b/gdb/testsuite/gdb.mi/non-stop.c @@ -0,0 +1,89 @@ +/* Test program for non-stop debugging. + Copyright 1996, 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> +#include <pthread.h> + +/* 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 a "pthread_attr_t *". Arg! */ + +#if defined (__osf__) || defined (__hpux__) +#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 + +int exit_first_thread = 0; + +void break_at_me (int id, int i) +{ +} + +void * +worker (void *arg) +{ + int id = (int)arg; + int i = 0; + + /* When gdb is running, it sets hidden breakpoints in the thread + library. The signals caused by these hidden breakpoints can + cause system calls such as 'sleep' to return early. Pay attention + to the return value from 'sleep' to get the full sleep. */ + for (;;++i) + { + int unslept = 1; + while (unslept > 0) + unslept = sleep (unslept); + + if (exit_first_thread && id == 0) + return; + + break_at_me (id, i); + } +} + +pthread_t +create_thread (int id) +{ + pthread_t tid; + + if (pthread_create (&tid, PTHREAD_CREATE_NULL_ARG2, worker, (void *) id)) + { + perror ("pthread_create 1"); + exit (1); + } + return tid; +} + +int +main (int argc, char *argv[]) +{ + pthread_t tid; + create_thread (0); + sleep (1); + tid = create_thread (1); + pthread_join (tid, NULL); + + return 0; +} + |