forked from OSchip/llvm-project
[lldb/testsuite] Rewrite TestThreadLocal.py
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.
This commit is contained in:
parent
127b9d9d77
commit
71db787c45
|
@ -1,6 +1,49 @@
|
|||
from lldbsuite.test import lldbinline
|
||||
from lldbsuite.test import decorators
|
||||
|
||||
lldbinline.MakeInlineTest(__file__, globals(),
|
||||
lldbinline.expectedFailureAll(oslist=[
|
||||
"windows", "linux", "netbsd"]))
|
||||
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"])
|
||||
|
||||
|
|
|
@ -3,15 +3,9 @@ thread_local int tl_global_int = 123;
|
|||
thread_local int *tl_global_ptr = &storage;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
//% self.expect("expr tl_local_int", error=True, substrs=["couldn't get the value of variable tl_local_int"])
|
||||
//% self.expect("expr *tl_local_ptr", error=True, substrs=["couldn't get the value of variable tl_local_ptr"])
|
||||
thread_local int tl_local_int = 321;
|
||||
thread_local int *tl_local_ptr = nullptr;
|
||||
tl_local_ptr = &tl_local_int;
|
||||
tl_local_int++;
|
||||
//% self.expect("expr tl_local_int + 1", substrs=["int", "= 323"])
|
||||
//% self.expect("expr *tl_local_ptr + 2", substrs=["int", "= 324"])
|
||||
//% self.expect("expr tl_global_int", substrs=["int", "= 123"])
|
||||
//% self.expect("expr *tl_global_ptr", substrs=["int", "= 45"])
|
||||
return 0;
|
||||
return 0; // Set breakpoint here
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue