from lldbsuite.test import decorators import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil from lldbsuite.test import lldbtest class PlatformProcessCrashInfoTestCase(TestBase): @expectedFailureAll(oslist=["windows", "linux", "freebsd", "netbsd"]) @skipIfDarwin # rdar://120795095 def test_thread_local(self): # Set a breakpoint on the first instruction of the main function, # before the TLS initialization has run. self.build() exe = self.getBuildArtifact("a.out") (target, process, _, _) = lldbutil.run_to_source_breakpoint( self, "Set breakpoint here", lldb.SBFileSpec("main.cpp") ) self.expect_expr("tl_local_int + 1", result_type="int", result_value="323") self.expect_expr("*tl_local_ptr + 2", result_type="int", result_value="324") self.expect_expr("tl_global_int", result_type="int", result_value="123") self.expect_expr("*tl_global_ptr", result_type="int", result_value="45") # Create the filespec by which to locate our a.out module. Use the # absolute path to get the module for the current variant. filespec = lldb.SBFileSpec(exe, False) # Now see if we emit the correct error when the TLS is not yet # initialized. Let's set a breakpoint on the first instruction # of main. main_module = target.FindModule(filespec) self.assertTrue(main_module, VALID_MODULE) main_address = main_module.FindSymbol("main").GetStartAddress() main_bkpt = target.BreakpointCreateBySBAddress(main_address) process.Kill() lldbutil.run_to_breakpoint_do_run(self, target, main_bkpt) # The test fails during tear down because the module isn't cleared. # Even though this test case is marked as xfail, a failure during # tear down still counts as an error. main_module.Clear() self.expect( "expr tl_local_int", error=True, substrs=[ "couldn't get the value of variable tl_local_int", "No TLS data currently exists for this thread", ], ) self.expect( "expr *tl_local_ptr", error=True, substrs=[ "couldn't get the value of variable tl_local_ptr", "No TLS data currently exists for this thread", ], )