summaryrefslogtreecommitdiff
path: root/lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py
diff options
context:
space:
mode:
authorMingming Liu <mingmingl@google.com>2025-09-10 15:25:31 -0700
committerGitHub <noreply@github.com>2025-09-10 15:25:31 -0700
commit1417dafa1db9cb1b2b09438aa9f53ea5ab6e36e2 (patch)
tree57f4b1f313c8cf74eed8819870f39c36ea263c68 /lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py
parent898b813bc8a6d0276bf0f4769f5f2f64b34e632d (diff)
parentb8cefcb601ddaa18482555c4ff363c01a270c2fe (diff)
Merge branch 'main' into users/mingmingl-llvm/samplefdo-profile-formatusers/mingmingl-llvm/samplefdo-profile-format
Diffstat (limited to 'lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py')
-rw-r--r--lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py b/lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py
new file mode 100644
index 000000000000..afa97cf4afe5
--- /dev/null
+++ b/lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py
@@ -0,0 +1,62 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+import gc
+import os
+
+
+class ReplaceDllTestCase(TestBase):
+ @skipUnlessWindows
+ def test(self):
+ """
+ Test that LLDB unlocks module files once all references are released.
+ """
+
+ exe = self.getBuildArtifact("a.out")
+ foo = self.getBuildArtifact("foo.dll")
+ bar = self.getBuildArtifact("bar.dll")
+
+ self.build(
+ dictionary={
+ "DYLIB_NAME": "foo",
+ "DYLIB_C_SOURCES": "foo.c",
+ "C_SOURCES": "test.c",
+ }
+ )
+ self.build(
+ dictionary={
+ "DYLIB_ONLY": "YES",
+ "DYLIB_NAME": "bar",
+ "DYLIB_C_SOURCES": "bar.c",
+ }
+ )
+
+ target = self.dbg.CreateTarget(exe)
+ self.assertTrue(target, VALID_TARGET)
+
+ shlib_names = ["foo"]
+ environment = self.registerSharedLibrariesWithTarget(target, shlib_names)
+ process = target.LaunchSimple(
+ None, environment, self.get_process_working_directory()
+ )
+ self.assertEqual(process.GetExitStatus(), 42)
+
+ module = next((m for m in target.modules if "foo" in m.file.basename), None)
+ self.assertIsNotNone(module)
+ self.assertEqual(module.file.fullpath, foo)
+
+ target.RemoveModule(module)
+ del module
+ gc.collect()
+
+ self.dbg.MemoryPressureDetected()
+
+ os.remove(foo)
+ os.rename(bar, foo)
+
+ process = target.LaunchSimple(
+ None, environment, self.get_process_working_directory()
+ )
+ self.assertEqual(process.GetExitStatus(), 43)