1 //===-- TraceIntelPTJSONStructs.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_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACEINTELPTJSONSTRUCTS_H 10 #define LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACEINTELPTJSONSTRUCTS_H 11 12 #include "lldb/Utility/TraceIntelPTGDBRemotePackets.h" 13 #include "lldb/lldb-types.h" 14 #include "llvm/Support/JSON.h" 15 #include <intel-pt.h> 16 #include <optional> 17 #include <vector> 18 19 namespace lldb_private { 20 namespace trace_intel_pt { 21 22 struct JSONModule { 23 std::string system_path; 24 std::optional<std::string> file; 25 JSONUINT64 load_address; 26 std::optional<std::string> uuid; 27 }; 28 29 struct JSONThread { 30 uint64_t tid; 31 std::optional<std::string> ipt_trace; 32 }; 33 34 struct JSONProcess { 35 uint64_t pid; 36 std::optional<std::string> triple; 37 std::vector<JSONThread> threads; 38 std::vector<JSONModule> modules; 39 }; 40 41 struct JSONCpu { 42 lldb::cpu_id_t id; 43 std::string ipt_trace; 44 std::string context_switch_trace; 45 }; 46 47 struct JSONKernel { 48 std::optional<JSONUINT64> load_address; 49 std::string file; 50 }; 51 52 struct JSONTraceBundleDescription { 53 std::string type; 54 pt_cpu cpu_info; 55 std::optional<std::vector<JSONProcess>> processes; 56 std::optional<std::vector<JSONCpu>> cpus; 57 std::optional<LinuxPerfZeroTscConversion> tsc_perf_zero_conversion; 58 std::optional<JSONKernel> kernel; 59 60 std::optional<std::vector<lldb::cpu_id_t>> GetCpuIds(); 61 }; 62 63 llvm::json::Value toJSON(const JSONModule &module); 64 65 llvm::json::Value toJSON(const JSONThread &thread); 66 67 llvm::json::Value toJSON(const JSONProcess &process); 68 69 llvm::json::Value toJSON(const JSONCpu &cpu); 70 71 llvm::json::Value toJSON(const pt_cpu &cpu_info); 72 73 llvm::json::Value toJSON(const JSONKernel &kernel); 74 75 llvm::json::Value toJSON(const JSONTraceBundleDescription &bundle_description); 76 77 bool fromJSON(const llvm::json::Value &value, JSONModule &module, 78 llvm::json::Path path); 79 80 bool fromJSON(const llvm::json::Value &value, JSONThread &thread, 81 llvm::json::Path path); 82 83 bool fromJSON(const llvm::json::Value &value, JSONProcess &process, 84 llvm::json::Path path); 85 86 bool fromJSON(const llvm::json::Value &value, JSONCpu &cpu, 87 llvm::json::Path path); 88 89 bool fromJSON(const llvm::json::Value &value, pt_cpu &cpu_info, 90 llvm::json::Path path); 91 92 bool fromJSON(const llvm::json::Value &value, JSONModule &kernel, 93 llvm::json::Path path); 94 95 bool fromJSON(const llvm::json::Value &value, 96 JSONTraceBundleDescription &bundle_description, 97 llvm::json::Path path); 98 } // namespace trace_intel_pt 99 } // namespace lldb_private 100 101 #endif // LLDB_SOURCE_PLUGINS_TRACE_INTEL_PT_TRACEINTELPTJSONSTRUCTS_H 102