Coverage Report

Created: 2023-11-11 10:31

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Target/InstrumentationRuntime.h
Line
Count
Source
1
//===-- InstrumentationRuntime.h --------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_TARGET_INSTRUMENTATIONRUNTIME_H
10
#define LLDB_TARGET_INSTRUMENTATIONRUNTIME_H
11
12
#include <map>
13
#include <vector>
14
15
#include "lldb/Core/PluginInterface.h"
16
#include "lldb/Utility/StructuredData.h"
17
#include "lldb/lldb-forward.h"
18
#include "lldb/lldb-private.h"
19
#include "lldb/lldb-types.h"
20
21
namespace lldb_private {
22
23
typedef std::map<lldb::InstrumentationRuntimeType,
24
                 lldb::InstrumentationRuntimeSP>
25
    InstrumentationRuntimeCollection;
26
27
class InstrumentationRuntime
28
    : public std::enable_shared_from_this<InstrumentationRuntime>,
29
      public PluginInterface {
30
  /// The instrumented process.
31
  lldb::ProcessWP m_process_wp;
32
33
  /// The module containing the instrumentation runtime.
34
  lldb::ModuleSP m_runtime_module;
35
36
  /// The breakpoint in the instrumentation runtime.
37
  lldb::user_id_t m_breakpoint_id;
38
39
  /// Indicates whether or not breakpoints have been registered in the
40
  /// instrumentation runtime.
41
  bool m_is_active;
42
43
protected:
44
  InstrumentationRuntime(const lldb::ProcessSP &process_sp)
45
11.3k
      : m_breakpoint_id(0), m_is_active(false) {
46
11.3k
    if (process_sp)
47
11.3k
      m_process_wp = process_sp;
48
11.3k
  }
49
50
8
  lldb::ProcessSP GetProcessSP() { return m_process_wp.lock(); }
51
52
46.5k
  lldb::ModuleSP GetRuntimeModuleSP() { return m_runtime_module; }
53
54
2
  void SetRuntimeModuleSP(lldb::ModuleSP module_sp) {
55
2
    m_runtime_module = std::move(module_sp);
56
2
  }
57
58
11.3k
  lldb::user_id_t GetBreakpointID() const { return m_breakpoint_id; }
59
60
4
  void SetBreakpointID(lldb::user_id_t ID) { m_breakpoint_id = ID; }
61
62
11.3k
  void SetActive(bool IsActive) { m_is_active = IsActive; }
63
64
  /// Return a regular expression which can be used to identify a valid version
65
  /// of the runtime library.
66
  virtual const RegularExpression &GetPatternForRuntimeLibrary() = 0;
67
68
  /// Check whether \p module_sp corresponds to a valid runtime library.
69
  virtual bool CheckIfRuntimeIsValid(const lldb::ModuleSP module_sp) = 0;
70
71
  /// Register a breakpoint in the runtime library and perform any other
72
  /// necessary initialization. The runtime library
73
  /// is guaranteed to be loaded.
74
  virtual void Activate() = 0;
75
76
public:
77
  static void ModulesDidLoad(lldb_private::ModuleList &module_list,
78
                             Process *process,
79
                             InstrumentationRuntimeCollection &runtimes);
80
81
  /// Look for the instrumentation runtime in \p module_list. Register and
82
  /// activate the runtime if this hasn't already
83
  /// been done.
84
  void ModulesDidLoad(lldb_private::ModuleList &module_list);
85
86
46.5k
  bool IsActive() const { return m_is_active; }
87
88
  virtual lldb::ThreadCollectionSP
89
  GetBacktracesFromExtendedStopInfo(StructuredData::ObjectSP info);
90
};
91
92
} // namespace lldb_private
93
94
#endif // LLDB_TARGET_INSTRUMENTATIONRUNTIME_H