diff options
author | Jim Ingham <jingham@apple.com> | 2014-01-11 01:21:50 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2014-01-11 01:21:50 +0000 |
commit | 55d3a0c3d4777d8bbb5c5ddc735d5d61b328a2b2 (patch) | |
tree | f670f630228851ea2bf4dccc90a5a462613b375f | |
parent | 9425891f28f589da0e535b106928f5ff42115aea (diff) | |
download | bcm5719-llvm-55d3a0c3d4777d8bbb5c5ddc735d5d61b328a2b2.tar.gz bcm5719-llvm-55d3a0c3d4777d8bbb5c5ddc735d5d61b328a2b2.zip |
Sometimes the trampoline refers directly to the indirect symbol. Handle that too.
llvm-svn: 198990
-rw-r--r-- | lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp index 43f6ce9e6a1..30ba80c0ba3 100644 --- a/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp +++ b/lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp @@ -1672,6 +1672,29 @@ DynamicLoaderMacOSXDYLD::GetStepThroughTrampolinePlan (Thread &thread, bool stop } } } + + SymbolContextList indirect_symbols; + images.FindSymbolsWithNameAndType(trampoline_name, eSymbolTypeResolver, indirect_symbols); + size_t num_indirect_symbols = indirect_symbols.GetSize(); + if (num_indirect_symbols > 0) + { + for (uint32_t i = 0; i < num_indirect_symbols; i++) + { + SymbolContext context; + AddressRange addr_range; + if (indirect_symbols.GetContextAtIndex(i, context)) + { + context.GetAddressRange (eSymbolContextEverything, 0, false, addr_range); + addresses.push_back(addr_range.GetBaseAddress()); + if (log) + { + addr_t load_addr = addr_range.GetBaseAddress().GetLoadAddress(target_sp.get()); + + log->Printf ("Found an indirect target symbol at 0x%" PRIx64 ".", load_addr); + } + } + } + } } } else if (current_symbol->GetType() == eSymbolTypeReExported) |