Skip to content

Commit

Permalink
Properly unload modules from target image list when using svr4 packets
Browse files Browse the repository at this point in the history
Summary:
When we receive an svr4 packet from the remote, we check for new modules
and add them to the list of images in the target. However, we did not
do the same for modules which have been removed.

This was causing TestLoadUnload to fail when using ds2, which uses
svr4 packets to communicate all library info on Linux. This patch fixes
the failing test.

Reviewers: zturner, tfiala, ADodds

Subscribers: lldb-commits, sas

Differential Revision: http://reviews.llvm.org/D19230

This is a cherry-pick of 267467

llvm-svn: 270133
  • Loading branch information
fjricci committed May 19, 2016
1 parent 4cad5d2 commit 780cdbb
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
Expand Up @@ -4851,7 +4851,31 @@ ProcessGDBRemote::LoadModules (LoadedModuleInfoList &module_list)

if (new_modules.GetSize() > 0)
{
ModuleList removed_modules;
Target &target = GetTarget();
ModuleList &loaded_modules = m_process->GetTarget().GetImages();

for (size_t i = 0; i < loaded_modules.GetSize(); ++i)
{
const lldb::ModuleSP loaded_module = loaded_modules.GetModuleAtIndex(i);

bool found = false;
for (size_t j = 0; j < new_modules.GetSize(); ++j)
{
if (new_modules.GetModuleAtIndex(j).get() == loaded_module.get())
found = true;
}

if (!found)
{
lldb_private::ObjectFile * obj = loaded_module->GetObjectFile ();
if (obj && obj->GetType () != ObjectFile::Type::eTypeExecutable)
removed_modules.Append (loaded_module);
}
}

loaded_modules.Remove (removed_modules);
m_process->GetTarget().ModulesDidUnload (removed_modules, false);

new_modules.ForEach ([&target](const lldb::ModuleSP module_sp) -> bool
{
Expand All @@ -4867,13 +4891,11 @@ ProcessGDBRemote::LoadModules (LoadedModuleInfoList &module_list)
return false;
});

ModuleList &loaded_modules = m_process->GetTarget().GetImages();
loaded_modules.AppendIfNeeded (new_modules);
m_process->GetTarget().ModulesDidLoad (new_modules);
}

return new_modules.GetSize();

}

size_t
Expand Down

0 comments on commit 780cdbb

Please sign in to comment.