1 //===-- TraceGDBRemotePackets.cpp -------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #include "lldb/Utility/TraceGDBRemotePackets.h"
12 using namespace llvm::json
;
14 namespace lldb_private
{
15 /// jLLDBTraceSupported
17 bool fromJSON(const json::Value
&value
, TraceSupportedResponse
&packet
,
19 ObjectMapper
o(value
, path
);
20 return o
&& o
.map("description", packet
.description
) &&
21 o
.map("name", packet
.name
);
24 json::Value
toJSON(const TraceSupportedResponse
&packet
) {
26 Object
{{"description", packet
.description
}, {"name", packet
.name
}});
32 bool TraceStartRequest::IsProcessTracing() const { return !(bool)tids
; }
34 bool fromJSON(const json::Value
&value
, TraceStartRequest
&packet
, Path path
) {
35 ObjectMapper
o(value
, path
);
36 return o
&& o
.map("type", packet
.type
) && o
.map("tids", packet
.tids
);
39 json::Value
toJSON(const TraceStartRequest
&packet
) {
40 return json::Value(Object
{{"tids", packet
.tids
}, {"type", packet
.type
}});
46 TraceStopRequest::TraceStopRequest(llvm::StringRef type
,
47 const std::vector
<lldb::tid_t
> &tids_
)
50 for (lldb::tid_t tid
: tids_
)
51 tids
->push_back(static_cast<int64_t>(tid
));
54 bool TraceStopRequest::IsProcessTracing() const { return !(bool)tids
; }
56 bool fromJSON(const json::Value
&value
, TraceStopRequest
&packet
, Path path
) {
57 ObjectMapper
o(value
, path
);
58 return o
&& o
.map("type", packet
.type
) && o
.map("tids", packet
.tids
);
61 json::Value
toJSON(const TraceStopRequest
&packet
) {
62 return json::Value(Object
{{"type", packet
.type
}, {"tids", packet
.tids
}});
66 /// jLLDBTraceGetState
68 bool fromJSON(const json::Value
&value
, TraceGetStateRequest
&packet
,
70 ObjectMapper
o(value
, path
);
71 return o
&& o
.map("type", packet
.type
);
74 json::Value
toJSON(const TraceGetStateRequest
&packet
) {
75 return json::Value(Object
{{"type", packet
.type
}});
78 bool fromJSON(const json::Value
&value
, TraceBinaryData
&packet
, Path path
) {
79 ObjectMapper
o(value
, path
);
80 return o
&& o
.map("kind", packet
.kind
) && o
.map("size", packet
.size
);
83 json::Value
toJSON(const TraceBinaryData
&packet
) {
84 return json::Value(Object
{{"kind", packet
.kind
}, {"size", packet
.size
}});
87 bool fromJSON(const json::Value
&value
, TraceThreadState
&packet
, Path path
) {
88 ObjectMapper
o(value
, path
);
89 return o
&& o
.map("tid", packet
.tid
) &&
90 o
.map("binaryData", packet
.binaryData
);
93 json::Value
toJSON(const TraceThreadState
&packet
) {
95 Object
{{"tid", packet
.tid
}, {"binaryData", packet
.binaryData
}});
98 bool fromJSON(const json::Value
&value
, TraceGetStateResponse
&packet
,
100 ObjectMapper
o(value
, path
);
101 return o
&& o
.map("tracedThreads", packet
.tracedThreads
) &&
102 o
.map("processBinaryData", packet
.processBinaryData
);
105 json::Value
toJSON(const TraceGetStateResponse
&packet
) {
106 return json::Value(Object
{{"tracedThreads", packet
.tracedThreads
},
107 {"processBinaryData", packet
.processBinaryData
}});
111 /// jLLDBTraceGetBinaryData
113 json::Value
toJSON(const TraceGetBinaryDataRequest
&packet
) {
114 return json::Value(Object
{{"type", packet
.type
},
115 {"kind", packet
.kind
},
116 {"offset", packet
.offset
},
118 {"size", packet
.size
}});
121 bool fromJSON(const json::Value
&value
, TraceGetBinaryDataRequest
&packet
,
123 ObjectMapper
o(value
, path
);
124 return o
&& o
.map("type", packet
.type
) && o
.map("kind", packet
.kind
) &&
125 o
.map("tid", packet
.tid
) && o
.map("offset", packet
.offset
) &&
126 o
.map("size", packet
.size
);
130 } // namespace lldb_private