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