diff options
author | Jim Ingham <jingham@apple.com> | 2011-11-19 00:19:25 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2011-11-19 00:19:25 +0000 |
commit | 9683ff1211c1a00c812dfb6537421f3e99cd77cb (patch) | |
tree | ad4966613a9f826abe1b85e746344d5032a6ffb3 /lldb/source/Core/ModuleList.cpp | |
parent | 6dc4c16417f13295f638a8360fd96237130140df (diff) | |
download | bcm5719-llvm-9683ff1211c1a00c812dfb6537421f3e99cd77cb.tar.gz bcm5719-llvm-9683ff1211c1a00c812dfb6537421f3e99cd77cb.zip |
Handle stepping through a trampoline where the jump target is calculated a runtime - and so doesn't match
the name of the PLT entry. This solution assumes a naming convention agreed upon by us and the system folks,
and isn't general. The general solution requires actually finding & calling the resolver function if it
hasn't been called yet. That's more tricky.
llvm-svn: 144981
Diffstat (limited to 'lldb/source/Core/ModuleList.cpp')
-rw-r--r-- | lldb/source/Core/ModuleList.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp index d5cf9ab4566..9799f924575 100644 --- a/lldb/source/Core/ModuleList.cpp +++ b/lldb/source/Core/ModuleList.cpp @@ -248,14 +248,35 @@ ModuleList::FindGlobalVariables (const RegularExpression& regex, size_t ModuleList::FindSymbolsWithNameAndType (const ConstString &name, SymbolType symbol_type, - SymbolContextList &sc_list) + SymbolContextList &sc_list, + bool append) { Mutex::Locker locker(m_modules_mutex); - sc_list.Clear(); + if (!append) + sc_list.Clear(); + size_t initial_size = sc_list.GetSize(); + collection::iterator pos, end = m_modules.end(); for (pos = m_modules.begin(); pos != end; ++pos) (*pos)->FindSymbolsWithNameAndType (name, symbol_type, sc_list); - return sc_list.GetSize(); + return sc_list.GetSize() - initial_size; +} + + size_t +ModuleList::FindSymbolsMatchingRegExAndType (const RegularExpression ®ex, + lldb::SymbolType symbol_type, + SymbolContextList &sc_list, + bool append) +{ + Mutex::Locker locker(m_modules_mutex); + if (!append) + sc_list.Clear(); + size_t initial_size = sc_list.GetSize(); + + collection::iterator pos, end = m_modules.end(); + for (pos = m_modules.begin(); pos != end; ++pos) + (*pos)->FindSymbolsMatchingRegExAndType (regex, symbol_type, sc_list); + return sc_list.GetSize() - initial_size; } class ModuleMatches |