New upstream version 0.16
Add support for unwinding from core dump hook Add support for Ruby uReports Bugfixes
This commit is contained in:
parent
35b0960c93
commit
ec9699b776
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@
|
||||
/satyr-0.13.tar.xz
|
||||
/satyr-0.14.tar.xz
|
||||
/satyr-0.15.tar.xz
|
||||
/satyr-0.16.tar.xz
|
||||
|
@ -1,184 +0,0 @@
|
||||
From 9bdddf116bad99e8c2bb3a42a1b39afcc543d462 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Milata <mmilata@redhat.com>
|
||||
Date: Fri, 24 Oct 2014 15:04:06 +0200
|
||||
Subject: [PATCH] Add test for xorg function normalization
|
||||
|
||||
Related to #191.
|
||||
|
||||
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
||||
---
|
||||
tests/gdb_stacktraces/rhbz-955617 | 132 ++++++++++++++++++++++++++++++++++++++
|
||||
tests/python/gdb.py | 11 ++++
|
||||
2 files changed, 143 insertions(+)
|
||||
create mode 100644 tests/gdb_stacktraces/rhbz-955617
|
||||
|
||||
diff --git a/tests/gdb_stacktraces/rhbz-955617 b/tests/gdb_stacktraces/rhbz-955617
|
||||
new file mode 100644
|
||||
index 0000000..5abeb9a
|
||||
--- /dev/null
|
||||
+++ b/tests/gdb_stacktraces/rhbz-955617
|
||||
@@ -0,0 +1,132 @@
|
||||
+[New LWP 1073]
|
||||
+[Thread debugging using libthread_db enabled]
|
||||
+Using host libthread_db library "/lib/libthread_db.so.1".
|
||||
+Core was generated by `/usr/bin/Xorg :0 -background none -verbose -auth /run/gdm/auth-for-gdm-zpSdgj/d'.
|
||||
+Program terminated with signal 6, Aborted.
|
||||
+#0 0xb7792424 in __kernel_vsyscall ()
|
||||
+
|
||||
+Thread 1 (Thread 0xb774d880 (LWP 1073)):
|
||||
+#0 0xb7792424 in __kernel_vsyscall ()
|
||||
+No symbol table info available.
|
||||
+#1 0x4be11756 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
|
||||
+ resultvar = <optimized out>
|
||||
+ resultvar = <optimized out>
|
||||
+ pid = 1274662912
|
||||
+ selftid = 1073
|
||||
+#2 0x4be12f93 in __GI_abort () at abort.c:90
|
||||
+ save_stage = 2
|
||||
+ act = {__sigaction_handler = {sa_handler = 0xbfaacf30, sa_sigaction = 0xbfaacf30}, sa_mask = {__val = {136754592, 1274662912, 171515904, 0, 0, 0, 0, 1272819668, 1272822008, 134533768, 1, 1272747940, 1272822448, 3077894400, 1, 1, 0, 0, 134573327, 136717752, 0, 0, 0, 1272877292, 0, 0, 0, 136716288, 1, 136760368, 136760272, 1272774256}}, sa_flags = 136754592, sa_restorer = 0x4be12e58 <__GI_abort+8>}
|
||||
+ sigs = {__val = {32, 0 <repeats 31 times>}}
|
||||
+#3 0x080b8daa in OsAbort () at utils.c:1299
|
||||
+No locals.
|
||||
+#4 0x080d2147 in ddxGiveUp (error=error@entry=EXIT_ERR_ABORT) at xf86Init.c:1075
|
||||
+ i = <optimized out>
|
||||
+#5 0x080d21eb in AbortDDX (error=error@entry=EXIT_ERR_ABORT) at xf86Init.c:1119
|
||||
+ i = <optimized out>
|
||||
+#6 0x080b4662 in AbortServer () at log.c:670
|
||||
+No locals.
|
||||
+#7 0x080b4ccf in FatalError (f=f@entry=0x81f6d38 "Caught signal %d (%s). Server aborting\n") at log.c:811
|
||||
+ args = 0xbfaad064 "\v"
|
||||
+ args2 = 0xbfaad064 "\v"
|
||||
+ beenhere = 1
|
||||
+#8 0x080b6136 in OsSigHandler (signo=11, sip=0xbfaad08c, unused=0xbfaad10c) at osinit.c:147
|
||||
+ unused = 0xbfaad10c
|
||||
+ sip = 0xbfaad08c
|
||||
+ signo = 11
|
||||
+#9 <signal handler called>
|
||||
+No symbol table info available.
|
||||
+#10 0x08117ca2 in xf86CursorSetCursor (pDev=pDev@entry=0x8f20e48, pScreen=0x8e63948, pCurs=0x9117410, x=747, y=515) at xf86Cursor.c:333
|
||||
+ infoPtr = 0x8e7ecc8
|
||||
+#11 0x08117eeb in xf86CursorEnableDisableFBAccess (pScrn=0x8e30a68, enable=1) at xf86Cursor.c:233
|
||||
+ pDev = 0x8f20e48
|
||||
+ pScreen = <optimized out>
|
||||
+#12 0xb6f97b98 in ?? () from /usr/lib/xorg/modules/drivers/nvidia_drv.so
|
||||
+No symbol table info available.
|
||||
+Backtrace stopped: previous frame inner to this frame (corrupt stack?)
|
||||
+From To Syms Read Shared Object Library
|
||||
+0xb77628f0 0xb776c7f4 Yes /lib/libudev.so.1
|
||||
+0x4c025940 0x4c028e4c Yes /lib/librt.so.1
|
||||
+0x4c09daf0 0x4c0b1074 Yes /lib/libselinux.so.1
|
||||
+0x4112ef80 0x41224d64 Yes /lib/libcrypto.so.10
|
||||
+0x4bfbfad0 0x4bfc09bc Yes /lib/libdl.so.2
|
||||
+0x4c11cf20 0x4c1232d4 Yes /lib/libunwind.so.8
|
||||
+0x4c22e980 0x4c233cf4 Yes /lib/libpciaccess.so.0
|
||||
+0x4bfa76b0 0x4bfb2d70 Yes /lib/libpthread.so.0
|
||||
+0xb7754670 0xb775a454 Yes /lib/libdrm.so.2
|
||||
+0x414c3db0 0x41542214 Yes /lib/libpixman-1.so.0
|
||||
+0x4c0ecdc0 0x4c10d794 Yes /lib/libXfont.so.1
|
||||
+0x4c37aa60 0x4c37b854 Yes /lib/libXau.so.6
|
||||
+0x417ddea0 0x417dfa74 Yes /lib/libXdmcp.so.6
|
||||
+0x41adad60 0x41ae0974 Yes /lib/libaudit.so.1
|
||||
+0x4bfca560 0x4bff51e8 Yes /lib/libm.so.6
|
||||
+0x4bdfa2d0 0x4bf3e6dc Yes /lib/libc.so.6
|
||||
+0x4c0c00c0 0x4c0d62e4 Yes /lib/libgcc_s.so.1
|
||||
+0x4bdbb850 0x4bdd409c Yes /lib/ld-linux.so.2
|
||||
+0x4c02ff20 0x4c07be24 Yes /lib/libpcre.so.1
|
||||
+0x4c00c860 0x4c019704 Yes /lib/libz.so.1
|
||||
+0x4c7237f0 0x4c790444 Yes /lib/libfreetype.so.6
|
||||
+0x4c0ded70 0x4c0e0f34 Yes /lib/libfontenc.so.1
|
||||
+0xb7789e80 0xb778ad40 Yes /usr/lib/xorg/modules/libglamoregl.so
|
||||
+0x412aed20 0x412c1794 Yes /lib/libEGL.so.1
|
||||
+0xb76b9490 0xb76df8d4 Yes /lib/libglamor.so.0
|
||||
+0x4ca2c480 0x4ca8c378 Yes (*) /usr/lib/nvidia/libGL.so.1
|
||||
+0x4c9e3430 0x4c9e3584 Yes /lib/libX11-xcb.so.1
|
||||
+0x412a32e0 0x412a48b4 Yes /lib/libxcb-dri2.so.0
|
||||
+0x414b6cb0 0x414b9260 Yes /lib/libxcb-xfixes.so.0
|
||||
+0x4155da20 0x41561620 Yes /lib/libxcb-render.so.0
|
||||
+0x4fff5b80 0x4fff6914 Yes /lib/libxcb-shape.so.0
|
||||
+0x4c4c9f70 0x4c4d9ed4 Yes /lib/libxcb.so.1
|
||||
+0x410eb650 0x410ef134 Yes /lib/libwayland-client.so.0
|
||||
+0x4167f5f0 0x41686004 Yes /lib/libwayland-server.so.0
|
||||
+0x41674220 0x41675b64 Yes /lib/libgbm.so.1
|
||||
+0x416a06d0 0x416b1c14 Yes /lib/libglapi.so.0
|
||||
+0x4c39b430 0x4c427994 Yes /lib/libX11.so.6
|
||||
+0x4cad9df0 0x4cadb4c3 Yes (*) /usr/lib/nvidia/tls/libnvidia-tls.so.313.30
|
||||
+0x4d1c46c0 0x4e34b2c0 Yes (*) /usr/lib/nvidia/libnvidia-glcore.so.313.30
|
||||
+0x4c658880 0x4c662c84 Yes /lib/libXext.so.6
|
||||
+0xb7781fc0 0xb7785664 Yes /lib/libffi.so.6
|
||||
+0xb72609b0 0xb75a7a84 Yes (*) /usr/lib/nvidia/xorg/libglx.so
|
||||
+0xb6a00020 0xb6fefbf0 Yes (*) /usr/lib/xorg/modules/drivers/nvidia_drv.so
|
||||
+0xb69b3da0 0xb69d9b7c Yes /usr/lib/xorg/modules/libwfb.so
|
||||
+0xb685de00 0xb6865764 Yes /usr/lib/xorg/modules/input/evdev_drv.so
|
||||
+0xb6837bf0 0xb683a6b4 Yes /lib/libmtdev.so.1
|
||||
+0xb684c990 0xb6857604 Yes /usr/lib/xorg/modules/input/synaptics_drv.so
|
||||
+0xb683fa40 0xb6846e1c Yes /lib/libnss_files.so.2
|
||||
+(*): Shared library is missing debugging information.
|
||||
+$1 = 0x0
|
||||
+No symbol "__glib_assert_msg" in current context.
|
||||
+eax 0x0 0
|
||||
+ecx 0x431 1073
|
||||
+edx 0x6 6
|
||||
+ebx 0x431 1073
|
||||
+esp 0xbfaace74 0xbfaace74
|
||||
+ebp 0x826cbd0 0x826cbd0 <xf86NumScreens>
|
||||
+esi 0x1 1
|
||||
+edi 0x4bf9d000 1274662912
|
||||
+eip 0xb7792424 0xb7792424 <__kernel_vsyscall+16>
|
||||
+eflags 0x3202 [ IF #12 #13 ]
|
||||
+cs 0x73 115
|
||||
+ss 0x7b 123
|
||||
+ds 0x7b 123
|
||||
+es 0x7b 123
|
||||
+fs 0x0 0
|
||||
+gs 0x33 51
|
||||
+Dump of assembler code for function __kernel_vsyscall:
|
||||
+ 0xb7792414 <+0>: push %ecx
|
||||
+ 0xb7792415 <+1>: push %edx
|
||||
+ 0xb7792416 <+2>: push %ebp
|
||||
+ 0xb7792417 <+3>: mov %esp,%ebp
|
||||
+ 0xb7792419 <+5>: sysenter
|
||||
+ 0xb779241b <+7>: nop
|
||||
+ 0xb779241c <+8>: nop
|
||||
+ 0xb779241d <+9>: nop
|
||||
+ 0xb779241e <+10>: nop
|
||||
+ 0xb779241f <+11>: nop
|
||||
+ 0xb7792420 <+12>: nop
|
||||
+ 0xb7792421 <+13>: nop
|
||||
+ 0xb7792422 <+14>: int $0x80
|
||||
+=> 0xb7792424 <+16>: pop %ebp
|
||||
+ 0xb7792425 <+17>: pop %edx
|
||||
+ 0xb7792426 <+18>: pop %ecx
|
||||
+ 0xb7792427 <+19>: ret
|
||||
+End of assembler dump.
|
||||
diff --git a/tests/python/gdb.py b/tests/python/gdb.py
|
||||
index 3b88af7..8871b7c 100755
|
||||
--- a/tests/python/gdb.py
|
||||
+++ b/tests/python/gdb.py
|
||||
@@ -14,6 +14,12 @@ expected_short_text = '''Thread no. 1 (5 frames)
|
||||
#4 _gtk_marshal_BOOLEAN__BOXED at gtkmarshalers.c:84
|
||||
'''
|
||||
|
||||
+expected_short_text_955617 = '''Thread no. 1 (3 frames)
|
||||
+ #10 xf86CursorSetCursor at xf86Cursor.c:333
|
||||
+ #11 xf86CursorEnableDisableFBAccess at xf86Cursor.c:233
|
||||
+ #12 ?? at /usr/lib/xorg/modules/drivers/nvidia_drv.so
|
||||
+'''
|
||||
+
|
||||
class TestGdbStacktrace(BindingsTestCase):
|
||||
def setUp(self):
|
||||
self.trace = satyr.GdbStacktrace(contents)
|
||||
@@ -61,6 +67,11 @@ class TestGdbStacktrace(BindingsTestCase):
|
||||
def test_hash(self):
|
||||
self.assertHashable(self.trace)
|
||||
|
||||
+ def test_short_text_normalization(self):
|
||||
+ contents = load_input_contents('../gdb_stacktraces/rhbz-955617')
|
||||
+ trace = satyr.GdbStacktrace(contents)
|
||||
+ self.assertEqual(trace.to_short_text(5), expected_short_text_955617)
|
||||
+
|
||||
class TestGdbThread(BindingsTestCase):
|
||||
def setUp(self):
|
||||
self.thread = satyr.GdbStacktrace(contents).threads[0]
|
||||
--
|
||||
2.1.0
|
||||
|
@ -1,84 +0,0 @@
|
||||
From 9b0d41184821bc229a92d3734200c34a31603783 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Milata <mmilata@redhat.com>
|
||||
Date: Wed, 27 Aug 2014 13:55:50 +0200
|
||||
Subject: [PATCH] unwind: Append threads/frames in O(1)
|
||||
|
||||
Related to #179.
|
||||
|
||||
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
||||
---
|
||||
lib/core_unwind_elfutils.c | 19 ++++++++++---------
|
||||
1 file changed, 10 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/lib/core_unwind_elfutils.c b/lib/core_unwind_elfutils.c
|
||||
index 43d66be..78470bc 100644
|
||||
--- a/lib/core_unwind_elfutils.c
|
||||
+++ b/lib/core_unwind_elfutils.c
|
||||
@@ -33,14 +33,14 @@
|
||||
|
||||
struct frame_callback_arg
|
||||
{
|
||||
- struct sr_core_thread *thread;
|
||||
+ struct sr_core_frame **frames_tail;
|
||||
char *error_msg;
|
||||
unsigned nframes;
|
||||
};
|
||||
|
||||
struct thread_callback_arg
|
||||
{
|
||||
- struct sr_core_stacktrace *stacktrace;
|
||||
+ struct sr_core_thread **threads_tail;
|
||||
char *error_msg;
|
||||
};
|
||||
|
||||
@@ -70,8 +70,8 @@ frame_callback(Dwfl_Frame *frame, void *data)
|
||||
return CB_STOP_UNWIND;
|
||||
}
|
||||
|
||||
- frame_arg->thread->frames =
|
||||
- sr_core_frame_append(frame_arg->thread->frames, result);
|
||||
+ *frame_arg->frames_tail = result;
|
||||
+ frame_arg->frames_tail = &result->next;
|
||||
|
||||
/* Avoid huge stacktraces from programs stuck in infinite recursion. */
|
||||
frame_arg->nframes++;
|
||||
@@ -99,7 +99,7 @@ unwind_thread(Dwfl_Thread *thread, void *data)
|
||||
|
||||
struct frame_callback_arg frame_arg =
|
||||
{
|
||||
- .thread = result,
|
||||
+ .frames_tail = &(result->frames),
|
||||
.error_msg = NULL,
|
||||
.nframes = 0
|
||||
};
|
||||
@@ -121,14 +121,15 @@ unwind_thread(Dwfl_Thread *thread, void *data)
|
||||
goto abort;
|
||||
}
|
||||
|
||||
- if (!error_msg && !frame_arg.thread->frames)
|
||||
+ if (!error_msg && !result->frames)
|
||||
{
|
||||
set_error("No frames found for thread id %d", (int)result->id);
|
||||
goto abort;
|
||||
}
|
||||
|
||||
- thread_arg->stacktrace->threads =
|
||||
- sr_core_thread_append(thread_arg->stacktrace->threads, result);
|
||||
+ *thread_arg->threads_tail = result;
|
||||
+ thread_arg->threads_tail = &result->next;
|
||||
+
|
||||
return DWARF_CB_OK;
|
||||
|
||||
abort:
|
||||
@@ -166,7 +167,7 @@ sr_parse_coredump(const char *core_file,
|
||||
|
||||
struct thread_callback_arg thread_arg =
|
||||
{
|
||||
- .stacktrace = stacktrace,
|
||||
+ .threads_tail = &(stacktrace->threads),
|
||||
.error_msg = NULL
|
||||
};
|
||||
|
||||
--
|
||||
2.1.0
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 36d6b09bc537483dbd7a12823f2111abdadd68cb Mon Sep 17 00:00:00 2001
|
||||
From: Martin Milata <mmilata@redhat.com>
|
||||
Date: Wed, 27 Aug 2014 14:21:55 +0200
|
||||
Subject: [PATCH] unwind: throw away the most recent frames
|
||||
|
||||
In case there's more than 1024 frames.
|
||||
|
||||
Fixes #179.
|
||||
|
||||
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
||||
---
|
||||
lib/core_unwind_elfutils.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/lib/core_unwind_elfutils.c b/lib/core_unwind_elfutils.c
|
||||
index 78470bc..7be7ec7 100644
|
||||
--- a/lib/core_unwind_elfutils.c
|
||||
+++ b/lib/core_unwind_elfutils.c
|
||||
@@ -72,13 +72,7 @@ frame_callback(Dwfl_Frame *frame, void *data)
|
||||
|
||||
*frame_arg->frames_tail = result;
|
||||
frame_arg->frames_tail = &result->next;
|
||||
-
|
||||
- /* Avoid huge stacktraces from programs stuck in infinite recursion. */
|
||||
frame_arg->nframes++;
|
||||
- if (frame_arg->nframes >= FRAME_LIMIT)
|
||||
- {
|
||||
- return CB_STOP_UNWIND;
|
||||
- }
|
||||
|
||||
return DWARF_CB_OK;
|
||||
}
|
||||
@@ -127,6 +121,15 @@ unwind_thread(Dwfl_Thread *thread, void *data)
|
||||
goto abort;
|
||||
}
|
||||
|
||||
+ /* Truncate the stacktrace to FRAME_LIMIT least recent frames. */
|
||||
+ while (result->frames && frame_arg.nframes > FRAME_LIMIT)
|
||||
+ {
|
||||
+ struct sr_core_frame *old_frame = result->frames;
|
||||
+ result->frames = old_frame->next;
|
||||
+ sr_core_frame_free(old_frame);
|
||||
+ frame_arg.nframes--;
|
||||
+ }
|
||||
+
|
||||
*thread_arg->threads_tail = result;
|
||||
thread_arg->threads_tail = &result->next;
|
||||
|
||||
--
|
||||
2.1.0
|
||||
|
@ -1,28 +0,0 @@
|
||||
From a2285d8209eb52efddd6856ddeeef9650da2bdec Mon Sep 17 00:00:00 2001
|
||||
From: Martin Milata <mmilata@redhat.com>
|
||||
Date: Wed, 27 Aug 2014 15:32:54 +0200
|
||||
Subject: [PATCH] unwind: lower stacktrace length limit to 256
|
||||
|
||||
Related to #179.
|
||||
|
||||
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
||||
---
|
||||
lib/core_unwind_elfutils.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/core_unwind_elfutils.c b/lib/core_unwind_elfutils.c
|
||||
index 7be7ec7..bbd4813 100644
|
||||
--- a/lib/core_unwind_elfutils.c
|
||||
+++ b/lib/core_unwind_elfutils.c
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
-#define FRAME_LIMIT 1024
|
||||
+#define FRAME_LIMIT 256
|
||||
|
||||
struct frame_callback_arg
|
||||
{
|
||||
--
|
||||
2.1.0
|
||||
|
@ -1,208 +0,0 @@
|
||||
From 9bde0322c40ea87d170982eca49624bbf92a996c Mon Sep 17 00:00:00 2001
|
||||
From: Martin Milata <mmilata@redhat.com>
|
||||
Date: Mon, 3 Nov 2014 17:04:13 +0100
|
||||
Subject: [PATCH] koops: add function name into some reasons
|
||||
|
||||
Related to rhbz#998887.
|
||||
|
||||
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
||||
---
|
||||
include/koops/stacktrace.h | 5 +++++
|
||||
lib/koops_stacktrace.c | 28 +++++++++++++++++++++------
|
||||
tests/kerneloopses/rhbz-1140681 | 43 +++++++++++++++++++++++++++++++++++++++++
|
||||
tests/koops_stacktrace.at | 43 +++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 113 insertions(+), 6 deletions(-)
|
||||
create mode 100644 tests/kerneloopses/rhbz-1140681
|
||||
|
||||
diff --git a/include/koops/stacktrace.h b/include/koops/stacktrace.h
|
||||
index 449756b..347e45e 100644
|
||||
--- a/include/koops/stacktrace.h
|
||||
+++ b/include/koops/stacktrace.h
|
||||
@@ -84,6 +84,11 @@ struct sr_koops_stacktrace
|
||||
* @brief Call trace. It might be NULL as it is not mandatory.
|
||||
*/
|
||||
struct sr_koops_frame *frames;
|
||||
+
|
||||
+ /**
|
||||
+ * @brief Reason message extracted by ABRT.
|
||||
+ */
|
||||
+ char *reason;
|
||||
};
|
||||
|
||||
/**
|
||||
diff --git a/lib/koops_stacktrace.c b/lib/koops_stacktrace.c
|
||||
index 611c7d1..a651a2b 100644
|
||||
--- a/lib/koops_stacktrace.c
|
||||
+++ b/lib/koops_stacktrace.c
|
||||
@@ -131,6 +131,7 @@ sr_koops_stacktrace_free(struct sr_koops_stacktrace *stacktrace)
|
||||
|
||||
free(stacktrace->version);
|
||||
free(stacktrace->raw_oops);
|
||||
+ free(stacktrace->reason);
|
||||
free(stacktrace);
|
||||
}
|
||||
|
||||
@@ -149,6 +150,9 @@ sr_koops_stacktrace_dup(struct sr_koops_stacktrace *stacktrace)
|
||||
if (result->raw_oops)
|
||||
result->raw_oops = sr_strdup(result->raw_oops);
|
||||
|
||||
+ if (result->reason)
|
||||
+ result->reason = sr_strdup(result->reason);
|
||||
+
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -335,6 +339,9 @@ sr_koops_stacktrace_parse(const char **input,
|
||||
/* Looks for the "Tainted: " line in the whole input */
|
||||
parse_taint_flags(local_input, stacktrace);
|
||||
|
||||
+ /* The "reason" is expected to be the first line of the input */
|
||||
+ stacktrace->reason = sr_strndup(*input, strcspn(*input, "\n"));
|
||||
+
|
||||
while (*local_input)
|
||||
{
|
||||
sr_skip_char_span(&local_input, " \t");
|
||||
@@ -700,7 +707,7 @@ char *
|
||||
sr_koops_stacktrace_get_reason(struct sr_koops_stacktrace *stacktrace)
|
||||
{
|
||||
char *func = "<unknown>";
|
||||
- char *result;
|
||||
+ struct sr_strbuf *result = sr_strbuf_new();
|
||||
|
||||
struct sr_koops_stacktrace *copy = sr_koops_stacktrace_dup(stacktrace);
|
||||
sr_normalize_koops_stacktrace(copy);
|
||||
@@ -708,17 +715,26 @@ sr_koops_stacktrace_get_reason(struct sr_koops_stacktrace *stacktrace)
|
||||
if (copy->frames && copy->frames->function_name)
|
||||
func = copy->frames->function_name;
|
||||
|
||||
- if (copy->frames && copy->frames->module_name)
|
||||
+ if (stacktrace->reason)
|
||||
{
|
||||
- result = sr_asprintf("Kernel oops in %s [%s]", func,
|
||||
- copy->frames->module_name);
|
||||
+ if (strstr(stacktrace->reason, "general protection fault: "))
|
||||
+ result = sr_strbuf_append_strf(result, "general protection fault in %s", func);
|
||||
+ else if (strstr(stacktrace->reason, "kernel paging request at"))
|
||||
+ result = sr_strbuf_append_strf(result, "kernel paging request at %s", func);
|
||||
+ else
|
||||
+ result = sr_strbuf_append_str(result, stacktrace->reason);
|
||||
}
|
||||
else
|
||||
- result = sr_asprintf("Kernel oops in %s", func);
|
||||
+ {
|
||||
+ result = sr_strbuf_append_strf(result, "Kernel oops in %s", func);
|
||||
+ }
|
||||
+
|
||||
+ if (copy->frames && copy->frames->module_name)
|
||||
+ result = sr_strbuf_append_strf(result, " [%s]", copy->frames->module_name);
|
||||
|
||||
sr_koops_stacktrace_free(copy);
|
||||
|
||||
- return result;
|
||||
+ return sr_strbuf_free_nobuf(result);
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/tests/kerneloopses/rhbz-1140681 b/tests/kerneloopses/rhbz-1140681
|
||||
new file mode 100644
|
||||
index 0000000..ec53f02
|
||||
--- /dev/null
|
||||
+++ b/tests/kerneloopses/rhbz-1140681
|
||||
@@ -0,0 +1,43 @@
|
||||
+general protection fault: 0000 [#1] SMP
|
||||
+Modules linked in: ccm rfcomm ip6t_rpfilter ip6t_REJECT xt_conntrack ebtable_nat ebtable_broute bridge stp llc ebtable_filter ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security ip6table_raw ip6table_filter ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_security bnep iptable_raw iTCO_wdt iTCO_vendor_support x86_pkg_temp_thermal coretemp kvm_intel kvm snd_hda_codec_hdmi crct10dif_pclmul snd_hda_codec_conexant snd_hda_codec_generic crc32_pclmul crc32c_intel arc4 iwldvm ghash_clmulni_intel mac80211 joydev microcode snd_hda_intel uvcvideo snd_hda_controller serio_raw videobuf2_vmalloc i2c_i801 snd_hda_codec videobuf2_memops iwlwifi videobuf2_core btusb videodev snd_hwdep lpc_ich bluetooth media mfd_core cfg80211 snd_seq snd_seq_device snd_pcm sdhci_pci sdhci mmc_core mei_me shpchp mei snd_timer wmi tpm_tis tpm thinkpad_acpi snd soundcore rfkill nfsd auth_rpcgss nfs_acl lockd sunrpc i915 i2c_algo_bit drm_kms_helper e1000e drm ptp i2c_core pps_core video
|
||||
+CPU: 1 PID: 946 Comm: X Not tainted 3.15.10-201.fc20.x86_64 #1
|
||||
+Hardware name: LENOVO 4173W15/4173W15, BIOS 8CET58WW (1.38 ) 07/18/2013
|
||||
+task: ffff8800d523cf00 ti: ffff88020211c000 task.ti: ffff88020211c000
|
||||
+RIP: 0010:[<ffffffff81171b02>] [<ffffffff81171b02>] find_get_entry+0x42/0xc0
|
||||
+RSP: 0000:ffff88020211fa28 EFLAGS: 00013246
|
||||
+RAX: 0000000080000000 RBX: ffff880037e6e670 RCX: 00000000fffffffa
|
||||
+RDX: 1000000000000000 RSI: ffff88013c46dad0 RDI: 0000000000000036
|
||||
+RBP: ffff88020211fa38 R08: 0000000000000000 R09: ffff88013c46d918
|
||||
+R10: ffff88020211fa08 R11: ffff880000000418 R12: 0000000000000072
|
||||
+R13: ffff880037e6e668 R14: ffff880037e6e518 R15: ffffea0006fd9480
|
||||
+FS: 00007fc8b072a9c0(0000) GS:ffff88021e240000(0000) knlGS:0000000000000000
|
||||
+CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
|
||||
+CR2: 00007fc8ac283000 CR3: 000000020fd19000 CR4: 00000000000407e0
|
||||
+Stack:
|
||||
+ 0000000000000072 0000000000000072 ffff88020211fa60 ffffffff81171d6f
|
||||
+ 0000000000000072 0000000000000000 0000000000000001 ffff88020211fb18
|
||||
+ ffffffff8118b98d 0000000000000000 ffff8800d523cf00 ffff88020211fb28
|
||||
+Call Trace:
|
||||
+ [<ffffffff81171d6f>] find_lock_entry+0x1f/0x80
|
||||
+ [<ffffffff8118b98d>] shmem_getpage_gfp+0xcd/0x7c0
|
||||
+ [<ffffffff8118c1d0>] shmem_read_mapping_page_gfp+0x40/0x80
|
||||
+ [<ffffffffa00ff6aa>] i915_gem_object_get_pages_gtt+0x14a/0x3b0 [i915]
|
||||
+ [<ffffffffa00fb9bc>] i915_gem_object_get_pages+0x6c/0xc0 [i915]
|
||||
+ [<ffffffffa00ffd5d>] i915_gem_object_pin+0x34d/0x6f0 [i915]
|
||||
+ [<ffffffff811c915f>] ? kfree+0xff/0x140
|
||||
+ [<ffffffffa0102169>] i915_gem_fault+0x139/0x2a0 [i915]
|
||||
+ [<ffffffff8119adb8>] __do_fault+0x48/0xc0
|
||||
+ [<ffffffffa00341b1>] ? drm_vm_open_locked+0x31/0x90 [drm]
|
||||
+ [<ffffffff8119e5f0>] do_shared_fault.isra.58+0x40/0x1e0
|
||||
+ [<ffffffff8119f865>] handle_mm_fault+0x495/0x10e0
|
||||
+ [<ffffffffa002da3c>] ? drm_ioctl+0x1ec/0x660 [drm]
|
||||
+ [<ffffffff811a6d0d>] ? mmap_region+0x19d/0x5d0
|
||||
+ [<ffffffff816fa3ec>] __do_page_fault+0x18c/0x530
|
||||
+ [<ffffffff811a7435>] ? do_mmap_pgoff+0x2f5/0x3c0
|
||||
+ [<ffffffff812e9ec3>] ? file_map_prot_check+0x63/0xd0
|
||||
+ [<ffffffff811f9a20>] ? do_vfs_ioctl+0x2e0/0x4a0
|
||||
+ [<ffffffff816fa7b2>] do_page_fault+0x22/0x30
|
||||
+ [<ffffffff816f6e88>] page_fault+0x28/0x30
|
||||
+Code: 89 df e8 62 13 1e 00 48 85 c0 48 89 c6 74 52 48 8b 10 48 85 d2 74 3d f6 c2 03 75 6e 65 8b 04 25 a0 c7 00 00 a9 00 ff 1f 00 75 5d <8b> 4a 1c 85 c9 74 ca 8d 79 01 4c 8d 4a 1c 89 c8 f0 0f b1 7a 1c
|
||||
+RIP [<ffffffff81171b02>] find_get_entry+0x42/0xc0
|
||||
+ RSP <ffff88020211fa28>
|
||||
diff --git a/tests/koops_stacktrace.at b/tests/koops_stacktrace.at
|
||||
index 5e17ca7..cd57fc8 100644
|
||||
--- a/tests/koops_stacktrace.at
|
||||
+++ b/tests/koops_stacktrace.at
|
||||
@@ -813,3 +813,46 @@ int main(void)
|
||||
return 0;
|
||||
}
|
||||
]])
|
||||
+
|
||||
+## ------------------------------ ##
|
||||
+## sr_koops_stacktrace_get_reason ##
|
||||
+## ------------------------------ ##
|
||||
+
|
||||
+AT_TESTFUN([sr_koops_stacktrace_get_reason],
|
||||
+[[
|
||||
+#include "koops/stacktrace.h"
|
||||
+#include "koops/frame.h"
|
||||
+#include "thread.h"
|
||||
+#include "location.h"
|
||||
+#include "utils.h"
|
||||
+#include <assert.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+
|
||||
+int main(void)
|
||||
+{
|
||||
+ char *error_message;
|
||||
+ char *full_input = sr_file_to_string("../../kerneloopses/rhbz-1140681", &error_message);
|
||||
+ assert(full_input);
|
||||
+ char *input = full_input;
|
||||
+
|
||||
+ struct sr_location location;
|
||||
+ sr_location_init(&location);
|
||||
+ struct sr_koops_stacktrace *stacktrace =
|
||||
+ sr_koops_stacktrace_parse(&input, &location);
|
||||
+
|
||||
+ assert(stacktrace);
|
||||
+ assert(*input == '\0');
|
||||
+ free(full_input);
|
||||
+
|
||||
+ char *expected_reason = "general protection fault in find_get_entry";
|
||||
+ char *actual_reason = sr_koops_stacktrace_get_reason(stacktrace);
|
||||
+ printf("%s\n%s\n", expected_reason, actual_reason);
|
||||
+ assert(0 == strcmp(expected_reason, actual_reason));
|
||||
+
|
||||
+ sr_koops_stacktrace_free(stacktrace);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+]])
|
||||
--
|
||||
2.1.0
|
||||
|
@ -1,48 +0,0 @@
|
||||
From 3cf1a5c1da350369ea27a7f6b45eeb2e10ce3bbe Mon Sep 17 00:00:00 2001
|
||||
From: Martin Milata <mmilata@redhat.com>
|
||||
Date: Thu, 6 Nov 2014 15:48:24 +0100
|
||||
Subject: [PATCH] configure: don't link against libunwind needlessly
|
||||
|
||||
Previously we linked against libunwind even if we detected usable
|
||||
elfutils unwinder. Not a problem for elfutils from mock/koji but can
|
||||
cause confusion during development.
|
||||
|
||||
Closes #162.
|
||||
|
||||
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
||||
---
|
||||
configure.ac | 16 +++++++++++-----
|
||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index aff4419..ba18759 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -104,13 +104,19 @@ AC_CHECK_LIB([elf], [main])
|
||||
AC_CHECK_LIB([dw], [main])
|
||||
AC_CHECK_LIB([dwfl], [main])
|
||||
AC_CHECK_LIB([dl], [main])
|
||||
-AC_CHECK_FUNC(dwfl_getthreads, AC_DEFINE(HAVE_DWFL_NEXT_THREAD, [], [Have function dwfl_getthreads for coredump unwinding]))
|
||||
+elfutils_unwinder=0
|
||||
+AC_CHECK_FUNC(dwfl_getthreads,
|
||||
+ AC_DEFINE(HAVE_DWFL_NEXT_THREAD, [], [Have function dwfl_getthreads for coredump unwinding])
|
||||
+ elfutils_unwinder=1
|
||||
+)
|
||||
|
||||
# libunwind
|
||||
-AC_CHECK_HEADERS([libunwind-coredump.h])
|
||||
-AC_CHECK_LIB([unwind], [main])
|
||||
-AC_CHECK_LIB([unwind-generic], [main])
|
||||
-AC_CHECK_LIB([unwind-coredump], [main])
|
||||
+if test "$elfutils_unwinder" != "1"; then
|
||||
+ AC_CHECK_HEADERS([libunwind-coredump.h])
|
||||
+ AC_CHECK_LIB([unwind], [main])
|
||||
+ AC_CHECK_LIB([unwind-generic], [main])
|
||||
+ AC_CHECK_LIB([unwind-coredump], [main])
|
||||
+fi
|
||||
|
||||
# rpm
|
||||
AC_CHECK_LIB([rpm], [main])
|
||||
--
|
||||
2.1.0
|
||||
|
43
satyr.spec
43
satyr.spec
@ -18,8 +18,8 @@
|
||||
%endif
|
||||
|
||||
Name: satyr
|
||||
Version: 0.15
|
||||
Release: 2%{?dist}
|
||||
Version: 0.16
|
||||
Release: 1%{?dist}
|
||||
Summary: Tools to create anonymous, machine-friendly problem reports
|
||||
Group: System Environment/Libraries
|
||||
License: GPLv2+
|
||||
@ -38,23 +38,7 @@ BuildRequires: gcc-c++
|
||||
BuildRequires: python-sphinx
|
||||
%endif
|
||||
|
||||
# '%%autosetup -S git' -> git
|
||||
BuildRequires: git
|
||||
|
||||
# git format-patch %%{Version} --topo-order -N -M;
|
||||
#
|
||||
# --topo-oder is needed because reversed chronological order produces a
|
||||
# different permutatoin after merging a very old patch
|
||||
#
|
||||
# i=0; for p in `ls 0*.patch`; do printf "Patch%04d: %s\n" $i $p; ((i++)); done
|
||||
#Patch0000: 0001-ruby-ruby-1.8-compatibility.patch
|
||||
#Patch0001: 0002-ruby-release-0.2.patch
|
||||
Patch0002: 0003-Add-test-for-xorg-function-normalization.patch
|
||||
Patch0003: 0004-unwind-Append-threads-frames-in-O-1.patch
|
||||
Patch0004: 0005-unwind-throw-away-the-most-recent-frames.patch
|
||||
Patch0005: 0006-unwind-lower-stacktrace-length-limit-to-256.patch
|
||||
Patch0006: 0007-koops-add-function-name-into-some-reasons.patch
|
||||
Patch0007: 0008-configure-don-t-link-against-libunwind-needlessly.patch
|
||||
Patch1: test-fail-gcc5-x86_64.patch
|
||||
|
||||
%description
|
||||
Satyr is a library that can be used to create and process microreports.
|
||||
@ -82,12 +66,8 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Python bindings for %{name}.
|
||||
|
||||
%prep
|
||||
# http://www.rpm.org/wiki/PackagerDocs/Autosetup
|
||||
# Default '__scm_apply_git' is 'git apply && git commit' but this workflow
|
||||
# doesn't allow us to create a new file within a patch, so we have to use
|
||||
# 'git am' (see /usr/lib/rpm/macros for more details)
|
||||
%define __scm_apply_git(qp:m:) %{__git} am
|
||||
%autosetup -S git
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
|
||||
%build
|
||||
%configure \
|
||||
@ -105,7 +85,12 @@ make install DESTDIR=%{buildroot}
|
||||
find %{buildroot} -name "*.la" | xargs rm --
|
||||
|
||||
%check
|
||||
make check
|
||||
make check || {
|
||||
# find and print the logs of failed test
|
||||
# do not cat tests/testsuite.log because it contains a lot of bloat
|
||||
find tests/testsuite.dir -name "testsuite.log" -print -exec cat '{}' \;
|
||||
exit 1
|
||||
}
|
||||
|
||||
%post -p /sbin/ldconfig
|
||||
%postun -p /sbin/ldconfig
|
||||
@ -130,6 +115,12 @@ make check
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri Feb 20 2015 Martin Milata <mmilata@redhat.com> 0.16-1
|
||||
- New upstream version
|
||||
- Add support for unwinding from core dump hook
|
||||
- Add support for Ruby uReports
|
||||
- Bugfixes
|
||||
|
||||
* Fri Nov 07 2014 Jakub Filak <jfilak@redhat.com> 0.15-2
|
||||
- Add function name into reason text for kernel page faults
|
||||
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
91f268fed10295c8b1c3afce741e24eb satyr-0.15.tar.xz
|
||||
cf8783759f9e209835afca9085e2bd1b satyr-0.16.tar.xz
|
||||
|
104
test-fail-gcc5-x86_64.patch
Normal file
104
test-fail-gcc5-x86_64.patch
Normal file
@ -0,0 +1,104 @@
|
||||
diff -ur satyr-0.16/tests/ruby_stacktrace.at satyr-0.16.1.gd339.dirty/tests/ruby_stacktrace.at
|
||||
--- satyr-0.16/tests/ruby_stacktrace.at 2015-02-18 14:04:56.000000000 +0100
|
||||
+++ satyr-0.16.1.gd339.dirty/tests/ruby_stacktrace.at 2015-02-20 14:47:11.000000000 +0100
|
||||
@@ -261,6 +261,7 @@
|
||||
|
||||
AT_TESTFUN([sr_ruby_stacktrace_from_json],
|
||||
[[
|
||||
+#include "stacktrace.h"
|
||||
#include "ruby/stacktrace.h"
|
||||
#include "ruby/frame.h"
|
||||
#include "utils.h"
|
||||
@@ -268,13 +269,14 @@
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
+#include <string.h>
|
||||
|
||||
void
|
||||
check(char *filename)
|
||||
{
|
||||
char *error_message = NULL;
|
||||
- const char *file_contents = sr_file_to_string(filename, &error_message);
|
||||
- const char *input = file_contents;
|
||||
+ char *file_contents = sr_file_to_string(filename, &error_message);
|
||||
+ char *input = file_contents;
|
||||
struct sr_location location;
|
||||
sr_location_init(&location);
|
||||
|
||||
diff -ur satyr-0.16/tests/testsuite satyr-0.16.1.gd339.dirty/tests/testsuite
|
||||
--- satyr-0.16/tests/testsuite 2015-02-19 12:23:19.000000000 +0100
|
||||
+++ satyr-0.16.1.gd339.dirty/tests/testsuite 2015-02-20 14:48:52.000000000 +0100
|
||||
@@ -1041,7 +1041,7 @@
|
||||
# List of tests.
|
||||
if $at_list_p; then
|
||||
cat <<_ATEOF || at_write_fail=1
|
||||
-satyr 0.16 test suite test groups:
|
||||
+satyr 0.16.1.gd339.dirty test suite test groups:
|
||||
|
||||
NUM: FILE-NAME:LINE TEST-GROUP-NAME
|
||||
KEYWORDS
|
||||
@@ -1082,7 +1082,7 @@
|
||||
exit $at_write_fail
|
||||
fi
|
||||
if $at_version_p; then
|
||||
- $as_echo "$as_me (satyr 0.16)" &&
|
||||
+ $as_echo "$as_me (satyr 0.16.1.gd339.dirty)" &&
|
||||
cat <<\_ATEOF || at_write_fail=1
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
@@ -1330,13 +1330,13 @@
|
||||
exec 5>>"$at_suite_log"
|
||||
|
||||
# Banners and logs.
|
||||
-$as_echo "## ---------------------- ##
|
||||
-## satyr 0.16 test suite. ##
|
||||
-## ---------------------- ##"
|
||||
-{
|
||||
- $as_echo "## ---------------------- ##
|
||||
-## satyr 0.16 test suite. ##
|
||||
-## ---------------------- ##"
|
||||
+$as_echo "## ------------------------------------ ##
|
||||
+## satyr 0.16.1.gd339.dirty test suite. ##
|
||||
+## ------------------------------------ ##"
|
||||
+{
|
||||
+ $as_echo "## ------------------------------------ ##
|
||||
+## satyr 0.16.1.gd339.dirty test suite. ##
|
||||
+## ------------------------------------ ##"
|
||||
echo
|
||||
|
||||
$as_echo "$as_me: command line was:"
|
||||
@@ -2179,7 +2179,7 @@
|
||||
$as_echo "Please send $at_msg and all information you think might help:
|
||||
|
||||
To: <crash-catcher@fedorahosted.org>
|
||||
- Subject: [satyr 0.16] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
|
||||
+ Subject: [satyr 0.16.1.gd339.dirty] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
|
||||
|
||||
You may investigate any problem if you feel able to do so, in which
|
||||
case the test suite provides a good starting point. Its output may
|
||||
@@ -10995,6 +10995,7 @@
|
||||
|
||||
cat >sr_ruby_stacktrace_from_json.c <<'_ATEOF'
|
||||
|
||||
+#include "stacktrace.h"
|
||||
#include "ruby/stacktrace.h"
|
||||
#include "ruby/frame.h"
|
||||
#include "utils.h"
|
||||
@@ -11002,13 +11003,14 @@
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
+#include <string.h>
|
||||
|
||||
void
|
||||
check(char *filename)
|
||||
{
|
||||
char *error_message = NULL;
|
||||
- const char *file_contents = sr_file_to_string(filename, &error_message);
|
||||
- const char *input = file_contents;
|
||||
+ char *file_contents = sr_file_to_string(filename, &error_message);
|
||||
+ char *input = file_contents;
|
||||
struct sr_location location;
|
||||
sr_location_init(&location);
|
||||
|
Loading…
Reference in New Issue
Block a user