19128ee2fSEnrico Granata //===-- SBData.cpp ----------------------------------------------*- C++ -*-===// 29128ee2fSEnrico Granata // 39128ee2fSEnrico Granata // The LLVM Compiler Infrastructure 49128ee2fSEnrico Granata // 59128ee2fSEnrico Granata // This file is distributed under the University of Illinois Open Source 69128ee2fSEnrico Granata // License. See LICENSE.TXT for details. 79128ee2fSEnrico Granata // 89128ee2fSEnrico Granata //===----------------------------------------------------------------------===// 99128ee2fSEnrico Granata 109128ee2fSEnrico Granata #include "lldb/API/SBData.h" 119128ee2fSEnrico Granata #include "lldb/API/SBError.h" 129128ee2fSEnrico Granata #include "lldb/API/SBStream.h" 139128ee2fSEnrico Granata 149128ee2fSEnrico Granata #include "lldb/Core/DataExtractor.h" 159128ee2fSEnrico Granata #include "lldb/Core/Log.h" 16*da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h" 17*da7bc7d0SGreg Clayton 189128ee2fSEnrico Granata 199128ee2fSEnrico Granata using namespace lldb; 209128ee2fSEnrico Granata using namespace lldb_private; 219128ee2fSEnrico Granata 229128ee2fSEnrico Granata SBData::SBData () 239128ee2fSEnrico Granata { 249128ee2fSEnrico Granata } 259128ee2fSEnrico Granata 269128ee2fSEnrico Granata SBData::SBData (const lldb::DataExtractorSP& data_sp) : 279128ee2fSEnrico Granata m_opaque_sp (data_sp) 289128ee2fSEnrico Granata { 299128ee2fSEnrico Granata } 309128ee2fSEnrico Granata 319128ee2fSEnrico Granata SBData::SBData(const SBData &rhs) : 329128ee2fSEnrico Granata m_opaque_sp (rhs.m_opaque_sp) 339128ee2fSEnrico Granata { 349128ee2fSEnrico Granata } 359128ee2fSEnrico Granata 369128ee2fSEnrico Granata const SBData & 379128ee2fSEnrico Granata SBData::operator = (const SBData &rhs) 389128ee2fSEnrico Granata { 399128ee2fSEnrico Granata if (this != &rhs) 409128ee2fSEnrico Granata m_opaque_sp = rhs.m_opaque_sp; 419128ee2fSEnrico Granata return *this; 429128ee2fSEnrico Granata } 439128ee2fSEnrico Granata 449128ee2fSEnrico Granata SBData::~SBData () 459128ee2fSEnrico Granata { 469128ee2fSEnrico Granata } 479128ee2fSEnrico Granata 489128ee2fSEnrico Granata void 499128ee2fSEnrico Granata SBData::SetOpaque (const lldb::DataExtractorSP &data_sp) 509128ee2fSEnrico Granata { 519128ee2fSEnrico Granata m_opaque_sp = data_sp; 529128ee2fSEnrico Granata } 539128ee2fSEnrico Granata 549128ee2fSEnrico Granata lldb_private::DataExtractor * 559128ee2fSEnrico Granata SBData::get() const 569128ee2fSEnrico Granata { 579128ee2fSEnrico Granata return m_opaque_sp.get(); 589128ee2fSEnrico Granata } 599128ee2fSEnrico Granata 609128ee2fSEnrico Granata lldb_private::DataExtractor * 619128ee2fSEnrico Granata SBData::operator->() const 629128ee2fSEnrico Granata { 639128ee2fSEnrico Granata return m_opaque_sp.operator->(); 649128ee2fSEnrico Granata } 659128ee2fSEnrico Granata 669128ee2fSEnrico Granata lldb::DataExtractorSP & 679128ee2fSEnrico Granata SBData::operator*() 689128ee2fSEnrico Granata { 699128ee2fSEnrico Granata return m_opaque_sp; 709128ee2fSEnrico Granata } 719128ee2fSEnrico Granata 729128ee2fSEnrico Granata const lldb::DataExtractorSP & 739128ee2fSEnrico Granata SBData::operator*() const 749128ee2fSEnrico Granata { 759128ee2fSEnrico Granata return m_opaque_sp; 769128ee2fSEnrico Granata } 779128ee2fSEnrico Granata 789128ee2fSEnrico Granata bool 799128ee2fSEnrico Granata SBData::IsValid() 809128ee2fSEnrico Granata { 819128ee2fSEnrico Granata return m_opaque_sp.get() != NULL; 829128ee2fSEnrico Granata } 839128ee2fSEnrico Granata 849128ee2fSEnrico Granata uint8_t 859128ee2fSEnrico Granata SBData::GetAddressByteSize () 869128ee2fSEnrico Granata { 879128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 889128ee2fSEnrico Granata uint8_t value = 0; 899128ee2fSEnrico Granata if (m_opaque_sp.get()) 909128ee2fSEnrico Granata value = m_opaque_sp->GetAddressByteSize(); 919128ee2fSEnrico Granata if (log) 929128ee2fSEnrico Granata log->Printf ("SBData::GetAddressByteSize () => " 939128ee2fSEnrico Granata "(%i)", value); 949128ee2fSEnrico Granata return value; 959128ee2fSEnrico Granata } 969128ee2fSEnrico Granata 979128ee2fSEnrico Granata void 989128ee2fSEnrico Granata SBData::Clear () 999128ee2fSEnrico Granata { 1009128ee2fSEnrico Granata if (m_opaque_sp.get()) 1019128ee2fSEnrico Granata m_opaque_sp->Clear(); 1029128ee2fSEnrico Granata } 1039128ee2fSEnrico Granata 1049128ee2fSEnrico Granata size_t 1059128ee2fSEnrico Granata SBData::GetByteSize () 1069128ee2fSEnrico Granata { 1079128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1089128ee2fSEnrico Granata size_t value = 0; 1099128ee2fSEnrico Granata if (m_opaque_sp.get()) 1109128ee2fSEnrico Granata value = m_opaque_sp->GetByteSize(); 1119128ee2fSEnrico Granata if (log) 1129128ee2fSEnrico Granata log->Printf ("SBData::GetByteSize () => " 113fd54b368SJason Molenda "(%lu)", value); 1149128ee2fSEnrico Granata return value; 1159128ee2fSEnrico Granata } 1169128ee2fSEnrico Granata 1179128ee2fSEnrico Granata lldb::ByteOrder 1189128ee2fSEnrico Granata SBData::GetByteOrder () 1199128ee2fSEnrico Granata { 1209128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1219128ee2fSEnrico Granata lldb::ByteOrder value = eByteOrderInvalid; 1229128ee2fSEnrico Granata if (m_opaque_sp.get()) 1239128ee2fSEnrico Granata value = m_opaque_sp->GetByteOrder(); 1249128ee2fSEnrico Granata if (log) 1259128ee2fSEnrico Granata log->Printf ("SBData::GetByteOrder () => " 1269128ee2fSEnrico Granata "(%i)", value); 1279128ee2fSEnrico Granata return value; 1289128ee2fSEnrico Granata } 1299128ee2fSEnrico Granata 1309128ee2fSEnrico Granata float 1319128ee2fSEnrico Granata SBData::GetFloat (lldb::SBError& error, uint32_t offset) 1329128ee2fSEnrico Granata { 1339128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1349128ee2fSEnrico Granata float value = 0; 1359128ee2fSEnrico Granata if (!m_opaque_sp.get()) 1369128ee2fSEnrico Granata { 1379128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 1389128ee2fSEnrico Granata } 1399128ee2fSEnrico Granata else 1409128ee2fSEnrico Granata { 1419128ee2fSEnrico Granata uint32_t old_offset = offset; 1429128ee2fSEnrico Granata value = m_opaque_sp->GetFloat(&offset); 1439128ee2fSEnrico Granata if (offset == old_offset) 1449128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 1459128ee2fSEnrico Granata } 1469128ee2fSEnrico Granata if (log) 1479128ee2fSEnrico Granata log->Printf ("SBData::GetFloat (error=%p,offset=%d) => " 1489128ee2fSEnrico Granata "(%f)", error.get(), offset, value); 1499128ee2fSEnrico Granata return value; 1509128ee2fSEnrico Granata } 1519128ee2fSEnrico Granata 1529128ee2fSEnrico Granata double 1539128ee2fSEnrico Granata SBData::GetDouble (lldb::SBError& error, uint32_t offset) 1549128ee2fSEnrico Granata { 1559128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1569128ee2fSEnrico Granata double value = 0; 1579128ee2fSEnrico Granata if (!m_opaque_sp.get()) 1589128ee2fSEnrico Granata { 1599128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 1609128ee2fSEnrico Granata } 1619128ee2fSEnrico Granata else 1629128ee2fSEnrico Granata { 1639128ee2fSEnrico Granata uint32_t old_offset = offset; 1649128ee2fSEnrico Granata value = m_opaque_sp->GetDouble(&offset); 1659128ee2fSEnrico Granata if (offset == old_offset) 1669128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 1679128ee2fSEnrico Granata } 1689128ee2fSEnrico Granata if (log) 1699128ee2fSEnrico Granata log->Printf ("SBData::GetDouble (error=%p,offset=%d) => " 1709128ee2fSEnrico Granata "(%f)", error.get(), offset, value); 1719128ee2fSEnrico Granata return value; 1729128ee2fSEnrico Granata } 1739128ee2fSEnrico Granata 1749128ee2fSEnrico Granata long double 1759128ee2fSEnrico Granata SBData::GetLongDouble (lldb::SBError& error, uint32_t offset) 1769128ee2fSEnrico Granata { 1779128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1789128ee2fSEnrico Granata long double value = 0; 1799128ee2fSEnrico Granata if (!m_opaque_sp.get()) 1809128ee2fSEnrico Granata { 1819128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 1829128ee2fSEnrico Granata } 1839128ee2fSEnrico Granata else 1849128ee2fSEnrico Granata { 1859128ee2fSEnrico Granata uint32_t old_offset = offset; 1869128ee2fSEnrico Granata value = m_opaque_sp->GetLongDouble(&offset); 1879128ee2fSEnrico Granata if (offset == old_offset) 1889128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 1899128ee2fSEnrico Granata } 1909128ee2fSEnrico Granata if (log) 1919128ee2fSEnrico Granata log->Printf ("SBData::GetLongDouble (error=%p,offset=%d) => " 192fd54b368SJason Molenda "(%Lf)", error.get(), offset, value); 1939128ee2fSEnrico Granata return value; 1949128ee2fSEnrico Granata } 1959128ee2fSEnrico Granata 1969128ee2fSEnrico Granata lldb::addr_t 1979128ee2fSEnrico Granata SBData::GetAddress (lldb::SBError& error, uint32_t offset) 1989128ee2fSEnrico Granata { 1999128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2009128ee2fSEnrico Granata lldb::addr_t value = 0; 2019128ee2fSEnrico Granata if (!m_opaque_sp.get()) 2029128ee2fSEnrico Granata { 2039128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 2049128ee2fSEnrico Granata } 2059128ee2fSEnrico Granata else 2069128ee2fSEnrico Granata { 2079128ee2fSEnrico Granata uint32_t old_offset = offset; 2089128ee2fSEnrico Granata value = m_opaque_sp->GetAddress(&offset); 2099128ee2fSEnrico Granata if (offset == old_offset) 2109128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 2119128ee2fSEnrico Granata } 2129128ee2fSEnrico Granata if (log) 2139128ee2fSEnrico Granata log->Printf ("SBData::GetAddress (error=%p,offset=%d) => " 2149128ee2fSEnrico Granata "(%p)", error.get(), offset, (void*)value); 2159128ee2fSEnrico Granata return value; 2169128ee2fSEnrico Granata } 2179128ee2fSEnrico Granata 2189128ee2fSEnrico Granata uint8_t 2199128ee2fSEnrico Granata SBData::GetUnsignedInt8 (lldb::SBError& error, uint32_t offset) 2209128ee2fSEnrico Granata { 2219128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2229128ee2fSEnrico Granata uint8_t value = 0; 2239128ee2fSEnrico Granata if (!m_opaque_sp.get()) 2249128ee2fSEnrico Granata { 2259128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 2269128ee2fSEnrico Granata } 2279128ee2fSEnrico Granata else 2289128ee2fSEnrico Granata { 2299128ee2fSEnrico Granata uint32_t old_offset = offset; 2309128ee2fSEnrico Granata value = m_opaque_sp->GetU8(&offset); 2319128ee2fSEnrico Granata if (offset == old_offset) 2329128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 2339128ee2fSEnrico Granata } 2349128ee2fSEnrico Granata if (log) 2359128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%d) => " 2369128ee2fSEnrico Granata "(%c)", error.get(), offset, value); 2379128ee2fSEnrico Granata return value; 2389128ee2fSEnrico Granata } 2399128ee2fSEnrico Granata 2409128ee2fSEnrico Granata uint16_t 2419128ee2fSEnrico Granata SBData::GetUnsignedInt16 (lldb::SBError& error, uint32_t offset) 2429128ee2fSEnrico Granata { 2439128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2449128ee2fSEnrico Granata uint16_t value = 0; 2459128ee2fSEnrico Granata if (!m_opaque_sp.get()) 2469128ee2fSEnrico Granata { 2479128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 2489128ee2fSEnrico Granata } 2499128ee2fSEnrico Granata else 2509128ee2fSEnrico Granata { 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) 2579128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%d) => " 2589128ee2fSEnrico Granata "(%hd)", error.get(), offset, value); 2599128ee2fSEnrico Granata return value; 2609128ee2fSEnrico Granata } 2619128ee2fSEnrico Granata 2629128ee2fSEnrico Granata uint32_t 2639128ee2fSEnrico Granata SBData::GetUnsignedInt32 (lldb::SBError& error, uint32_t offset) 2649128ee2fSEnrico Granata { 2659128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2669128ee2fSEnrico Granata uint32_t value = 0; 2679128ee2fSEnrico Granata if (!m_opaque_sp.get()) 2689128ee2fSEnrico Granata { 2699128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 2709128ee2fSEnrico Granata } 2719128ee2fSEnrico Granata else 2729128ee2fSEnrico Granata { 2739128ee2fSEnrico Granata uint32_t old_offset = offset; 2749128ee2fSEnrico Granata value = m_opaque_sp->GetU32(&offset); 2759128ee2fSEnrico Granata if (offset == old_offset) 2769128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 2779128ee2fSEnrico Granata } 2789128ee2fSEnrico Granata if (log) 2799128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%d) => " 2809128ee2fSEnrico Granata "(%d)", error.get(), offset, value); 2819128ee2fSEnrico Granata return value; 2829128ee2fSEnrico Granata } 2839128ee2fSEnrico Granata 2849128ee2fSEnrico Granata uint64_t 2859128ee2fSEnrico Granata SBData::GetUnsignedInt64 (lldb::SBError& error, uint32_t offset) 2869128ee2fSEnrico Granata { 2879128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 2889128ee2fSEnrico Granata uint64_t value = 0; 2899128ee2fSEnrico Granata if (!m_opaque_sp.get()) 2909128ee2fSEnrico Granata { 2919128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 2929128ee2fSEnrico Granata } 2939128ee2fSEnrico Granata else 2949128ee2fSEnrico Granata { 2959128ee2fSEnrico Granata uint32_t old_offset = offset; 2969128ee2fSEnrico Granata value = m_opaque_sp->GetU64(&offset); 2979128ee2fSEnrico Granata if (offset == old_offset) 2989128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 2999128ee2fSEnrico Granata } 3009128ee2fSEnrico Granata if (log) 3019128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%d) => " 302fd54b368SJason Molenda "(%lld)", error.get(), offset, value); 3039128ee2fSEnrico Granata return value; 3049128ee2fSEnrico Granata } 3059128ee2fSEnrico Granata 3069128ee2fSEnrico Granata int8_t 3079128ee2fSEnrico Granata SBData::GetSignedInt8 (lldb::SBError& error, uint32_t offset) 3089128ee2fSEnrico Granata { 3099128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3109128ee2fSEnrico Granata int8_t value = 0; 3119128ee2fSEnrico Granata if (!m_opaque_sp.get()) 3129128ee2fSEnrico Granata { 3139128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 3149128ee2fSEnrico Granata } 3159128ee2fSEnrico Granata else 3169128ee2fSEnrico Granata { 3179128ee2fSEnrico Granata uint32_t old_offset = offset; 3189128ee2fSEnrico Granata value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1); 3199128ee2fSEnrico Granata if (offset == old_offset) 3209128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 3219128ee2fSEnrico Granata } 3229128ee2fSEnrico Granata if (log) 3239128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%d) => " 3249128ee2fSEnrico Granata "(%c)", error.get(), offset, value); 3259128ee2fSEnrico Granata return value; 3269128ee2fSEnrico Granata } 3279128ee2fSEnrico Granata 3289128ee2fSEnrico Granata int16_t 3299128ee2fSEnrico Granata SBData::GetSignedInt16 (lldb::SBError& error, uint32_t offset) 3309128ee2fSEnrico Granata { 3319128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3329128ee2fSEnrico Granata int16_t value = 0; 3339128ee2fSEnrico Granata if (!m_opaque_sp.get()) 3349128ee2fSEnrico Granata { 3359128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 3369128ee2fSEnrico Granata } 3379128ee2fSEnrico Granata else 3389128ee2fSEnrico Granata { 3399128ee2fSEnrico Granata uint32_t old_offset = offset; 3409128ee2fSEnrico Granata value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2); 3419128ee2fSEnrico Granata if (offset == old_offset) 3429128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 3439128ee2fSEnrico Granata } 3449128ee2fSEnrico Granata if (log) 3459128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%d) => " 3469128ee2fSEnrico Granata "(%hd)", error.get(), offset, value); 3479128ee2fSEnrico Granata return value; 3489128ee2fSEnrico Granata } 3499128ee2fSEnrico Granata 3509128ee2fSEnrico Granata int32_t 3519128ee2fSEnrico Granata SBData::GetSignedInt32 (lldb::SBError& error, uint32_t offset) 3529128ee2fSEnrico Granata { 3539128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3549128ee2fSEnrico Granata int32_t value = 0; 3559128ee2fSEnrico Granata if (!m_opaque_sp.get()) 3569128ee2fSEnrico Granata { 3579128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 3589128ee2fSEnrico Granata } 3599128ee2fSEnrico Granata else 3609128ee2fSEnrico Granata { 3619128ee2fSEnrico Granata uint32_t old_offset = offset; 3629128ee2fSEnrico Granata value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4); 3639128ee2fSEnrico Granata if (offset == old_offset) 3649128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 3659128ee2fSEnrico Granata } 3669128ee2fSEnrico Granata if (log) 3679128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%d) => " 3689128ee2fSEnrico Granata "(%d)", error.get(), offset, value); 3699128ee2fSEnrico Granata return value; 3709128ee2fSEnrico Granata } 3719128ee2fSEnrico Granata 3729128ee2fSEnrico Granata int64_t 3739128ee2fSEnrico Granata SBData::GetSignedInt64 (lldb::SBError& error, uint32_t offset) 3749128ee2fSEnrico Granata { 3759128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3769128ee2fSEnrico Granata int64_t value = 0; 3779128ee2fSEnrico Granata if (!m_opaque_sp.get()) 3789128ee2fSEnrico Granata { 3799128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 3809128ee2fSEnrico Granata } 3819128ee2fSEnrico Granata else 3829128ee2fSEnrico Granata { 3839128ee2fSEnrico Granata uint32_t old_offset = offset; 3849128ee2fSEnrico Granata value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8); 3859128ee2fSEnrico Granata if (offset == old_offset) 3869128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 3879128ee2fSEnrico Granata } 3889128ee2fSEnrico Granata if (log) 3899128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%d) => " 390fd54b368SJason Molenda "(%lld)", error.get(), offset, value); 3919128ee2fSEnrico Granata return value; 3929128ee2fSEnrico Granata } 3939128ee2fSEnrico Granata 3949128ee2fSEnrico Granata const char* 3959128ee2fSEnrico Granata SBData::GetString (lldb::SBError& error, uint32_t offset) 3969128ee2fSEnrico Granata { 3979128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3989128ee2fSEnrico Granata const char* value = 0; 3999128ee2fSEnrico Granata if (!m_opaque_sp.get()) 4009128ee2fSEnrico Granata { 4019128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 4029128ee2fSEnrico Granata } 4039128ee2fSEnrico Granata else 4049128ee2fSEnrico Granata { 4059128ee2fSEnrico Granata uint32_t old_offset = offset; 4069128ee2fSEnrico Granata value = m_opaque_sp->GetCStr(&offset); 4079128ee2fSEnrico Granata if (offset == old_offset || (value == NULL)) 4089128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 4099128ee2fSEnrico Granata } 4109128ee2fSEnrico Granata if (log) 4119128ee2fSEnrico Granata log->Printf ("SBData::GetString (error=%p,offset=%d) => " 4129128ee2fSEnrico Granata "(%p)", error.get(), offset, value); 4139128ee2fSEnrico Granata return value; 4149128ee2fSEnrico Granata } 4159128ee2fSEnrico Granata 4169128ee2fSEnrico Granata bool 417d9dc52dcSGreg Clayton SBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr) 4189128ee2fSEnrico Granata { 419*da7bc7d0SGreg Clayton Stream &strm = description.ref(); 420*da7bc7d0SGreg Clayton 4219128ee2fSEnrico Granata if (m_opaque_sp) 4229128ee2fSEnrico Granata { 423*da7bc7d0SGreg Clayton m_opaque_sp->Dump (&strm, 4249128ee2fSEnrico Granata 0, 4259128ee2fSEnrico Granata lldb::eFormatBytesWithASCII, 4269128ee2fSEnrico Granata 1, 4279128ee2fSEnrico Granata m_opaque_sp->GetByteSize(), 4289128ee2fSEnrico Granata 16, 429d9dc52dcSGreg Clayton base_addr, 4309128ee2fSEnrico Granata 0, 4319128ee2fSEnrico Granata 0); 4329128ee2fSEnrico Granata } 4339128ee2fSEnrico Granata else 434*da7bc7d0SGreg Clayton strm.PutCString ("No value"); 4359128ee2fSEnrico Granata 4369128ee2fSEnrico Granata return true; 4379128ee2fSEnrico Granata } 4389128ee2fSEnrico Granata 4399128ee2fSEnrico Granata size_t 4409128ee2fSEnrico Granata SBData::ReadRawData (lldb::SBError& error, 4419128ee2fSEnrico Granata uint32_t offset, 4429128ee2fSEnrico Granata void *buf, 4439128ee2fSEnrico Granata size_t size) 4449128ee2fSEnrico Granata { 4459128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4469128ee2fSEnrico Granata void* ok = NULL; 4479128ee2fSEnrico Granata if (!m_opaque_sp.get()) 4489128ee2fSEnrico Granata { 4499128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 4509128ee2fSEnrico Granata } 4519128ee2fSEnrico Granata else 4529128ee2fSEnrico Granata { 4539128ee2fSEnrico Granata uint32_t old_offset = offset; 4549128ee2fSEnrico Granata ok = m_opaque_sp->GetU8(&offset, buf, size); 4559128ee2fSEnrico Granata if ((offset == old_offset) || (ok == NULL)) 4569128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 4579128ee2fSEnrico Granata } 4589128ee2fSEnrico Granata if (log) 459fd54b368SJason Molenda log->Printf ("SBData::ReadRawData (error=%p,offset=%d,buf=%p,size=%lu) => " 4609128ee2fSEnrico Granata "(%p)", error.get(), offset, buf, size, ok); 4619128ee2fSEnrico Granata return ok ? size : 0; 4629128ee2fSEnrico Granata } 4639128ee2fSEnrico Granata 4649128ee2fSEnrico Granata void 4659128ee2fSEnrico Granata SBData::SetData(lldb::SBError& error, 4669128ee2fSEnrico Granata const void *buf, 4679128ee2fSEnrico Granata size_t size, 4689128ee2fSEnrico Granata lldb::ByteOrder endian, 4699128ee2fSEnrico Granata uint8_t addr_size) 4709128ee2fSEnrico Granata { 4719128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4729128ee2fSEnrico Granata if (!m_opaque_sp.get()) 4739128ee2fSEnrico Granata m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size)); 4749128ee2fSEnrico Granata else 4759128ee2fSEnrico Granata m_opaque_sp->SetData(buf, size, endian); 4769128ee2fSEnrico Granata if (log) 477fd54b368SJason Molenda log->Printf ("SBData::SetData (error=%p,buf=%p,size=%lu,endian=%d,addr_size=%c) => " 4789128ee2fSEnrico Granata "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get()); 4799128ee2fSEnrico Granata } 4809128ee2fSEnrico Granata 4819128ee2fSEnrico Granata bool 4829128ee2fSEnrico Granata SBData::Append(const SBData& rhs) 4839128ee2fSEnrico Granata { 4849128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 4859128ee2fSEnrico Granata bool value = false; 4869128ee2fSEnrico Granata if (m_opaque_sp.get() && rhs.m_opaque_sp.get()) 4879128ee2fSEnrico Granata value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp); 4889128ee2fSEnrico Granata if (log) 4899128ee2fSEnrico Granata log->Printf ("SBData::Append (rhs=%p) => " 4909128ee2fSEnrico Granata "(%s)", rhs.get(), value ? "true" : "false"); 4919128ee2fSEnrico Granata return value; 4929128ee2fSEnrico Granata } 493