It was an inline test before. Clang stopped emitting line information for the TLS initialization and the inline test didn't have a way to break before it anymore. This rewrites the test as a full-fldeged python test and improves the checking of the error case to verify that the failure we are looking for is related to the TLS setup not being complete.
50 lines
2.0 KiB
Python
50 lines
2.0 KiB
Python
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):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
@expectedFailureAll(oslist=["windows", "linux", "netbsd"])
|
|
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")
|
|
|
|
# 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(lldb.SBFileSpec(exe))
|
|
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)
|
|
|
|
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"])
|
|
|