199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest that step-inst over a crash behaves correctly. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprechtimport lldb 799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprechtclass CrashDuringStepTestCase(TestBase): 1399451b44SJordan Rupprecht def setUp(self): 1499451b44SJordan Rupprecht TestBase.setUp(self) 15*2238dcc3SJonas Devlieghere self.breakpoint = line_number("main.cpp", "// Set breakpoint here") 1699451b44SJordan Rupprecht 1799451b44SJordan Rupprecht # IO error due to breakpoint at invalid address 18*2238dcc3SJonas Devlieghere @expectedFailureAll(triple=re.compile("^mips")) 19*2238dcc3SJonas Devlieghere @skipIf(oslist=["windows"], archs=["aarch64"]) 2099451b44SJordan Rupprecht def test_step_inst_with(self): 2199451b44SJordan Rupprecht """Test thread creation during step-inst handling.""" 22d7dbe2c4SPavel Labath self.build() 2399451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2699451b44SJordan Rupprecht self.assertTrue(target and target.IsValid(), "Target is valid") 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht self.bp_num = lldbutil.run_break_set_by_file_and_line( 29*2238dcc3SJonas Devlieghere self, "main.cpp", self.breakpoint, num_expected_locations=1 30*2238dcc3SJonas Devlieghere ) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht # Run the program. 33*2238dcc3SJonas Devlieghere process = target.LaunchSimple(None, None, self.get_process_working_directory()) 3499451b44SJordan Rupprecht self.assertTrue(process and process.IsValid(), PROCESS_IS_VALID) 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht # The stop reason should be breakpoint. 37*2238dcc3SJonas Devlieghere self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) 38*2238dcc3SJonas Devlieghere thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) 3999451b44SJordan Rupprecht self.assertTrue(thread.IsValid(), STOPPED_DUE_TO_BREAKPOINT) 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht # Keep stepping until the inferior crashes 42*2238dcc3SJonas Devlieghere while ( 43*2238dcc3SJonas Devlieghere process.GetState() == lldb.eStateStopped 44*2238dcc3SJonas Devlieghere and not lldbutil.is_thread_crashed(self, thread) 45*2238dcc3SJonas Devlieghere ): 4699451b44SJordan Rupprecht thread.StepInstruction(False) 4799451b44SJordan Rupprecht 48*2238dcc3SJonas Devlieghere self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) 49*2238dcc3SJonas Devlieghere self.assertTrue(lldbutil.is_thread_crashed(self, thread), "Thread has crashed") 5099451b44SJordan Rupprecht process.Kill() 51