wallace created this revision. wallace added reviewers: jj10306, zrthxn. Herald added a project: All. wallace requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
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 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D122192 Files: lldb/include/lldb/Target/Trace.h lldb/source/Target/Trace.cpp Index: lldb/source/Target/Trace.cpp =================================================================== --- lldb/source/Target/Trace.cpp +++ lldb/source/Target/Trace.cpp @@ -142,7 +142,7 @@ 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 @@ 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(), Index: lldb/include/lldb/Target/Trace.h =================================================================== --- lldb/include/lldb/Target/Trace.h +++ lldb/include/lldb/Target/Trace.h @@ -253,7 +253,7 @@ /// \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 @@ /// \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
Index: lldb/source/Target/Trace.cpp =================================================================== --- lldb/source/Target/Trace.cpp +++ lldb/source/Target/Trace.cpp @@ -142,7 +142,7 @@ 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 @@ 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(), Index: lldb/include/lldb/Target/Trace.h =================================================================== --- lldb/include/lldb/Target/Trace.h +++ lldb/include/lldb/Target/Trace.h @@ -253,7 +253,7 @@ /// \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 @@ /// \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
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits