xref: /llvm-project/lldb/unittests/Target/StackFrameRecognizerTest.cpp (revision d8d252fe96877f9fdbf6b0b6c19da543e796bb84)
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