forked from OSchip/llvm-project
[lldb] [test] Make 2lwp_process_SIGSEGV test more portable
Fix 2lwp_process_SIGSEGV NetBSD core test to terminate inside regular function rather than libc call, in order to get reproducible backtrace on different platforms. Differential Revision: https://reviews.llvm.org/D59177 llvm-svn: 355786
This commit is contained in:
parent
a2b144fc74
commit
369a011cee
Binary file not shown.
Binary file not shown.
|
@ -4,9 +4,12 @@
|
|||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
|
||||
volatile int sem = 0;
|
||||
|
||||
static void bar() {
|
||||
char F = 'b';
|
||||
kill(getpid(), SIGSEGV); // Frame bar
|
||||
sem = 1;
|
||||
while (1) continue; // Frame bar
|
||||
}
|
||||
|
||||
static void foo(void (*boomer)()) {
|
||||
|
@ -28,5 +31,7 @@ int main(int argc, char **argv) {
|
|||
stack = malloc(ssize);
|
||||
_lwp_makecontext(&uc, lwp_main, NULL, NULL, stack, ssize);
|
||||
_lwp_create(&uc, 0, &lid);
|
||||
while (sem != 1) continue;
|
||||
kill(getpid(), SIGSEGV);
|
||||
_lwp_wait(lid, NULL);
|
||||
}
|
||||
|
|
|
@ -206,11 +206,10 @@ class NetBSD2LWPProcessSigCoreTestCase(NetBSDCoreCommonTestCase):
|
|||
thread = process.GetSelectedThread()
|
||||
self.assertTrue(thread)
|
||||
self.assertEqual(thread.GetThreadID(), 2)
|
||||
self.assertEqual(thread.GetThreadID(), 2)
|
||||
self.assertEqual(thread.GetStopReason(), lldb.eStopReasonSignal)
|
||||
self.assertEqual(thread.GetStopReasonDataCount(), 1)
|
||||
self.assertEqual(thread.GetStopReasonDataAtIndex(0), signal.SIGSEGV)
|
||||
backtrace = ["_kill", "bar", "foo", "lwp_main"]
|
||||
backtrace = ["bar", "foo", "lwp_main"]
|
||||
self.check_backtrace(thread, filename, backtrace)
|
||||
|
||||
# thread 1 should have the same signal
|
||||
|
@ -219,8 +218,7 @@ class NetBSD2LWPProcessSigCoreTestCase(NetBSDCoreCommonTestCase):
|
|||
self.assertEqual(thread.GetStopReasonDataCount(), 1)
|
||||
self.assertEqual(thread.GetStopReasonDataAtIndex(0), signal.SIGSEGV)
|
||||
|
||||
@skipIf # TODO: fails with non-netbsd libc
|
||||
@skipIfLLVMTargetMissing("X86")
|
||||
def test_amd64(self):
|
||||
"""Test double-threaded amd64 core dump where process is signalled."""
|
||||
self.do_test("2lwp_process_SIGSEGV.amd64", pid=141, region_count=24)
|
||||
self.do_test("2lwp_process_SIGSEGV.amd64", pid=665, region_count=24)
|
||||
|
|
Loading…
Reference in New Issue