Jakub Filak 2164d6
From 1fc0e782d56af4df3f21560929176a09103923ad Mon Sep 17 00:00:00 2001
Jakub Filak 2164d6
From: Martin Milata <mmilata@redhat.com>
Jakub Filak 2164d6
Date: Tue, 4 Nov 2014 16:51:24 +0100
Jakub Filak 2164d6
Subject: [PATCH] koops: improve 'reason' text for page faults
Jakub Filak 2164d6
Jakub Filak 2164d6
Current : 'general protection fault: 4000 [#1] SMP'
Jakub Filak 2164d6
Improved: 'general protection fault in i915_gem_do_execbuffer'
Jakub Filak 2164d6
Jakub Filak 2164d6
Resolves rhbz#998887.
Jakub Filak 2164d6
Jakub Filak 2164d6
Signed-off-by: Martin Milata <mmilata@redhat.com>
Jakub Filak 2164d6
---
Jakub Filak 2164d6
 src/plugins/oops-utils.c | 22 ++++++++++++++++++++--
Jakub Filak 2164d6
 1 file changed, 20 insertions(+), 2 deletions(-)
Jakub Filak 2164d6
Jakub Filak 2164d6
diff --git a/src/plugins/oops-utils.c b/src/plugins/oops-utils.c
Jakub Filak 2164d6
index 9e2355e..ea6c639 100644
Jakub Filak 2164d6
--- a/src/plugins/oops-utils.c
Jakub Filak 2164d6
+++ b/src/plugins/oops-utils.c
Jakub Filak 2164d6
@@ -12,6 +12,8 @@
Jakub Filak 2164d6
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Jakub Filak 2164d6
  * GNU General Public License for more details.
Jakub Filak 2164d6
  */
Jakub Filak 2164d6
+#include <satyr/stacktrace.h>
Jakub Filak 2164d6
+
Jakub Filak 2164d6
 #include "oops-utils.h"
Jakub Filak 2164d6
 #include "libabrt.h"
Jakub Filak 2164d6
 
Jakub Filak 2164d6
@@ -242,8 +244,24 @@ void abrt_oops_save_data_in_dump_dir(struct dump_dir *dd, char *oops, const char
Jakub Filak 2164d6
 
Jakub Filak 2164d6
     // TODO: add "Kernel oops: " prefix, so that all oopses have recognizable FILENAME_REASON?
Jakub Filak 2164d6
     // kernel oops 1st line may look quite puzzling otherwise...
Jakub Filak 2164d6
-    strchrnul(second_line, '\n')[0] = '\0';
Jakub Filak 2164d6
-    dd_save_text(dd, FILENAME_REASON, second_line);
Jakub Filak 2164d6
+    char *reason_pretty = NULL;
Jakub Filak 2164d6
+    char *error = NULL;
Jakub Filak 2164d6
+    struct sr_stacktrace *trace = sr_stacktrace_parse(SR_REPORT_KERNELOOPS, second_line, &error);
Jakub Filak 2164d6
+    if (trace)
Jakub Filak 2164d6
+    {
Jakub Filak 2164d6
+        reason_pretty = sr_stacktrace_get_reason(trace);
Jakub Filak 2164d6
+        sr_stacktrace_free(trace);
Jakub Filak 2164d6
+    }
Jakub Filak 2164d6
+    else
Jakub Filak 2164d6
+        free(error);
Jakub Filak 2164d6
+
Jakub Filak 2164d6
+    if (reason_pretty)
Jakub Filak 2164d6
+    {
Jakub Filak 2164d6
+        dd_save_text(dd, FILENAME_REASON, reason_pretty);
Jakub Filak 2164d6
+        free(reason_pretty);
Jakub Filak 2164d6
+    }
Jakub Filak 2164d6
+    else
Jakub Filak 2164d6
+        dd_save_text(dd, FILENAME_REASON, second_line);
Jakub Filak 2164d6
 }
Jakub Filak 2164d6
 
Jakub Filak 2164d6
 int abrt_oops_signaled_sleep(int seconds)
Jakub Filak 2164d6
-- 
Jakub Filak 2164d6
2.1.0
Jakub Filak 2164d6