[Lldb-commits] [lldb] r173745 - <rdar://problem/12524607>
Greg Clayton
gclayton at apple.com
Mon Jan 28 17:17:09 PST 2013
Author: gclayton
Date: Mon Jan 28 19:17:09 2013
New Revision: 173745
URL: http://llvm.org/viewvc/llvm-project?rev=173745&view=rev
Log:
<rdar://problem/12524607>
Flush the process when symbols are loaded/unloaded manually. This was going on in:
- "target modules load" command
- SBTarget::SetSectionLoadAddress(...)
- SBTarget::ClearSectionLoadAddress(...)
- SBTarget::SetModuleLoadAddress(...)
- SBTarget::ClearModuleLoadAddress(...)
Modified:
lldb/trunk/source/API/SBTarget.cpp
lldb/trunk/source/Commands/CommandObjectTarget.cpp
lldb/trunk/source/Target/SectionLoadList.cpp
Modified: lldb/trunk/source/API/SBTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBTarget.cpp?rev=173745&r1=173744&r2=173745&view=diff
==============================================================================
--- lldb/trunk/source/API/SBTarget.cpp (original)
+++ lldb/trunk/source/API/SBTarget.cpp Mon Jan 28 19:17:09 2013
@@ -2329,7 +2329,13 @@ SBTarget::SetSectionLoadAddress (lldb::S
}
else
{
- target_sp->GetSectionLoadList().SetSectionLoadAddress (section_sp, section_base_addr);
+ if (target_sp->GetSectionLoadList().SetSectionLoadAddress (section_sp, section_base_addr))
+ {
+ // Flush info in the process (stack frames, etc)
+ ProcessSP process_sp (target_sp->GetProcessSP());
+ if (process_sp)
+ process_sp->Flush();
+ }
}
}
}
@@ -2355,7 +2361,13 @@ SBTarget::ClearSectionLoadAddress (lldb:
}
else
{
- target_sp->GetSectionLoadList().SetSectionUnloaded (section.GetSP());
+ if (target_sp->GetSectionLoadList().SetSectionUnloaded (section.GetSP()))
+ {
+ // Flush info in the process (stack frames, etc)
+ ProcessSP process_sp (target_sp->GetProcessSP());
+ if (process_sp)
+ process_sp->Flush();
+ }
}
}
else
@@ -2386,6 +2398,10 @@ SBTarget::SetModuleLoadAddress (lldb::SB
ModuleList module_list;
module_list.Append(module_sp);
target_sp->ModulesDidLoad (module_list);
+ // Flush info in the process (stack frames, etc)
+ ProcessSP process_sp (target_sp->GetProcessSP());
+ if (process_sp)
+ process_sp->Flush();
}
}
}
@@ -2420,12 +2436,20 @@ SBTarget::ClearModuleLoadAddress (lldb::
SectionList *section_list = objfile->GetSectionList();
if (section_list)
{
+ bool changed = false;
const size_t num_sections = section_list->GetSize();
for (size_t sect_idx = 0; sect_idx < num_sections; ++sect_idx)
{
SectionSP section_sp (section_list->GetSectionAtIndex(sect_idx));
if (section_sp)
- target_sp->GetSectionLoadList().SetSectionUnloaded (section_sp);
+ changed |= target_sp->GetSectionLoadList().SetSectionUnloaded (section_sp) > 0;
+ }
+ if (changed)
+ {
+ // Flush info in the process (stack frames, etc)
+ ProcessSP process_sp (target_sp->GetProcessSP());
+ if (process_sp)
+ process_sp->Flush();
}
}
else
Modified: lldb/trunk/source/Commands/CommandObjectTarget.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectTarget.cpp?rev=173745&r1=173744&r2=173745&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectTarget.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectTarget.cpp Mon Jan 28 19:17:09 2013
@@ -2915,7 +2915,12 @@ protected:
}
if (changed)
+ {
target->ModulesDidLoad (matching_modules);
+ Process *process = m_exe_ctx.GetProcessPtr();
+ if (process)
+ process->Flush();
+ }
}
else
{
@@ -4171,7 +4176,6 @@ public:
{
LoadSubCommand ("add", CommandObjectSP (new CommandObjectTargetModulesAdd (interpreter)));
LoadSubCommand ("load", CommandObjectSP (new CommandObjectTargetModulesLoad (interpreter)));
- //LoadSubCommand ("unload", CommandObjectSP (new CommandObjectTargetModulesUnload (interpreter)));
LoadSubCommand ("dump", CommandObjectSP (new CommandObjectTargetModulesDump (interpreter)));
LoadSubCommand ("list", CommandObjectSP (new CommandObjectTargetModulesList (interpreter)));
LoadSubCommand ("lookup", CommandObjectSP (new CommandObjectTargetModulesLookup (interpreter)));
Modified: lldb/trunk/source/Target/SectionLoadList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/SectionLoadList.cpp?rev=173745&r1=173744&r2=173745&view=diff
==============================================================================
--- lldb/trunk/source/Target/SectionLoadList.cpp (original)
+++ lldb/trunk/source/Target/SectionLoadList.cpp Mon Jan 28 19:17:09 2013
@@ -155,6 +155,7 @@ SectionLoadList::SetSectionUnloaded (con
sect_to_addr_collection::iterator sta_pos = m_sect_to_addr.find(section_sp.get());
if (sta_pos != m_sect_to_addr.end())
{
+ ++unload_count;
addr_t load_addr = sta_pos->second;
m_sect_to_addr.erase (sta_pos);
More information about the lldb-commits
mailing list