/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 | 9.00k | : m_breakpoint_id(0), m_is_active(false) { |
46 | 9.00k | if (process_sp) |
47 | 9.00k | m_process_wp = process_sp; |
48 | 9.00k | } |
49 | | |
50 | 8 | lldb::ProcessSP GetProcessSP() { return m_process_wp.lock(); } |
51 | | |
52 | 37.0k | 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 | 9.00k | 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 | 9.00k | 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 | 37.0k | 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 |