19128ee2fSEnrico Granata //===-- SBData.cpp ----------------------------------------------*- C++ -*-===//
29128ee2fSEnrico Granata //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
69128ee2fSEnrico Granata //
79128ee2fSEnrico Granata //===----------------------------------------------------------------------===//
89128ee2fSEnrico Granata 
99128ee2fSEnrico Granata #include "lldb/API/SBData.h"
10*baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
119128ee2fSEnrico Granata #include "lldb/API/SBError.h"
129128ee2fSEnrico Granata #include "lldb/API/SBStream.h"
139128ee2fSEnrico Granata 
1429cb868aSZachary Turner #include "lldb/Core/DumpDataExtractor.h"
15666cc0b2SZachary Turner #include "lldb/Utility/DataBufferHeap.h"
16666cc0b2SZachary Turner #include "lldb/Utility/DataExtractor.h"
176f9e6901SZachary Turner #include "lldb/Utility/Log.h"
18bf9a7730SZachary Turner #include "lldb/Utility/Stream.h"
19da7bc7d0SGreg Clayton 
20796ac80bSJonas Devlieghere #include <cinttypes>
21796ac80bSJonas Devlieghere #include <memory>
22796ac80bSJonas Devlieghere 
239128ee2fSEnrico Granata using namespace lldb;
249128ee2fSEnrico Granata using namespace lldb_private;
259128ee2fSEnrico Granata 
26*baf5664fSJonas Devlieghere SBData::SBData() : m_opaque_sp(new DataExtractor()) {
27*baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBData);
28*baf5664fSJonas Devlieghere }
299128ee2fSEnrico Granata 
30b9c1b51eSKate Stone SBData::SBData(const lldb::DataExtractorSP &data_sp) : m_opaque_sp(data_sp) {}
319128ee2fSEnrico Granata 
32*baf5664fSJonas Devlieghere SBData::SBData(const SBData &rhs) : m_opaque_sp(rhs.m_opaque_sp) {
33*baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBData, (const lldb::SBData &), rhs);
34*baf5664fSJonas Devlieghere }
359128ee2fSEnrico Granata 
36b9c1b51eSKate Stone const SBData &SBData::operator=(const SBData &rhs) {
37*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const lldb::SBData &,
38*baf5664fSJonas Devlieghere                      SBData, operator=,(const lldb::SBData &), rhs);
39*baf5664fSJonas Devlieghere 
409128ee2fSEnrico Granata   if (this != &rhs)
419128ee2fSEnrico Granata     m_opaque_sp = rhs.m_opaque_sp;
429128ee2fSEnrico Granata   return *this;
439128ee2fSEnrico Granata }
449128ee2fSEnrico Granata 
45b9c1b51eSKate Stone SBData::~SBData() {}
469128ee2fSEnrico Granata 
47b9c1b51eSKate Stone void SBData::SetOpaque(const lldb::DataExtractorSP &data_sp) {
489128ee2fSEnrico Granata   m_opaque_sp = data_sp;
499128ee2fSEnrico Granata }
509128ee2fSEnrico Granata 
51b9c1b51eSKate Stone lldb_private::DataExtractor *SBData::get() const { return m_opaque_sp.get(); }
529128ee2fSEnrico Granata 
53b9c1b51eSKate Stone lldb_private::DataExtractor *SBData::operator->() const {
549128ee2fSEnrico Granata   return m_opaque_sp.operator->();
559128ee2fSEnrico Granata }
569128ee2fSEnrico Granata 
57b9c1b51eSKate Stone lldb::DataExtractorSP &SBData::operator*() { return m_opaque_sp; }
589128ee2fSEnrico Granata 
59b9c1b51eSKate Stone const lldb::DataExtractorSP &SBData::operator*() const { return m_opaque_sp; }
609128ee2fSEnrico Granata 
61*baf5664fSJonas Devlieghere bool SBData::IsValid() {
62*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBData, IsValid);
63*baf5664fSJonas Devlieghere 
64*baf5664fSJonas Devlieghere   return m_opaque_sp.get() != NULL;
65*baf5664fSJonas Devlieghere }
669128ee2fSEnrico Granata 
67b9c1b51eSKate Stone uint8_t SBData::GetAddressByteSize() {
68*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint8_t, SBData, GetAddressByteSize);
69*baf5664fSJonas Devlieghere 
705160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
719128ee2fSEnrico Granata   uint8_t value = 0;
729128ee2fSEnrico Granata   if (m_opaque_sp.get())
739128ee2fSEnrico Granata     value = m_opaque_sp->GetAddressByteSize();
749128ee2fSEnrico Granata   if (log)
759128ee2fSEnrico Granata     log->Printf("SBData::GetAddressByteSize () => "
76b9c1b51eSKate Stone                 "(%i)",
77b9c1b51eSKate Stone                 value);
789128ee2fSEnrico Granata   return value;
799128ee2fSEnrico Granata }
809128ee2fSEnrico Granata 
81b9c1b51eSKate Stone void SBData::SetAddressByteSize(uint8_t addr_byte_size) {
82*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBData, SetAddressByteSize, (uint8_t),
83*baf5664fSJonas Devlieghere                      addr_byte_size);
84*baf5664fSJonas Devlieghere 
855160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
860f28986aSGreg Clayton   if (m_opaque_sp.get())
870f28986aSGreg Clayton     m_opaque_sp->SetAddressByteSize(addr_byte_size);
880f28986aSGreg Clayton   if (log)
890f28986aSGreg Clayton     log->Printf("SBData::SetAddressByteSize (%i)", addr_byte_size);
900f28986aSGreg Clayton }
910f28986aSGreg Clayton 
92b9c1b51eSKate Stone void SBData::Clear() {
93*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBData, Clear);
94*baf5664fSJonas Devlieghere 
959128ee2fSEnrico Granata   if (m_opaque_sp.get())
969128ee2fSEnrico Granata     m_opaque_sp->Clear();
979128ee2fSEnrico Granata }
989128ee2fSEnrico Granata 
99b9c1b51eSKate Stone size_t SBData::GetByteSize() {
100*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(size_t, SBData, GetByteSize);
101*baf5664fSJonas Devlieghere 
1025160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1039128ee2fSEnrico Granata   size_t value = 0;
1049128ee2fSEnrico Granata   if (m_opaque_sp.get())
1059128ee2fSEnrico Granata     value = m_opaque_sp->GetByteSize();
1069128ee2fSEnrico Granata   if (log)
1079128ee2fSEnrico Granata     log->Printf("SBData::GetByteSize () => "
108b9c1b51eSKate Stone                 "( %" PRIu64 " )",
109b9c1b51eSKate Stone                 (uint64_t)value);
1109128ee2fSEnrico Granata   return value;
1119128ee2fSEnrico Granata }
1129128ee2fSEnrico Granata 
113b9c1b51eSKate Stone lldb::ByteOrder SBData::GetByteOrder() {
114*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::ByteOrder, SBData, GetByteOrder);
115*baf5664fSJonas Devlieghere 
1165160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1179128ee2fSEnrico Granata   lldb::ByteOrder value = eByteOrderInvalid;
1189128ee2fSEnrico Granata   if (m_opaque_sp.get())
1199128ee2fSEnrico Granata     value = m_opaque_sp->GetByteOrder();
1209128ee2fSEnrico Granata   if (log)
1219128ee2fSEnrico Granata     log->Printf("SBData::GetByteOrder () => "
122b9c1b51eSKate Stone                 "(%i)",
123b9c1b51eSKate Stone                 value);
1249128ee2fSEnrico Granata   return value;
1259128ee2fSEnrico Granata }
1269128ee2fSEnrico Granata 
127b9c1b51eSKate Stone void SBData::SetByteOrder(lldb::ByteOrder endian) {
128*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBData, SetByteOrder, (lldb::ByteOrder), endian);
129*baf5664fSJonas Devlieghere 
1305160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1310f28986aSGreg Clayton   if (m_opaque_sp.get())
1320f28986aSGreg Clayton     m_opaque_sp->SetByteOrder(endian);
1330f28986aSGreg Clayton   if (log)
1340f28986aSGreg Clayton     log->Printf("SBData::GetByteOrder (%i)", endian);
1350f28986aSGreg Clayton }
1360f28986aSGreg Clayton 
137b9c1b51eSKate Stone float SBData::GetFloat(lldb::SBError &error, lldb::offset_t offset) {
138*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(float, SBData, GetFloat, (lldb::SBError &, lldb::offset_t),
139*baf5664fSJonas Devlieghere                      error, offset);
140*baf5664fSJonas Devlieghere 
1415160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1429128ee2fSEnrico Granata   float value = 0;
143b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
1449128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
145b9c1b51eSKate Stone   } else {
1469128ee2fSEnrico Granata     uint32_t old_offset = offset;
1479128ee2fSEnrico Granata     value = m_opaque_sp->GetFloat(&offset);
1489128ee2fSEnrico Granata     if (offset == old_offset)
1499128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
1509128ee2fSEnrico Granata   }
1519128ee2fSEnrico Granata   if (log)
152324a1036SSaleem Abdulrasool     log->Printf("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => (%f)",
153324a1036SSaleem Abdulrasool                 static_cast<void *>(error.get()), offset, value);
1549128ee2fSEnrico Granata   return value;
1559128ee2fSEnrico Granata }
1569128ee2fSEnrico Granata 
157b9c1b51eSKate Stone double SBData::GetDouble(lldb::SBError &error, lldb::offset_t offset) {
158*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(double, SBData, GetDouble,
159*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
160*baf5664fSJonas Devlieghere 
1615160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1629128ee2fSEnrico Granata   double value = 0;
163b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
1649128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
165b9c1b51eSKate Stone   } else {
1669128ee2fSEnrico Granata     uint32_t old_offset = offset;
1679128ee2fSEnrico Granata     value = m_opaque_sp->GetDouble(&offset);
1689128ee2fSEnrico Granata     if (offset == old_offset)
1699128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
1709128ee2fSEnrico Granata   }
1719128ee2fSEnrico Granata   if (log)
172c7bece56SGreg Clayton     log->Printf("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => "
173b9c1b51eSKate Stone                 "(%f)",
174b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
1759128ee2fSEnrico Granata   return value;
1769128ee2fSEnrico Granata }
1779128ee2fSEnrico Granata 
178b9c1b51eSKate Stone long double SBData::GetLongDouble(lldb::SBError &error, lldb::offset_t offset) {
179*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(long double, SBData, GetLongDouble,
180*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
181*baf5664fSJonas Devlieghere 
1825160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
1839128ee2fSEnrico Granata   long double value = 0;
184b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
1859128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
186b9c1b51eSKate Stone   } else {
1879128ee2fSEnrico Granata     uint32_t old_offset = offset;
1889128ee2fSEnrico Granata     value = m_opaque_sp->GetLongDouble(&offset);
1899128ee2fSEnrico Granata     if (offset == old_offset)
1909128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
1919128ee2fSEnrico Granata   }
1929128ee2fSEnrico Granata   if (log)
193c7bece56SGreg Clayton     log->Printf("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => "
194b9c1b51eSKate Stone                 "(%Lf)",
195b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
1969128ee2fSEnrico Granata   return value;
1979128ee2fSEnrico Granata }
1989128ee2fSEnrico Granata 
199b9c1b51eSKate Stone lldb::addr_t SBData::GetAddress(lldb::SBError &error, lldb::offset_t offset) {
200*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::addr_t, SBData, GetAddress,
201*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
202*baf5664fSJonas Devlieghere 
2035160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
2049128ee2fSEnrico Granata   lldb::addr_t value = 0;
205b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
2069128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
207b9c1b51eSKate Stone   } else {
2089128ee2fSEnrico Granata     uint32_t old_offset = offset;
2099128ee2fSEnrico Granata     value = m_opaque_sp->GetAddress(&offset);
2109128ee2fSEnrico Granata     if (offset == old_offset)
2119128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
2129128ee2fSEnrico Granata   }
2139128ee2fSEnrico Granata   if (log)
214c7bece56SGreg Clayton     log->Printf("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => "
215b9c1b51eSKate Stone                 "(%p)",
216b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset,
217324a1036SSaleem Abdulrasool                 reinterpret_cast<void *>(value));
2189128ee2fSEnrico Granata   return value;
2199128ee2fSEnrico Granata }
2209128ee2fSEnrico Granata 
221b9c1b51eSKate Stone uint8_t SBData::GetUnsignedInt8(lldb::SBError &error, lldb::offset_t offset) {
222*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint8_t, SBData, GetUnsignedInt8,
223*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
224*baf5664fSJonas Devlieghere 
2255160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
2269128ee2fSEnrico Granata   uint8_t value = 0;
227b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
2289128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
229b9c1b51eSKate Stone   } else {
2309128ee2fSEnrico Granata     uint32_t old_offset = offset;
2319128ee2fSEnrico Granata     value = m_opaque_sp->GetU8(&offset);
2329128ee2fSEnrico Granata     if (offset == old_offset)
2339128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
2349128ee2fSEnrico Granata   }
2359128ee2fSEnrico Granata   if (log)
236c7bece56SGreg Clayton     log->Printf("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => "
237b9c1b51eSKate Stone                 "(%c)",
238b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
2399128ee2fSEnrico Granata   return value;
2409128ee2fSEnrico Granata }
2419128ee2fSEnrico Granata 
242b9c1b51eSKate Stone uint16_t SBData::GetUnsignedInt16(lldb::SBError &error, lldb::offset_t offset) {
243*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint16_t, SBData, GetUnsignedInt16,
244*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
245*baf5664fSJonas Devlieghere 
2465160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
2479128ee2fSEnrico Granata   uint16_t value = 0;
248b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
2499128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
250b9c1b51eSKate Stone   } else {
2519128ee2fSEnrico Granata     uint32_t old_offset = offset;
2529128ee2fSEnrico Granata     value = m_opaque_sp->GetU16(&offset);
2539128ee2fSEnrico Granata     if (offset == old_offset)
2549128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
2559128ee2fSEnrico Granata   }
2569128ee2fSEnrico Granata   if (log)
257c7bece56SGreg Clayton     log->Printf("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => "
258b9c1b51eSKate Stone                 "(%hd)",
259b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
2609128ee2fSEnrico Granata   return value;
2619128ee2fSEnrico Granata }
2629128ee2fSEnrico Granata 
263b9c1b51eSKate Stone uint32_t SBData::GetUnsignedInt32(lldb::SBError &error, lldb::offset_t offset) {
264*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBData, GetUnsignedInt32,
265*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
266*baf5664fSJonas Devlieghere 
2675160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
2689128ee2fSEnrico Granata   uint32_t value = 0;
269b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
2709128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
271b9c1b51eSKate Stone   } else {
2729128ee2fSEnrico Granata     uint32_t old_offset = offset;
2739128ee2fSEnrico Granata     value = m_opaque_sp->GetU32(&offset);
2749128ee2fSEnrico Granata     if (offset == old_offset)
2759128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
2769128ee2fSEnrico Granata   }
2779128ee2fSEnrico Granata   if (log)
278c7bece56SGreg Clayton     log->Printf("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => "
279b9c1b51eSKate Stone                 "(%d)",
280b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
2819128ee2fSEnrico Granata   return value;
2829128ee2fSEnrico Granata }
2839128ee2fSEnrico Granata 
284b9c1b51eSKate Stone uint64_t SBData::GetUnsignedInt64(lldb::SBError &error, lldb::offset_t offset) {
285*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint64_t, SBData, GetUnsignedInt64,
286*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
287*baf5664fSJonas Devlieghere 
2885160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
2899128ee2fSEnrico Granata   uint64_t value = 0;
290b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
2919128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
292b9c1b51eSKate Stone   } else {
2939128ee2fSEnrico Granata     uint32_t old_offset = offset;
2949128ee2fSEnrico Granata     value = m_opaque_sp->GetU64(&offset);
2959128ee2fSEnrico Granata     if (offset == old_offset)
2969128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
2979128ee2fSEnrico Granata   }
2989128ee2fSEnrico Granata   if (log)
299c7bece56SGreg Clayton     log->Printf("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => "
300b9c1b51eSKate Stone                 "(%" PRId64 ")",
301b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
3029128ee2fSEnrico Granata   return value;
3039128ee2fSEnrico Granata }
3049128ee2fSEnrico Granata 
305b9c1b51eSKate Stone int8_t SBData::GetSignedInt8(lldb::SBError &error, lldb::offset_t offset) {
306*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(int8_t, SBData, GetSignedInt8,
307*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
308*baf5664fSJonas Devlieghere 
3095160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
3109128ee2fSEnrico Granata   int8_t value = 0;
311b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
3129128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
313b9c1b51eSKate Stone   } else {
3149128ee2fSEnrico Granata     uint32_t old_offset = offset;
3159128ee2fSEnrico Granata     value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
3169128ee2fSEnrico Granata     if (offset == old_offset)
3179128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
3189128ee2fSEnrico Granata   }
3199128ee2fSEnrico Granata   if (log)
320c7bece56SGreg Clayton     log->Printf("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => "
321b9c1b51eSKate Stone                 "(%c)",
322b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
3239128ee2fSEnrico Granata   return value;
3249128ee2fSEnrico Granata }
3259128ee2fSEnrico Granata 
326b9c1b51eSKate Stone int16_t SBData::GetSignedInt16(lldb::SBError &error, lldb::offset_t offset) {
327*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(int16_t, SBData, GetSignedInt16,
328*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
329*baf5664fSJonas Devlieghere 
3305160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
3319128ee2fSEnrico Granata   int16_t value = 0;
332b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
3339128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
334b9c1b51eSKate Stone   } else {
3359128ee2fSEnrico Granata     uint32_t old_offset = offset;
3369128ee2fSEnrico Granata     value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
3379128ee2fSEnrico Granata     if (offset == old_offset)
3389128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
3399128ee2fSEnrico Granata   }
3409128ee2fSEnrico Granata   if (log)
341c7bece56SGreg Clayton     log->Printf("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => "
342b9c1b51eSKate Stone                 "(%hd)",
343b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
3449128ee2fSEnrico Granata   return value;
3459128ee2fSEnrico Granata }
3469128ee2fSEnrico Granata 
347b9c1b51eSKate Stone int32_t SBData::GetSignedInt32(lldb::SBError &error, lldb::offset_t offset) {
348*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(int32_t, SBData, GetSignedInt32,
349*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
350*baf5664fSJonas Devlieghere 
3515160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
3529128ee2fSEnrico Granata   int32_t value = 0;
353b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
3549128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
355b9c1b51eSKate Stone   } else {
3569128ee2fSEnrico Granata     uint32_t old_offset = offset;
3579128ee2fSEnrico Granata     value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
3589128ee2fSEnrico Granata     if (offset == old_offset)
3599128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
3609128ee2fSEnrico Granata   }
3619128ee2fSEnrico Granata   if (log)
362c7bece56SGreg Clayton     log->Printf("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => "
363b9c1b51eSKate Stone                 "(%d)",
364b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
3659128ee2fSEnrico Granata   return value;
3669128ee2fSEnrico Granata }
3679128ee2fSEnrico Granata 
368b9c1b51eSKate Stone int64_t SBData::GetSignedInt64(lldb::SBError &error, lldb::offset_t offset) {
369*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(int64_t, SBData, GetSignedInt64,
370*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
371*baf5664fSJonas Devlieghere 
3725160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
3739128ee2fSEnrico Granata   int64_t value = 0;
374b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
3759128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
376b9c1b51eSKate Stone   } else {
3779128ee2fSEnrico Granata     uint32_t old_offset = offset;
3789128ee2fSEnrico Granata     value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
3799128ee2fSEnrico Granata     if (offset == old_offset)
3809128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
3819128ee2fSEnrico Granata   }
3829128ee2fSEnrico Granata   if (log)
383c7bece56SGreg Clayton     log->Printf("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => "
384b9c1b51eSKate Stone                 "(%" PRId64 ")",
385b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset, value);
3869128ee2fSEnrico Granata   return value;
3879128ee2fSEnrico Granata }
3889128ee2fSEnrico Granata 
389b9c1b51eSKate Stone const char *SBData::GetString(lldb::SBError &error, lldb::offset_t offset) {
390*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(const char *, SBData, GetString,
391*baf5664fSJonas Devlieghere                      (lldb::SBError &, lldb::offset_t), error, offset);
392*baf5664fSJonas Devlieghere 
3935160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
3949128ee2fSEnrico Granata   const char *value = 0;
395b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
3969128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
397b9c1b51eSKate Stone   } else {
3989128ee2fSEnrico Granata     uint32_t old_offset = offset;
3999128ee2fSEnrico Granata     value = m_opaque_sp->GetCStr(&offset);
4009128ee2fSEnrico Granata     if (offset == old_offset || (value == NULL))
4019128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
4029128ee2fSEnrico Granata   }
4039128ee2fSEnrico Granata   if (log)
404324a1036SSaleem Abdulrasool     log->Printf("SBData::GetString (error=%p,offset=%" PRIu64 ") => (%p)",
405324a1036SSaleem Abdulrasool                 static_cast<void *>(error.get()), offset,
406324a1036SSaleem Abdulrasool                 static_cast<const void *>(value));
4079128ee2fSEnrico Granata   return value;
4089128ee2fSEnrico Granata }
4099128ee2fSEnrico Granata 
410b9c1b51eSKate Stone bool SBData::GetDescription(lldb::SBStream &description,
411b9c1b51eSKate Stone                             lldb::addr_t base_addr) {
412*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, GetDescription,
413*baf5664fSJonas Devlieghere                      (lldb::SBStream &, lldb::addr_t), description, base_addr);
414*baf5664fSJonas Devlieghere 
415da7bc7d0SGreg Clayton   Stream &strm = description.ref();
416da7bc7d0SGreg Clayton 
417b9c1b51eSKate Stone   if (m_opaque_sp) {
41829cb868aSZachary Turner     DumpDataExtractor(*m_opaque_sp, &strm, 0, lldb::eFormatBytesWithASCII, 1,
419b9c1b51eSKate Stone                       m_opaque_sp->GetByteSize(), 16, base_addr, 0, 0);
420b9c1b51eSKate Stone   } else
421da7bc7d0SGreg Clayton     strm.PutCString("No value");
4229128ee2fSEnrico Granata 
4239128ee2fSEnrico Granata   return true;
4249128ee2fSEnrico Granata }
4259128ee2fSEnrico Granata 
426b9c1b51eSKate Stone size_t SBData::ReadRawData(lldb::SBError &error, lldb::offset_t offset,
427b9c1b51eSKate Stone                            void *buf, size_t size) {
4285160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
4299128ee2fSEnrico Granata   void *ok = NULL;
430b9c1b51eSKate Stone   if (!m_opaque_sp.get()) {
4319128ee2fSEnrico Granata     error.SetErrorString("no value to read from");
432b9c1b51eSKate Stone   } else {
4339128ee2fSEnrico Granata     uint32_t old_offset = offset;
4349128ee2fSEnrico Granata     ok = m_opaque_sp->GetU8(&offset, buf, size);
4359128ee2fSEnrico Granata     if ((offset == old_offset) || (ok == NULL))
4369128ee2fSEnrico Granata       error.SetErrorString("unable to read data");
4379128ee2fSEnrico Granata   }
4389128ee2fSEnrico Granata   if (log)
439b9c1b51eSKate Stone     log->Printf("SBData::ReadRawData (error=%p,offset=%" PRIu64
440b9c1b51eSKate Stone                 ",buf=%p,size=%" PRIu64 ") => "
441b9c1b51eSKate Stone                 "(%p)",
442b9c1b51eSKate Stone                 static_cast<void *>(error.get()), offset,
443324a1036SSaleem Abdulrasool                 static_cast<void *>(buf), static_cast<uint64_t>(size),
444324a1036SSaleem Abdulrasool                 static_cast<void *>(ok));
4459128ee2fSEnrico Granata   return ok ? size : 0;
4469128ee2fSEnrico Granata }
4479128ee2fSEnrico Granata 
448b9c1b51eSKate Stone void SBData::SetData(lldb::SBError &error, const void *buf, size_t size,
449b9c1b51eSKate Stone                      lldb::ByteOrder endian, uint8_t addr_size) {
4505160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
4519128ee2fSEnrico Granata   if (!m_opaque_sp.get())
452796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buf, size, endian, addr_size);
4539128ee2fSEnrico Granata   else
454896b4513SGreg Clayton   {
4559128ee2fSEnrico Granata     m_opaque_sp->SetData(buf, size, endian);
456896b4513SGreg Clayton     m_opaque_sp->SetAddressByteSize(addr_size);
457896b4513SGreg Clayton   }
458896b4513SGreg Clayton 
4599128ee2fSEnrico Granata   if (log)
460b9c1b51eSKate Stone     log->Printf("SBData::SetData (error=%p,buf=%p,size=%" PRIu64
461b9c1b51eSKate Stone                 ",endian=%d,addr_size=%c) => "
462b9c1b51eSKate Stone                 "(%p)",
463b9c1b51eSKate Stone                 static_cast<void *>(error.get()),
464324a1036SSaleem Abdulrasool                 static_cast<const void *>(buf), static_cast<uint64_t>(size),
465324a1036SSaleem Abdulrasool                 endian, addr_size, static_cast<void *>(m_opaque_sp.get()));
4669128ee2fSEnrico Granata }
4679128ee2fSEnrico Granata 
468b9c1b51eSKate Stone bool SBData::Append(const SBData &rhs) {
469*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, Append, (const lldb::SBData &), rhs);
470*baf5664fSJonas Devlieghere 
4715160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
4729128ee2fSEnrico Granata   bool value = false;
4739128ee2fSEnrico Granata   if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
4749128ee2fSEnrico Granata     value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
4759128ee2fSEnrico Granata   if (log)
476324a1036SSaleem Abdulrasool     log->Printf("SBData::Append (rhs=%p) => (%s)",
477324a1036SSaleem Abdulrasool                 static_cast<void *>(rhs.get()), value ? "true" : "false");
4789128ee2fSEnrico Granata   return value;
4799128ee2fSEnrico Granata }
4800f28986aSGreg Clayton 
481b9c1b51eSKate Stone lldb::SBData SBData::CreateDataFromCString(lldb::ByteOrder endian,
482b9c1b51eSKate Stone                                            uint32_t addr_byte_size,
483b9c1b51eSKate Stone                                            const char *data) {
484*baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBData, SBData, CreateDataFromCString,
485*baf5664fSJonas Devlieghere                             (lldb::ByteOrder, uint32_t, const char *), endian,
486*baf5664fSJonas Devlieghere                             addr_byte_size, data);
487*baf5664fSJonas Devlieghere 
4880f28986aSGreg Clayton   if (!data || !data[0])
489*baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBData());
4900f28986aSGreg Clayton 
4910f28986aSGreg Clayton   uint32_t data_len = strlen(data);
4920f28986aSGreg Clayton 
4930f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
494b9c1b51eSKate Stone   lldb::DataExtractorSP data_sp(
495b9c1b51eSKate Stone       new DataExtractor(buffer_sp, endian, addr_byte_size));
4960f28986aSGreg Clayton 
4970f28986aSGreg Clayton   SBData ret(data_sp);
4980f28986aSGreg Clayton 
499*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ret);
5000f28986aSGreg Clayton }
5010f28986aSGreg Clayton 
502b9c1b51eSKate Stone lldb::SBData SBData::CreateDataFromUInt64Array(lldb::ByteOrder endian,
503b9c1b51eSKate Stone                                                uint32_t addr_byte_size,
504b9c1b51eSKate Stone                                                uint64_t *array,
505b9c1b51eSKate Stone                                                size_t array_len) {
506*baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBData, SBData, CreateDataFromUInt64Array,
507*baf5664fSJonas Devlieghere                             (lldb::ByteOrder, uint32_t, uint64_t *, size_t),
508*baf5664fSJonas Devlieghere                             endian, addr_byte_size, array, array_len);
509*baf5664fSJonas Devlieghere 
5100f28986aSGreg Clayton   if (!array || array_len == 0)
511*baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBData());
5120f28986aSGreg Clayton 
5130f28986aSGreg Clayton   size_t data_len = array_len * sizeof(uint64_t);
5140f28986aSGreg Clayton 
5150f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
516b9c1b51eSKate Stone   lldb::DataExtractorSP data_sp(
517b9c1b51eSKate Stone       new DataExtractor(buffer_sp, endian, addr_byte_size));
5180f28986aSGreg Clayton 
5190f28986aSGreg Clayton   SBData ret(data_sp);
5200f28986aSGreg Clayton 
521*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ret);
5220f28986aSGreg Clayton }
5230f28986aSGreg Clayton 
524b9c1b51eSKate Stone lldb::SBData SBData::CreateDataFromUInt32Array(lldb::ByteOrder endian,
525b9c1b51eSKate Stone                                                uint32_t addr_byte_size,
526b9c1b51eSKate Stone                                                uint32_t *array,
527b9c1b51eSKate Stone                                                size_t array_len) {
528*baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBData, SBData, CreateDataFromUInt32Array,
529*baf5664fSJonas Devlieghere                             (lldb::ByteOrder, uint32_t, uint32_t *, size_t),
530*baf5664fSJonas Devlieghere                             endian, addr_byte_size, array, array_len);
531*baf5664fSJonas Devlieghere 
5320f28986aSGreg Clayton   if (!array || array_len == 0)
533*baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBData());
5340f28986aSGreg Clayton 
5350f28986aSGreg Clayton   size_t data_len = array_len * sizeof(uint32_t);
5360f28986aSGreg Clayton 
5370f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
538b9c1b51eSKate Stone   lldb::DataExtractorSP data_sp(
539b9c1b51eSKate Stone       new DataExtractor(buffer_sp, endian, addr_byte_size));
5400f28986aSGreg Clayton 
5410f28986aSGreg Clayton   SBData ret(data_sp);
5420f28986aSGreg Clayton 
543*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ret);
5440f28986aSGreg Clayton }
5450f28986aSGreg Clayton 
546b9c1b51eSKate Stone lldb::SBData SBData::CreateDataFromSInt64Array(lldb::ByteOrder endian,
547b9c1b51eSKate Stone                                                uint32_t addr_byte_size,
548b9c1b51eSKate Stone                                                int64_t *array,
549b9c1b51eSKate Stone                                                size_t array_len) {
550*baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBData, SBData, CreateDataFromSInt64Array,
551*baf5664fSJonas Devlieghere                             (lldb::ByteOrder, uint32_t, int64_t *, size_t),
552*baf5664fSJonas Devlieghere                             endian, addr_byte_size, array, array_len);
553*baf5664fSJonas Devlieghere 
5540f28986aSGreg Clayton   if (!array || array_len == 0)
555*baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBData());
5560f28986aSGreg Clayton 
5570f28986aSGreg Clayton   size_t data_len = array_len * sizeof(int64_t);
5580f28986aSGreg Clayton 
5590f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
560b9c1b51eSKate Stone   lldb::DataExtractorSP data_sp(
561b9c1b51eSKate Stone       new DataExtractor(buffer_sp, endian, addr_byte_size));
5620f28986aSGreg Clayton 
5630f28986aSGreg Clayton   SBData ret(data_sp);
5640f28986aSGreg Clayton 
565*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ret);
5660f28986aSGreg Clayton }
5670f28986aSGreg Clayton 
568b9c1b51eSKate Stone lldb::SBData SBData::CreateDataFromSInt32Array(lldb::ByteOrder endian,
569b9c1b51eSKate Stone                                                uint32_t addr_byte_size,
570b9c1b51eSKate Stone                                                int32_t *array,
571b9c1b51eSKate Stone                                                size_t array_len) {
572*baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBData, SBData, CreateDataFromSInt32Array,
573*baf5664fSJonas Devlieghere                             (lldb::ByteOrder, uint32_t, int32_t *, size_t),
574*baf5664fSJonas Devlieghere                             endian, addr_byte_size, array, array_len);
575*baf5664fSJonas Devlieghere 
5760f28986aSGreg Clayton   if (!array || array_len == 0)
577*baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBData());
5780f28986aSGreg Clayton 
5790f28986aSGreg Clayton   size_t data_len = array_len * sizeof(int32_t);
5800f28986aSGreg Clayton 
5810f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
582b9c1b51eSKate Stone   lldb::DataExtractorSP data_sp(
583b9c1b51eSKate Stone       new DataExtractor(buffer_sp, endian, addr_byte_size));
5840f28986aSGreg Clayton 
5850f28986aSGreg Clayton   SBData ret(data_sp);
5860f28986aSGreg Clayton 
587*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ret);
5880f28986aSGreg Clayton }
5890f28986aSGreg Clayton 
590b9c1b51eSKate Stone lldb::SBData SBData::CreateDataFromDoubleArray(lldb::ByteOrder endian,
591b9c1b51eSKate Stone                                                uint32_t addr_byte_size,
592b9c1b51eSKate Stone                                                double *array,
593b9c1b51eSKate Stone                                                size_t array_len) {
594*baf5664fSJonas Devlieghere   LLDB_RECORD_STATIC_METHOD(lldb::SBData, SBData, CreateDataFromDoubleArray,
595*baf5664fSJonas Devlieghere                             (lldb::ByteOrder, uint32_t, double *, size_t),
596*baf5664fSJonas Devlieghere                             endian, addr_byte_size, array, array_len);
597*baf5664fSJonas Devlieghere 
5980f28986aSGreg Clayton   if (!array || array_len == 0)
599*baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBData());
6000f28986aSGreg Clayton 
6010f28986aSGreg Clayton   size_t data_len = array_len * sizeof(double);
6020f28986aSGreg Clayton 
6030f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
604b9c1b51eSKate Stone   lldb::DataExtractorSP data_sp(
605b9c1b51eSKate Stone       new DataExtractor(buffer_sp, endian, addr_byte_size));
6060f28986aSGreg Clayton 
6070f28986aSGreg Clayton   SBData ret(data_sp);
6080f28986aSGreg Clayton 
609*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ret);
6100f28986aSGreg Clayton }
6110f28986aSGreg Clayton 
612b9c1b51eSKate Stone bool SBData::SetDataFromCString(const char *data) {
613*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, SetDataFromCString, (const char *), data);
614*baf5664fSJonas Devlieghere 
6155160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
6160f28986aSGreg Clayton 
617b9c1b51eSKate Stone   if (!data) {
6180f28986aSGreg Clayton     if (log)
619324a1036SSaleem Abdulrasool       log->Printf("SBData::SetDataFromCString (data=%p) => false",
620324a1036SSaleem Abdulrasool                   static_cast<const void *>(data));
6210f28986aSGreg Clayton     return false;
6220f28986aSGreg Clayton   }
6230f28986aSGreg Clayton 
6240f28986aSGreg Clayton   size_t data_len = strlen(data);
6250f28986aSGreg Clayton 
6260f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
6270f28986aSGreg Clayton 
6280f28986aSGreg Clayton   if (!m_opaque_sp.get())
629796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buffer_sp, GetByteOrder(),
630796ac80bSJonas Devlieghere                                                   GetAddressByteSize());
6310f28986aSGreg Clayton   else
6320f28986aSGreg Clayton     m_opaque_sp->SetData(buffer_sp);
6330f28986aSGreg Clayton 
6340f28986aSGreg Clayton   if (log)
635324a1036SSaleem Abdulrasool     log->Printf("SBData::SetDataFromCString (data=%p) => true",
636324a1036SSaleem Abdulrasool                 static_cast<const void *>(data));
6370f28986aSGreg Clayton 
6380f28986aSGreg Clayton   return true;
6390f28986aSGreg Clayton }
6400f28986aSGreg Clayton 
641b9c1b51eSKate Stone bool SBData::SetDataFromUInt64Array(uint64_t *array, size_t array_len) {
642*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, SetDataFromUInt64Array, (uint64_t *, size_t),
643*baf5664fSJonas Devlieghere                      array, array_len);
644*baf5664fSJonas Devlieghere 
6455160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
6460f28986aSGreg Clayton 
647b9c1b51eSKate Stone   if (!array || array_len == 0) {
6480f28986aSGreg Clayton     if (log)
649b9c1b51eSKate Stone       log->Printf(
650b9c1b51eSKate Stone           "SBData::SetDataFromUInt64Array (array=%p, array_len = %" PRIu64
651b9c1b51eSKate Stone           ") => "
652b9c1b51eSKate Stone           "false",
653b9c1b51eSKate Stone           static_cast<void *>(array), static_cast<uint64_t>(array_len));
6540f28986aSGreg Clayton     return false;
6550f28986aSGreg Clayton   }
6560f28986aSGreg Clayton 
6570f28986aSGreg Clayton   size_t data_len = array_len * sizeof(uint64_t);
6580f28986aSGreg Clayton 
6590f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6600f28986aSGreg Clayton 
6610f28986aSGreg Clayton   if (!m_opaque_sp.get())
662796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buffer_sp, GetByteOrder(),
663796ac80bSJonas Devlieghere                                                   GetAddressByteSize());
6640f28986aSGreg Clayton   else
6650f28986aSGreg Clayton     m_opaque_sp->SetData(buffer_sp);
6660f28986aSGreg Clayton 
6670f28986aSGreg Clayton   if (log)
668b9c1b51eSKate Stone     log->Printf("SBData::SetDataFromUInt64Array (array=%p, array_len = %" PRIu64
669b9c1b51eSKate Stone                 ") => "
670b9c1b51eSKate Stone                 "true",
671b9c1b51eSKate Stone                 static_cast<void *>(array), static_cast<uint64_t>(array_len));
6720f28986aSGreg Clayton 
6730f28986aSGreg Clayton   return true;
6740f28986aSGreg Clayton }
6750f28986aSGreg Clayton 
676b9c1b51eSKate Stone bool SBData::SetDataFromUInt32Array(uint32_t *array, size_t array_len) {
677*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, SetDataFromUInt32Array, (uint32_t *, size_t),
678*baf5664fSJonas Devlieghere                      array, array_len);
679*baf5664fSJonas Devlieghere 
6805160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
6810f28986aSGreg Clayton 
682b9c1b51eSKate Stone   if (!array || array_len == 0) {
6830f28986aSGreg Clayton     if (log)
684b9c1b51eSKate Stone       log->Printf(
685b9c1b51eSKate Stone           "SBData::SetDataFromUInt32Array (array=%p, array_len = %" PRIu64
686b9c1b51eSKate Stone           ") => "
687b9c1b51eSKate Stone           "false",
688b9c1b51eSKate Stone           static_cast<void *>(array), static_cast<uint64_t>(array_len));
6890f28986aSGreg Clayton     return false;
6900f28986aSGreg Clayton   }
6910f28986aSGreg Clayton 
6920f28986aSGreg Clayton   size_t data_len = array_len * sizeof(uint32_t);
6930f28986aSGreg Clayton 
6940f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6950f28986aSGreg Clayton 
6960f28986aSGreg Clayton   if (!m_opaque_sp.get())
697796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buffer_sp, GetByteOrder(),
698796ac80bSJonas Devlieghere                                                   GetAddressByteSize());
6990f28986aSGreg Clayton   else
7000f28986aSGreg Clayton     m_opaque_sp->SetData(buffer_sp);
7010f28986aSGreg Clayton 
7020f28986aSGreg Clayton   if (log)
703b9c1b51eSKate Stone     log->Printf("SBData::SetDataFromUInt32Array (array=%p, array_len = %" PRIu64
704b9c1b51eSKate Stone                 ") => "
705b9c1b51eSKate Stone                 "true",
706b9c1b51eSKate Stone                 static_cast<void *>(array), static_cast<uint64_t>(array_len));
7070f28986aSGreg Clayton 
7080f28986aSGreg Clayton   return true;
7090f28986aSGreg Clayton }
7100f28986aSGreg Clayton 
711b9c1b51eSKate Stone bool SBData::SetDataFromSInt64Array(int64_t *array, size_t array_len) {
712*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, SetDataFromSInt64Array, (int64_t *, size_t),
713*baf5664fSJonas Devlieghere                      array, array_len);
714*baf5664fSJonas Devlieghere 
7155160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7160f28986aSGreg Clayton 
717b9c1b51eSKate Stone   if (!array || array_len == 0) {
7180f28986aSGreg Clayton     if (log)
719b9c1b51eSKate Stone       log->Printf(
720b9c1b51eSKate Stone           "SBData::SetDataFromSInt64Array (array=%p, array_len = %" PRIu64
721b9c1b51eSKate Stone           ") => "
722b9c1b51eSKate Stone           "false",
723b9c1b51eSKate Stone           static_cast<void *>(array), static_cast<uint64_t>(array_len));
7240f28986aSGreg Clayton     return false;
7250f28986aSGreg Clayton   }
7260f28986aSGreg Clayton 
7270f28986aSGreg Clayton   size_t data_len = array_len * sizeof(int64_t);
7280f28986aSGreg Clayton 
7290f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7300f28986aSGreg Clayton 
7310f28986aSGreg Clayton   if (!m_opaque_sp.get())
732796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buffer_sp, GetByteOrder(),
733796ac80bSJonas Devlieghere                                                   GetAddressByteSize());
7340f28986aSGreg Clayton   else
7350f28986aSGreg Clayton     m_opaque_sp->SetData(buffer_sp);
7360f28986aSGreg Clayton 
7370f28986aSGreg Clayton   if (log)
738b9c1b51eSKate Stone     log->Printf("SBData::SetDataFromSInt64Array (array=%p, array_len = %" PRIu64
739b9c1b51eSKate Stone                 ") => "
740b9c1b51eSKate Stone                 "true",
741b9c1b51eSKate Stone                 static_cast<void *>(array), static_cast<uint64_t>(array_len));
7420f28986aSGreg Clayton 
7430f28986aSGreg Clayton   return true;
7440f28986aSGreg Clayton }
7450f28986aSGreg Clayton 
746b9c1b51eSKate Stone bool SBData::SetDataFromSInt32Array(int32_t *array, size_t array_len) {
747*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, SetDataFromSInt32Array, (int32_t *, size_t),
748*baf5664fSJonas Devlieghere                      array, array_len);
749*baf5664fSJonas Devlieghere 
7505160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7510f28986aSGreg Clayton 
752b9c1b51eSKate Stone   if (!array || array_len == 0) {
7530f28986aSGreg Clayton     if (log)
754b9c1b51eSKate Stone       log->Printf(
755b9c1b51eSKate Stone           "SBData::SetDataFromSInt32Array (array=%p, array_len = %" PRIu64
756b9c1b51eSKate Stone           ") => "
757b9c1b51eSKate Stone           "false",
758b9c1b51eSKate Stone           static_cast<void *>(array), static_cast<uint64_t>(array_len));
7590f28986aSGreg Clayton     return false;
7600f28986aSGreg Clayton   }
7610f28986aSGreg Clayton 
7620f28986aSGreg Clayton   size_t data_len = array_len * sizeof(int32_t);
7630f28986aSGreg Clayton 
7640f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7650f28986aSGreg Clayton 
7660f28986aSGreg Clayton   if (!m_opaque_sp.get())
767796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buffer_sp, GetByteOrder(),
768796ac80bSJonas Devlieghere                                                   GetAddressByteSize());
7690f28986aSGreg Clayton   else
7700f28986aSGreg Clayton     m_opaque_sp->SetData(buffer_sp);
7710f28986aSGreg Clayton 
7720f28986aSGreg Clayton   if (log)
773b9c1b51eSKate Stone     log->Printf("SBData::SetDataFromSInt32Array (array=%p, array_len = %" PRIu64
774b9c1b51eSKate Stone                 ") => "
775b9c1b51eSKate Stone                 "true",
776b9c1b51eSKate Stone                 static_cast<void *>(array), static_cast<uint64_t>(array_len));
7770f28986aSGreg Clayton 
7780f28986aSGreg Clayton   return true;
7790f28986aSGreg Clayton }
7800f28986aSGreg Clayton 
781b9c1b51eSKate Stone bool SBData::SetDataFromDoubleArray(double *array, size_t array_len) {
782*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBData, SetDataFromDoubleArray, (double *, size_t),
783*baf5664fSJonas Devlieghere                      array, array_len);
784*baf5664fSJonas Devlieghere 
7855160ce5cSGreg Clayton   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
7860f28986aSGreg Clayton 
787b9c1b51eSKate Stone   if (!array || array_len == 0) {
7880f28986aSGreg Clayton     if (log)
789b9c1b51eSKate Stone       log->Printf(
790b9c1b51eSKate Stone           "SBData::SetDataFromDoubleArray (array=%p, array_len = %" PRIu64
791b9c1b51eSKate Stone           ") => "
792b9c1b51eSKate Stone           "false",
793b9c1b51eSKate Stone           static_cast<void *>(array), static_cast<uint64_t>(array_len));
7940f28986aSGreg Clayton     return false;
7950f28986aSGreg Clayton   }
7960f28986aSGreg Clayton 
7970f28986aSGreg Clayton   size_t data_len = array_len * sizeof(double);
7980f28986aSGreg Clayton 
7990f28986aSGreg Clayton   lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
8000f28986aSGreg Clayton 
8010f28986aSGreg Clayton   if (!m_opaque_sp.get())
802796ac80bSJonas Devlieghere     m_opaque_sp = std::make_shared<DataExtractor>(buffer_sp, GetByteOrder(),
803796ac80bSJonas Devlieghere                                                   GetAddressByteSize());
8040f28986aSGreg Clayton   else
8050f28986aSGreg Clayton     m_opaque_sp->SetData(buffer_sp);
8060f28986aSGreg Clayton 
8070f28986aSGreg Clayton   if (log)
808b9c1b51eSKate Stone     log->Printf("SBData::SetDataFromDoubleArray (array=%p, array_len = %" PRIu64
809b9c1b51eSKate Stone                 ") => "
810b9c1b51eSKate Stone                 "true",
811b9c1b51eSKate Stone                 static_cast<void *>(array), static_cast<uint64_t>(array_len));
8120f28986aSGreg Clayton 
8130f28986aSGreg Clayton   return true;
8140f28986aSGreg Clayton }
815