[patch] Support inferior events in python

Jan Kratochvil jan.kratochvil@redhat.com
Wed Feb 16 11:48:00 GMT 2011


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



More information about the Gdb-patches mailing list