diff options
| author | Mingming Liu <mingmingl@google.com> | 2025-09-10 15:25:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-10 15:25:31 -0700 |
| commit | 1417dafa1db9cb1b2b09438aa9f53ea5ab6e36e2 (patch) | |
| tree | 57f4b1f313c8cf74eed8819870f39c36ea263c68 /lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py | |
| parent | 898b813bc8a6d0276bf0f4769f5f2f64b34e632d (diff) | |
| parent | b8cefcb601ddaa18482555c4ff363c01a270c2fe (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.py | 62 |
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) |
