aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver
diff options
context:
space:
mode:
authorAntoine Tremblay <antoine.tremblay@ericsson.com>2015-01-26 13:08:53 -0500
committerAntoine Tremblay <antoine.tremblay@ericsson.com>2015-02-10 13:49:41 -0500
commitb05ec7a53f8a3b0cbcb2b42772ca0e70a319d2ab (patch)
tree59d02c32bbdaa17f002443a254268ac7e987a580 /gdb/gdbserver
parent3ac240d438dceeaa5bd8ec65dafc4619b9295b09 (diff)
downloadgdb-b05ec7a53f8a3b0cbcb2b42772ca0e70a319d2ab.zip
gdb-b05ec7a53f8a3b0cbcb2b42772ca0e70a319d2ab.tar.gz
gdb-b05ec7a53f8a3b0cbcb2b42772ca0e70a319d2ab.tar.bz2
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.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r--gdb/gdbserver/ChangeLog5
-rw-r--r--gdb/gdbserver/tracepoint.c7
2 files changed, 12 insertions, 0 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 25f3adf..4badd9e 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,8 @@
+2015-02-10 Antoine Tremblay <antoine.tremblay@ericsson.com>
+
+ PR breakpoints/15956
+ * tracepoint.c (cmd_qtinit): Add check for current_thread.
+
2015-02-09 Markus Metzger <markus.t.metzger@intel.com>
* linux-low.c (linux_low_btrace_conf): Print size.
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;