* [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached @ 2015-01-28 11:37 Antoine Tremblay 2015-02-05 13:30 ` Antoine Tremblay 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-01-28 11:37 UTC (permalink / raw) To: gdb-patches; +Cc: Antoine Tremblay 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'\." -- 1.7.9.5 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-01-28 11:37 [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached Antoine Tremblay @ 2015-02-05 13:30 ` Antoine Tremblay 2015-02-05 13:37 ` Luis Machado 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-02-05 13:30 UTC (permalink / raw) To: gdb-patches 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'\." ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 13:30 ` Antoine Tremblay @ 2015-02-05 13:37 ` Luis Machado 2015-02-05 13:44 ` Luis Machado 0 siblings, 1 reply; 14+ messages in thread From: Luis Machado @ 2015-02-05 13:37 UTC (permalink / raw) To: Antoine Tremblay, gdb-patches On 02/05/2015 11:30 AM, Antoine Tremblay wrote: > 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. Wouldn't it make more sense to prevent GDB from sending any tracepoint packets that require a running inferior if there is none? I remember fixing this in a local tree but on GDB's side. I think it is remote.c:remote_trace_init and other related functions. What do you think? ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 13:37 ` Luis Machado @ 2015-02-05 13:44 ` Luis Machado 2015-02-05 13:53 ` Antoine Tremblay 0 siblings, 1 reply; 14+ messages in thread From: Luis Machado @ 2015-02-05 13:44 UTC (permalink / raw) To: Antoine Tremblay, gdb-patches On 02/05/2015 11:37 AM, Luis Machado wrote: > On 02/05/2015 11:30 AM, Antoine Tremblay wrote: >> 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. > > Wouldn't it make more sense to prevent GDB from sending any tracepoint > packets that require a running inferior if there is none? > > I remember fixing this in a local tree but on GDB's side. I think it is > remote.c:remote_trace_init and other related functions. > > What do you think? I've looked around and found the patch in a local tree of mine. It fixes more cases of tracepoint commands that require a running inferior. I could revive and submit it if it makes things easier. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 13:44 ` Luis Machado @ 2015-02-05 13:53 ` Antoine Tremblay 2015-02-05 14:04 ` Luis Machado 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-02-05 13:53 UTC (permalink / raw) To: lgustavo, gdb-patches Hi, I'm quite new to gdb, but in general I would argue that it's better to make a program resilient to wrong input then to sanitize the input, let's say someday something else then gdb would use gdbserver....? But I sure would like to take a look at your patch if you have it handy ? I'm not sure how to fix it on gdb's side yet... On 02/05/2015 08:44 AM, Luis Machado wrote: > On 02/05/2015 11:37 AM, Luis Machado wrote: >> On 02/05/2015 11:30 AM, Antoine Tremblay wrote: >>> 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. >> >> Wouldn't it make more sense to prevent GDB from sending any tracepoint >> packets that require a running inferior if there is none? >> >> I remember fixing this in a local tree but on GDB's side. I think it is >> remote.c:remote_trace_init and other related functions. >> >> What do you think? > > I've looked around and found the patch in a local tree of mine. It > fixes more cases of tracepoint commands that require a running inferior. > > I could revive and submit it if it makes things easier. > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 13:53 ` Antoine Tremblay @ 2015-02-05 14:04 ` Luis Machado 2015-02-05 14:06 ` Antoine Tremblay 0 siblings, 1 reply; 14+ messages in thread From: Luis Machado @ 2015-02-05 14:04 UTC (permalink / raw) To: Antoine Tremblay, gdb-patches On 02/05/2015 11:53 AM, Antoine Tremblay wrote: > Hi, > I'm quite new to gdb, but in general I would argue that it's better > to make a program resilient to wrong input then to sanitize the input, > let's say someday something else then gdb would use gdbserver....? It is certainly a valid concern. > > But I sure would like to take a look at your patch if you have it > handy ? I just need to extract it from the tree and do a bit of an update. We could probably merge both to robustify the tracepoint mechanism. > On 02/05/2015 08:44 AM, Luis Machado wrote: >> On 02/05/2015 11:37 AM, Luis Machado wrote: >>> On 02/05/2015 11:30 AM, Antoine Tremblay wrote: >>>> 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. >>> >>> Wouldn't it make more sense to prevent GDB from sending any tracepoint >>> packets that require a running inferior if there is none? >>> >>> I remember fixing this in a local tree but on GDB's side. I think it is >>> remote.c:remote_trace_init and other related functions. >>> >>> What do you think? >> >> I've looked around and found the patch in a local tree of mine. It >> fixes more cases of tracepoint commands that require a running inferior. >> >> I could revive and submit it if it makes things easier. >> > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 14:04 ` Luis Machado @ 2015-02-05 14:06 ` Antoine Tremblay 2015-02-05 17:36 ` Pedro Alves 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-02-05 14:06 UTC (permalink / raw) To: lgustavo, gdb-patches On 02/05/2015 09:04 AM, Luis Machado wrote: > On 02/05/2015 11:53 AM, Antoine Tremblay wrote: >> Hi, >> I'm quite new to gdb, but in general I would argue that it's better >> to make a program resilient to wrong input then to sanitize the input, >> let's say someday something else then gdb would use gdbserver....? > > It is certainly a valid concern. > >> >> But I sure would like to take a look at your patch if you have it >> handy ? > > I just need to extract it from the tree and do a bit of an update. We > could probably merge both to robustify the tracepoint mechanism. > Yes that's sounds a good idea :) Thanks! >> On 02/05/2015 08:44 AM, Luis Machado wrote: >>> On 02/05/2015 11:37 AM, Luis Machado wrote: >>>> On 02/05/2015 11:30 AM, Antoine Tremblay wrote: >>>>> 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. >>>> >>>> Wouldn't it make more sense to prevent GDB from sending any tracepoint >>>> packets that require a running inferior if there is none? >>>> >>>> I remember fixing this in a local tree but on GDB's side. I think >>>> it is >>>> remote.c:remote_trace_init and other related functions. >>>> >>>> What do you think? >>> >>> I've looked around and found the patch in a local tree of mine. It >>> fixes more cases of tracepoint commands that require a running >>> inferior. >>> >>> I could revive and submit it if it makes things easier. >>> >> > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 14:06 ` Antoine Tremblay @ 2015-02-05 17:36 ` Pedro Alves 2015-02-05 20:06 ` [PATCH v2] " Antoine Tremblay 0 siblings, 1 reply; 14+ messages in thread From: Pedro Alves @ 2015-02-05 17:36 UTC (permalink / raw) To: Antoine Tremblay, lgustavo, gdb-patches Agreed with both. :-) On the test, I think it could go under gdb.trace/, and not use any of gdbserver_start_extended and friends. That'd expose the use case to all targets that can do tracing. gdbserver's case would be covered by running the testsuite with the extended-remote board, which is now routinely run by the GDB's Buildbot (https://sourceware.org/ml/gdb-testers/2015-q1/). WDYT? Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 17:36 ` Pedro Alves @ 2015-02-05 20:06 ` Antoine Tremblay 2015-02-06 15:50 ` Pedro Alves 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-02-05 20:06 UTC (permalink / raw) To: gdb-patches; +Cc: palves, Antoine Tremblay 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.trace/no-attach-trace.c: New file. * gdb.trace/no-attach-trace.exp: New file. --- gdb/gdbserver/tracepoint.c | 7 +++++ gdb/testsuite/gdb.trace/Makefile.in | 4 +-- gdb/testsuite/gdb.trace/no-attach-trace.c | 25 ++++++++++++++++ gdb/testsuite/gdb.trace/no-attach-trace.exp | 43 +++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.trace/no-attach-trace.c create mode 100644 gdb/testsuite/gdb.trace/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.trace/Makefile.in b/gdb/testsuite/gdb.trace/Makefile.in index 2e23223..514beab 100644 --- a/gdb/testsuite/gdb.trace/Makefile.in +++ b/gdb/testsuite/gdb.trace/Makefile.in @@ -4,8 +4,8 @@ srcdir = @srcdir@ .PHONY: all clean mostlyclean distclean realclean PROGS = actions-changed ax backtrace deltrace disconnected-tracing \ - infotrace packetlen passc-dyn passcount report save-trace tfile \ - tfind tracecmd tsv unavailable while-dyn while-stepping + infotrace no-attach-trace packetlen passc-dyn passcount report \ + save-trace tfile tfind tracecmd tsv unavailable while-dyn while-stepping all info install-info dvi install uninstall installcheck check: @echo "Nothing to be done for $@..." diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.c b/gdb/testsuite/gdb.trace/no-attach-trace.c new file mode 100644 index 0000000..383e6d0 --- /dev/null +++ b/gdb/testsuite/gdb.trace/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.trace/no-attach-trace.exp b/gdb/testsuite/gdb.trace/no-attach-trace.exp new file mode 100644 index 0000000..2470347 --- /dev/null +++ b/gdb/testsuite/gdb.trace/no-attach-trace.exp @@ -0,0 +1,43 @@ +# 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 trace-support.exp + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 +} + +if { ![gdb_target_supports_trace] } then { + unsupported "Current target does not support trace" + return 1 + +} + +#clean test state so that we have no process attached +clean_restart $testfile + +gdb_test "trace main" "Tracepoint.*" +gdb_test "tstart" "Target returns error code '01'\." -- 1.7.9.5 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-05 20:06 ` [PATCH v2] " Antoine Tremblay @ 2015-02-06 15:50 ` Pedro Alves 2015-02-06 16:25 ` [PATCH v3] " Antoine Tremblay 0 siblings, 1 reply; 14+ messages in thread From: Pedro Alves @ 2015-02-06 15:50 UTC (permalink / raw) To: Antoine Tremblay, gdb-patches On 02/05/2015 08:06 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 Thanks! Pretty good. Just a few minor nits. Just the usual formatting details that are easy to miss the first time around. > gdb/ChangeLog: > PR gdb/15956 > * gdb/gdbserver/tracepoint.c (cmd_qtinit): Added check for > current_thread. gdbserver has it's own ChangeLog file, gdb/gdbserver/ChangeLog. Then adjust the entry to read "* gdbserver/tracepoint.c", as entries are relative to the ChangeLog file's path. Also, s/Added/Add/. > > gdb/testsuite/ChangeLog: > * gdb.trace/no-attach-trace.c: New file. > * gdb.trace/no-attach-trace.exp: New file. > --- > gdb/gdbserver/tracepoint.c | 7 +++++ > gdb/testsuite/gdb.trace/Makefile.in | 4 +-- > gdb/testsuite/gdb.trace/no-attach-trace.c | 25 ++++++++++++++++ > gdb/testsuite/gdb.trace/no-attach-trace.exp | 43 +++++++++++++++++++++++++++ > 4 files changed, 77 insertions(+), 2 deletions(-) > create mode 100644 gdb/testsuite/gdb.trace/no-attach-trace.c > create mode 100644 gdb/testsuite/gdb.trace/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 */ Period and double-space at end of all sentences: /* Can't do this command without a pid attached. */ > + if (current_thread == NULL) > + { > + write_enn(packet); Space before parens: 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.trace/Makefile.in b/gdb/testsuite/gdb.trace/Makefile.in > index 2e23223..514beab 100644 > --- a/gdb/testsuite/gdb.trace/Makefile.in > +++ b/gdb/testsuite/gdb.trace/Makefile.in > @@ -4,8 +4,8 @@ srcdir = @srcdir@ > .PHONY: all clean mostlyclean distclean realclean > > PROGS = actions-changed ax backtrace deltrace disconnected-tracing \ > - infotrace packetlen passc-dyn passcount report save-trace tfile \ > - tfind tracecmd tsv unavailable while-dyn while-stepping > + infotrace no-attach-trace packetlen passc-dyn passcount report \ > + save-trace tfile tfind tracecmd tsv unavailable while-dyn while-stepping > > all info install-info dvi install uninstall installcheck check: > @echo "Nothing to be done for $@..." > diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.c b/gdb/testsuite/gdb.trace/no-attach-trace.c > new file mode 100644 > index 0000000..383e6d0 > --- /dev/null > +++ b/gdb/testsuite/gdb.trace/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 */ Period, double-space. > + > +#include <unistd.h> > + > +int main () Break before function name, and "(void)": int main (void) > +{ > + return 0; > +} > diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.exp b/gdb/testsuite/gdb.trace/no-attach-trace.exp > new file mode 100644 > index 0000000..2470347 > --- /dev/null > +++ b/gdb/testsuite/gdb.trace/no-attach-trace.exp > @@ -0,0 +1,43 @@ > +# 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 trace-support.exp > + > +standard_testfile > + > +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { > + return -1 > +} > + > +if ![runto_main] { > + fail "Can't run to main to check for trace support" > + return -1 > +} > + > +if { ![gdb_target_supports_trace] } then { > + unsupported "Current target does not support trace" > + return 1 > + > +} > + > +#clean test state so that we have no process attached Space after #, Uppercase, period at end: # Clean test state so that we have no process attached. > +clean_restart $testfile > + > +gdb_test "trace main" "Tracepoint.*" Let's expand this a bit more, like in other tests: gdb_test "trace main" \ "Tracepoint \[0-9\] at.* file .*$srcfile, line.*" \ "set tracepoint on main" Basically, reasonably avoid false positives. > +gdb_test "tstart" "Target returns error code '01'\." Targets can send other error codes, so I think it'd be prudent to .* the '01' part, like: gdb_test "tstart" "Target returns error code.*\." Can you also after this run to main? That'd make sure that the target didn't crash or get wedged. If you decide to use runto_main, wrap it in with_test_prefix "after tstart" { ... } to make its potential FAIL test message distinguishable from the runto_main at the top. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-06 15:50 ` Pedro Alves @ 2015-02-06 16:25 ` Antoine Tremblay 2015-02-06 17:11 ` Pedro Alves 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-02-06 16:25 UTC (permalink / raw) To: Pedro Alves, gdb-patches On 02/06/2015 10:50 AM, Pedro Alves wrote: > On 02/05/2015 08:06 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 > Thanks! Pretty good. Just a few minor nits. Just the usual formatting > details that are easy to miss the first time around. np >> gdb/ChangeLog: >> PR gdb/15956 >> * gdb/gdbserver/tracepoint.c (cmd_qtinit): Added check for >> current_thread. > gdbserver has it's own ChangeLog file, gdb/gdbserver/ChangeLog. > Then adjust the entry to read "* gdbserver/tracepoint.c", as entries > are relative to the ChangeLog file's path. > > Also, s/Added/Add/. Done. >> gdb/testsuite/ChangeLog: >> * gdb.trace/no-attach-trace.c: New file. >> * gdb.trace/no-attach-trace.exp: New file. >> --- >> gdb/gdbserver/tracepoint.c | 7 +++++ >> gdb/testsuite/gdb.trace/Makefile.in | 4 +-- >> gdb/testsuite/gdb.trace/no-attach-trace.c | 25 ++++++++++++++++ >> gdb/testsuite/gdb.trace/no-attach-trace.exp | 43 +++++++++++++++++++++++++++ >> 4 files changed, 77 insertions(+), 2 deletions(-) >> create mode 100644 gdb/testsuite/gdb.trace/no-attach-trace.c >> create mode 100644 gdb/testsuite/gdb.trace/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 */ > Period and double-space at end of all sentences: > > /* Can't do this command without a pid attached. */ > Done >> + if (current_thread == NULL) >> + { >> + write_enn(packet); > Space before parens: > > write_enn (packet); Done > > >> + return; >> + } >> + >> /* Make sure we don't try to read from a trace frame. */ >> current_traceframe = -1; >> >> diff --git a/gdb/testsuite/gdb.trace/Makefile.in b/gdb/testsuite/gdb.trace/Makefile.in >> index 2e23223..514beab 100644 >> --- a/gdb/testsuite/gdb.trace/Makefile.in >> +++ b/gdb/testsuite/gdb.trace/Makefile.in >> @@ -4,8 +4,8 @@ srcdir = @srcdir@ >> .PHONY: all clean mostlyclean distclean realclean >> >> PROGS = actions-changed ax backtrace deltrace disconnected-tracing \ >> - infotrace packetlen passc-dyn passcount report save-trace tfile \ >> - tfind tracecmd tsv unavailable while-dyn while-stepping >> + infotrace no-attach-trace packetlen passc-dyn passcount report \ >> + save-trace tfile tfind tracecmd tsv unavailable while-dyn while-stepping >> >> all info install-info dvi install uninstall installcheck check: >> @echo "Nothing to be done for $@..." >> diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.c b/gdb/testsuite/gdb.trace/no-attach-trace.c >> new file mode 100644 >> index 0000000..383e6d0 >> --- /dev/null >> +++ b/gdb/testsuite/gdb.trace/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 */ > Period, double-space. Done >> + >> +#include <unistd.h> >> + >> +int main () > Break before function name, and "(void)": > > int > main (void) > Done >> +{ >> + return 0; >> +} >> diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.exp b/gdb/testsuite/gdb.trace/no-attach-trace.exp >> new file mode 100644 >> index 0000000..2470347 >> --- /dev/null >> +++ b/gdb/testsuite/gdb.trace/no-attach-trace.exp >> @@ -0,0 +1,43 @@ >> +# 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 trace-support.exp >> + >> +standard_testfile >> + >> +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { >> + return -1 >> +} >> + >> +if ![runto_main] { >> + fail "Can't run to main to check for trace support" >> + return -1 >> +} >> + >> +if { ![gdb_target_supports_trace] } then { >> + unsupported "Current target does not support trace" >> + return 1 >> + >> +} >> + >> +#clean test state so that we have no process attached > Space after #, Uppercase, period at end: > > # Clean test state so that we have no process attached. Done >> +clean_restart $testfile >> + >> +gdb_test "trace main" "Tracepoint.*" > Let's expand this a bit more, like in other tests: > > gdb_test "trace main" \ > "Tracepoint \[0-9\] at.* file .*$srcfile, line.*" \ > "set tracepoint on main" Ok , done. > Basically, reasonably avoid false positives. > >> +gdb_test "tstart" "Target returns error code '01'\." > Targets can send other error codes, so I think it'd be > prudent to .* the '01' part, like: > > gdb_test "tstart" "Target returns error code.*\." Ok, done. > Can you also after this run to main? That'd make sure that the > target didn't crash or get wedged. If you decide to use > runto_main, wrap it in > > with_test_prefix "after tstart" { > ... > } Ho ok nice one :) > > to make its potential FAIL test message distinguishable from > the runto_main at the top. > > Thanks, > Pedro Alves Thanks, Updated patch follows : Subject: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no inferior process attached 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/gdbserver/ChangeLog: PR breakpoints/15956 * tracepoint.c (cmd_qtinit): Add check for current_thread. gdb/testsuite/ChangeLog: * gdb.trace/no-attach-trace.c: New file. * gdb.trace/no-attach-trace.exp: New file. --- gdb/gdbserver/tracepoint.c | 7 ++++ gdb/testsuite/gdb.trace/Makefile.in | 4 +- gdb/testsuite/gdb.trace/no-attach-trace.c | 26 +++++++++++++ gdb/testsuite/gdb.trace/no-attach-trace.exp | 53 +++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.trace/no-attach-trace.c create mode 100644 gdb/testsuite/gdb.trace/no-attach-trace.exp diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c index 82d6ce5..2382a11 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.trace/Makefile.in b/gdb/testsuite/gdb.trace/Makefile.in index 2e23223..514beab 100644 --- a/gdb/testsuite/gdb.trace/Makefile.in +++ b/gdb/testsuite/gdb.trace/Makefile.in @@ -4,8 +4,8 @@ srcdir = @srcdir@ .PHONY: all clean mostlyclean distclean realclean PROGS = actions-changed ax backtrace deltrace disconnected-tracing \ - infotrace packetlen passc-dyn passcount report save-trace tfile \ - tfind tracecmd tsv unavailable while-dyn while-stepping + infotrace no-attach-trace packetlen passc-dyn passcount report \ + save-trace tfile tfind tracecmd tsv unavailable while-dyn while-stepping all info install-info dvi install uninstall installcheck check: @echo "Nothing to be done for $@..." diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.c b/gdb/testsuite/gdb.trace/no-attach-trace.c new file mode 100644 index 0000000..9b4ada8 --- /dev/null +++ b/gdb/testsuite/gdb.trace/no-attach-trace.c @@ -0,0 +1,26 @@ +/* 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 (void) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.trace/no-attach-trace.exp b/gdb/testsuite/gdb.trace/no-attach-trace.exp new file mode 100644 index 0000000..96135cb --- /dev/null +++ b/gdb/testsuite/gdb.trace/no-attach-trace.exp @@ -0,0 +1,53 @@ +# 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 trace-support.exp + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 +} + +if { ![gdb_target_supports_trace] } then { + unsupported "Current target does not support trace" + return 1 + +} + +# Clean test state so that we have no process attached. +clean_restart $testfile + +gdb_test "trace main" \ + "Tracepoint \[0-9\] at.* file .*$srcfile, line.*" \ + "set tracepoint on main" + +gdb_test "tstart" "Target returns error code.*\." + +with_test_prefix "after tstart" { + if ![runto_main] { + fail "Can't run to main, target may have died unexpectedly" + return -1 + } +} -- 1.7.9.5 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-06 16:25 ` [PATCH v3] " Antoine Tremblay @ 2015-02-06 17:11 ` Pedro Alves 2015-02-06 17:36 ` Antoine Tremblay 0 siblings, 1 reply; 14+ messages in thread From: Pedro Alves @ 2015-02-06 17:11 UTC (permalink / raw) To: Antoine Tremblay, gdb-patches On 02/06/2015 04:25 PM, Antoine Tremblay wrote: > Subject: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no > inferior This is OK. Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-06 17:11 ` Pedro Alves @ 2015-02-06 17:36 ` Antoine Tremblay 2015-02-10 16:46 ` Pedro Alves 0 siblings, 1 reply; 14+ messages in thread From: Antoine Tremblay @ 2015-02-06 17:36 UTC (permalink / raw) To: Pedro Alves, gdb-patches On 02/06/2015 12:11 PM, Pedro Alves wrote: > On 02/06/2015 04:25 PM, Antoine Tremblay wrote: > >> Subject: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no >> inferior > This is OK. > > Thanks, > Pedro Alves Good :) Could you help me to get an write access account so I can push it ? I'm not quite sure how to proceed.. Regards, Antoine Tremblay ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3] gdbserver: Fix crash when QTinit is handled with no inferior process attached 2015-02-06 17:36 ` Antoine Tremblay @ 2015-02-10 16:46 ` Pedro Alves 0 siblings, 0 replies; 14+ messages in thread From: Pedro Alves @ 2015-02-10 16:46 UTC (permalink / raw) To: Antoine Tremblay, gdb-patches Hi Antoine, On 02/06/2015 05:36 PM, Antoine Tremblay wrote: > Could you help me to get an write access account so I can push it ? > I'm not quite sure how to proceed.. Follow the instruction here: https://sourceware.org/cgi-bin/pdw/ps_form.cgi List me as sponsor. Once you have access, add yourself to the "Write After Approval" list in the gdb/MAINTAINERS file, push that patch in (no need to wait for approval), and post it to the list. Welcome. :-) Thanks, Pedro Alves ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2015-02-10 16:46 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-01-28 11:37 [PATCH] gdbserver: Fix crash when QTinit is handled with no inferior process attached Antoine Tremblay 2015-02-05 13:30 ` Antoine Tremblay 2015-02-05 13:37 ` Luis Machado 2015-02-05 13:44 ` Luis Machado 2015-02-05 13:53 ` Antoine Tremblay 2015-02-05 14:04 ` Luis Machado 2015-02-05 14:06 ` Antoine Tremblay 2015-02-05 17:36 ` Pedro Alves 2015-02-05 20:06 ` [PATCH v2] " Antoine Tremblay 2015-02-06 15:50 ` Pedro Alves 2015-02-06 16:25 ` [PATCH v3] " Antoine Tremblay 2015-02-06 17:11 ` Pedro Alves 2015-02-06 17:36 ` Antoine Tremblay 2015-02-10 16:46 ` Pedro Alves
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).