[all-commits] [llvm/llvm-project] 371d1a: [lldb] Use weak pointers instead of shared pointer...
Andrew Savonichev via All-commits
all-commits at lists.llvm.org
Thu Sep 4 04:36:35 PDT 2025
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 371d1a8e3e8513becf0e25ec6e6830d29221a902
https://github.com/llvm/llvm-project/commit/371d1a8e3e8513becf0e25ec6e6830d29221a902
Author: Andrew Savonichev <andrew.savonichev at gmail.com>
Date: 2025-09-04 (Thu, 04 Sep 2025)
Changed paths:
M lldb/source/Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h
A lldb/test/API/windows/launch/replace-dll/Makefile
A lldb/test/API/windows/launch/replace-dll/TestReplaceDLL.py
A lldb/test/API/windows/launch/replace-dll/bar.c
A lldb/test/API/windows/launch/replace-dll/foo.c
A lldb/test/API/windows/launch/replace-dll/test.c
Log Message:
-----------
[lldb] Use weak pointers instead of shared pointers in DynamicLoader (#156446)
DynamicLoaderWindowsDYLD uses pointers to Modules to maintain a map
from modules to their addresses, but it does not need to keep "strong"
references to them. Weak pointers should be enough, and would allow
modules to be released elsewhere.
Other DynamicLoader classes do not use shared pointers as well. For
example, DynamicLoaderPOSIXDYLD has a similar map with weak pointers.
Actually testing for modules being completely released can be tricky.
The test here is just to illustrate the case where shared pointers kept
modules in DynamicLoaderWindowsDYLD and prevented them from being
released. The test executes the following sequence:
1. Create a target, load an executable and run it.
2. Remove one module from the target. The target should be the last
actual use of the module, but we have another reference to it in the
shared module cache.
3. Call MemoryPressureDetected to remove this last reference from the
cache.
4. Replace the corresponding DLL file.
LLDB memory maps DLLs, and this makes files read-only on Windows. Unless
the modules are completely released (and therefore unmapped), (4) is
going to fail with "access denied".
However, the test does not trigger the bug completely - it passes with
and without the change.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list