[PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached

Antoine Tremblay antoine.tremblay@ericsson.com
Thu Feb 5 13:30:00 GMT 2015


ping

On 01/27/2015 02:35 PM, Antoine Tremblay wrote:
> When gdbserver is called with --multi and attach has not been called yet
> and tstart is called on the gdb client, gdbserver would crash.
> This patch fixes gdbserver so that it returns E01 to the gdb client.
>
> Also this patch adds a testcase to verify this bug named no-attach-trace.exp
>
> gdb/ChangeLog:
> 	PR gdb/15956
> 	* gdb/gdbserver/tracepoint.c (cmd_qtinit): Added check for
> 	current_thread.
>
> gdb/testsuite/ChangeLog:
> 	* gdb.server/no-attach-trace.c: New file.
> 	* gdb.server/no-attach-trace.exp: New file.
> ---
>   gdb/gdbserver/tracepoint.c                   |    7 +++++
>   gdb/testsuite/gdb.server/Makefile.in         |    2 +-
>   gdb/testsuite/gdb.server/no-attach-trace.c   |   25 ++++++++++++++++
>   gdb/testsuite/gdb.server/no-attach-trace.exp |   40 ++++++++++++++++++++++++++
>   4 files changed, 73 insertions(+), 1 deletion(-)
>   create mode 100644 gdb/testsuite/gdb.server/no-attach-trace.c
>   create mode 100644 gdb/testsuite/gdb.server/no-attach-trace.exp
>
> diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c
> index 82d6ce5..0518530 100644
> --- a/gdb/gdbserver/tracepoint.c
> +++ b/gdb/gdbserver/tracepoint.c
> @@ -2377,6 +2377,13 @@ cmd_qtinit (char *packet)
>   {
>     struct trace_state_variable *tsv, *prev, *next;
>   
> +  /* Can't do this command without a pid attached */
> +  if (current_thread == NULL)
> +    {
> +      write_enn(packet);
> +      return;
> +    }
> +
>     /* Make sure we don't try to read from a trace frame.  */
>     current_traceframe = -1;
>   
> diff --git a/gdb/testsuite/gdb.server/Makefile.in b/gdb/testsuite/gdb.server/Makefile.in
> index 509fbd8..52fe957 100644
> --- a/gdb/testsuite/gdb.server/Makefile.in
> +++ b/gdb/testsuite/gdb.server/Makefile.in
> @@ -2,7 +2,7 @@ VPATH = @srcdir@
>   srcdir = @srcdir@
>   
>   EXECUTABLES = ext-attach ext-run file-transfer server-mon server-run \
> -	no-thread-db
> +	no-thread-db no-attach-trace
>   
>   MISCELLANEOUS =
>   
> diff --git a/gdb/testsuite/gdb.server/no-attach-trace.c b/gdb/testsuite/gdb.server/no-attach-trace.c
> new file mode 100644
> index 0000000..383e6d0
> --- /dev/null
> +++ b/gdb/testsuite/gdb.server/no-attach-trace.c
> @@ -0,0 +1,25 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 2015 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/>.  */
> +
> +/* This program is intended to be a simple dummy program for gdb to read */
> +
> +#include <unistd.h>
> +
> +int main ()
> +{
> +  return 0;
> +}
> diff --git a/gdb/testsuite/gdb.server/no-attach-trace.exp b/gdb/testsuite/gdb.server/no-attach-trace.exp
> new file mode 100644
> index 0000000..ff75e44
> --- /dev/null
> +++ b/gdb/testsuite/gdb.server/no-attach-trace.exp
> @@ -0,0 +1,40 @@
> +# This testcase is part of GDB, the GNU debugger.
> +
> +# Copyright 2015 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 that trying to trace without a program attached fails properly.
> +
> +load_lib gdbserver-support.exp
> +load_lib trace-support.exp
> +
> +standard_testfile
> +
> +if { [skip_gdbserver_tests] } {
> +    return 0
> +}
> +
> +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
> +    return -1
> +}
> +
> +# Make sure we're disconnected, in case we're testing with an
> +# extended-remote board, therefore already connected.
> +gdb_test "disconnect" ".*"
> +
> +gdbserver_start_extended
> +
> +gdb_test "trace main" "Tracepoint.*"
> +gdb_test "tstart" "Target returns error code '01'\."



More information about the Gdb-patches mailing list