This revision was automatically updated to reflect the committed changes.
labath marked an inline comment as done.
Closed by commit rG553558292eae: [lldb/dyld-posix] Avoid reading the module
list in inconsistent states (authored by labath).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128264/new/
https://reviews.llvm.org/D128264
Files:
lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
Index: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
+++ lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
@@ -433,27 +433,31 @@
for (; I != E; ++I) {
ModuleSP module_sp =
LoadModuleAtAddress(I->file_spec, I->link_addr, I->base_addr, true);
- if (module_sp.get()) {
- if (module_sp->GetObjectFile()->GetBaseAddress().GetLoadAddress(
- &m_process->GetTarget()) == m_interpreter_base &&
- module_sp != m_interpreter_module.lock()) {
- if (m_interpreter_module.lock() == nullptr) {
- m_interpreter_module = module_sp;
- } else {
- // If this is a duplicate instance of ld.so, unload it. We may end
- // up with it if we load it via a different path than before
- // (symlink vs real path).
- // TODO: remove this once we either fix library matching or avoid
- // loading the interpreter when setting the rendezvous breakpoint.
- UnloadSections(module_sp);
- loaded_modules.Remove(module_sp);
- continue;
- }
+ if (!module_sp.get())
+ continue;
+
+ if (module_sp->GetObjectFile()->GetBaseAddress().GetLoadAddress(
+ &m_process->GetTarget()) == m_interpreter_base) {
+ ModuleSP interpreter_sp = m_interpreter_module.lock();
+ if (m_interpreter_module.lock() == nullptr) {
+ m_interpreter_module = module_sp;
+ } else if (module_sp == interpreter_sp) {
+ // Module already loaded.
+ continue;
+ } else {
+ // If this is a duplicate instance of ld.so, unload it. We may end
+ // up with it if we load it via a different path than before
+ // (symlink vs real path).
+ // TODO: remove this once we either fix library matching or avoid
+ // loading the interpreter when setting the rendezvous breakpoint.
+ UnloadSections(module_sp);
+ loaded_modules.Remove(module_sp);
+ continue;
}
-
- loaded_modules.AppendIfNeeded(module_sp);
- new_modules.Append(module_sp);
}
+
+ loaded_modules.AppendIfNeeded(module_sp);
+ new_modules.Append(module_sp);
}
m_process->GetTarget().ModulesDidLoad(new_modules);
}
Index: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
+++ lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
@@ -210,14 +210,7 @@
case eAdd:
case eDelete:
- // Some versions of the android dynamic linker might send two
- // notifications with state == eAdd back to back. Ignore them until we
- // get an eConsistent notification.
- if (!(m_previous.state == eConsistent ||
- (m_previous.state == eAdd && m_current.state == eDelete)))
- return eNoAction;
-
- return eTakeSnapshot;
+ return eNoAction;
}
return eNoAction;
@@ -229,9 +222,9 @@
if (action == eNoAction)
return false;
+ m_added_soentries.clear();
+ m_removed_soentries.clear();
if (action == eTakeSnapshot) {
- m_added_soentries.clear();
- m_removed_soentries.clear();
// We already have the loaded list from the previous update so no need to
// find all the modules again.
if (!m_loaded_modules.m_list.empty())
@@ -260,11 +253,11 @@
}
bool DYLDRendezvous::UpdateSOEntries() {
+ m_added_soentries.clear();
+ m_removed_soentries.clear();
switch (GetAction()) {
case eTakeSnapshot:
m_soentries.clear();
- m_added_soentries.clear();
- m_removed_soentries.clear();
return TakeSnapshot(m_soentries);
case eAddModules:
return AddSOEntries();
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits