brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 387c7ef Raw
159 lines · cpp
1//===-- TraceGDBRemotePackets.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-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Utility/TraceGDBRemotePackets.h"10 11using namespace llvm;12using namespace llvm::json;13 14namespace lldb_private {15/// jLLDBTraceSupported16/// \{17bool fromJSON(const json::Value &value, TraceSupportedResponse &packet,18              Path path) {19  ObjectMapper o(value, path);20  return o && o.map("description", packet.description) &&21         o.map("name", packet.name);22}23 24json::Value toJSON(const TraceSupportedResponse &packet) {25  return json::Value(26      Object{{"description", packet.description}, {"name", packet.name}});27}28/// \}29 30/// jLLDBTraceStart31/// \{32bool TraceStartRequest::IsProcessTracing() const { return !(bool)tids; }33 34bool 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);37}38 39json::Value toJSON(const TraceStartRequest &packet) {40  return json::Value(Object{{"tids", packet.tids}, {"type", packet.type}});41}42/// \}43 44/// jLLDBTraceStop45/// \{46TraceStopRequest::TraceStopRequest(llvm::StringRef type,47                                   const std::vector<lldb::tid_t> &tids_)48    : type(type) {49  tids.emplace();50  for (lldb::tid_t tid : tids_)51    tids->push_back(tid);52}53 54bool TraceStopRequest::IsProcessTracing() const { return !(bool)tids; }55 56bool 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);59}60 61json::Value toJSON(const TraceStopRequest &packet) {62  return json::Value(Object{{"type", packet.type}, {"tids", packet.tids}});63}64/// \}65 66/// jLLDBTraceGetState67/// \{68bool fromJSON(const json::Value &value, TraceGetStateRequest &packet,69              Path path) {70  ObjectMapper o(value, path);71  return o && o.map("type", packet.type);72}73 74json::Value toJSON(const TraceGetStateRequest &packet) {75  return json::Value(Object{{"type", packet.type}});76}77 78bool 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);81}82 83json::Value toJSON(const TraceBinaryData &packet) {84  return json::Value(Object{{"kind", packet.kind}, {"size", packet.size}});85}86 87bool 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.binary_data);91}92 93json::Value toJSON(const TraceThreadState &packet) {94  return json::Value(95      Object{{"tid", packet.tid}, {"binaryData", packet.binary_data}});96}97 98bool fromJSON(const json::Value &value, TraceGetStateResponse &packet,99              Path path) {100  ObjectMapper o(value, path);101  return o && o.map("tracedThreads", packet.traced_threads) &&102         o.map("processBinaryData", packet.process_binary_data) &&103         o.map("cpus", packet.cpus) && o.map("warnings", packet.warnings);104}105 106json::Value toJSON(const TraceGetStateResponse &packet) {107  return json::Value(Object{{"tracedThreads", packet.traced_threads},108                            {"processBinaryData", packet.process_binary_data},109                            {"cpus", packet.cpus},110                            {"warnings", packet.warnings}});111}112 113void TraceGetStateResponse::AddWarning(StringRef warning) {114  if (!warnings)115    warnings.emplace();116  warnings->push_back(warning.data());117}118 119bool fromJSON(const json::Value &value, TraceCpuState &packet,120              json::Path path) {121  ObjectMapper o(value, path);122  uint64_t cpu_id;123  if (!(o && o.map("id", cpu_id) && o.map("binaryData", packet.binary_data)))124    return false;125  packet.id = static_cast<lldb::cpu_id_t>(cpu_id);126  return true;127}128 129json::Value toJSON(const TraceCpuState &packet) {130  return json::Value(131      Object{{"id", packet.id}, {"binaryData", packet.binary_data}});132}133/// \}134 135/// jLLDBTraceGetBinaryData136/// \{137json::Value toJSON(const TraceGetBinaryDataRequest &packet) {138  return json::Value(Object{{"type", packet.type},139                            {"kind", packet.kind},140                            {"tid", packet.tid},141                            {"cpuId", packet.cpu_id}});142}143 144bool fromJSON(const json::Value &value, TraceGetBinaryDataRequest &packet,145              Path path) {146  ObjectMapper o(value, path);147  std::optional<uint64_t> cpu_id;148  if (!(o && o.map("type", packet.type) && o.map("kind", packet.kind) &&149        o.map("tid", packet.tid) && o.map("cpuId", cpu_id)))150    return false;151 152  if (cpu_id)153    packet.cpu_id = static_cast<lldb::cpu_id_t>(*cpu_id);154  return true;155}156/// \}157 158} // namespace lldb_private159