diff options
Diffstat (limited to 'lldb/source/Target/StackFrameRecognizer.cpp')
-rw-r--r-- | lldb/source/Target/StackFrameRecognizer.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lldb/source/Target/StackFrameRecognizer.cpp b/lldb/source/Target/StackFrameRecognizer.cpp index 44411af..fa24253 100644 --- a/lldb/source/Target/StackFrameRecognizer.cpp +++ b/lldb/source/Target/StackFrameRecognizer.cpp @@ -62,25 +62,29 @@ void StackFrameRecognizerManager::BumpGeneration() { void StackFrameRecognizerManager::AddRecognizer( StackFrameRecognizerSP recognizer, ConstString module, - llvm::ArrayRef<ConstString> symbols, bool first_instruction_only) { + llvm::ArrayRef<ConstString> symbols, + Mangled::NamePreference symbol_mangling, bool first_instruction_only) { m_recognizers.push_front({(uint32_t)m_recognizers.size(), recognizer, false, module, RegularExpressionSP(), symbols, - RegularExpressionSP(), first_instruction_only}); + RegularExpressionSP(), symbol_mangling, + first_instruction_only}); BumpGeneration(); } void StackFrameRecognizerManager::AddRecognizer( StackFrameRecognizerSP recognizer, RegularExpressionSP module, - RegularExpressionSP symbol, bool first_instruction_only) { + RegularExpressionSP symbol, Mangled::NamePreference symbol_mangling, + bool first_instruction_only) { m_recognizers.push_front({(uint32_t)m_recognizers.size(), recognizer, true, ConstString(), module, std::vector<ConstString>(), - symbol, first_instruction_only}); + symbol, symbol_mangling, first_instruction_only}); BumpGeneration(); } void StackFrameRecognizerManager::ForEach( - const std::function<void(uint32_t, std::string, std::string, - llvm::ArrayRef<ConstString>, bool)> &callback) { + const std::function< + void(uint32_t, std::string, std::string, llvm::ArrayRef<ConstString>, + Mangled::NamePreference name_reference, bool)> &callback) { for (auto entry : m_recognizers) { if (entry.is_regexp) { std::string module_name; @@ -92,11 +96,13 @@ void StackFrameRecognizerManager::ForEach( symbol_name = entry.symbol_regexp->GetText().str(); callback(entry.recognizer_id, entry.recognizer->GetName(), module_name, - llvm::ArrayRef(ConstString(symbol_name)), true); + llvm::ArrayRef(ConstString(symbol_name)), entry.symbol_mangling, + true); } else { callback(entry.recognizer_id, entry.recognizer->GetName(), - entry.module.GetCString(), entry.symbols, false); + entry.module.GetCString(), entry.symbols, entry.symbol_mangling, + false); } } } @@ -125,7 +131,6 @@ StackFrameRecognizerSP StackFrameRecognizerManager::GetRecognizerForFrame(StackFrameSP frame) { const SymbolContext &symctx = frame->GetSymbolContext( eSymbolContextModule | eSymbolContextFunction | eSymbolContextSymbol); - ConstString function_name = symctx.GetFunctionName(); ModuleSP module_sp = symctx.module_sp; if (!module_sp) return StackFrameRecognizerSP(); @@ -145,6 +150,8 @@ StackFrameRecognizerManager::GetRecognizerForFrame(StackFrameSP frame) { if (!entry.module_regexp->Execute(module_name.GetStringRef())) continue; + ConstString function_name = symctx.GetFunctionName(entry.symbol_mangling); + if (!entry.symbols.empty()) if (!llvm::is_contained(entry.symbols, function_name)) continue; |