diff options
author | Pedro Alves <palves@redhat.com> | 2008-06-05 21:03:59 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2008-06-05 21:03:59 +0000 |
commit | 49fd4a422bb6152043b2b41a1f734694056dbf3b (patch) | |
tree | 7aeda0dba5001266ac739986588ebd777a522390 /gdb | |
parent | 2e618c13af17f36d0f0173786d49abea7308dc24 (diff) | |
download | gdb-49fd4a422bb6152043b2b41a1f734694056dbf3b.zip gdb-49fd4a422bb6152043b2b41a1f734694056dbf3b.tar.gz gdb-49fd4a422bb6152043b2b41a1f734694056dbf3b.tar.bz2 |
gdb/
* linux-thread-db.c (thread_db_wait): Don't trim event ptid.
testsuite/
* gdb.threads/execl.c, gdb.threads/execl1.c,
gdb.threads/execl.exp: New tests.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/linux-thread-db.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/execl.c | 56 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/execl.exp | 75 | ||||
-rw-r--r-- | gdb/testsuite/gdb.threads/execl1.c | 27 |
6 files changed, 169 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0750025..bb7fd13 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2008-06-05 Pedro Alves <pedro@codesourcery.com> + + * linux-thread-db.c (thread_db_wait): Don't trim event ptid. + 2008-06-05 Aleksandar Ristovski <aristovski@qnx.com> * bcache.c (bcache_data): Call deprecated_bcache_added function. diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c index 2ae2f5c..7e40e9f 100644 --- a/gdb/linux-thread-db.c +++ b/gdb/linux-thread-db.c @@ -838,7 +838,7 @@ thread_db_wait (ptid_t ptid, struct target_waitstatus *ourstatus) unpush_target (&thread_db_ops); using_thread_db = 0; - return pid_to_ptid (GET_PID (ptid)); + return ptid; } /* If we do not know about the main thread yet, this would be a good time to diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8bf0e0f..79ead39 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-06-05 Paul Pluzhnikov <ppluzhnikov@google.com> + Pedro Alves <pedro@codesourcery.com> + + * gdb.threads/execl.c, gdb.threads/execl1.c, + gdb.threads/execl.exp: New tests. + 2008-06-05 Aleksandar Ristovski <aristovski@qnx.com> Daniel Jacobowitz <dan@codesourcery.com> diff --git a/gdb/testsuite/gdb.threads/execl.c b/gdb/testsuite/gdb.threads/execl.c new file mode 100644 index 0000000..a90c2ad --- /dev/null +++ b/gdb/testsuite/gdb.threads/execl.c @@ -0,0 +1,56 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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/>. +*/ + +/* Test handling thread control across an execl. */ + +/* The original image loads a thread library and has several threads, + while the new image does not load a thread library. */ + +#include <unistd.h> +#include <pthread.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +void * +thread_function (void *arg) +{ + while (1) + sleep (100); + return NULL; +} + +int +main (int argc, char* argv[]) +{ + pthread_t thread1; + pthread_t thread2; + char *new_image; + + pthread_create (&thread1, NULL, thread_function, NULL); + pthread_create (&thread2, NULL, thread_function, NULL); + + new_image = malloc (strlen (argv[0]) + 2); + strcpy (new_image, argv[0]); + strcat (new_image, "1"); + + if (execl (new_image, new_image, NULL) == -1) /* set breakpoint here */ + return 1; + + return 0; +} diff --git a/gdb/testsuite/gdb.threads/execl.exp b/gdb/testsuite/gdb.threads/execl.exp new file mode 100644 index 0000000..5dafb8c --- /dev/null +++ b/gdb/testsuite/gdb.threads/execl.exp @@ -0,0 +1,75 @@ +# Copyright (C) 2008 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/>. + +# Test handling of threads across an execl. + + +# Original image, loads a thread library. +set testfile "execl" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + return -1 +} + +# New image, that does not load a thread library. +set testfile1 "execl1" +set srcfile1 ${testfile1}.c +set binfile1 ${objdir}/${subdir}/${testfile1} + +if {[gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile1}" executable {debug}] != "" } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +runto_main + +gdb_test "b [gdb_get_line_number "breakpoint here"]" \ + ".*Breakpoint .*execl.*" "set breakpoint at execl" + +gdb_test "continue" ".*breakpoint here.*" "continue to exec" + +gdb_test "info threads" ".*3 Thread.*2 Thread.*1 Thread.*" "info threads before exec" + +# When continuing from this point we'll hit the breakpoint in main() +# again, this time in the exec'd process. +gdb_test "continue" ".*Breakpoint 1, main.*" \ + "continue across exec" + +gdb_test "info threads" ".*" "info threads after exec" + +set test "info threads after exec" +gdb_test_multiple "info threads" "$test" { + -re "2 Thread .*$gdb_prompt $" { + # Old threads left behind. + fail "$test" + } + -re "4 Thread .*$gdb_prompt $" { + # New threads registered. + fail "$test" + } + -re "$gdb_prompt $" { + # Target doesn't register the main thread, pass for now. + pass "$test" + } +} + +gdb_test "continue" ".*Program exited normally\\." \ + "continue to end" diff --git a/gdb/testsuite/gdb.threads/execl1.c b/gdb/testsuite/gdb.threads/execl1.c new file mode 100644 index 0000000..57ee446 --- /dev/null +++ b/gdb/testsuite/gdb.threads/execl1.c @@ -0,0 +1,27 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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/>. +*/ + +/* Test handling thread control across an execl. */ + +/* New exec image that doesn't load any thread library. */ + +int +main (int argc, char* argv[]) +{ + return 0; +} |