1 //===-- IntelPTProcessTrace.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 liblldb_IntelPTProcessTrace_H_ 10 #define liblldb_IntelPTProcessTrace_H_ 11 12 #include "lldb/Utility/TraceIntelPTGDBRemotePackets.h" 13 #include <memory> 14 #include <optional> 15 16 namespace lldb_private { 17 namespace process_linux { 18 19 /// Interface to be implemented by each 'process trace' strategy (per cpu, per 20 /// thread, etc). 21 class IntelPTProcessTrace { 22 public: 23 virtual ~IntelPTProcessTrace() = default; 24 ProcessDidStop()25 virtual void ProcessDidStop() {} 26 ProcessWillResume()27 virtual void ProcessWillResume() {} 28 29 /// Construct a minimal jLLDBTraceGetState response for this process trace. 30 virtual TraceIntelPTGetStateResponse GetState() = 0; 31 32 virtual bool TracesThread(lldb::tid_t tid) const = 0; 33 34 /// \copydoc IntelPTThreadTraceCollection::TraceStart() 35 virtual llvm::Error TraceStart(lldb::tid_t tid) = 0; 36 37 /// \copydoc IntelPTThreadTraceCollection::TraceStop() 38 virtual llvm::Error TraceStop(lldb::tid_t tid) = 0; 39 40 /// \return 41 /// \b std::nullopt if this instance doesn't support the requested data, an 42 /// \a llvm::Error if this isntance supports it but fails at fetching it, 43 /// and \b Error::success() otherwise. 44 virtual llvm::Expected<std::optional<std::vector<uint8_t>>> 45 TryGetBinaryData(const TraceGetBinaryDataRequest &request) = 0; 46 }; 47 48 using IntelPTProcessTraceUP = std::unique_ptr<IntelPTProcessTrace>; 49 50 } // namespace process_linux 51 } // namespace lldb_private 52 53 #endif // liblldb_IntelPTProcessTrace_H_ 54