199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest address breakpoints set with shared library of SBAddress work correctly. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtimport lldbsuite.test.lldbutil as lldbutil 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprechtclass AddressBreakpointTestCase(TestBase): 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht def test_address_breakpoints(self): 1799451b44SJordan Rupprecht """Test address breakpoints set with shared library of SBAddress work correctly.""" 1899451b44SJordan Rupprecht self.build() 1999451b44SJordan Rupprecht self.address_breakpoints() 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht def address_breakpoints(self): 2299451b44SJordan Rupprecht """Test address breakpoints set with shared library of SBAddress work correctly.""" 23*54c26872SRaphael Isemann target = self.createTestTarget() 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht # Now create a breakpoint on main.c by name 'c'. 2699451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 2799451b44SJordan Rupprecht "Set a breakpoint here", lldb.SBFileSpec("main.c")) 2899451b44SJordan Rupprecht self.assertTrue(breakpoint and 2999451b44SJordan Rupprecht breakpoint.GetNumLocations() >= 1, 3099451b44SJordan Rupprecht VALID_BREAKPOINT) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht # Get the breakpoint location from breakpoint after we verified that, 3399451b44SJordan Rupprecht # indeed, it has one location. 3499451b44SJordan Rupprecht location = breakpoint.GetLocationAtIndex(0) 3599451b44SJordan Rupprecht self.assertTrue(location and 3699451b44SJordan Rupprecht location.IsEnabled(), 3799451b44SJordan Rupprecht VALID_BREAKPOINT_LOCATION) 3899451b44SJordan Rupprecht 3999451b44SJordan Rupprecht # Next get the address from the location, and create an address breakpoint using 4099451b44SJordan Rupprecht # that address: 4199451b44SJordan Rupprecht 4299451b44SJordan Rupprecht address = location.GetAddress() 4399451b44SJordan Rupprecht target.BreakpointDelete(breakpoint.GetID()) 4499451b44SJordan Rupprecht 4599451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySBAddress(address) 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht # Disable ASLR. This will allow us to actually test (on platforms that support this flag) 4899451b44SJordan Rupprecht # that the breakpoint was able to track the module. 4999451b44SJordan Rupprecht 5099451b44SJordan Rupprecht launch_info = lldb.SBLaunchInfo(None) 5199451b44SJordan Rupprecht flags = launch_info.GetLaunchFlags() 5299451b44SJordan Rupprecht flags &= ~lldb.eLaunchFlagDisableASLR 5386aa8e63SJonas Devlieghere flags &= lldb.eLaunchFlagInheritTCCFromParent 5499451b44SJordan Rupprecht launch_info.SetLaunchFlags(flags) 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht error = lldb.SBError() 5799451b44SJordan Rupprecht 5899451b44SJordan Rupprecht process = target.Launch(launch_info, error) 5999451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht # Did we hit our breakpoint? 6299451b44SJordan Rupprecht from lldbsuite.test.lldbutil import get_threads_stopped_at_breakpoint 6399451b44SJordan Rupprecht threads = get_threads_stopped_at_breakpoint(process, breakpoint) 640ed758b2SDave Lee self.assertEqual( 650ed758b2SDave Lee len(threads), 1, 6699451b44SJordan Rupprecht "There should be a thread stopped at our breakpoint") 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht # The hit count for the breakpoint should be 1. 69b3a0c4d7SRaphael Isemann self.assertEquals(breakpoint.GetHitCount(), 1) 7099451b44SJordan Rupprecht 7199451b44SJordan Rupprecht process.Kill() 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht # Now re-launch and see that we hit the breakpoint again: 7499451b44SJordan Rupprecht launch_info.Clear() 7599451b44SJordan Rupprecht launch_info.SetLaunchFlags(flags) 7699451b44SJordan Rupprecht 7799451b44SJordan Rupprecht process = target.Launch(launch_info, error) 7899451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 7999451b44SJordan Rupprecht 8099451b44SJordan Rupprecht thread = get_threads_stopped_at_breakpoint(process, breakpoint) 810ed758b2SDave Lee self.assertEqual( 820ed758b2SDave Lee len(threads), 1, 8399451b44SJordan Rupprecht "There should be a thread stopped at our breakpoint") 8499451b44SJordan Rupprecht 8599451b44SJordan Rupprecht # The hit count for the breakpoint should now be 2. 86b3a0c4d7SRaphael Isemann self.assertEquals(breakpoint.GetHitCount(), 2) 87