1import gdbremote_testcase 2from lldbsuite.test.decorators import * 3from lldbsuite.test.lldbtest import * 4from lldbsuite.test import lldbutil 5 6class TestGdbRemoteSegFault(gdbremote_testcase.GdbRemoteTestCaseBase): 7 8 GDB_REMOTE_STOP_CODE_BAD_ACCESS = 0x91 9 10 def inferior_seg_fault_received(self, expected_signo): 11 procs = self.prep_debug_monitor_and_inferior( 12 inferior_args=["segfault"]) 13 self.assertIsNotNone(procs) 14 15 self.test_sequence.add_log_lines(["read packet: $vCont;c#a8", 16 {"direction": "send", 17 "regex": r"^\$T([0-9a-fA-F]{2}).*#[0-9a-fA-F]{2}$", 18 "capture": {1: "hex_exit_code"}}, 19 ], 20 True) 21 22 context = self.expect_gdbremote_sequence() 23 self.assertIsNotNone(context) 24 25 hex_exit_code = context.get("hex_exit_code") 26 self.assertIsNotNone(hex_exit_code) 27 self.assertEqual(int(hex_exit_code, 16), expected_signo) 28 29 @skipIfWindows # No signal is sent on Windows. 30 def test_inferior_seg_fault_received(self): 31 self.build() 32 if self.platformIsDarwin(): 33 self.inferior_seg_fault_received(self.GDB_REMOTE_STOP_CODE_BAD_ACCESS) 34 else: 35 self.inferior_seg_fault_received(lldbutil.get_signal_number('SIGSEGV')) 36