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 10:24:28 +0000 (11:24 +0100)
commit46a3515b49ce30315e2b621525b29cd8263aed15
tree9fa2e3ccedaf508636a36fad6a98733c202d55a4
parent9a4db61fd538c0a0185367661a0ddacffff5d57a
btrace: diagnose "record btrace pt" without libipt

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.

testsuite/
* lib/gdb.exp (skip_btrace_pt_tests): Check for a "GDB does not
support" error.
gdb/ChangeLog
gdb/btrace.c
gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp