Re: [patch] Support inferior events in python

Jan Kratochvil
2011-02-16T11:12:16Z

On Mon, 14 Feb 2011 18:28:13 +0100, sami wagiaalla wrote:
> --- /dev/null
> +++ b/gdb/testsuite/gdb.python/py-evsignal.exp
> @@ -0,0 +1,49 @@
> +# 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
> +}
> +
> +load_lib gdb-python.exp
> +
> +set testfile "py-evthreads"
> +set srcfile ${testfile}.c
> +set binfile ${objdir}/${subdir}/${testfile}

While $srcfile is OK please use "py-evsignal" as the $binfile.

> +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_breakpoint [gdb_get_line_number "end of main"]
> +
> +gdb_test_multiple "run" "Signal Thread 3" {

This will ignore gdbserver if you run it with:
http://sourceware.org/gdb/wiki/TestingGDB#Testing_gdbserver_in_a_native_configuration

Although with runto_main and gdb_test_multiple "continue" the python support
will FAIL:
RuntimeError: Could not find event thread

> + -re ".*stop reason: signal.*stop signal: SIGSEGV.*thread num: 3.*" {
> + pass "thread 3 was signaled"
> + }
> + -re "The target does not support running in non-stop mode" {
> + unsupported "non-stop mode is unsupported"
> + }
> +}

I believe here could be `\r\n$gdb_prompt $' at the end as "run" (nor
"continue") are executed with trailing `&'. But that is not a real problem.

> diff --git a/gdb/testsuite/gdb.python/py-evthreads.c b/gdb/testsuite/gdb.python/py-evthreads.c
> index 1464ce6..55414ed 100644
> --- a/gdb/testsuite/gdb.python/py-evthreads.c
> +++ b/gdb/testsuite/gdb.python/py-evthreads.c
> @@ -28,7 +28,7 @@ void* thread3 (void* d)
> int count3 = 0;
> count3++;
>
> - int *bad;
> + int *bad = NULL;
> *bad = 1;

This is needlessly fragile - for example on targets where NULL is writable.
What about some:
raise (SIGUSR1);

> @@ -44,76 +41,38 @@ gdb_breakpoint "main"
> 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.*" {
> +gdb_test_multiple "run" "Run to breakpoint 1" {

Again gdbserver incompatible.

Thanks,
Jan