Files
clang-p2996/lldb/test/API/lang/cpp/thread_local/TestThreadLocal.py
Jason Molenda bd3838ff6b Skip TestThreadLocal.py on darwin temporarily for linker issue
The new static linker in Xcode 15 does not emit the necessary
symbols for file static thread local storage, causing this test
to fail when used.  The old static linker is still available
as ld-classic in Xcode 15, but it has to be invoked specially, and
the new static linker will be fixed at some point.  I may try to
add linker name and versioning information in
lldb/packages/Python/lldbsuite/test/decorators.py like we do with
the compiler / compiler_version, so it can be xfailed for known
problematic static linker name / versions, but until I get that
sorted I'm skipping this test to unblock the CI bots.
2024-01-19 17:03:19 -08:00

58 lines
2.2 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):
@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)
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",
],
)