[Lldb-commits] [lldb] e311601 - [lldb][Test] TestRerunAndExprDylib.py on Linux: dlclose solib to force destruction module
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Mon Dec 5 10:14:53 PST 2022
Author: Michael Buch
Date: 2022-12-05T18:14:26Z
New Revision: e31160155e484414db9177806ae9f0840c985b49
URL: https://github.com/llvm/llvm-project/commit/e31160155e484414db9177806ae9f0840c985b49
DIFF: https://github.com/llvm/llvm-project/commit/e31160155e484414db9177806ae9f0840c985b49.diff
LOG: [lldb][Test] TestRerunAndExprDylib.py on Linux: dlclose solib to force destruction module
Previously we didn't properly trigger the destructor of
the `lldb_private::Module` backing `libfoo.so`. So the newly
rebuilt version wouldn't actually be loaded on a program re-run.
The test expects the fresh module to be loaded.
Added:
Modified:
lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
Removed:
################################################################################
diff --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py b/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
index cf322215a65a1..93e586237b99c 100644
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
+++ b/lldb/test/API/functionalities/rerun_and_expr_dylib/TestRerunAndExprDylib.py
@@ -45,7 +45,8 @@ def test(self):
exe = self.getBuildArtifact("a.out")
target = self.dbg.CreateTarget(exe)
- breakpoint = target.BreakpointCreateBySourceRegex('return', lldb.SBFileSpec('main.cpp'))
+ target.BreakpointCreateBySourceRegex('dlclose', lldb.SBFileSpec('main.cpp'))
+ target.BreakpointCreateBySourceRegex('return', lldb.SBFileSpec('main.cpp'))
process = target.LaunchSimple(None, None, self.get_process_working_directory())
self.expect_expr('*foo', result_type='Foo', result_children=[
@@ -60,6 +61,7 @@ def test(self):
'LD_EXTRAS':'-L.'})
# Rerun program within the same target
+ process.Continue()
process.Destroy()
process = target.LaunchSimple(None, None, self.get_process_working_directory())
diff --git a/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp b/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
index bbd218bef66c2..701f387627903 100644
--- a/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
+++ b/lldb/test/API/functionalities/rerun_and_expr_dylib/main.cpp
@@ -13,5 +13,9 @@ int main() {
struct Foo *foo = (struct Foo *)dlsym(handle, "global_foo");
assert(foo != nullptr);
+ // Unload dylib (important on Linux so a program re-run loads
+ // an updated version of the dylib and destroys the old lldb module).
+ dlclose(handle);
+
return 0;
}
More information about the lldb-commits
mailing list