xref: /freebsd-src/contrib/llvm-project/lldb/source/Utility/TraceIntelPTGDBRemotePackets.cpp (revision c9ccf3a32da427475985b85d7df023ccfb138c27)
1 //===-- TraceIntelPTGDBRemotePackets.cpp ------------------------*- 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 #include "lldb/Utility/TraceIntelPTGDBRemotePackets.h"
10 
11 using namespace llvm;
12 using namespace llvm::json;
13 
14 namespace lldb_private {
15 
16 bool fromJSON(const json::Value &value, TraceIntelPTStartRequest &packet,
17               Path path) {
18   ObjectMapper o(value, path);
19   if (!o || !fromJSON(value, (TraceStartRequest &)packet, path) ||
20       !o.map("enableTsc", packet.enableTsc) ||
21       !o.map("psbPeriod", packet.psbPeriod) ||
22       !o.map("threadBufferSize", packet.threadBufferSize) ||
23       !o.map("processBufferSizeLimit", packet.processBufferSizeLimit))
24     return false;
25   if (packet.tids && packet.processBufferSizeLimit) {
26     path.report("processBufferSizeLimit must be provided");
27     return false;
28   }
29   if (!packet.tids && !packet.processBufferSizeLimit) {
30     path.report("processBufferSizeLimit must not be provided");
31     return false;
32   }
33   return true;
34 }
35 
36 json::Value toJSON(const TraceIntelPTStartRequest &packet) {
37   json::Value base = toJSON((const TraceStartRequest &)packet);
38   base.getAsObject()->try_emplace("threadBufferSize", packet.threadBufferSize);
39   base.getAsObject()->try_emplace("processBufferSizeLimit",
40                                   packet.processBufferSizeLimit);
41   base.getAsObject()->try_emplace("psbPeriod", packet.psbPeriod);
42   base.getAsObject()->try_emplace("enableTsc", packet.enableTsc);
43   return base;
44 }
45 
46 } // namespace lldb_private
47