Author: Walter Erquinigo Date: 2022-03-21T16:03:37-07:00 New Revision: 31e44c01e3b5cc2cc7a9f1dc49806b3f050efb82
URL: https://github.com/llvm/llvm-project/commit/31e44c01e3b5cc2cc7a9f1dc49806b3f050efb82 DIFF: https://github.com/llvm/llvm-project/commit/31e44c01e3b5cc2cc7a9f1dc49806b3f050efb82.diff LOG: [trace] Use vector instead of ArrayRef when reading data I incorrectly returned an ArrayRef when the underlying object didn't own the data. Instead, returning a vector<uint8_t> is what we should do. This fixes an issue when trying to access an intel-pt trace buffer larger than 16 MB. repro ``` go to a breakpoint thread trace start -s 16777216 n thread trace dump instructions # this doesn't fail anymore ``` Differential Revision: https://reviews.llvm.org/D122192 Added: Modified: lldb/include/lldb/Target/Trace.h lldb/source/Target/Trace.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Target/Trace.h b/lldb/include/lldb/Target/Trace.h index 643b761cdb897..c4ca192a1c263 100644 --- a/lldb/include/lldb/Target/Trace.h +++ b/lldb/include/lldb/Target/Trace.h @@ -253,7 +253,7 @@ class Trace : public PluginInterface, /// \return /// A vector of bytes with the requested data, or an \a llvm::Error in /// case of failures. - llvm::Expected<llvm::ArrayRef<uint8_t>> + llvm::Expected<std::vector<uint8_t>> GetLiveThreadBinaryData(lldb::tid_t tid, llvm::StringRef kind); /// Get binary data of the current process given a data identifier. @@ -264,7 +264,7 @@ class Trace : public PluginInterface, /// \return /// A vector of bytes with the requested data, or an \a llvm::Error in /// case of failures. - llvm::Expected<llvm::ArrayRef<uint8_t>> + llvm::Expected<std::vector<uint8_t>> GetLiveProcessBinaryData(llvm::StringRef kind); /// Get the size of the data returned by \a GetLiveThreadBinaryData diff --git a/lldb/source/Target/Trace.cpp b/lldb/source/Target/Trace.cpp index 38b3a7cb006df..7f9ae54455cb1 100644 --- a/lldb/source/Target/Trace.cpp +++ b/lldb/source/Target/Trace.cpp @@ -142,7 +142,7 @@ Optional<size_t> Trace::GetLiveProcessBinaryDataSize(llvm::StringRef kind) { return data_it->second; } -Expected<ArrayRef<uint8_t>> +Expected<std::vector<uint8_t>> Trace::GetLiveThreadBinaryData(lldb::tid_t tid, llvm::StringRef kind) { if (!m_live_process) return createStringError(inconvertibleErrorCode(), @@ -160,7 +160,7 @@ Trace::GetLiveThreadBinaryData(lldb::tid_t tid, llvm::StringRef kind) { return m_live_process->TraceGetBinaryData(request); } -Expected<ArrayRef<uint8_t>> +Expected<std::vector<uint8_t>> Trace::GetLiveProcessBinaryData(llvm::StringRef kind) { if (!m_live_process) return createStringError(inconvertibleErrorCode(), _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits