199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest SBSymbolContext APIs. 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 SymbolContextTwoFilesTestCase(TestBase): 1399451b44SJordan Rupprecht @expectedFailureAll(oslist=["windows"]) 1499451b44SJordan Rupprecht def test_lookup_by_address(self): 1599451b44SJordan Rupprecht """Test lookup by address in a module with multiple compilation units""" 1699451b44SJordan Rupprecht self.build() 1799451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 1899451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 1999451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht module = target.GetModuleAtIndex(0) 2299451b44SJordan Rupprecht self.assertTrue(module.IsValid()) 2399451b44SJordan Rupprecht for symbol_name in ["struct1::f()", "struct2::f()"]: 2499451b44SJordan Rupprecht sc_list = module.FindFunctions(symbol_name, lldb.eSymbolTypeCode) 2599451b44SJordan Rupprecht self.assertTrue(1, sc_list.GetSize()) 26*2238dcc3SJonas Devlieghere symbol_address = sc_list.GetContextAtIndex(0).GetSymbol().GetStartAddress() 2799451b44SJordan Rupprecht self.assertTrue(symbol_address.IsValid()) 2899451b44SJordan Rupprecht sc_by_address = module.ResolveSymbolContextForAddress( 29*2238dcc3SJonas Devlieghere symbol_address, lldb.eSymbolContextFunction 30*2238dcc3SJonas Devlieghere ) 31*2238dcc3SJonas Devlieghere self.assertEqual(symbol_name, sc_by_address.GetFunction().GetName()) 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht def test_ranges_in_multiple_compile_unit(self): 3499451b44SJordan Rupprecht """This test verifies that we correctly handle the case when multiple 3599451b44SJordan Rupprecht compile unit contains DW_AT_ranges and DW_AT_ranges_base attributes.""" 3699451b44SJordan Rupprecht self.build() 3799451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 3899451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 3999451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht source1 = "file1.cpp" 42*2238dcc3SJonas Devlieghere line1 = line_number(source1, "// Break1") 4399451b44SJordan Rupprecht breakpoint1 = target.BreakpointCreateByLocation(source1, line1) 4499451b44SJordan Rupprecht self.assertIsNotNone(breakpoint1) 4599451b44SJordan Rupprecht self.assertTrue(breakpoint1.IsValid()) 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht source2 = "file2.cpp" 48*2238dcc3SJonas Devlieghere line2 = line_number(source2, "// Break2") 4999451b44SJordan Rupprecht breakpoint2 = target.BreakpointCreateByLocation(source2, line2) 5099451b44SJordan Rupprecht self.assertIsNotNone(breakpoint2) 5199451b44SJordan Rupprecht self.assertTrue(breakpoint2.IsValid()) 5299451b44SJordan Rupprecht 5399451b44SJordan Rupprecht process = target.LaunchSimple(None, None, self.get_process_working_directory()) 5499451b44SJordan Rupprecht self.assertIsNotNone(process, PROCESS_IS_VALID) 5599451b44SJordan Rupprecht 56*2238dcc3SJonas Devlieghere threads = lldbutil.get_threads_stopped_at_breakpoint(process, breakpoint2) 5799451b44SJordan Rupprecht self.assertEqual(len(threads), 1) 5899451b44SJordan Rupprecht frame = threads[0].GetFrameAtIndex(0) 5999451b44SJordan Rupprecht value = frame.FindVariable("x") 6099451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 6199451b44SJordan Rupprecht 6299451b44SJordan Rupprecht process.Continue() 6399451b44SJordan Rupprecht 64*2238dcc3SJonas Devlieghere threads = lldbutil.get_threads_stopped_at_breakpoint(process, breakpoint1) 6599451b44SJordan Rupprecht self.assertEqual(len(threads), 1) 6699451b44SJordan Rupprecht frame = threads[0].GetFrameAtIndex(0) 6799451b44SJordan Rupprecht value = frame.FindVariable("x") 6899451b44SJordan Rupprecht self.assertTrue(value.IsValid()) 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht process.Continue() 71