New upstream version 0.16

Add support for unwinding from core dump hook
Add support for Ruby uReports
Bugfixes
This commit is contained in:
Martin Milata 2015-02-20 12:36:21 +01:00
parent 35b0960c93
commit ec9699b776
10 changed files with 123 additions and 630 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@
/satyr-0.13.tar.xz /satyr-0.13.tar.xz
/satyr-0.14.tar.xz /satyr-0.14.tar.xz
/satyr-0.15.tar.xz /satyr-0.15.tar.xz
/satyr-0.16.tar.xz

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -18,8 +18,8 @@
%endif %endif
Name: satyr Name: satyr
Version: 0.15 Version: 0.16
Release: 2%{?dist} Release: 1%{?dist}
Summary: Tools to create anonymous, machine-friendly problem reports Summary: Tools to create anonymous, machine-friendly problem reports
Group: System Environment/Libraries Group: System Environment/Libraries
License: GPLv2+ License: GPLv2+
@ -38,23 +38,7 @@ BuildRequires: gcc-c++
BuildRequires: python-sphinx BuildRequires: python-sphinx
%endif %endif
# '%%autosetup -S git' -> git Patch1: test-fail-gcc5-x86_64.patch
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
%description %description
Satyr is a library that can be used to create and process microreports. 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}. Python bindings for %{name}.
%prep %prep
# http://www.rpm.org/wiki/PackagerDocs/Autosetup %setup -q
# Default '__scm_apply_git' is 'git apply && git commit' but this workflow %patch1 -p1
# 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
%build %build
%configure \ %configure \
@ -105,7 +85,12 @@ make install DESTDIR=%{buildroot}
find %{buildroot} -name "*.la" | xargs rm -- find %{buildroot} -name "*.la" | xargs rm --
%check %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 %post -p /sbin/ldconfig
%postun -p /sbin/ldconfig %postun -p /sbin/ldconfig
@ -130,6 +115,12 @@ make check
%endif %endif
%changelog %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 * Fri Nov 07 2014 Jakub Filak <jfilak@redhat.com> 0.15-2
- Add function name into reason text for kernel page faults - Add function name into reason text for kernel page faults

View File

@ -1 +1 @@
91f268fed10295c8b1c3afce741e24eb satyr-0.15.tar.xz cf8783759f9e209835afca9085e2bd1b satyr-0.16.tar.xz

104
test-fail-gcc5-x86_64.patch Normal file
View 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);