Blob Blame History Raw
From 1fc0e782d56af4df3f21560929176a09103923ad Mon Sep 17 00:00:00 2001
From: Martin Milata <mmilata@redhat.com>
Date: Tue, 4 Nov 2014 16:51:24 +0100
Subject: [PATCH] koops: improve 'reason' text for page faults

Current : 'general protection fault: 4000 [#1] SMP'
Improved: 'general protection fault in i915_gem_do_execbuffer'

Resolves rhbz#998887.

Signed-off-by: Martin Milata <mmilata@redhat.com>
---
 src/plugins/oops-utils.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/plugins/oops-utils.c b/src/plugins/oops-utils.c
index 9e2355e..ea6c639 100644
--- a/src/plugins/oops-utils.c
+++ b/src/plugins/oops-utils.c
@@ -12,6 +12,8 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  */
+#include <satyr/stacktrace.h>
+
 #include "oops-utils.h"
 #include "libabrt.h"
 
@@ -242,8 +244,24 @@ void abrt_oops_save_data_in_dump_dir(struct dump_dir *dd, char *oops, const char
 
     // TODO: add "Kernel oops: " prefix, so that all oopses have recognizable FILENAME_REASON?
     // kernel oops 1st line may look quite puzzling otherwise...
-    strchrnul(second_line, '\n')[0] = '\0';
-    dd_save_text(dd, FILENAME_REASON, second_line);
+    char *reason_pretty = NULL;
+    char *error = NULL;
+    struct sr_stacktrace *trace = sr_stacktrace_parse(SR_REPORT_KERNELOOPS, second_line, &error);
+    if (trace)
+    {
+        reason_pretty = sr_stacktrace_get_reason(trace);
+        sr_stacktrace_free(trace);
+    }
+    else
+        free(error);
+
+    if (reason_pretty)
+    {
+        dd_save_text(dd, FILENAME_REASON, reason_pretty);
+        free(reason_pretty);
+    }
+    else
+        dd_save_text(dd, FILENAME_REASON, second_line);
 }
 
 int abrt_oops_signaled_sleep(int seconds)
-- 
2.1.0