Re: [patch] Support inferior events in python

Jan Kratochvil
2011-09-13T21:42:08Z

On Thu, 07 Jul 2011 15:45:14 +0200, sami wagiaalla wrote:
> On 07/06/2011 03:37 PM, Jan Kratochvil wrote:
> >I will check it in in some time without any comments.
>
> Please do, and thank you for taking care of this :)

Checked in, with a technical re-diff.

Thanks,
Jan

http://sourceware.org/ml/gdb-cvs/2011-09/msg00076.html

--- src/gdb/testsuite/ChangeLog 2011/09/12 21:24:50 1.2851
+++ src/gdb/testsuite/ChangeLog 2011/09/13 21:39:58 1.2852
@@ -1,3 +1,21 @@
+2011-09-13 Sami Wagiaalla <swagiaal@redhat.com>
+ Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.python/py-events.exp: Remove pretty printing comment.
+ * gdb.python/py-evsignal.exp: New file.
+ * gdb.python/py-evthreads.c: Include signal.h.
+ (thread3): Remove variable count3. Remove variable bad and use raise
+ instead.
+ (thread2): Remove variable count2. Move thread3 pthread_create here,
+ merge pthread_join to a single line.
+ (main): Remove variable count1. Merge pthread_join with pthread_create
+ to a single line.
+ * gdb.python/py-evthreads.exp: Remove pretty printing comment. New
+ KFAIL python/12966 for gdbserver. Test return value of
+ gdb_compile_pthreads. Use gdb_run_cmd. Replace send_gdb and
+ gdb_expect by gdb_test and gdb_test_multiple.
+ (thread 2, thread 3): New tests.
+
2011-09-12 Matt Rice <ratmice@gmail.com>
Pedro Alves <pedro@codesourcery.com>

--- src/gdb/testsuite/gdb.python/py-evsignal.exp
+++ src/gdb/testsuite/gdb.python/py-evsignal.exp 2011-09-13 21:40:18.445023000 +0000
@@ -0,0 +1,54 @@
+# Copyright (C) 2010, 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 <http://www.gnu.org/licenses/>.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+if {[is_remote target]} {
+ # RuntimeError: Could not find event thread
+ kfail "python/12966" "Signal Thread 3"
+ return -1
+}
+
+load_lib gdb-python.exp
+
+set testfile "py-evsignal"
+set srcfile py-evthreads.c
+set binfile ${objdir}/${subdir}/${testfile}
+set pyfile ${srcdir}/${subdir}/py-events.py
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+ return -1
+}
+clean_restart $testfile
+
+if { [skip_python_tests] } { continue }
+
+gdb_test_no_output "python execfile ('${pyfile}')" ""
+
+gdb_test "Test_Events" "Event testers registered."
+gdb_test_no_output "set non-stop on"
+gdb_test_no_output "set target-async on"
+
+gdb_run_cmd
+gdb_test_multiple "" "Signal Thread 3" {
+ -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n$gdb_prompt $" {
+ pass "thread 3 was signaled"
+ }
+ -re "The target does not support running in non-stop mode" {
+ unsupported "non-stop mode is unsupported"
+ }
+}
--- src/gdb/testsuite/gdb.python/py-events.exp 2011/02/05 05:27:23 1.1
+++ src/gdb/testsuite/gdb.python/py-events.exp 2011/09/13 21:39:59 1.2
@@ -13,11 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

-# This file is part of the GDB testsuite. It tests Python-based
-# pretty-printing for the CLI.
-
-# Skip all tests if Python scripting is not enabled.
-
if $tracelevel then {
strace $tracelevel
}
--- src/gdb/testsuite/gdb.python/py-evthreads.c 2011/02/05 05:27:23 1.1
+++ src/gdb/testsuite/gdb.python/py-evthreads.c 2011/09/13 21:39:59 1.2
@@ -19,37 +19,35 @@
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
+#include <signal.h>

pthread_t thread2_id;
pthread_t thread3_id;

void* thread3 (void* d)
{
- int count3 = 0;
- count3++;
-
- int *bad;
- *bad = 1;
+ raise (SIGUSR1);

return NULL;
}

void* thread2 (void* d)
{
- int count2 = 0;
- count2++;
+ /* Do not quit thread3 asynchronously wrt thread2 stop - wait first on
+ thread3_id to stop. It would complicate testcase receiption of the
+ events. */
+
+ pthread_create (&thread3_id, NULL, thread3, NULL); pthread_join (thread3_id, NULL);
+
return NULL;
}

