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