11188faa7SWalter Erquinigo //===-- IntelPTPerThreadProcessTrace.h ------------------------ -*- C++ -*-===// 21188faa7SWalter Erquinigo // 31188faa7SWalter Erquinigo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 41188faa7SWalter Erquinigo // See https://llvm.org/LICENSE.txt for license information. 51188faa7SWalter Erquinigo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61188faa7SWalter Erquinigo // 71188faa7SWalter Erquinigo //===----------------------------------------------------------------------===// 81188faa7SWalter Erquinigo 91188faa7SWalter Erquinigo #ifndef liblldb_IntelPTPerThreadProcessTrace_H_ 101188faa7SWalter Erquinigo #define liblldb_IntelPTPerThreadProcessTrace_H_ 111188faa7SWalter Erquinigo 121f56f7fcSWalter Erquinigo #include "IntelPTProcessTrace.h" 131188faa7SWalter Erquinigo #include "IntelPTSingleBufferTrace.h" 141188faa7SWalter Erquinigo #include "IntelPTThreadTraceCollection.h" 151188faa7SWalter Erquinigo 161188faa7SWalter Erquinigo namespace lldb_private { 171188faa7SWalter Erquinigo namespace process_linux { 181188faa7SWalter Erquinigo 191188faa7SWalter Erquinigo /// Manages a "process trace" instance by tracing each thread individually. 201f56f7fcSWalter Erquinigo class IntelPTPerThreadProcessTrace : public IntelPTProcessTrace { 211188faa7SWalter Erquinigo public: 221188faa7SWalter Erquinigo /// Start tracing the current process by tracing each of its tids 231188faa7SWalter Erquinigo /// individually. 241188faa7SWalter Erquinigo /// 251188faa7SWalter Erquinigo /// \param[in] request 261188faa7SWalter Erquinigo /// Intel PT configuration parameters. 271188faa7SWalter Erquinigo /// 281188faa7SWalter Erquinigo /// \param[in] current_tids 291188faa7SWalter Erquinigo /// List of tids currently alive. In the future, whenever a new thread is 301188faa7SWalter Erquinigo /// spawned, they should be traced by calling the \a TraceStart(tid) method. 311188faa7SWalter Erquinigo /// 321188faa7SWalter Erquinigo /// \return 331188faa7SWalter Erquinigo /// An \a IntelPTMultiCoreTrace instance if tracing was successful, or 341188faa7SWalter Erquinigo /// an \a llvm::Error otherwise. 35*03cc58ffSWalter Erquinigo static llvm::Expected<std::unique_ptr<IntelPTPerThreadProcessTrace>> 361188faa7SWalter Erquinigo Start(const TraceIntelPTStartRequest &request, 371188faa7SWalter Erquinigo llvm::ArrayRef<lldb::tid_t> current_tids); 381188faa7SWalter Erquinigo 391f56f7fcSWalter Erquinigo bool TracesThread(lldb::tid_t tid) const override; 401188faa7SWalter Erquinigo 411f56f7fcSWalter Erquinigo llvm::Error TraceStart(lldb::tid_t tid) override; 421188faa7SWalter Erquinigo 431f56f7fcSWalter Erquinigo llvm::Error TraceStop(lldb::tid_t tid) override; 441188faa7SWalter Erquinigo 451f2d49a8SWalter Erquinigo TraceIntelPTGetStateResponse GetState() override; 461f56f7fcSWalter Erquinigo 47fc5ef57cSWalter Erquinigo llvm::Expected<llvm::Optional<std::vector<uint8_t>>> 48fc5ef57cSWalter Erquinigo TryGetBinaryData(const TraceGetBinaryDataRequest &request) override; 491188faa7SWalter Erquinigo 501188faa7SWalter Erquinigo private: IntelPTPerThreadProcessTrace(const TraceIntelPTStartRequest & request)511188faa7SWalter Erquinigo IntelPTPerThreadProcessTrace(const TraceIntelPTStartRequest &request) 521188faa7SWalter Erquinigo : m_tracing_params(request) {} 531188faa7SWalter Erquinigo 541188faa7SWalter Erquinigo IntelPTThreadTraceCollection m_thread_traces; 551188faa7SWalter Erquinigo /// Params used to trace threads when the user started "process tracing". 561188faa7SWalter Erquinigo TraceIntelPTStartRequest m_tracing_params; 571188faa7SWalter Erquinigo }; 581188faa7SWalter Erquinigo 591188faa7SWalter Erquinigo } // namespace process_linux 601188faa7SWalter Erquinigo } // namespace lldb_private 611188faa7SWalter Erquinigo 621188faa7SWalter Erquinigo #endif // liblldb_IntelPTPerThreadProcessTrace_H_ 63