From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4211 invoked by alias); 5 Feb 2015 13:30:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 4197 invoked by uid 89); 5 Feb 2015 13:30:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.3 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: usevmg20.ericsson.net Received: from usevmg20.ericsson.net (HELO usevmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Thu, 05 Feb 2015 13:30:16 +0000 Received: from EUSAAHC005.ericsson.se (Unknown_Domain [147.117.188.87]) by usevmg20.ericsson.net (Symantec Mail Security) with SMTP id F7.5E.03307.61D13D45; Thu, 5 Feb 2015 08:34:46 +0100 (CET) Received: from [142.133.111.161] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.89) with Microsoft SMTP Server id 14.3.210.2; Thu, 5 Feb 2015 08:30:13 -0500 Message-ID: <54D37065.4020303@ericsson.com> Date: Thu, 05 Feb 2015 13:30:00 -0000 From: Antoine Tremblay User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Subject: Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached References: <1422387337-32334-1-git-send-email-antoine.tremblay@ericsson.com> In-Reply-To: <1422387337-32334-1-git-send-email-antoine.tremblay@ericsson.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2015-02/txt/msg00120.txt.bz2 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 . */ > + > +/* This program is intended to be a simple dummy program for gdb to read */ > + > +#include > + > +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 . > + > +# 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'\."