• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2
3import gdbremote_testcase
4from lldbsuite.test.decorators import *
5from lldbsuite.test.lldbtest import *
6from lldbsuite.test import lldbutil
7
8
9class TestGdbRemoteSegFault(gdbremote_testcase.GdbRemoteTestCaseBase):
10    mydir = TestBase.compute_mydir(__file__)
11
12    GDB_REMOTE_STOP_CODE_BAD_ACCESS = 0x91
13
14    @skipIfDarwinEmbedded # <rdar://problem/34539270> lldb-server tests not updated to work on ios etc yet
15    def inferior_seg_fault_received(self, expected_signo):
16        procs = self.prep_debug_monitor_and_inferior(
17            inferior_args=["segfault"])
18        self.assertIsNotNone(procs)
19
20        self.test_sequence.add_log_lines(["read packet: $vCont;c#a8",
21                                          {"direction": "send",
22                                           "regex": r"^\$T([0-9a-fA-F]{2}).*#[0-9a-fA-F]{2}$",
23                                           "capture": {1: "hex_exit_code"}},
24                                          ],
25                                         True)
26
27        context = self.expect_gdbremote_sequence()
28        self.assertIsNotNone(context)
29
30        hex_exit_code = context.get("hex_exit_code")
31        self.assertIsNotNone(hex_exit_code)
32        self.assertEqual(int(hex_exit_code, 16), expected_signo)
33
34    @debugserver_test
35    def test_inferior_seg_fault_received_debugserver(self):
36        self.init_debugserver_test()
37        self.build()
38        self.inferior_seg_fault_received(self.GDB_REMOTE_STOP_CODE_BAD_ACCESS)
39
40    @skipIfWindows # No signal is sent on Windows.
41    @llgs_test
42    def test_inferior_seg_fault_received_llgs(self):
43        self.init_llgs_test()
44        self.build()
45        self.inferior_seg_fault_received(lldbutil.get_signal_number('SIGSEGV'))
46