This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] btrace: diagnose "record btrace pt" without libipt


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=46a3515b49ce30315e2b621525b29cd8263aed15

commit 46a3515b49ce30315e2b621525b29cd8263aed15
Author: Markus Metzger <markus.t.metzger@intel.com>
Date:   Thu Nov 19 14:33:41 2015 +0100

    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.

Diff:
---
 gdb/ChangeLog             | 5 +++++
 gdb/btrace.c              | 5 +++++
 gdb/testsuite/ChangeLog   | 6 ++++++
 gdb/testsuite/lib/gdb.exp | 3 +++
 4 files changed, 19 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index fbc56ac..9c8b9e7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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-11-24  Pedro Alves  <palves@redhat.com>
 
 	* NEWS: Mention that a few "info" commands now list the
diff --git a/gdb/btrace.c b/gdb/btrace.c
index 2bf7177..35431cb 100644
--- a/gdb/btrace.c
+++ b/gdb/btrace.c
@@ -1035,6 +1035,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."));
 
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index fd7c1f4..9f6d7e6 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-26  Markus Metzger  <markus.t.metzger@intel.com>
+
+	PR 19297
+	* lib/gdb.exp (skip_btrace_pt_tests): Check for a "GDB does not
+	support" error.
+
 2015-11-24  Pedro Alves  <palves@redhat.com>
 
 	PR 17539
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index a420181..90e8644 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -2826,6 +2826,9 @@ gdb_caching_proc skip_btrace_pt_tests {
         -re "Could not enable branch tracing.*\r\n$gdb_prompt $" {
             set skip_btrace_tests 1
         }
+        -re "GDB does not support.*\r\n$gdb_prompt $" {
+            set skip_btrace_tests 1
+        }
         -re "^record btrace pt\r\n$gdb_prompt $" {
             set skip_btrace_tests 0
         }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]