1*9128ee2fSEnrico Granata //===-- SBData.cpp ----------------------------------------------*- C++ -*-===// 2*9128ee2fSEnrico Granata // 3*9128ee2fSEnrico Granata // The LLVM Compiler Infrastructure 4*9128ee2fSEnrico Granata // 5*9128ee2fSEnrico Granata // This file is distributed under the University of Illinois Open Source 6*9128ee2fSEnrico Granata // License. See LICENSE.TXT for details. 7*9128ee2fSEnrico Granata // 8*9128ee2fSEnrico Granata //===----------------------------------------------------------------------===// 9*9128ee2fSEnrico Granata 10*9128ee2fSEnrico Granata #include "lldb/API/SBData.h" 11*9128ee2fSEnrico Granata #include "lldb/API/SBError.h" 12*9128ee2fSEnrico Granata #include "lldb/API/SBStream.h" 13*9128ee2fSEnrico Granata 14*9128ee2fSEnrico Granata #include "lldb/Core/DataExtractor.h" 15*9128ee2fSEnrico Granata #include "lldb/Core/Log.h" 16*9128ee2fSEnrico Granata 17*9128ee2fSEnrico Granata using namespace lldb; 18*9128ee2fSEnrico Granata using namespace lldb_private; 19*9128ee2fSEnrico Granata 20*9128ee2fSEnrico Granata SBData::SBData () 21*9128ee2fSEnrico Granata { 22*9128ee2fSEnrico Granata } 23*9128ee2fSEnrico Granata 24*9128ee2fSEnrico Granata SBData::SBData (const lldb::DataExtractorSP& data_sp) : 25*9128ee2fSEnrico Granata m_opaque_sp (data_sp) 26*9128ee2fSEnrico Granata { 27*9128ee2fSEnrico Granata } 28*9128ee2fSEnrico Granata 29*9128ee2fSEnrico Granata SBData::SBData(const SBData &rhs) : 30*9128ee2fSEnrico Granata m_opaque_sp (rhs.m_opaque_sp) 31*9128ee2fSEnrico Granata { 32*9128ee2fSEnrico Granata } 33*9128ee2fSEnrico Granata 34*9128ee2fSEnrico Granata const SBData & 35*9128ee2fSEnrico Granata SBData::operator = (const SBData &rhs) 36*9128ee2fSEnrico Granata { 37*9128ee2fSEnrico Granata if (this != &rhs) 38*9128ee2fSEnrico Granata m_opaque_sp = rhs.m_opaque_sp; 39*9128ee2fSEnrico Granata return *this; 40*9128ee2fSEnrico Granata } 41*9128ee2fSEnrico Granata 42*9128ee2fSEnrico Granata SBData::~SBData () 43*9128ee2fSEnrico Granata { 44*9128ee2fSEnrico Granata } 45*9128ee2fSEnrico Granata 46*9128ee2fSEnrico Granata void 47*9128ee2fSEnrico Granata SBData::SetOpaque (const lldb::DataExtractorSP &data_sp) 48*9128ee2fSEnrico Granata { 49*9128ee2fSEnrico Granata m_opaque_sp = data_sp; 50*9128ee2fSEnrico Granata } 51*9128ee2fSEnrico Granata 52*9128ee2fSEnrico Granata lldb_private::DataExtractor * 53*9128ee2fSEnrico Granata SBData::get() const 54*9128ee2fSEnrico Granata { 55*9128ee2fSEnrico Granata return m_opaque_sp.get(); 56*9128ee2fSEnrico Granata } 57*9128ee2fSEnrico Granata 58*9128ee2fSEnrico Granata lldb_private::DataExtractor * 59*9128ee2fSEnrico Granata SBData::operator->() const 60*9128ee2fSEnrico Granata { 61*9128ee2fSEnrico Granata return m_opaque_sp.operator->(); 62*9128ee2fSEnrico Granata } 63*9128ee2fSEnrico Granata 64*9128ee2fSEnrico Granata lldb::DataExtractorSP & 65*9128ee2fSEnrico Granata SBData::operator*() 66*9128ee2fSEnrico Granata { 67*9128ee2fSEnrico Granata return m_opaque_sp; 68*9128ee2fSEnrico Granata } 69*9128ee2fSEnrico Granata 70*9128ee2fSEnrico Granata const lldb::DataExtractorSP & 71*9128ee2fSEnrico Granata SBData::operator*() const 72*9128ee2fSEnrico Granata { 73*9128ee2fSEnrico Granata return m_opaque_sp; 74*9128ee2fSEnrico Granata } 75*9128ee2fSEnrico Granata 76*9128ee2fSEnrico Granata bool 77*9128ee2fSEnrico Granata SBData::IsValid() 78*9128ee2fSEnrico Granata { 79*9128ee2fSEnrico Granata return m_opaque_sp.get() != NULL; 80*9128ee2fSEnrico Granata } 81*9128ee2fSEnrico Granata 82*9128ee2fSEnrico Granata uint8_t 83*9128ee2fSEnrico Granata SBData::GetAddressByteSize () 84*9128ee2fSEnrico Granata { 85*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 86*9128ee2fSEnrico Granata uint8_t value = 0; 87*9128ee2fSEnrico Granata if (m_opaque_sp.get()) 88*9128ee2fSEnrico Granata value = m_opaque_sp->GetAddressByteSize(); 89*9128ee2fSEnrico Granata if (log) 90*9128ee2fSEnrico Granata log->Printf ("SBData::GetAddressByteSize () => " 91*9128ee2fSEnrico Granata "(%i)", value); 92*9128ee2fSEnrico Granata return value; 93*9128ee2fSEnrico Granata } 94*9128ee2fSEnrico Granata 95*9128ee2fSEnrico Granata void 96*9128ee2fSEnrico Granata SBData::Clear () 97*9128ee2fSEnrico Granata { 98*9128ee2fSEnrico Granata if (m_opaque_sp.get()) 99*9128ee2fSEnrico Granata m_opaque_sp->Clear(); 100*9128ee2fSEnrico Granata } 101*9128ee2fSEnrico Granata 102*9128ee2fSEnrico Granata size_t 103*9128ee2fSEnrico Granata SBData::GetByteSize () 104*9128ee2fSEnrico Granata { 105*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 106*9128ee2fSEnrico Granata size_t value = 0; 107*9128ee2fSEnrico Granata if (m_opaque_sp.get()) 108*9128ee2fSEnrico Granata value = m_opaque_sp->GetByteSize(); 109*9128ee2fSEnrico Granata if (log) 110*9128ee2fSEnrico Granata log->Printf ("SBData::GetByteSize () => " 111*9128ee2fSEnrico Granata "(%i)", value); 112*9128ee2fSEnrico Granata return value; 113*9128ee2fSEnrico Granata } 114*9128ee2fSEnrico Granata 115*9128ee2fSEnrico Granata lldb::ByteOrder 116*9128ee2fSEnrico Granata SBData::GetByteOrder () 117*9128ee2fSEnrico Granata { 118*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 119*9128ee2fSEnrico Granata lldb::ByteOrder value = eByteOrderInvalid; 120*9128ee2fSEnrico Granata if (m_opaque_sp.get()) 121*9128ee2fSEnrico Granata value = m_opaque_sp->GetByteOrder(); 122*9128ee2fSEnrico Granata if (log) 123*9128ee2fSEnrico Granata log->Printf ("SBData::GetByteOrder () => " 124*9128ee2fSEnrico Granata "(%i)", value); 125*9128ee2fSEnrico Granata return value; 126*9128ee2fSEnrico Granata } 127*9128ee2fSEnrico Granata 128*9128ee2fSEnrico Granata float 129*9128ee2fSEnrico Granata SBData::GetFloat (lldb::SBError& error, uint32_t offset) 130*9128ee2fSEnrico Granata { 131*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 132*9128ee2fSEnrico Granata float value = 0; 133*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 134*9128ee2fSEnrico Granata { 135*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 136*9128ee2fSEnrico Granata } 137*9128ee2fSEnrico Granata else 138*9128ee2fSEnrico Granata { 139*9128ee2fSEnrico Granata uint32_t old_offset = offset; 140*9128ee2fSEnrico Granata value = m_opaque_sp->GetFloat(&offset); 141*9128ee2fSEnrico Granata if (offset == old_offset) 142*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 143*9128ee2fSEnrico Granata } 144*9128ee2fSEnrico Granata if (log) 145*9128ee2fSEnrico Granata log->Printf ("SBData::GetFloat (error=%p,offset=%d) => " 146*9128ee2fSEnrico Granata "(%f)", error.get(), offset, value); 147*9128ee2fSEnrico Granata return value; 148*9128ee2fSEnrico Granata } 149*9128ee2fSEnrico Granata 150*9128ee2fSEnrico Granata double 151*9128ee2fSEnrico Granata SBData::GetDouble (lldb::SBError& error, uint32_t offset) 152*9128ee2fSEnrico Granata { 153*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 154*9128ee2fSEnrico Granata double value = 0; 155*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 156*9128ee2fSEnrico Granata { 157*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 158*9128ee2fSEnrico Granata } 159*9128ee2fSEnrico Granata else 160*9128ee2fSEnrico Granata { 161*9128ee2fSEnrico Granata uint32_t old_offset = offset; 162*9128ee2fSEnrico Granata value = m_opaque_sp->GetDouble(&offset); 163*9128ee2fSEnrico Granata if (offset == old_offset) 164*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 165*9128ee2fSEnrico Granata } 166*9128ee2fSEnrico Granata if (log) 167*9128ee2fSEnrico Granata log->Printf ("SBData::GetDouble (error=%p,offset=%d) => " 168*9128ee2fSEnrico Granata "(%f)", error.get(), offset, value); 169*9128ee2fSEnrico Granata return value; 170*9128ee2fSEnrico Granata } 171*9128ee2fSEnrico Granata 172*9128ee2fSEnrico Granata long double 173*9128ee2fSEnrico Granata SBData::GetLongDouble (lldb::SBError& error, uint32_t offset) 174*9128ee2fSEnrico Granata { 175*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 176*9128ee2fSEnrico Granata long double value = 0; 177*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 178*9128ee2fSEnrico Granata { 179*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 180*9128ee2fSEnrico Granata } 181*9128ee2fSEnrico Granata else 182*9128ee2fSEnrico Granata { 183*9128ee2fSEnrico Granata uint32_t old_offset = offset; 184*9128ee2fSEnrico Granata value = m_opaque_sp->GetLongDouble(&offset); 185*9128ee2fSEnrico Granata if (offset == old_offset) 186*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 187*9128ee2fSEnrico Granata } 188*9128ee2fSEnrico Granata if (log) 189*9128ee2fSEnrico Granata log->Printf ("SBData::GetLongDouble (error=%p,offset=%d) => " 190*9128ee2fSEnrico Granata "(%lf)", error.get(), offset, value); 191*9128ee2fSEnrico Granata return value; 192*9128ee2fSEnrico Granata } 193*9128ee2fSEnrico Granata 194*9128ee2fSEnrico Granata lldb::addr_t 195*9128ee2fSEnrico Granata SBData::GetAddress (lldb::SBError& error, uint32_t offset) 196*9128ee2fSEnrico Granata { 197*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 198*9128ee2fSEnrico Granata lldb::addr_t value = 0; 199*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 200*9128ee2fSEnrico Granata { 201*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 202*9128ee2fSEnrico Granata } 203*9128ee2fSEnrico Granata else 204*9128ee2fSEnrico Granata { 205*9128ee2fSEnrico Granata uint32_t old_offset = offset; 206*9128ee2fSEnrico Granata value = m_opaque_sp->GetAddress(&offset); 207*9128ee2fSEnrico Granata if (offset == old_offset) 208*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 209*9128ee2fSEnrico Granata } 210*9128ee2fSEnrico Granata if (log) 211*9128ee2fSEnrico Granata log->Printf ("SBData::GetAddress (error=%p,offset=%d) => " 212*9128ee2fSEnrico Granata "(%p)", error.get(), offset, (void*)value); 213*9128ee2fSEnrico Granata return value; 214*9128ee2fSEnrico Granata } 215*9128ee2fSEnrico Granata 216*9128ee2fSEnrico Granata uint8_t 217*9128ee2fSEnrico Granata SBData::GetUnsignedInt8 (lldb::SBError& error, uint32_t offset) 218*9128ee2fSEnrico Granata { 219*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 220*9128ee2fSEnrico Granata uint8_t value = 0; 221*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 222*9128ee2fSEnrico Granata { 223*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 224*9128ee2fSEnrico Granata } 225*9128ee2fSEnrico Granata else 226*9128ee2fSEnrico Granata { 227*9128ee2fSEnrico Granata uint32_t old_offset = offset; 228*9128ee2fSEnrico Granata value = m_opaque_sp->GetU8(&offset); 229*9128ee2fSEnrico Granata if (offset == old_offset) 230*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 231*9128ee2fSEnrico Granata } 232*9128ee2fSEnrico Granata if (log) 233*9128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%d) => " 234*9128ee2fSEnrico Granata "(%c)", error.get(), offset, value); 235*9128ee2fSEnrico Granata return value; 236*9128ee2fSEnrico Granata } 237*9128ee2fSEnrico Granata 238*9128ee2fSEnrico Granata uint16_t 239*9128ee2fSEnrico Granata SBData::GetUnsignedInt16 (lldb::SBError& error, uint32_t offset) 240*9128ee2fSEnrico Granata { 241*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 242*9128ee2fSEnrico Granata uint16_t value = 0; 243*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 244*9128ee2fSEnrico Granata { 245*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 246*9128ee2fSEnrico Granata } 247*9128ee2fSEnrico Granata else 248*9128ee2fSEnrico Granata { 249*9128ee2fSEnrico Granata uint32_t old_offset = offset; 250*9128ee2fSEnrico Granata value = m_opaque_sp->GetU16(&offset); 251*9128ee2fSEnrico Granata if (offset == old_offset) 252*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 253*9128ee2fSEnrico Granata } 254*9128ee2fSEnrico Granata if (log) 255*9128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%d) => " 256*9128ee2fSEnrico Granata "(%hd)", error.get(), offset, value); 257*9128ee2fSEnrico Granata return value; 258*9128ee2fSEnrico Granata } 259*9128ee2fSEnrico Granata 260*9128ee2fSEnrico Granata uint32_t 261*9128ee2fSEnrico Granata SBData::GetUnsignedInt32 (lldb::SBError& error, uint32_t offset) 262*9128ee2fSEnrico Granata { 263*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 264*9128ee2fSEnrico Granata uint32_t value = 0; 265*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 266*9128ee2fSEnrico Granata { 267*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 268*9128ee2fSEnrico Granata } 269*9128ee2fSEnrico Granata else 270*9128ee2fSEnrico Granata { 271*9128ee2fSEnrico Granata uint32_t old_offset = offset; 272*9128ee2fSEnrico Granata value = m_opaque_sp->GetU32(&offset); 273*9128ee2fSEnrico Granata if (offset == old_offset) 274*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 275*9128ee2fSEnrico Granata } 276*9128ee2fSEnrico Granata if (log) 277*9128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%d) => " 278*9128ee2fSEnrico Granata "(%d)", error.get(), offset, value); 279*9128ee2fSEnrico Granata return value; 280*9128ee2fSEnrico Granata } 281*9128ee2fSEnrico Granata 282*9128ee2fSEnrico Granata uint64_t 283*9128ee2fSEnrico Granata SBData::GetUnsignedInt64 (lldb::SBError& error, uint32_t offset) 284*9128ee2fSEnrico Granata { 285*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 286*9128ee2fSEnrico Granata uint64_t value = 0; 287*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 288*9128ee2fSEnrico Granata { 289*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 290*9128ee2fSEnrico Granata } 291*9128ee2fSEnrico Granata else 292*9128ee2fSEnrico Granata { 293*9128ee2fSEnrico Granata uint32_t old_offset = offset; 294*9128ee2fSEnrico Granata value = m_opaque_sp->GetU64(&offset); 295*9128ee2fSEnrico Granata if (offset == old_offset) 296*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 297*9128ee2fSEnrico Granata } 298*9128ee2fSEnrico Granata if (log) 299*9128ee2fSEnrico Granata log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%d) => " 300*9128ee2fSEnrico Granata "(%q)", error.get(), offset, value); 301*9128ee2fSEnrico Granata return value; 302*9128ee2fSEnrico Granata } 303*9128ee2fSEnrico Granata 304*9128ee2fSEnrico Granata int8_t 305*9128ee2fSEnrico Granata SBData::GetSignedInt8 (lldb::SBError& error, uint32_t offset) 306*9128ee2fSEnrico Granata { 307*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 308*9128ee2fSEnrico Granata int8_t value = 0; 309*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 310*9128ee2fSEnrico Granata { 311*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 312*9128ee2fSEnrico Granata } 313*9128ee2fSEnrico Granata else 314*9128ee2fSEnrico Granata { 315*9128ee2fSEnrico Granata uint32_t old_offset = offset; 316*9128ee2fSEnrico Granata value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1); 317*9128ee2fSEnrico Granata if (offset == old_offset) 318*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 319*9128ee2fSEnrico Granata } 320*9128ee2fSEnrico Granata if (log) 321*9128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%d) => " 322*9128ee2fSEnrico Granata "(%c)", error.get(), offset, value); 323*9128ee2fSEnrico Granata return value; 324*9128ee2fSEnrico Granata } 325*9128ee2fSEnrico Granata 326*9128ee2fSEnrico Granata int16_t 327*9128ee2fSEnrico Granata SBData::GetSignedInt16 (lldb::SBError& error, uint32_t offset) 328*9128ee2fSEnrico Granata { 329*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 330*9128ee2fSEnrico Granata int16_t value = 0; 331*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 332*9128ee2fSEnrico Granata { 333*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 334*9128ee2fSEnrico Granata } 335*9128ee2fSEnrico Granata else 336*9128ee2fSEnrico Granata { 337*9128ee2fSEnrico Granata uint32_t old_offset = offset; 338*9128ee2fSEnrico Granata value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2); 339*9128ee2fSEnrico Granata if (offset == old_offset) 340*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 341*9128ee2fSEnrico Granata } 342*9128ee2fSEnrico Granata if (log) 343*9128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%d) => " 344*9128ee2fSEnrico Granata "(%hd)", error.get(), offset, value); 345*9128ee2fSEnrico Granata return value; 346*9128ee2fSEnrico Granata } 347*9128ee2fSEnrico Granata 348*9128ee2fSEnrico Granata int32_t 349*9128ee2fSEnrico Granata SBData::GetSignedInt32 (lldb::SBError& error, uint32_t offset) 350*9128ee2fSEnrico Granata { 351*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 352*9128ee2fSEnrico Granata int32_t value = 0; 353*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 354*9128ee2fSEnrico Granata { 355*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 356*9128ee2fSEnrico Granata } 357*9128ee2fSEnrico Granata else 358*9128ee2fSEnrico Granata { 359*9128ee2fSEnrico Granata uint32_t old_offset = offset; 360*9128ee2fSEnrico Granata value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4); 361*9128ee2fSEnrico Granata if (offset == old_offset) 362*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 363*9128ee2fSEnrico Granata } 364*9128ee2fSEnrico Granata if (log) 365*9128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%d) => " 366*9128ee2fSEnrico Granata "(%d)", error.get(), offset, value); 367*9128ee2fSEnrico Granata return value; 368*9128ee2fSEnrico Granata } 369*9128ee2fSEnrico Granata 370*9128ee2fSEnrico Granata int64_t 371*9128ee2fSEnrico Granata SBData::GetSignedInt64 (lldb::SBError& error, uint32_t offset) 372*9128ee2fSEnrico Granata { 373*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 374*9128ee2fSEnrico Granata int64_t value = 0; 375*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 376*9128ee2fSEnrico Granata { 377*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 378*9128ee2fSEnrico Granata } 379*9128ee2fSEnrico Granata else 380*9128ee2fSEnrico Granata { 381*9128ee2fSEnrico Granata uint32_t old_offset = offset; 382*9128ee2fSEnrico Granata value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8); 383*9128ee2fSEnrico Granata if (offset == old_offset) 384*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 385*9128ee2fSEnrico Granata } 386*9128ee2fSEnrico Granata if (log) 387*9128ee2fSEnrico Granata log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%d) => " 388*9128ee2fSEnrico Granata "(%q)", error.get(), offset, value); 389*9128ee2fSEnrico Granata return value; 390*9128ee2fSEnrico Granata } 391*9128ee2fSEnrico Granata 392*9128ee2fSEnrico Granata const char* 393*9128ee2fSEnrico Granata SBData::GetString (lldb::SBError& error, uint32_t offset) 394*9128ee2fSEnrico Granata { 395*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 396*9128ee2fSEnrico Granata const char* value = 0; 397*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 398*9128ee2fSEnrico Granata { 399*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 400*9128ee2fSEnrico Granata } 401*9128ee2fSEnrico Granata else 402*9128ee2fSEnrico Granata { 403*9128ee2fSEnrico Granata uint32_t old_offset = offset; 404*9128ee2fSEnrico Granata value = m_opaque_sp->GetCStr(&offset); 405*9128ee2fSEnrico Granata if (offset == old_offset || (value == NULL)) 406*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 407*9128ee2fSEnrico Granata } 408*9128ee2fSEnrico Granata if (log) 409*9128ee2fSEnrico Granata log->Printf ("SBData::GetString (error=%p,offset=%d) => " 410*9128ee2fSEnrico Granata "(%p)", error.get(), offset, value); 411*9128ee2fSEnrico Granata return value; 412*9128ee2fSEnrico Granata } 413*9128ee2fSEnrico Granata 414*9128ee2fSEnrico Granata bool 415*9128ee2fSEnrico Granata SBData::GetDescription (lldb::SBStream &description) 416*9128ee2fSEnrico Granata { 417*9128ee2fSEnrico Granata if (m_opaque_sp) 418*9128ee2fSEnrico Granata { 419*9128ee2fSEnrico Granata description.ref(); 420*9128ee2fSEnrico Granata m_opaque_sp->Dump(description.get(), 421*9128ee2fSEnrico Granata 0, 422*9128ee2fSEnrico Granata lldb::eFormatBytesWithASCII, 423*9128ee2fSEnrico Granata 1, 424*9128ee2fSEnrico Granata m_opaque_sp->GetByteSize(), 425*9128ee2fSEnrico Granata 16, 426*9128ee2fSEnrico Granata LLDB_INVALID_ADDRESS, 427*9128ee2fSEnrico Granata 0, 428*9128ee2fSEnrico Granata 0); 429*9128ee2fSEnrico Granata } 430*9128ee2fSEnrico Granata else 431*9128ee2fSEnrico Granata description.Printf ("No Value"); 432*9128ee2fSEnrico Granata 433*9128ee2fSEnrico Granata return true; 434*9128ee2fSEnrico Granata } 435*9128ee2fSEnrico Granata 436*9128ee2fSEnrico Granata size_t 437*9128ee2fSEnrico Granata SBData::ReadRawData (lldb::SBError& error, 438*9128ee2fSEnrico Granata uint32_t offset, 439*9128ee2fSEnrico Granata void *buf, 440*9128ee2fSEnrico Granata size_t size) 441*9128ee2fSEnrico Granata { 442*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 443*9128ee2fSEnrico Granata void* ok = NULL; 444*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 445*9128ee2fSEnrico Granata { 446*9128ee2fSEnrico Granata error.SetErrorString("no value to read from"); 447*9128ee2fSEnrico Granata } 448*9128ee2fSEnrico Granata else 449*9128ee2fSEnrico Granata { 450*9128ee2fSEnrico Granata uint32_t old_offset = offset; 451*9128ee2fSEnrico Granata ok = m_opaque_sp->GetU8(&offset, buf, size); 452*9128ee2fSEnrico Granata if ((offset == old_offset) || (ok == NULL)) 453*9128ee2fSEnrico Granata error.SetErrorString("unable to read data"); 454*9128ee2fSEnrico Granata } 455*9128ee2fSEnrico Granata if (log) 456*9128ee2fSEnrico Granata log->Printf ("SBData::ReadRawData (error=%p,offset=%d,buf=%p,size=%d) => " 457*9128ee2fSEnrico Granata "(%p)", error.get(), offset, buf, size, ok); 458*9128ee2fSEnrico Granata return ok ? size : 0; 459*9128ee2fSEnrico Granata } 460*9128ee2fSEnrico Granata 461*9128ee2fSEnrico Granata void 462*9128ee2fSEnrico Granata SBData::SetData(lldb::SBError& error, 463*9128ee2fSEnrico Granata const void *buf, 464*9128ee2fSEnrico Granata size_t size, 465*9128ee2fSEnrico Granata lldb::ByteOrder endian, 466*9128ee2fSEnrico Granata uint8_t addr_size) 467*9128ee2fSEnrico Granata { 468*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 469*9128ee2fSEnrico Granata if (!m_opaque_sp.get()) 470*9128ee2fSEnrico Granata m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size)); 471*9128ee2fSEnrico Granata else 472*9128ee2fSEnrico Granata m_opaque_sp->SetData(buf, size, endian); 473*9128ee2fSEnrico Granata if (log) 474*9128ee2fSEnrico Granata log->Printf ("SBData::SetData (error=%p,buf=%p,size=%d,endian=%d,addr_size=%c) => " 475*9128ee2fSEnrico Granata "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get()); 476*9128ee2fSEnrico Granata } 477*9128ee2fSEnrico Granata 478*9128ee2fSEnrico Granata bool 479*9128ee2fSEnrico Granata SBData::Append(const SBData& rhs) 480*9128ee2fSEnrico Granata { 481*9128ee2fSEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 482*9128ee2fSEnrico Granata bool value = false; 483*9128ee2fSEnrico Granata if (m_opaque_sp.get() && rhs.m_opaque_sp.get()) 484*9128ee2fSEnrico Granata value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp); 485*9128ee2fSEnrico Granata if (log) 486*9128ee2fSEnrico Granata log->Printf ("SBData::Append (rhs=%p) => " 487*9128ee2fSEnrico Granata "(%s)", rhs.get(), value ? "true" : "false"); 488*9128ee2fSEnrico Granata return value; 489*9128ee2fSEnrico Granata }