From d472a4264b2208644fad65766532806e01c5fba7 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 6 May 2011 16:03:51 +0000 Subject: [PATCH] gdb/testsuite/ * gdb.threads/corethreads.c: New file. * gdb.threads/corethreads.exp: New file. --- gdb/testsuite/ChangeLog | 7 +++- gdb/testsuite/gdb.threads/corethreads.c | 47 +++++++++++++++++++++++++ gdb/testsuite/gdb.threads/corethreads.exp | 58 +++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 gdb/testsuite/gdb.threads/corethreads.c create mode 100644 gdb/testsuite/gdb.threads/corethreads.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f2eb575..ff015f0 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,4 +1,9 @@ -2011-04-29 Jan Kratochvil +2011-05-06 Jan Kratochvil + + * gdb.threads/corethreads.c: New file. + * gdb.threads/corethreads.exp: New file. + +2011-05-06 Jan Kratochvil * gdb.threads/gcore-thread.exp (objfile, opts): New variables. Try to compile the test using -Wl,-z,norelro first. diff --git a/gdb/testsuite/gdb.threads/corethreads.c b/gdb/testsuite/gdb.threads/corethreads.c new file mode 100644 index 0000000..5371c50 --- /dev/null +++ b/gdb/testsuite/gdb.threads/corethreads.c @@ -0,0 +1,47 @@ +/* Copyright 2011 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 . */ + +#include +#include +#include + +pthread_t thread0; +pthread_t thread1; + +static void * +start (void *arg) +{ + assert (pthread_self () == thread1); + + abort (); +} + +int +main (void) +{ + int i; + + thread0 = pthread_self (); + + i = pthread_create (&thread1, NULL, start, NULL); + assert (i == 0); + + i = pthread_join (thread1, NULL); + assert (i == 0); + + return 0; +} diff --git a/gdb/testsuite/gdb.threads/corethreads.exp b/gdb/testsuite/gdb.threads/corethreads.exp new file mode 100644 index 0000000..8c3f23c --- /dev/null +++ b/gdb/testsuite/gdb.threads/corethreads.exp @@ -0,0 +1,58 @@ +# Copyright 2011 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 . + +# Are we on a target board? And non-Linux targets seem to identify the thread +# differently. +if {![isnative] || ![istarget "*-*-linux*"]} { + return +} + +set testfile "corethreads" +set srcfile ${testfile}.c +set executable ${testfile} +set binfile ${objdir}/${subdir}/${executable} +if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested ${testfile}.exp + return -1 +} + +set corefile [core_find $binfile] +if {$corefile == ""} { + return 0 +} + +clean_restart $executable + +gdb_test "core-file $corefile" "Core was generated by .*" "load core" +gdb_test "info files" "\r\nLocal core dump file:\r\n.*" "sanity check we see the core file" + +set test "print pthread_t of thread0" +gdb_test_multiple "p/x thread0" $test { + -re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" { + pass $test + set thread0 $expect_out(1,string) + } +} +set test "print pthread_t of thread1" +gdb_test_multiple "p/x thread1" $test { + -re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" { + pass $test + set thread1 $expect_out(1,string) + } +} + +gdb_test "info threads" "\r\n *\[12\] +Thread $thread0 .*" "thread0 found" +gdb_test "info threads" "\r\n *\\*? +\[12\] +Thread $thread1 .*" "thread1 found" +gdb_test "info threads" "\r\n\[ \t\]*Id\[ \t\]+Target\[ \t\]+Id\[ \t\]+Frame\[ \t\]*\r\n\[^\r\n\]+\r\n\[^\r\n\]+" "no other thread found" -- 2.7.4