1fc1e8551SJonas Devlieghere //===-- InstrumentationRuntimeMainThreadChecker.h----------------*- C++ -*-===//
2fc1e8551SJonas Devlieghere //
3fc1e8551SJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4fc1e8551SJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information.
5fc1e8551SJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fc1e8551SJonas Devlieghere //
7fc1e8551SJonas Devlieghere //===----------------------------------------------------------------------===//
8fc1e8551SJonas Devlieghere 
9cdc514e4SJonas Devlieghere #ifndef LLDB_SOURCE_PLUGINS_INSTRUMENTATIONRUNTIME_MAINTHREADCHECKER_INSTRUMENTATIONRUNTIMEMAINTHREADCHECKER_H
10cdc514e4SJonas Devlieghere #define LLDB_SOURCE_PLUGINS_INSTRUMENTATIONRUNTIME_MAINTHREADCHECKER_INSTRUMENTATIONRUNTIMEMAINTHREADCHECKER_H
11fc1e8551SJonas Devlieghere 
12fc1e8551SJonas Devlieghere #include "lldb/Target/ABI.h"
13fc1e8551SJonas Devlieghere #include "lldb/Target/InstrumentationRuntime.h"
14fc1e8551SJonas Devlieghere #include "lldb/Utility/StructuredData.h"
15fc1e8551SJonas Devlieghere #include "lldb/lldb-private.h"
16fc1e8551SJonas Devlieghere 
17fc1e8551SJonas Devlieghere namespace lldb_private {
18fc1e8551SJonas Devlieghere 
19fc1e8551SJonas Devlieghere class InstrumentationRuntimeMainThreadChecker
20fc1e8551SJonas Devlieghere     : public lldb_private::InstrumentationRuntime {
21fc1e8551SJonas Devlieghere public:
22fc1e8551SJonas Devlieghere   ~InstrumentationRuntimeMainThreadChecker() override;
23fc1e8551SJonas Devlieghere 
24fc1e8551SJonas Devlieghere   static lldb::InstrumentationRuntimeSP
25fc1e8551SJonas Devlieghere   CreateInstance(const lldb::ProcessSP &process_sp);
26fc1e8551SJonas Devlieghere 
27fc1e8551SJonas Devlieghere   static void Initialize();
28fc1e8551SJonas Devlieghere 
29fc1e8551SJonas Devlieghere   static void Terminate();
30fc1e8551SJonas Devlieghere 
GetPluginNameStatic()31*a3942318SPavel Labath   static llvm::StringRef GetPluginNameStatic() { return "MainThreadChecker"; }
32fc1e8551SJonas Devlieghere 
33fc1e8551SJonas Devlieghere   static lldb::InstrumentationRuntimeType GetTypeStatic();
34fc1e8551SJonas Devlieghere 
GetPluginName()35*a3942318SPavel Labath   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
36fc1e8551SJonas Devlieghere 
GetType()37fc1e8551SJonas Devlieghere   virtual lldb::InstrumentationRuntimeType GetType() { return GetTypeStatic(); }
38fc1e8551SJonas Devlieghere 
39fc1e8551SJonas Devlieghere   lldb::ThreadCollectionSP
40fc1e8551SJonas Devlieghere   GetBacktracesFromExtendedStopInfo(StructuredData::ObjectSP info) override;
41fc1e8551SJonas Devlieghere 
42fc1e8551SJonas Devlieghere private:
InstrumentationRuntimeMainThreadChecker(const lldb::ProcessSP & process_sp)43fc1e8551SJonas Devlieghere   InstrumentationRuntimeMainThreadChecker(const lldb::ProcessSP &process_sp)
44fc1e8551SJonas Devlieghere       : lldb_private::InstrumentationRuntime(process_sp) {}
45fc1e8551SJonas Devlieghere 
46fc1e8551SJonas Devlieghere   const RegularExpression &GetPatternForRuntimeLibrary() override;
47fc1e8551SJonas Devlieghere 
48fc1e8551SJonas Devlieghere   bool CheckIfRuntimeIsValid(const lldb::ModuleSP module_sp) override;
49fc1e8551SJonas Devlieghere 
50fc1e8551SJonas Devlieghere   void Activate() override;
51fc1e8551SJonas Devlieghere 
52fc1e8551SJonas Devlieghere   void Deactivate();
53fc1e8551SJonas Devlieghere 
54fc1e8551SJonas Devlieghere   static bool NotifyBreakpointHit(void *baton,
55fc1e8551SJonas Devlieghere                                   StoppointCallbackContext *context,
56fc1e8551SJonas Devlieghere                                   lldb::user_id_t break_id,
57fc1e8551SJonas Devlieghere                                   lldb::user_id_t break_loc_id);
58fc1e8551SJonas Devlieghere 
59fc1e8551SJonas Devlieghere   StructuredData::ObjectSP RetrieveReportData(ExecutionContextRef exe_ctx_ref);
60fc1e8551SJonas Devlieghere };
61fc1e8551SJonas Devlieghere 
62fc1e8551SJonas Devlieghere } // namespace lldb_private
63fc1e8551SJonas Devlieghere 
64cdc514e4SJonas Devlieghere #endif // LLDB_SOURCE_PLUGINS_INSTRUMENTATIONRUNTIME_MAINTHREADCHECKER_INSTRUMENTATIONRUNTIMEMAINTHREADCHECKER_H
65