1047c4b03SMed Ismail Bennani //===-- StackFrameRecognizerTest.cpp --------------------------------------===// 2047c4b03SMed Ismail Bennani // 3047c4b03SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4047c4b03SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information. 5047c4b03SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6047c4b03SMed Ismail Bennani // 7047c4b03SMed Ismail Bennani //===----------------------------------------------------------------------===// 8047c4b03SMed Ismail Bennani 9047c4b03SMed Ismail Bennani #include "lldb/Target/StackFrameRecognizer.h" 10047c4b03SMed Ismail Bennani #include "Plugins/Platform/Linux/PlatformLinux.h" 11047c4b03SMed Ismail Bennani #include "lldb/Core/Debugger.h" 12047c4b03SMed Ismail Bennani #include "lldb/Host/FileSystem.h" 13047c4b03SMed Ismail Bennani #include "lldb/Host/HostInfo.h" 14047c4b03SMed Ismail Bennani #include "lldb/lldb-enumerations.h" 15047c4b03SMed Ismail Bennani #include "lldb/lldb-forward.h" 16047c4b03SMed Ismail Bennani #include "lldb/lldb-private-enumerations.h" 17047c4b03SMed Ismail Bennani #include "lldb/lldb-private.h" 18047c4b03SMed Ismail Bennani #include "llvm/Support/FormatVariadic.h" 19047c4b03SMed Ismail Bennani #include "gtest/gtest.h" 20047c4b03SMed Ismail Bennani 21047c4b03SMed Ismail Bennani using namespace lldb_private; 22047c4b03SMed Ismail Bennani using namespace lldb_private::repro; 23047c4b03SMed Ismail Bennani using namespace lldb; 24047c4b03SMed Ismail Bennani 25047c4b03SMed Ismail Bennani namespace { 26047c4b03SMed Ismail Bennani class StackFrameRecognizerTest : public ::testing::Test { 27047c4b03SMed Ismail Bennani public: 28047c4b03SMed Ismail Bennani void SetUp() override { 29047c4b03SMed Ismail Bennani FileSystem::Initialize(); 30047c4b03SMed Ismail Bennani HostInfo::Initialize(); 31047c4b03SMed Ismail Bennani 32047c4b03SMed Ismail Bennani // Pretend Linux is the host platform. 33047c4b03SMed Ismail Bennani platform_linux::PlatformLinux::Initialize(); 34047c4b03SMed Ismail Bennani ArchSpec arch("powerpc64-pc-linux"); 35d6678404SMed Ismail Bennani Platform::SetHostPlatform( 36d6678404SMed Ismail Bennani platform_linux::PlatformLinux::CreateInstance(true, &arch)); 37047c4b03SMed Ismail Bennani } 38047c4b03SMed Ismail Bennani 39047c4b03SMed Ismail Bennani void TearDown() override { 40047c4b03SMed Ismail Bennani platform_linux::PlatformLinux::Terminate(); 41047c4b03SMed Ismail Bennani HostInfo::Terminate(); 42047c4b03SMed Ismail Bennani FileSystem::Terminate(); 43047c4b03SMed Ismail Bennani } 44047c4b03SMed Ismail Bennani }; 45047c4b03SMed Ismail Bennani 46047c4b03SMed Ismail Bennani class DummyStackFrameRecognizer : public StackFrameRecognizer { 47047c4b03SMed Ismail Bennani public: 48047c4b03SMed Ismail Bennani std::string GetName() override { return "Dummy StackFrame Recognizer"; } 49047c4b03SMed Ismail Bennani }; 50047c4b03SMed Ismail Bennani 511b7c9eaeSRaphael Isemann void RegisterDummyStackFrameRecognizer(StackFrameRecognizerManager &manager) { 52047c4b03SMed Ismail Bennani RegularExpressionSP module_regex_sp = nullptr; 53047c4b03SMed Ismail Bennani RegularExpressionSP symbol_regex_sp(new RegularExpression("boom")); 54047c4b03SMed Ismail Bennani 55047c4b03SMed Ismail Bennani StackFrameRecognizerSP dummy_recognizer_sp(new DummyStackFrameRecognizer()); 56047c4b03SMed Ismail Bennani 571b7c9eaeSRaphael Isemann manager.AddRecognizer(dummy_recognizer_sp, module_regex_sp, symbol_regex_sp, 58dd060bdeSAdrian Vogelsgesang Mangled::NamePreference::ePreferDemangled, false); 59047c4b03SMed Ismail Bennani } 60047c4b03SMed Ismail Bennani 61047c4b03SMed Ismail Bennani } // namespace 62047c4b03SMed Ismail Bennani 63047c4b03SMed Ismail Bennani TEST_F(StackFrameRecognizerTest, NullModuleRegex) { 64047c4b03SMed Ismail Bennani DebuggerSP debugger_sp = Debugger::CreateInstance(); 65047c4b03SMed Ismail Bennani ASSERT_TRUE(debugger_sp); 66047c4b03SMed Ismail Bennani 671b7c9eaeSRaphael Isemann StackFrameRecognizerManager manager; 681b7c9eaeSRaphael Isemann 691b7c9eaeSRaphael Isemann RegisterDummyStackFrameRecognizer(manager); 70047c4b03SMed Ismail Bennani 71047c4b03SMed Ismail Bennani bool any_printed = false; 72*d8d252feSAdrian Vogelsgesang manager.ForEach([&any_printed](uint32_t recognizer_id, bool enabled, 73*d8d252feSAdrian Vogelsgesang std::string name, std::string function, 741b7c9eaeSRaphael Isemann llvm::ArrayRef<ConstString> symbols, 75dd060bdeSAdrian Vogelsgesang Mangled::NamePreference symbol_mangling, 76047c4b03SMed Ismail Bennani bool regexp) { any_printed = true; }); 77047c4b03SMed Ismail Bennani 78047c4b03SMed Ismail Bennani EXPECT_TRUE(any_printed); 79047c4b03SMed Ismail Bennani } 80