blob: 34067b1fa64c79109cd0215fc433747ec4543e35 [file] [edit]
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "lldb/Utility/AcceleratorGDBRemotePackets.h"
using namespace llvm;
using namespace llvm::json;
namespace lldb_private {
bool fromJSON(const Value &value, SymbolValue &data, Path path) {
ObjectMapper o(value, path);
return o && o.map("name", data.name) && o.map("value", data.value);
}
json::Value toJSON(const SymbolValue &data) {
return Object{{"name", data.name}, {"value", data.value}};
}
bool fromJSON(const Value &value, AcceleratorBreakpointByName &data,
Path path) {
ObjectMapper o(value, path);
return o && o.mapOptional("shlib", data.shlib) &&
o.map("function_name", data.function_name);
}
json::Value toJSON(const AcceleratorBreakpointByName &data) {
return Object{{"shlib", data.shlib}, {"function_name", data.function_name}};
}
bool fromJSON(const Value &value, AcceleratorBreakpointByAddress &data,
Path path) {
ObjectMapper o(value, path);
return o && o.map("load_address", data.load_address);
}
json::Value toJSON(const AcceleratorBreakpointByAddress &data) {
return Object{{"load_address", static_cast<int64_t>(data.load_address)}};
}
bool fromJSON(const Value &value, AcceleratorBreakpointInfo &data, Path path) {
ObjectMapper o(value, path);
return o && o.map("identifier", data.identifier) &&
o.mapOptional("by_name", data.by_name) &&
o.mapOptional("by_address", data.by_address) &&
o.map("symbol_names", data.symbol_names);
}
json::Value toJSON(const AcceleratorBreakpointInfo &data) {
return Object{
{"identifier", data.identifier},
{"by_name", data.by_name},
{"by_address", data.by_address},
{"symbol_names", data.symbol_names},
};
}
bool fromJSON(const Value &value, AcceleratorBreakpointHitArgs &data,
Path path) {
ObjectMapper o(value, path);
return o && o.map("plugin_name", data.plugin_name) &&
o.map("breakpoint", data.breakpoint) &&
o.map("symbol_values", data.symbol_values);
}
json::Value toJSON(const AcceleratorBreakpointHitArgs &data) {
return Object{
{"plugin_name", data.plugin_name},
{"breakpoint", data.breakpoint},
{"symbol_values", data.symbol_values},
};
}
std::optional<uint64_t>
AcceleratorBreakpointHitArgs::GetSymbolValue(StringRef symbol_name) const {
auto it = llvm::find_if(symbol_values, [&](const SymbolValue &symbol) {
return symbol.name == symbol_name;
});
if (it != symbol_values.end())
return it->value;
return std::nullopt;
}
bool fromJSON(const Value &value, AcceleratorActions &data, Path path) {
ObjectMapper o(value, path);
return o && o.map("plugin_name", data.plugin_name) &&
o.map("session_name", data.session_name) &&
o.map("identifier", data.identifier) &&
o.map("breakpoints", data.breakpoints);
}
json::Value toJSON(const AcceleratorActions &data) {
return Object{
{"plugin_name", data.plugin_name},
{"session_name", data.session_name},
{"identifier", data.identifier},
{"breakpoints", data.breakpoints},
};
}
bool fromJSON(const Value &value, AcceleratorBreakpointHitResponse &data,
Path path) {
ObjectMapper o(value, path);
return o && o.map("disable_bp", data.disable_bp) &&
o.map("auto_resume_native", data.auto_resume_native) &&
o.mapOptional("actions", data.actions);
}
json::Value toJSON(const AcceleratorBreakpointHitResponse &data) {
Object obj{
{"disable_bp", data.disable_bp},
{"auto_resume_native", data.auto_resume_native},
};
if (data.actions)
obj["actions"] = *data.actions;
return obj;
}
} // namespace lldb_private