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/Utility/Reproducer.h"
15047c4b03SMed Ismail Bennani #include "lldb/lldb-enumerations.h"
16047c4b03SMed Ismail Bennani #include "lldb/lldb-forward.h"
17047c4b03SMed Ismail Bennani #include "lldb/lldb-private-enumerations.h"
18047c4b03SMed Ismail Bennani #include "lldb/lldb-private.h"
19047c4b03SMed Ismail Bennani #include "llvm/Support/FormatVariadic.h"
20047c4b03SMed Ismail Bennani #include "gtest/gtest.h"
21047c4b03SMed Ismail Bennani
22047c4b03SMed Ismail Bennani using namespace lldb_private;
23047c4b03SMed Ismail Bennani using namespace lldb_private::repro;
24047c4b03SMed Ismail Bennani using namespace lldb;
25047c4b03SMed Ismail Bennani
26047c4b03SMed Ismail Bennani namespace {
27047c4b03SMed Ismail Bennani class StackFrameRecognizerTest : public ::testing::Test {
28047c4b03SMed Ismail Bennani public:
SetUp()29047c4b03SMed Ismail Bennani void SetUp() override {
30047c4b03SMed Ismail Bennani llvm::cantFail(Reproducer::Initialize(ReproducerMode::Off, llvm::None));
31047c4b03SMed Ismail Bennani FileSystem::Initialize();
32047c4b03SMed Ismail Bennani HostInfo::Initialize();
33047c4b03SMed Ismail Bennani
34047c4b03SMed Ismail Bennani // Pretend Linux is the host platform.
35047c4b03SMed Ismail Bennani platform_linux::PlatformLinux::Initialize();
36047c4b03SMed Ismail Bennani ArchSpec arch("powerpc64-pc-linux");
37047c4b03SMed Ismail Bennani Platform::SetHostPlatform(
38047c4b03SMed Ismail Bennani platform_linux::PlatformLinux::CreateInstance(true, &arch));
39047c4b03SMed Ismail Bennani }
40047c4b03SMed Ismail Bennani
TearDown()41047c4b03SMed Ismail Bennani void TearDown() override {
42047c4b03SMed Ismail Bennani platform_linux::PlatformLinux::Terminate();
43047c4b03SMed Ismail Bennani HostInfo::Terminate();
44047c4b03SMed Ismail Bennani FileSystem::Terminate();
45047c4b03SMed Ismail Bennani Reproducer::Terminate();
46047c4b03SMed Ismail Bennani }
47047c4b03SMed Ismail Bennani };
48047c4b03SMed Ismail Bennani
49047c4b03SMed Ismail Bennani class DummyStackFrameRecognizer : public StackFrameRecognizer {
50047c4b03SMed Ismail Bennani public:
GetName()51047c4b03SMed Ismail Bennani std::string GetName() override { return "Dummy StackFrame Recognizer"; }
52047c4b03SMed Ismail Bennani };
53047c4b03SMed Ismail Bennani
RegisterDummyStackFrameRecognizer(StackFrameRecognizerManager & manager)54*1b7c9eaeSRaphael Isemann void RegisterDummyStackFrameRecognizer(StackFrameRecognizerManager &manager) {
55047c4b03SMed Ismail Bennani RegularExpressionSP module_regex_sp = nullptr;
56047c4b03SMed Ismail Bennani RegularExpressionSP symbol_regex_sp(new RegularExpression("boom"));
57047c4b03SMed Ismail Bennani
58047c4b03SMed Ismail Bennani StackFrameRecognizerSP dummy_recognizer_sp(new DummyStackFrameRecognizer());
59047c4b03SMed Ismail Bennani
60*1b7c9eaeSRaphael Isemann manager.AddRecognizer(dummy_recognizer_sp, module_regex_sp, symbol_regex_sp,
61*1b7c9eaeSRaphael Isemann false);
62047c4b03SMed Ismail Bennani }
63047c4b03SMed Ismail Bennani
64047c4b03SMed Ismail Bennani } // namespace
65047c4b03SMed Ismail Bennani
TEST_F(StackFrameRecognizerTest,NullModuleRegex)66047c4b03SMed Ismail Bennani TEST_F(StackFrameRecognizerTest, NullModuleRegex) {
67047c4b03SMed Ismail Bennani DebuggerSP debugger_sp = Debugger::CreateInstance();
68047c4b03SMed Ismail Bennani ASSERT_TRUE(debugger_sp);
69047c4b03SMed Ismail Bennani
70*1b7c9eaeSRaphael Isemann StackFrameRecognizerManager manager;
71*1b7c9eaeSRaphael Isemann
72*1b7c9eaeSRaphael Isemann RegisterDummyStackFrameRecognizer(manager);
73047c4b03SMed Ismail Bennani
74047c4b03SMed Ismail Bennani bool any_printed = false;
75*1b7c9eaeSRaphael Isemann manager.ForEach([&any_printed](uint32_t recognizer_id, std::string name,
76*1b7c9eaeSRaphael Isemann std::string function,
77*1b7c9eaeSRaphael Isemann llvm::ArrayRef<ConstString> symbols,
78047c4b03SMed Ismail Bennani bool regexp) { any_printed = true; });
79047c4b03SMed Ismail Bennani
80047c4b03SMed Ismail Bennani EXPECT_TRUE(any_printed);
81047c4b03SMed Ismail Bennani }
82