diff options
author | Pedro Alves <palves@redhat.com> | 2009-11-21 21:17:17 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-11-21 21:17:17 +0000 |
commit | f6bc20088048522ffb945254f59f824f5cbdaebd (patch) | |
tree | 88a4983875865ce7d3659f85c5628703923eb225 /gdb/testsuite/gdb.threads/local-watch-wrong-thread.c | |
parent | 8c2fb5deb3f40d81b448d54d7eaa02cde2c6e014 (diff) | |
download | binutils-f6bc20088048522ffb945254f59f824f5cbdaebd.zip binutils-f6bc20088048522ffb945254f59f824f5cbdaebd.tar.gz binutils-f6bc20088048522ffb945254f59f824f5cbdaebd.tar.bz2 |
gdb/
* breakpoint.h (struct breakpoint) <watchpoint_thread>: New field.
* breakpoint.c (watchpoint_in_thread_scope): New.
(update_watchpoint): Skip if the local watchpoint's thread doesn't
match the current thread, or if the current thread is running.
(watchpoint_check): Ditto.
(watch_command_1): Set the watchpoint's watchpoint_thread field.
gdb/testsuite/
* gdb.threads/local-watch-wrong-thread.c,
gdb.threads/local-watch-wrong-thread.exp: New files.
Diffstat (limited to 'gdb/testsuite/gdb.threads/local-watch-wrong-thread.c')
-rw-r--r-- | gdb/testsuite/gdb.threads/local-watch-wrong-thread.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c b/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c new file mode 100644 index 0000000..7aed14c --- /dev/null +++ b/gdb/testsuite/gdb.threads/local-watch-wrong-thread.c @@ -0,0 +1,88 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2002, 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc. + + 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 <unistd.h> +#include <stdlib.h> +#include <pthread.h> + +unsigned int args[2]; +int trigger = 0; + +void * +thread_function0 (void *arg) +{ + int my_number = (long) arg; + volatile int *myp = (volatile int *) &args[my_number]; + + while (*myp > 0) + { + (*myp) ++; + usleep (1); /* Loop increment 1. */ + } + + return NULL; +} + +void * +thread_function0_1 (void *arg) +{ + void *ret = thread_function0 (arg); + + return ret; /* set breakpoint here */ +} + +void * +thread_function1 (void *arg) +{ + int my_number = (long) arg; + + volatile int *myp = (volatile int *) &args[my_number]; + + while (*myp > 0) + { + (*myp) ++; + usleep (1); /* Loop increment 2. */ + } + + return NULL; +} + +int +main () +{ + int res; + pthread_t threads[2]; + void *thread_result; + long i = 0; + + args[i] = 1; /* Init value. */ + res = pthread_create (&threads[i], NULL, + thread_function0_1, + (void *) i); + + i++; + args[i] = 1; /* Init value. */ + res = pthread_create(&threads[i], NULL, + thread_function1, + (void *) i); + + pthread_join (threads[0], &thread_result); + pthread_join (threads[1], &thread_result); + exit(EXIT_SUCCESS); +} |