Skip to content

Commit

Permalink
If the user has specified target.memory-module-load-level 'minimal'
Browse files Browse the repository at this point in the history
and we couldn't find a dyld binary on the debug system, override
that setting and read dyld out of memory - we need to put an
internal breakpoint on dyld to register binaries being loaded or
unloaded; the debugger won't work right without dyld symbols.

<rdar://problem/27857025> 

llvm-svn: 279704
  • Loading branch information
jasonmolenda committed Aug 25, 2016
1 parent b42e0e7 commit 30c18ec
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2454,7 +2454,10 @@ ObjectFileMachO::ParseSymtab ()

if (!data_was_read)
{
if (memory_module_load_level == eMemoryModuleLoadLevelComplete)
// Always load dyld - the dynamic linker - from memory if we didn't find a binary anywhere else.
// lldb will not register dylib/framework/bundle loads/unloads if we don't have the dyld symbols,
// we force dyld to load from memory despite the user's target.memory-module-load-level setting.
if (memory_module_load_level == eMemoryModuleLoadLevelComplete || m_header.filetype == llvm::MachO::MH_DYLINKER)
{
DataBufferSP nlist_data_sp (ReadMemory (process_sp, symoff_addr, nlist_data_byte_size));
if (nlist_data_sp)
Expand All @@ -2472,8 +2475,7 @@ ObjectFileMachO::ParseSymtab ()
indirect_symbol_index_data.SetData (indirect_syms_data_sp, 0, indirect_syms_data_sp->GetByteSize());
}
}

if (memory_module_load_level >= eMemoryModuleLoadLevelPartial)
else if (memory_module_load_level >= eMemoryModuleLoadLevelPartial)
{
if (function_starts_load_command.cmd)
{
Expand Down

0 comments on commit 30c18ec

Please sign in to comment.