]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
btrace: diagnose "record btrace pt" without libipt
authorMarkus Metzger <markus.t.metzger@intel.com>
Thu, 19 Nov 2015 13:33:41 +0000 (14:33 +0100)
committerMarkus Metzger <markus.t.metzger@intel.com>
Thu, 26 Nov 2015 12:16:13 +0000 (13:16 +0100)
If GDB has been configured without libipt support, i.e. HAVE_LIBIPT is
undefined, and is running on a system that supports Intel(R) Processor Trace,
GDB will run into an internal error when trying to decode the trace.

    (gdb) record btrace
    (gdb) s
    usage (name=0x7fffffffe954 "fib-64")
        at src/fib.c:12
    12          fprintf(stderr, "usage: %s <num>\n", name);
    (gdb) info record
    Active record target: record-btrace
    Recording format: Intel(R) Processor Trace.
    Buffer size: 16kB.
    gdb/btrace.c:971: internal-error: Unexpected branch trace format.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n)

This requires a system with Linux kernel 4.1 or later running on a 5th
Generation Intel Core processor or later.

The issue is documented as PR 19297.

When trying to enable branch tracing, in addition to checking the target
support for the requested branch tracing format, also check whether GDB
supports. it.

gdb/
* btrace.c (btrace_enable): Check whether HAVE_LIBIPT is defined.

gdb/ChangeLog
gdb/btrace.c

index 94bcf9f30daafaa58dfb489574000acea315d767..f2b395f10e0ff729baf1eb0aef8c99d731d11334 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-26  Markus Metzger  <markus.t.metzger@intel.com>
+
+       PR 19297
+       * btrace.c (btrace_enable): Check whether HAVE_LIBIPT is defined.
+
 2015-09-14  Peter Bergner  <bergner@vnet.ibm.com>
 
        PR gdb/18957
index 1618e55f6646d6ff1f7d7c6f2ace7fe6375a36a9..ada0eb7b2a33d2ab0c0db6c995946df22d8b4fea 100644 (file)
@@ -1020,6 +1020,11 @@ btrace_enable (struct thread_info *tp, const struct btrace_config *conf)
   if (tp->btrace.target != NULL)
     return;
 
+#if !defined (HAVE_LIBIPT)
+  if (conf->format == BTRACE_FORMAT_PT)
+    error (_("GDB does not support Intel(R) Processor Trace."));
+#endif /* !defined (HAVE_LIBIPT) */
+
   if (!target_supports_btrace (conf->format))
     error (_("Target does not support branch tracing."));