1353358Sdim//===-- TSanRuntime.h -------------------------------------------*- C++ -*-===// 2320384Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6320384Sdim// 7320384Sdim//===----------------------------------------------------------------------===// 8320384Sdim 9320384Sdim#ifndef liblldb_ThreadSanitizerRuntime_h_ 10320384Sdim#define liblldb_ThreadSanitizerRuntime_h_ 11320384Sdim 12320384Sdim#include "lldb/Target/ABI.h" 13320384Sdim#include "lldb/Target/InstrumentationRuntime.h" 14320572Sdim#include "lldb/Utility/StructuredData.h" 15320384Sdim#include "lldb/lldb-private.h" 16320384Sdim 17320384Sdimnamespace lldb_private { 18320384Sdim 19320384Sdimclass ThreadSanitizerRuntime : public lldb_private::InstrumentationRuntime { 20320384Sdimpublic: 21320384Sdim ~ThreadSanitizerRuntime() override; 22320384Sdim 23320384Sdim static lldb::InstrumentationRuntimeSP 24320384Sdim CreateInstance(const lldb::ProcessSP &process_sp); 25320384Sdim 26320384Sdim static void Initialize(); 27320384Sdim 28320384Sdim static void Terminate(); 29320384Sdim 30320384Sdim static lldb_private::ConstString GetPluginNameStatic(); 31320384Sdim 32320384Sdim static lldb::InstrumentationRuntimeType GetTypeStatic(); 33320384Sdim 34320384Sdim lldb_private::ConstString GetPluginName() override { 35320384Sdim return GetPluginNameStatic(); 36320384Sdim } 37320384Sdim 38320384Sdim virtual lldb::InstrumentationRuntimeType GetType() { return GetTypeStatic(); } 39320384Sdim 40320384Sdim uint32_t GetPluginVersion() override { return 1; } 41320384Sdim 42320384Sdim lldb::ThreadCollectionSP 43320384Sdim GetBacktracesFromExtendedStopInfo(StructuredData::ObjectSP info) override; 44320384Sdim 45320384Sdimprivate: 46320384Sdim ThreadSanitizerRuntime(const lldb::ProcessSP &process_sp) 47320384Sdim : lldb_private::InstrumentationRuntime(process_sp) {} 48320384Sdim 49320384Sdim const RegularExpression &GetPatternForRuntimeLibrary() override; 50320384Sdim 51320384Sdim bool CheckIfRuntimeIsValid(const lldb::ModuleSP module_sp) override; 52320384Sdim 53320384Sdim void Activate() override; 54320384Sdim 55320384Sdim void Deactivate(); 56320384Sdim 57320384Sdim static bool NotifyBreakpointHit(void *baton, 58320384Sdim StoppointCallbackContext *context, 59320384Sdim lldb::user_id_t break_id, 60320384Sdim lldb::user_id_t break_loc_id); 61320384Sdim 62320384Sdim StructuredData::ObjectSP RetrieveReportData(ExecutionContextRef exe_ctx_ref); 63320384Sdim 64320384Sdim std::string FormatDescription(StructuredData::ObjectSP report); 65320384Sdim 66320384Sdim std::string GenerateSummary(StructuredData::ObjectSP report); 67320384Sdim 68320384Sdim lldb::addr_t GetMainRacyAddress(StructuredData::ObjectSP report); 69320384Sdim 70320384Sdim std::string GetLocationDescription(StructuredData::ObjectSP report, 71320384Sdim lldb::addr_t &global_addr, 72320384Sdim std::string &global_name, 73320384Sdim std::string &filename, uint32_t &line); 74320384Sdim 75320384Sdim lldb::addr_t GetFirstNonInternalFramePc(StructuredData::ObjectSP trace, 76320384Sdim bool skip_one_frame = false); 77320384Sdim}; 78320384Sdim 79320384Sdim} // namespace lldb_private 80320384Sdim 81320384Sdim#endif // liblldb_ThreadSanitizerRuntime_h_ 82