aboutsummaryrefslogtreecommitdiff
path: root/lldb/include/lldb/Utility/TraceGDBRemotePackets.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/include/lldb/Utility/TraceGDBRemotePackets.h')
-rw-r--r--lldb/include/lldb/Utility/TraceGDBRemotePackets.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/lldb/include/lldb/Utility/TraceGDBRemotePackets.h b/lldb/include/lldb/Utility/TraceGDBRemotePackets.h
new file mode 100644
index 000000000000..1d2448b05f2a
--- /dev/null
+++ b/lldb/include/lldb/Utility/TraceGDBRemotePackets.h
@@ -0,0 +1,154 @@
+//===-- TraceGDBRemotePackets.h ---------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_UTILITY_TRACEGDBREMOTEPACKETS_H
+#define LLDB_UTILITY_TRACEGDBREMOTEPACKETS_H
+
+#include "llvm/Support/JSON.h"
+
+#include "lldb/lldb-defines.h"
+#include "lldb/lldb-enumerations.h"
+
+/// See docs/lldb-gdb-remote.txt for more information.
+namespace lldb_private {
+
+/// jLLDBTraceSupported gdb-remote packet
+/// \{
+struct TraceSupportedResponse {
+ /// The name of the technology, e.g. intel-pt or arm-coresight.
+ ///
+ /// In order for a Trace plug-in (see \a lldb_private::Trace.h) to support the
+ /// trace technology given by this struct, it should match its name with this
+ /// field.
+ std::string name;
+ /// The description for the technology.
+ std::string description;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceSupportedResponse &info,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceSupportedResponse &packet);
+/// \}
+
+/// jLLDBTraceStart gdb-remote packet
+/// \{
+struct TraceStartRequest {
+ /// Tracing technology name, e.g. intel-pt, arm-coresight.
+ std::string type;
+
+ /// If \a llvm::None, then this starts tracing the whole process. Otherwise,
+ /// only tracing for the specified threads is enabled.
+ llvm::Optional<std::vector<int64_t>> tids;
+
+ /// \return
+ /// \b true if \a tids is \a None, i.e. whole process tracing.
+ bool IsProcessTracing() const;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceStartRequest &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceStartRequest &packet);
+/// \}
+
+/// jLLDBTraceStop gdb-remote packet
+/// \{
+struct TraceStopRequest {
+ TraceStopRequest() = default;
+
+ TraceStopRequest(llvm::StringRef type, const std::vector<lldb::tid_t> &tids);
+
+ TraceStopRequest(llvm::StringRef type) : type(type){};
+
+ bool IsProcessTracing() const;
+
+ /// Tracing technology name, e.g. intel-pt, arm-coresight.
+ std::string type;
+ /// If \a llvm::None, then this stops tracing the whole process. Otherwise,
+ /// only tracing for the specified threads is stopped.
+ llvm::Optional<std::vector<int64_t>> tids;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceStopRequest &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceStopRequest &packet);
+///}
+
+/// jLLDBTraceGetState gdb-remote packet
+/// \{
+struct TraceGetStateRequest {
+ /// Tracing technology name, e.g. intel-pt, arm-coresight.
+ std::string type;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceGetStateRequest &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceGetStateRequest &packet);
+
+struct TraceBinaryData {
+ /// Identifier of data to fetch with jLLDBTraceGetBinaryData.
+ std::string kind;
+ /// Size in bytes for this data.
+ int64_t size;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceBinaryData &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceBinaryData &packet);
+
+struct TraceThreadState {
+ int64_t tid;
+ /// List of binary data objects for this thread.
+ std::vector<TraceBinaryData> binaryData;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceThreadState &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceThreadState &packet);
+
+struct TraceGetStateResponse {
+ std::vector<TraceThreadState> tracedThreads;
+ std::vector<TraceBinaryData> processBinaryData;
+};
+
+bool fromJSON(const llvm::json::Value &value, TraceGetStateResponse &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const TraceGetStateResponse &packet);
+/// \}
+
+/// jLLDBTraceGetBinaryData gdb-remote packet
+/// \{
+struct TraceGetBinaryDataRequest {
+ /// Tracing technology name, e.g. intel-pt, arm-coresight.
+ std::string type;
+ /// Identifier for the data.
+ std::string kind;
+ /// Optional tid if the data is related to a thread.
+ llvm::Optional<int64_t> tid;
+ /// Offset in bytes from where to start reading the data.
+ int64_t offset;
+ /// Number of bytes to read.
+ int64_t size;
+};
+
+bool fromJSON(const llvm::json::Value &value,
+ lldb_private::TraceGetBinaryDataRequest &packet,
+ llvm::json::Path path);
+
+llvm::json::Value toJSON(const lldb_private::TraceGetBinaryDataRequest &packet);
+/// \}
+
+} // namespace lldb_private
+
+#endif // LLDB_UTILITY_TRACEGDBREMOTEPACKETS_H