199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest that breakpoints set on a bad address say they are bad. 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 BadAddressBreakpointTestCase(TestBase): 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht def test_bad_address_breakpoints(self): 1799451b44SJordan Rupprecht """Test that breakpoints set on a bad address say they are bad.""" 1899451b44SJordan Rupprecht self.build() 1999451b44SJordan Rupprecht self.address_breakpoints() 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht def address_breakpoints(self): 2299451b44SJordan Rupprecht """Test that breakpoints set on a bad address say they are bad.""" 2399451b44SJordan Rupprecht target, process, thread, bkpt = \ 2499451b44SJordan Rupprecht lldbutil.run_to_source_breakpoint(self, 2599451b44SJordan Rupprecht "Set a breakpoint here", 2699451b44SJordan Rupprecht lldb.SBFileSpec("main.c")) 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht 2999451b44SJordan Rupprecht 30*84b9985fSWill Hawkins # illegal_address will hold (optionally) an address that, if 31*84b9985fSWill Hawkins # used as a breakpoint, will generate an unresolved breakpoint. 32*84b9985fSWill Hawkins illegal_address = None 33*84b9985fSWill Hawkins 34*84b9985fSWill Hawkins # Walk through all the memory regions in the process and 35*84b9985fSWill Hawkins # find an address that is invalid. 36*84b9985fSWill Hawkins regions = process.GetMemoryRegions() 37*84b9985fSWill Hawkins for region_idx in range(regions.GetSize()): 38*84b9985fSWill Hawkins region = lldb.SBMemoryRegionInfo() 39*84b9985fSWill Hawkins regions.GetMemoryRegionAtIndex(region_idx, region) 40*84b9985fSWill Hawkins if illegal_address == None or \ 41*84b9985fSWill Hawkins region.GetRegionEnd() > illegal_address: 42*84b9985fSWill Hawkins illegal_address = region.GetRegionEnd() 43*84b9985fSWill Hawkins 44*84b9985fSWill Hawkins if illegal_address is not None: 45*84b9985fSWill Hawkins # Now, set a breakpoint at the address we know is illegal. 46*84b9985fSWill Hawkins bkpt = target.BreakpointCreateByAddress(illegal_address) 47*84b9985fSWill Hawkins # Verify that breakpoint is not resolved. 4899451b44SJordan Rupprecht for bp_loc in bkpt: 49b3a0c4d7SRaphael Isemann self.assertEquals(bp_loc.IsResolved(), False) 5099451b44SJordan Rupprecht else: 5199451b44SJordan Rupprecht self.fail( 5299451b44SJordan Rupprecht "Could not find an illegal address at which to set a bad breakpoint.") 53