-int main (){
-
- pthread_create (&thread2_id, NULL, thread2, NULL);
- pthread_create (&thread3_id, NULL, thread3, NULL);
+int main (void)
+{
+ /* Use single line to not to race whether `thread2' breakpoint or `next' over
+ pthread_create will stop first. */

- int count1 = 0; // stop1
- count1++;
+ pthread_create (&thread2_id, NULL, thread2, NULL); pthread_join (thread2_id, NULL);

- pthread_join (thread2_id, NULL);
- pthread_join (thread3_id, NULL);
return 12;
}
--- src/gdb/testsuite/gdb.python/py-evthreads.exp 2011/07/18 04:14:21 1.4
+++ src/gdb/testsuite/gdb.python/py-evthreads.exp 2011/09/13 21:39:59 1.5
@@ -13,15 +13,16 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

-# This file is part of the GDB testsuite. It tests Python-based
-# pretty-printing for the CLI.
-
-# Skip all tests if Python scripting is not enabled.
-
if $tracelevel then {
strace $tracelevel
}

+if {[is_remote target]} {
+ # RuntimeError: Could not find event thread
+ kfail "python/12966" "Run to breakpoint 1"
+ return -1
+}
+
if { ![support_displaced_stepping] } {
unsupported "displaced stepping"
return -1
@@ -34,7 +35,9 @@
set binfile ${objdir}/${subdir}/${testfile}
set pyfile ${srcdir}/${subdir}/py-events.py

-gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+ return -1
+}
clean_restart $testfile

if { [skip_python_tests] } { continue }
@@ -49,76 +52,37 @@
gdb_breakpoint "thread2"
gdb_breakpoint "thread3"

-send_gdb "run\n"
-gdb_expect {
- -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 1.*
-.*thread num: 1.*" {
- pass "reached breakpoint 1"
+gdb_run_cmd
+set test "Run to breakpoint 1"
+gdb_test_multiple "" $test {
+ -re "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 1\r\nthread num: 1\r\n$gdb_prompt $" {
+ pass $test
}
- timeout {
- fail "did not reach breakpoint 1"
- }
-}
-
-send_gdb "next\n"
-gdb_expect {
- -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 2.*
-.*thread num: 2.*" {
- pass "reached breakpoint 2"
+ -re "The target does not support running in non-stop mode" {
+ unsupported "non-stop mode is unsupported"
+ return
}
- timeout {
- fail "did not reach breakpoint 2"
- }
}

-send_gdb "next\n"
-gdb_expect {
- -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 3.*
-.*thread num: 3.*" {
- pass "reached breakpoint 3"
- }
- timeout {
- fail "did not reach breakpoint 3"
- }
-}
+gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 2\r\nthread num: 2" "reached breakpoint 2"

-send_gdb "continue&\n"
-gdb_expect {
- -re ".*event type: continue.*
-.*thread num: 1.*\r\n$gdb_prompt $" {
- pass "continue thread 1"
- }
- timeout {
- fail "continue thread 1 failed"
- }
-}
+gdb_test "thread 2" {\[Switching to thread 2 .*}
+
+gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 3\r\nthread num: 3" "reached breakpoint 3"
+
+gdb_test "thread 3" {\[Switching to thread 3 .*}

-gdb_test "thread 2" ".*Switching to thread 2.*"
-send_gdb "continue&\n"
-gdb_expect {
- -re ".*event type: continue.*
-.*thread num: 2.*" {
- pass "continue thread 2"
+set test "continue thread 1"
+gdb_test_multiple "continue&" $test {
+ -re "event type: continue\r\nthread num: 3\r\n$gdb_prompt " {
+ # This expect string must not expect the end-of-buffer '$'.
+ pass $test
}
- timeout {
- fail "continue thread 2 failed"
- }
}

-send_gdb "continue -a\n"
-gdb_expect {
- -re ".*stop reason: signal.*
-.*stop signal: SIGSEGV.*
-.*thread num: 3.*" {
- pass "thread 3 was signalled"
+set test "thread 3 was signaled"
+gdb_test_multiple "" $test {
+ -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n$" {
+ pass $test
}
- timeout {
- fail "thread 3 was not signalled"
- }
}