Coverage Report

Created: 2023-09-21 18:56

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Utility/TraceGDBRemotePackets.h
Line
Count
Source (jump to first uncovered line)
1
//===-- TraceGDBRemotePackets.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 LLDB_UTILITY_TRACEGDBREMOTEPACKETS_H
10
#define LLDB_UTILITY_TRACEGDBREMOTEPACKETS_H
11
12
#include "llvm/Support/JSON.h"
13
14
#include <chrono>
15
16
#include "lldb/lldb-defines.h"
17
#include "lldb/lldb-enumerations.h"
18
19
/// See docs/lldb-gdb-remote.txt for more information.
20
namespace lldb_private {
21
22
/// jLLDBTraceSupported gdb-remote packet
23
/// \{
24
struct TraceSupportedResponse {
25
  /// The name of the technology, e.g. intel-pt or arm-coresight.
26
  ///
27
  /// In order for a Trace plug-in (see \a lldb_private::Trace.h) to support the
28
  /// trace technology given by this struct, it should match its name with this
29
  /// field.
30
  std::string name;
31
  /// The description for the technology.
32
  std::string description;
33
};
34
35
bool fromJSON(const llvm::json::Value &value, TraceSupportedResponse &info,
36
              llvm::json::Path path);
37
38
llvm::json::Value toJSON(const TraceSupportedResponse &packet);
39
/// \}
40
41
/// jLLDBTraceStart gdb-remote packet
42
/// \{
43
struct TraceStartRequest {
44
  /// Tracing technology name, e.g. intel-pt, arm-coresight.
45
  std::string type;
46
47
  /// If \a std::nullopt, then this starts tracing the whole process. Otherwise,
48
  /// only tracing for the specified threads is enabled.
49
  std::optional<std::vector<lldb::tid_t>> tids;
50
51
  /// \return
52
  ///     \b true if \a tids is \a std::nullopt, i.e. whole process tracing.
53
  bool IsProcessTracing() const;
54
};
55
56
bool fromJSON(const llvm::json::Value &value, TraceStartRequest &packet,
57
              llvm::json::Path path);
58
59
llvm::json::Value toJSON(const TraceStartRequest &packet);
60
/// \}
61
62
/// jLLDBTraceStop gdb-remote packet
63
/// \{
64
struct TraceStopRequest {
65
0
  TraceStopRequest() = default;
66
67
  TraceStopRequest(llvm::StringRef type, const std::vector<lldb::tid_t> &tids);
68
69
0
  TraceStopRequest(llvm::StringRef type) : type(type){};
70
71
  bool IsProcessTracing() const;
72
73
  /// Tracing technology name, e.g. intel-pt, arm-coresight.
74
  std::string type;
75
  /// If \a std::nullopt, then this stops tracing the whole process. Otherwise,
76
  /// only tracing for the specified threads is stopped.
77
  std::optional<std::vector<lldb::tid_t>> tids;
78
};
79
80
bool fromJSON(const llvm::json::Value &value, TraceStopRequest &packet,
81
              llvm::json::Path path);
82
83
llvm::json::Value toJSON(const TraceStopRequest &packet);
84
///}
85
86
/// jLLDBTraceGetState gdb-remote packet
87
/// \{
88
struct TraceGetStateRequest {
89
  /// Tracing technology name, e.g. intel-pt, arm-coresight.
90
  std::string type;
91
};
92
93
bool fromJSON(const llvm::json::Value &value, TraceGetStateRequest &packet,
94
              llvm::json::Path path);
95
96
llvm::json::Value toJSON(const TraceGetStateRequest &packet);
97
98
struct TraceBinaryData {
99
  /// Identifier of data to fetch with jLLDBTraceGetBinaryData.
100
  std::string kind;
101
  /// Size in bytes for this data.
102
  uint64_t size;
103
};
104
105
bool fromJSON(const llvm::json::Value &value, TraceBinaryData &packet,
106
              llvm::json::Path path);
107
108
llvm::json::Value toJSON(const TraceBinaryData &packet);
109
110
struct TraceThreadState {
111
  lldb::tid_t tid;
112
  /// List of binary data objects for this thread.
113
  std::vector<TraceBinaryData> binary_data;
114
};
115
116
bool fromJSON(const llvm::json::Value &value, TraceThreadState &packet,
117
              llvm::json::Path path);
118
119
llvm::json::Value toJSON(const TraceThreadState &packet);
120
121
struct TraceCpuState {
122
  lldb::cpu_id_t id;
123
  /// List of binary data objects for this core.
124
  std::vector<TraceBinaryData> binary_data;
125
};
126
127
bool fromJSON(const llvm::json::Value &value, TraceCpuState &packet,
128
              llvm::json::Path path);
129
130
llvm::json::Value toJSON(const TraceCpuState &packet);
131
132
struct TraceGetStateResponse {
133
  std::vector<TraceThreadState> traced_threads;
134
  std::vector<TraceBinaryData> process_binary_data;
135
  std::optional<std::vector<TraceCpuState>> cpus;
136
  std::optional<std::vector<std::string>> warnings;
137
138
  void AddWarning(llvm::StringRef warning);
139
};
140
141
bool fromJSON(const llvm::json::Value &value, TraceGetStateResponse &packet,
142
              llvm::json::Path path);
143
144
llvm::json::Value toJSON(const TraceGetStateResponse &packet);
145
/// \}
146
147
/// jLLDBTraceGetBinaryData gdb-remote packet
148
/// \{
149
struct TraceGetBinaryDataRequest {
150
  /// Tracing technology name, e.g. intel-pt, arm-coresight.
151
  std::string type;
152
  /// Identifier for the data.
153
  std::string kind;
154
  /// Optional tid if the data is related to a thread.
155
  std::optional<lldb::tid_t> tid;
156
  /// Optional core id if the data is related to a cpu core.
157
  std::optional<lldb::cpu_id_t> cpu_id;
158
};
159
160
bool fromJSON(const llvm::json::Value &value,
161
              lldb_private::TraceGetBinaryDataRequest &packet,
162
              llvm::json::Path path);
163
164
llvm::json::Value toJSON(const lldb_private::TraceGetBinaryDataRequest &packet);
165
/// \}
166
167
} // namespace lldb_private
168
169
#endif // LLDB_UTILITY_TRACEGDBREMOTEPACKETS_H