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.
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@144981 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Core/ModuleList.cpp b/source/Core/ModuleList.cpp
index d5cf9ab..9799f92 100644
--- a/source/Core/ModuleList.cpp
+++ b/source/Core/ModuleList.cpp
@@ -248,14 +248,35 @@
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