gdb, btrace: improve error messages
authorMarkus Metzger <markus.t.metzger@intel.com>
Mon, 31 Jan 2022 06:24:54 +0000 (07:24 +0100)
committerMarkus Metzger <markus.t.metzger@intel.com>
Tue, 1 Feb 2022 16:44:38 +0000 (17:44 +0100)
When trying to use 'record btrace' on a system that does not support it,
the error message isn't as clear as it could be.  See
https://sourceware.org/pipermail/gdb/2022-January/049870.html.

Improve the error message in a few cases.

Reported-by: Simon Sobisch <simonsobisch@gnu.org>
gdb/nat/linux-btrace.c

index d8880756aade3523535a1686e3f82c34abbc59cc..b0d6dcd7cf16c5e3cf0b7b720a4191cbc006abe5 100644 (file)
@@ -427,9 +427,11 @@ diagnose_perf_event_open_fail ()
     case EACCES:
       {
        static const char filename[] = "/proc/sys/kernel/perf_event_paranoid";
+       errno = 0;
        gdb_file_up file = gdb_fopen_cloexec (filename, "r");
        if (file.get () == nullptr)
-         break;
+         error (_("Failed to open %s (%s).  Your system does not support "
+                  "process recording."), filename, safe_strerror (errno));
 
        int level, found = fscanf (file.get (), "%d", &level);
        if (found == 1 && level > 2)
@@ -571,7 +573,22 @@ perf_event_pt_event_type ()
   errno = 0;
   gdb_file_up file = gdb_fopen_cloexec (filename, "r");
   if (file.get () == nullptr)
-    error (_("Failed to open %s: %s."), filename, safe_strerror (errno));
+    switch (errno)
+      {
+      case EACCES:
+      case EFAULT:
+      case EPERM:
+       error (_("Failed to open %s (%s).  You do not have permission "
+                "to use Intel PT."), filename, safe_strerror (errno));
+
+      case ENOTDIR:
+      case ENOENT:
+       error (_("Failed to open %s (%s).  Your system does not support "
+                "Intel PT."), filename, safe_strerror (errno));
+
+      default:
+       error (_("Failed to open %s: %s."), filename, safe_strerror (errno));
+      }
 
   int type, found = fscanf (file.get (), "%d", &type);
   if (found != 1)