summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2014-01-11 01:21:50 +0000
committerJim Ingham <jingham@apple.com>2014-01-11 01:21:50 +0000
commit55d3a0c3d4777d8bbb5c5ddc735d5d61b328a2b2 (patch)
treef670f630228851ea2bf4dccc90a5a462613b375f
parent9425891f28f589da0e535b106928f5ff42115aea (diff)
downloadbcm5719-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.cpp23
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)
OpenPOWER on IntegriCloud