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