Author: Walter Erquinigo Date: 2022-05-09T22:47:05-07:00 New Revision: 285b39a31ec63a0253fa88c3c61f447712e2f131
URL: https://github.com/llvm/llvm-project/commit/285b39a31ec63a0253fa88c3c61f447712e2f131 DIFF: https://github.com/llvm/llvm-project/commit/285b39a31ec63a0253fa88c3c61f447712e2f131.diff LOG: Revert "[NFC][lldb][trace] Use uint64_t when decoding and enconding json" This reverts commit 9d2dd6d7622335ba9c19b55ac7d463cf662cab0d. Reverting because this exposes an issue in the uint64_t json parser. Added: Modified: lldb/include/lldb/Utility/TraceGDBRemotePackets.h lldb/include/lldb/Utility/TraceIntelPTGDBRemotePackets.h lldb/source/Plugins/Process/Linux/IntelPTCollector.cpp lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp lldb/source/Target/Trace.cpp lldb/source/Utility/TraceGDBRemotePackets.cpp lldb/source/Utility/TraceIntelPTGDBRemotePackets.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Utility/TraceGDBRemotePackets.h b/lldb/include/lldb/Utility/TraceGDBRemotePackets.h index 8e8919c4d8d87..b2669ee3d813d 100644 --- a/lldb/include/lldb/Utility/TraceGDBRemotePackets.h +++ b/lldb/include/lldb/Utility/TraceGDBRemotePackets.h @@ -45,7 +45,7 @@ struct TraceStartRequest { /// If \a llvm::None, then this starts tracing the whole process. Otherwise, /// only tracing for the specified threads is enabled. - llvm::Optional<std::vector<lldb::tid_t>> tids; + llvm::Optional<std::vector<int64_t>> tids; /// \return /// \b true if \a tids is \a None, i.e. whole process tracing. @@ -73,7 +73,7 @@ struct TraceStopRequest { std::string type; /// If \a llvm::None, then this stops tracing the whole process. Otherwise, /// only tracing for the specified threads is stopped. - llvm::Optional<std::vector<lldb::tid_t>> tids; + llvm::Optional<std::vector<int64_t>> tids; }; bool fromJSON(const llvm::json::Value &value, TraceStopRequest &packet, @@ -98,7 +98,7 @@ struct TraceBinaryData { /// Identifier of data to fetch with jLLDBTraceGetBinaryData. std::string kind; /// Size in bytes for this data. - uint64_t size; + int64_t size; }; bool fromJSON(const llvm::json::Value &value, TraceBinaryData &packet, @@ -107,7 +107,7 @@ bool fromJSON(const llvm::json::Value &value, TraceBinaryData &packet, llvm::json::Value toJSON(const TraceBinaryData &packet); struct TraceThreadState { - lldb::tid_t tid; + int64_t tid; /// List of binary data objects for this thread. std::vector<TraceBinaryData> binaryData; }; @@ -161,11 +161,11 @@ struct TraceGetBinaryDataRequest { /// Identifier for the data. std::string kind; /// Optional tid if the data is related to a thread. - llvm::Optional<lldb::tid_t> tid; + llvm::Optional<int64_t> tid; /// Offset in bytes from where to start reading the data. - uint64_t offset; + int64_t offset; /// Number of bytes to read. - uint64_t size; + int64_t size; }; bool fromJSON(const llvm::json::Value &value, diff --git a/lldb/include/lldb/Utility/TraceIntelPTGDBRemotePackets.h b/lldb/include/lldb/Utility/TraceIntelPTGDBRemotePackets.h index cb79fb351a438..ddb758fe95e98 100644 --- a/lldb/include/lldb/Utility/TraceIntelPTGDBRemotePackets.h +++ b/lldb/include/lldb/Utility/TraceIntelPTGDBRemotePackets.h @@ -16,9 +16,6 @@ #include <chrono> /// See docs/lldb-gdb-remote.txt for more information. -/// -/// Do not use system-dependent types, like size_t, because they might cause -/// issues when compiling on arm. namespace lldb_private { // List of data kinds used by jLLDBGetState and jLLDBGetBinaryData. @@ -31,20 +28,20 @@ struct IntelPTDataKinds { /// \{ struct TraceIntelPTStartRequest : TraceStartRequest { /// Size in bytes to use for each thread's trace buffer. - uint64_t trace_buffer_size; + int64_t trace_buffer_size; /// Whether to enable TSC bool enable_tsc; /// PSB packet period - llvm::Optional<uint64_t> psb_period; + llvm::Optional<int64_t> psb_period; /// Required when doing "process tracing". /// /// Limit in bytes on all the thread traces started by this "process trace" /// instance. When a thread is about to be traced and the limit would be hit, /// then a "tracing" stop event is triggered. - llvm::Optional<uint64_t> process_buffer_size_limit; + llvm::Optional<int64_t> process_buffer_size_limit; /// Whether to have a trace buffer per thread or per cpu core. llvm::Optional<bool> per_core_tracing; diff --git a/lldb/source/Plugins/Process/Linux/IntelPTCollector.cpp b/lldb/source/Plugins/Process/Linux/IntelPTCollector.cpp index a1544680043f5..bf0b77b39f9b8 100644 --- a/lldb/source/Plugins/Process/Linux/IntelPTCollector.cpp +++ b/lldb/source/Plugins/Process/Linux/IntelPTCollector.cpp @@ -72,9 +72,10 @@ std::vector<TraceThreadState> IntelPTThreadTraceCollection::GetThreadStates() const { std::vector<TraceThreadState> states; for (const auto &it : m_thread_traces) - states.push_back({it.first, + states.push_back({static_cast<int64_t>(it.first), {TraceBinaryData{IntelPTDataKinds::kTraceBuffer, - it.second->GetTraceBufferSize()}}}); + static_cast<int64_t>( + it.second->GetTraceBufferSize())}}}); return states; } @@ -200,8 +201,8 @@ Expected<json::Value> IntelPTCollector::GetState() const { return cpu_info.takeError(); TraceGetStateResponse state; - state.processBinaryData.push_back( - {IntelPTDataKinds::kProcFsCpuInfo, cpu_info->size()}); + state.processBinaryData.push_back({IntelPTDataKinds::kProcFsCpuInfo, + static_cast<int64_t>(cpu_info->size())}); std::vector<TraceThreadState> thread_states = m_thread_traces.GetThreadStates(); diff --git a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp index 9c1412c16acd9..c9e77dde2282d 100644 --- a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp +++ b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp @@ -305,8 +305,7 @@ Error TraceIntelPT::Start(size_t trace_buffer_size, request.trace_buffer_size = trace_buffer_size; request.process_buffer_size_limit = total_buffer_size_limit; request.enable_tsc = enable_tsc; - request.psb_period = - psb_period.map([](size_t val) { return static_cast<uint64_t>(val); }); + request.psb_period = psb_period.map([](size_t val) { return (int64_t)val; }); request.type = GetPluginName().str(); request.per_core_tracing = per_core_tracing; return Trace::Start(toJSON(request)); @@ -343,8 +342,7 @@ llvm::Error TraceIntelPT::Start(llvm::ArrayRef<lldb::tid_t> tids, TraceIntelPTStartRequest request; request.trace_buffer_size = trace_buffer_size; request.enable_tsc = enable_tsc; - request.psb_period = - psb_period.map([](size_t val) { return static_cast<uint64_t>(val); }); + request.psb_period = psb_period.map([](size_t val) { return (int64_t)val; }); request.type = GetPluginName().str(); request.tids.emplace(); for (lldb::tid_t tid : tids) diff --git a/lldb/source/Target/Trace.cpp b/lldb/source/Target/Trace.cpp index fba1b94a03014..b33d5afb3b34c 100644 --- a/lldb/source/Target/Trace.cpp +++ b/lldb/source/Target/Trace.cpp @@ -154,8 +154,9 @@ Trace::GetLiveThreadBinaryData(lldb::tid_t tid, llvm::StringRef kind) { "Tracing data \"%s\" is not available for thread %" PRIu64 ".", kind.data(), tid); - TraceGetBinaryDataRequest request{GetPluginName().str(), kind.str(), tid, 0, - *size}; + TraceGetBinaryDataRequest request{GetPluginName().str(), kind.str(), + static_cast<int64_t>(tid), 0, + static_cast<int64_t>(*size)}; return m_live_process->TraceGetBinaryData(request); } @@ -171,7 +172,7 @@ Trace::GetLiveProcessBinaryData(llvm::StringRef kind) { "Tracing data \"%s\" is not available for the process.", kind.data()); TraceGetBinaryDataRequest request{GetPluginName().str(), kind.str(), None, 0, - *size}; + static_cast<int64_t>(*size)}; return m_live_process->TraceGetBinaryData(request); } diff --git a/lldb/source/Utility/TraceGDBRemotePackets.cpp b/lldb/source/Utility/TraceGDBRemotePackets.cpp index b8ac71be51357..5c1326a5f353a 100644 --- a/lldb/source/Utility/TraceGDBRemotePackets.cpp +++ b/lldb/source/Utility/TraceGDBRemotePackets.cpp @@ -48,7 +48,7 @@ TraceStopRequest::TraceStopRequest(llvm::StringRef type, : type(type) { tids.emplace(); for (lldb::tid_t tid : tids_) - tids->push_back(tid); + tids->push_back(static_cast<int64_t>(tid)); } bool TraceStopRequest::IsProcessTracing() const { return !(bool)tids; } diff --git a/lldb/source/Utility/TraceIntelPTGDBRemotePackets.cpp b/lldb/source/Utility/TraceIntelPTGDBRemotePackets.cpp index 27f1d4c6229b7..afc7cdf85509c 100644 --- a/lldb/source/Utility/TraceIntelPTGDBRemotePackets.cpp +++ b/lldb/source/Utility/TraceIntelPTGDBRemotePackets.cpp @@ -56,9 +56,9 @@ LinuxPerfZeroTscConversion::Convert(uint64_t raw_counter_value) { json::Value LinuxPerfZeroTscConversion::toJSON() { return json::Value(json::Object{ {"kind", "tsc-perf-zero-conversion"}, - {"time_mult", m_time_mult}, - {"time_shift", m_time_shift}, - {"time_zero", m_time_zero}, + {"time_mult", static_cast<int64_t>(m_time_mult)}, + {"time_shift", static_cast<int64_t>(m_time_shift)}, + {"time_zero", static_cast<int64_t>(m_time_zero)}, }); } @@ -66,14 +66,14 @@ bool fromJSON(const json::Value &value, TraceTscConversionUP &tsc_conversion, json::Path path) { ObjectMapper o(value, path); - uint64_t time_mult, time_shift, time_zero; + int64_t time_mult, time_shift, time_zero; if (!o || !o.map("time_mult", time_mult) || !o.map("time_shift", time_shift) || !o.map("time_zero", time_zero)) return false; tsc_conversion = std::make_unique<LinuxPerfZeroTscConversion>( static_cast<uint32_t>(time_mult), static_cast<uint16_t>(time_shift), - time_zero); + static_cast<uint64_t>(time_zero)); return true; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits