1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest SBProcess APIs, including ReadMemory(), WriteMemory(), and others. 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprechtimport lldb 8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 11*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbutil import get_stopped_thread, state_type_to_str 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprechtclass SignalsAPITestCase(TestBase): 15*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 16*99451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 17*99451b44SJordan Rupprecht 18*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 19*99451b44SJordan Rupprecht @skipIfWindows # Windows doesn't have signals 20*99451b44SJordan Rupprecht def test_ignore_signal(self): 21*99451b44SJordan Rupprecht """Test Python SBUnixSignals.Suppress/Stop/Notify() API.""" 22*99451b44SJordan Rupprecht self.build() 23*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 24*99451b44SJordan Rupprecht self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 25*99451b44SJordan Rupprecht 26*99451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 27*99451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 28*99451b44SJordan Rupprecht 29*99451b44SJordan Rupprecht line = line_number( 30*99451b44SJordan Rupprecht "main.cpp", 31*99451b44SJordan Rupprecht "// Set break point at this line and setup signal ignores.") 32*99451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", line) 33*99451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht # Launch the process, and do not stop at the entry point. 36*99451b44SJordan Rupprecht process = target.LaunchSimple( 37*99451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) 40*99451b44SJordan Rupprecht self.assertTrue( 41*99451b44SJordan Rupprecht thread.IsValid(), 42*99451b44SJordan Rupprecht "There should be a thread stopped due to breakpoint") 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht unix_signals = process.GetUnixSignals() 45*99451b44SJordan Rupprecht sigint = unix_signals.GetSignalNumberFromName("SIGINT") 46*99451b44SJordan Rupprecht unix_signals.SetShouldSuppress(sigint, True) 47*99451b44SJordan Rupprecht unix_signals.SetShouldStop(sigint, False) 48*99451b44SJordan Rupprecht unix_signals.SetShouldNotify(sigint, False) 49*99451b44SJordan Rupprecht 50*99451b44SJordan Rupprecht process.Continue() 51*99451b44SJordan Rupprecht self.assertTrue( 52*99451b44SJordan Rupprecht process.state == lldb.eStateExited, 53*99451b44SJordan Rupprecht "The process should have exited") 54*99451b44SJordan Rupprecht self.assertTrue( 55*99451b44SJordan Rupprecht process.GetExitStatus() == 0, 56*99451b44SJordan Rupprecht "The process should have returned 0") 57