[Lldb-commits] [lldb] 31e44c0 - [trace] Use vector instead of ArrayRef when reading data

Walter Erquinigo via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 21 16:03:44 PDT 2022


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(),


        


More information about the lldb-commits mailing list