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
+    }
+}
