1254721Semaste//===-- SBData.cpp ----------------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "lldb/API/SBData.h" 11254721Semaste#include "lldb/API/SBError.h" 12254721Semaste#include "lldb/API/SBStream.h" 13254721Semaste 14254721Semaste#include "lldb/Core/DataBufferHeap.h" 15254721Semaste#include "lldb/Core/DataExtractor.h" 16254721Semaste#include "lldb/Core/Log.h" 17254721Semaste#include "lldb/Core/Stream.h" 18254721Semaste 19254721Semaste 20254721Semasteusing namespace lldb; 21254721Semasteusing namespace lldb_private; 22254721Semaste 23254721SemasteSBData::SBData () : 24254721Semaste m_opaque_sp(new DataExtractor()) 25254721Semaste{ 26254721Semaste} 27254721Semaste 28254721SemasteSBData::SBData (const lldb::DataExtractorSP& data_sp) : 29254721Semaste m_opaque_sp (data_sp) 30254721Semaste{ 31254721Semaste} 32254721Semaste 33254721SemasteSBData::SBData(const SBData &rhs) : 34254721Semaste m_opaque_sp (rhs.m_opaque_sp) 35254721Semaste{ 36254721Semaste} 37254721Semaste 38254721Semasteconst SBData & 39254721SemasteSBData::operator = (const SBData &rhs) 40254721Semaste{ 41254721Semaste if (this != &rhs) 42254721Semaste m_opaque_sp = rhs.m_opaque_sp; 43254721Semaste return *this; 44254721Semaste} 45254721Semaste 46254721SemasteSBData::~SBData () 47254721Semaste{ 48254721Semaste} 49254721Semaste 50254721Semastevoid 51254721SemasteSBData::SetOpaque (const lldb::DataExtractorSP &data_sp) 52254721Semaste{ 53254721Semaste m_opaque_sp = data_sp; 54254721Semaste} 55254721Semaste 56254721Semastelldb_private::DataExtractor * 57254721SemasteSBData::get() const 58254721Semaste{ 59254721Semaste return m_opaque_sp.get(); 60254721Semaste} 61254721Semaste 62254721Semastelldb_private::DataExtractor * 63254721SemasteSBData::operator->() const 64254721Semaste{ 65254721Semaste return m_opaque_sp.operator->(); 66254721Semaste} 67254721Semaste 68254721Semastelldb::DataExtractorSP & 69254721SemasteSBData::operator*() 70254721Semaste{ 71254721Semaste return m_opaque_sp; 72254721Semaste} 73254721Semaste 74254721Semasteconst lldb::DataExtractorSP & 75254721SemasteSBData::operator*() const 76254721Semaste{ 77254721Semaste return m_opaque_sp; 78254721Semaste} 79254721Semaste 80254721Semastebool 81254721SemasteSBData::IsValid() 82254721Semaste{ 83254721Semaste return m_opaque_sp.get() != NULL; 84254721Semaste} 85254721Semaste 86254721Semasteuint8_t 87254721SemasteSBData::GetAddressByteSize () 88254721Semaste{ 89254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 90254721Semaste uint8_t value = 0; 91254721Semaste if (m_opaque_sp.get()) 92254721Semaste value = m_opaque_sp->GetAddressByteSize(); 93254721Semaste if (log) 94254721Semaste log->Printf ("SBData::GetAddressByteSize () => " 95254721Semaste "(%i)", value); 96254721Semaste return value; 97254721Semaste} 98254721Semaste 99254721Semastevoid 100254721SemasteSBData::SetAddressByteSize (uint8_t addr_byte_size) 101254721Semaste{ 102254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 103254721Semaste if (m_opaque_sp.get()) 104254721Semaste m_opaque_sp->SetAddressByteSize(addr_byte_size); 105254721Semaste if (log) 106254721Semaste log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size); 107254721Semaste} 108254721Semaste 109254721Semastevoid 110254721SemasteSBData::Clear () 111254721Semaste{ 112254721Semaste if (m_opaque_sp.get()) 113254721Semaste m_opaque_sp->Clear(); 114254721Semaste} 115254721Semaste 116254721Semastesize_t 117254721SemasteSBData::GetByteSize () 118254721Semaste{ 119254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 120254721Semaste size_t value = 0; 121254721Semaste if (m_opaque_sp.get()) 122254721Semaste value = m_opaque_sp->GetByteSize(); 123254721Semaste if (log) 124254721Semaste log->Printf ("SBData::GetByteSize () => " 125263363Semaste "(%zu)", value); 126254721Semaste return value; 127254721Semaste} 128254721Semaste 129254721Semastelldb::ByteOrder 130254721SemasteSBData::GetByteOrder () 131254721Semaste{ 132254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 133254721Semaste lldb::ByteOrder value = eByteOrderInvalid; 134254721Semaste if (m_opaque_sp.get()) 135254721Semaste value = m_opaque_sp->GetByteOrder(); 136254721Semaste if (log) 137254721Semaste log->Printf ("SBData::GetByteOrder () => " 138254721Semaste "(%i)", value); 139254721Semaste return value; 140254721Semaste} 141254721Semaste 142254721Semastevoid 143254721SemasteSBData::SetByteOrder (lldb::ByteOrder endian) 144254721Semaste{ 145254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 146254721Semaste if (m_opaque_sp.get()) 147254721Semaste m_opaque_sp->SetByteOrder(endian); 148254721Semaste if (log) 149254721Semaste log->Printf ("SBData::GetByteOrder (%i)", endian); 150254721Semaste} 151254721Semaste 152254721Semaste 153254721Semastefloat 154254721SemasteSBData::GetFloat (lldb::SBError& error, lldb::offset_t offset) 155254721Semaste{ 156254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 157254721Semaste float value = 0; 158254721Semaste if (!m_opaque_sp.get()) 159254721Semaste { 160254721Semaste error.SetErrorString("no value to read from"); 161254721Semaste } 162254721Semaste else 163254721Semaste { 164254721Semaste uint32_t old_offset = offset; 165254721Semaste value = m_opaque_sp->GetFloat(&offset); 166254721Semaste if (offset == old_offset) 167254721Semaste error.SetErrorString("unable to read data"); 168254721Semaste } 169254721Semaste if (log) 170254721Semaste log->Printf ("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => " 171254721Semaste "(%f)", error.get(), offset, value); 172254721Semaste return value; 173254721Semaste} 174254721Semaste 175254721Semastedouble 176254721SemasteSBData::GetDouble (lldb::SBError& error, lldb::offset_t offset) 177254721Semaste{ 178254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 179254721Semaste double value = 0; 180254721Semaste if (!m_opaque_sp.get()) 181254721Semaste { 182254721Semaste error.SetErrorString("no value to read from"); 183254721Semaste } 184254721Semaste else 185254721Semaste { 186254721Semaste uint32_t old_offset = offset; 187254721Semaste value = m_opaque_sp->GetDouble(&offset); 188254721Semaste if (offset == old_offset) 189254721Semaste error.SetErrorString("unable to read data"); 190254721Semaste } 191254721Semaste if (log) 192254721Semaste log->Printf ("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => " 193254721Semaste "(%f)", error.get(), offset, value); 194254721Semaste return value; 195254721Semaste} 196254721Semaste 197254721Semastelong double 198254721SemasteSBData::GetLongDouble (lldb::SBError& error, lldb::offset_t offset) 199254721Semaste{ 200254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 201254721Semaste long double value = 0; 202254721Semaste if (!m_opaque_sp.get()) 203254721Semaste { 204254721Semaste error.SetErrorString("no value to read from"); 205254721Semaste } 206254721Semaste else 207254721Semaste { 208254721Semaste uint32_t old_offset = offset; 209254721Semaste value = m_opaque_sp->GetLongDouble(&offset); 210254721Semaste if (offset == old_offset) 211254721Semaste error.SetErrorString("unable to read data"); 212254721Semaste } 213254721Semaste if (log) 214254721Semaste log->Printf ("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => " 215254721Semaste "(%Lf)", error.get(), offset, value); 216254721Semaste return value; 217254721Semaste} 218254721Semaste 219254721Semastelldb::addr_t 220254721SemasteSBData::GetAddress (lldb::SBError& error, lldb::offset_t offset) 221254721Semaste{ 222254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 223254721Semaste lldb::addr_t value = 0; 224254721Semaste if (!m_opaque_sp.get()) 225254721Semaste { 226254721Semaste error.SetErrorString("no value to read from"); 227254721Semaste } 228254721Semaste else 229254721Semaste { 230254721Semaste uint32_t old_offset = offset; 231254721Semaste value = m_opaque_sp->GetAddress(&offset); 232254721Semaste if (offset == old_offset) 233254721Semaste error.SetErrorString("unable to read data"); 234254721Semaste } 235254721Semaste if (log) 236254721Semaste log->Printf ("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => " 237254721Semaste "(%p)", error.get(), offset, (void*)value); 238254721Semaste return value; 239254721Semaste} 240254721Semaste 241254721Semasteuint8_t 242254721SemasteSBData::GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset) 243254721Semaste{ 244254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 245254721Semaste uint8_t value = 0; 246254721Semaste if (!m_opaque_sp.get()) 247254721Semaste { 248254721Semaste error.SetErrorString("no value to read from"); 249254721Semaste } 250254721Semaste else 251254721Semaste { 252254721Semaste uint32_t old_offset = offset; 253254721Semaste value = m_opaque_sp->GetU8(&offset); 254254721Semaste if (offset == old_offset) 255254721Semaste error.SetErrorString("unable to read data"); 256254721Semaste } 257254721Semaste if (log) 258254721Semaste log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => " 259254721Semaste "(%c)", error.get(), offset, value); 260254721Semaste return value; 261254721Semaste} 262254721Semaste 263254721Semasteuint16_t 264254721SemasteSBData::GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset) 265254721Semaste{ 266254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 267254721Semaste uint16_t value = 0; 268254721Semaste if (!m_opaque_sp.get()) 269254721Semaste { 270254721Semaste error.SetErrorString("no value to read from"); 271254721Semaste } 272254721Semaste else 273254721Semaste { 274254721Semaste uint32_t old_offset = offset; 275254721Semaste value = m_opaque_sp->GetU16(&offset); 276254721Semaste if (offset == old_offset) 277254721Semaste error.SetErrorString("unable to read data"); 278254721Semaste } 279254721Semaste if (log) 280254721Semaste log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => " 281254721Semaste "(%hd)", error.get(), offset, value); 282254721Semaste return value; 283254721Semaste} 284254721Semaste 285254721Semasteuint32_t 286254721SemasteSBData::GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset) 287254721Semaste{ 288254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 289254721Semaste uint32_t value = 0; 290254721Semaste if (!m_opaque_sp.get()) 291254721Semaste { 292254721Semaste error.SetErrorString("no value to read from"); 293254721Semaste } 294254721Semaste else 295254721Semaste { 296254721Semaste uint32_t old_offset = offset; 297254721Semaste value = m_opaque_sp->GetU32(&offset); 298254721Semaste if (offset == old_offset) 299254721Semaste error.SetErrorString("unable to read data"); 300254721Semaste } 301254721Semaste if (log) 302254721Semaste log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => " 303254721Semaste "(%d)", error.get(), offset, value); 304254721Semaste return value; 305254721Semaste} 306254721Semaste 307254721Semasteuint64_t 308254721SemasteSBData::GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset) 309254721Semaste{ 310254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 311254721Semaste uint64_t value = 0; 312254721Semaste if (!m_opaque_sp.get()) 313254721Semaste { 314254721Semaste error.SetErrorString("no value to read from"); 315254721Semaste } 316254721Semaste else 317254721Semaste { 318254721Semaste uint32_t old_offset = offset; 319254721Semaste value = m_opaque_sp->GetU64(&offset); 320254721Semaste if (offset == old_offset) 321254721Semaste error.SetErrorString("unable to read data"); 322254721Semaste } 323254721Semaste if (log) 324254721Semaste log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => " 325254721Semaste "(%" PRId64 ")", error.get(), offset, value); 326254721Semaste return value; 327254721Semaste} 328254721Semaste 329254721Semasteint8_t 330254721SemasteSBData::GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset) 331254721Semaste{ 332254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 333254721Semaste int8_t value = 0; 334254721Semaste if (!m_opaque_sp.get()) 335254721Semaste { 336254721Semaste error.SetErrorString("no value to read from"); 337254721Semaste } 338254721Semaste else 339254721Semaste { 340254721Semaste uint32_t old_offset = offset; 341254721Semaste value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1); 342254721Semaste if (offset == old_offset) 343254721Semaste error.SetErrorString("unable to read data"); 344254721Semaste } 345254721Semaste if (log) 346254721Semaste log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => " 347254721Semaste "(%c)", error.get(), offset, value); 348254721Semaste return value; 349254721Semaste} 350254721Semaste 351254721Semasteint16_t 352254721SemasteSBData::GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset) 353254721Semaste{ 354254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 355254721Semaste int16_t value = 0; 356254721Semaste if (!m_opaque_sp.get()) 357254721Semaste { 358254721Semaste error.SetErrorString("no value to read from"); 359254721Semaste } 360254721Semaste else 361254721Semaste { 362254721Semaste uint32_t old_offset = offset; 363254721Semaste value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2); 364254721Semaste if (offset == old_offset) 365254721Semaste error.SetErrorString("unable to read data"); 366254721Semaste } 367254721Semaste if (log) 368254721Semaste log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => " 369254721Semaste "(%hd)", error.get(), offset, value); 370254721Semaste return value; 371254721Semaste} 372254721Semaste 373254721Semasteint32_t 374254721SemasteSBData::GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset) 375254721Semaste{ 376254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 377254721Semaste int32_t value = 0; 378254721Semaste if (!m_opaque_sp.get()) 379254721Semaste { 380254721Semaste error.SetErrorString("no value to read from"); 381254721Semaste } 382254721Semaste else 383254721Semaste { 384254721Semaste uint32_t old_offset = offset; 385254721Semaste value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4); 386254721Semaste if (offset == old_offset) 387254721Semaste error.SetErrorString("unable to read data"); 388254721Semaste } 389254721Semaste if (log) 390254721Semaste log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => " 391254721Semaste "(%d)", error.get(), offset, value); 392254721Semaste return value; 393254721Semaste} 394254721Semaste 395254721Semasteint64_t 396254721SemasteSBData::GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset) 397254721Semaste{ 398254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 399254721Semaste int64_t value = 0; 400254721Semaste if (!m_opaque_sp.get()) 401254721Semaste { 402254721Semaste error.SetErrorString("no value to read from"); 403254721Semaste } 404254721Semaste else 405254721Semaste { 406254721Semaste uint32_t old_offset = offset; 407254721Semaste value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8); 408254721Semaste if (offset == old_offset) 409254721Semaste error.SetErrorString("unable to read data"); 410254721Semaste } 411254721Semaste if (log) 412254721Semaste log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => " 413254721Semaste "(%" PRId64 ")", error.get(), offset, value); 414254721Semaste return value; 415254721Semaste} 416254721Semaste 417254721Semasteconst char* 418254721SemasteSBData::GetString (lldb::SBError& error, lldb::offset_t offset) 419254721Semaste{ 420254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 421254721Semaste const char* value = 0; 422254721Semaste if (!m_opaque_sp.get()) 423254721Semaste { 424254721Semaste error.SetErrorString("no value to read from"); 425254721Semaste } 426254721Semaste else 427254721Semaste { 428254721Semaste uint32_t old_offset = offset; 429254721Semaste value = m_opaque_sp->GetCStr(&offset); 430254721Semaste if (offset == old_offset || (value == NULL)) 431254721Semaste error.SetErrorString("unable to read data"); 432254721Semaste } 433254721Semaste if (log) 434254721Semaste log->Printf ("SBData::GetString (error=%p,offset=%" PRIu64 ") => " 435254721Semaste "(%p)", error.get(), offset, value); 436254721Semaste return value; 437254721Semaste} 438254721Semaste 439254721Semastebool 440254721SemasteSBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr) 441254721Semaste{ 442254721Semaste Stream &strm = description.ref(); 443254721Semaste 444254721Semaste if (m_opaque_sp) 445254721Semaste { 446254721Semaste m_opaque_sp->Dump (&strm, 447254721Semaste 0, 448254721Semaste lldb::eFormatBytesWithASCII, 449254721Semaste 1, 450254721Semaste m_opaque_sp->GetByteSize(), 451254721Semaste 16, 452254721Semaste base_addr, 453254721Semaste 0, 454254721Semaste 0); 455254721Semaste } 456254721Semaste else 457254721Semaste strm.PutCString ("No value"); 458254721Semaste 459254721Semaste return true; 460254721Semaste} 461254721Semaste 462254721Semastesize_t 463254721SemasteSBData::ReadRawData (lldb::SBError& error, 464254721Semaste lldb::offset_t offset, 465254721Semaste void *buf, 466254721Semaste size_t size) 467254721Semaste{ 468254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 469254721Semaste void* ok = NULL; 470254721Semaste if (!m_opaque_sp.get()) 471254721Semaste { 472254721Semaste error.SetErrorString("no value to read from"); 473254721Semaste } 474254721Semaste else 475254721Semaste { 476254721Semaste uint32_t old_offset = offset; 477254721Semaste ok = m_opaque_sp->GetU8(&offset, buf, size); 478254721Semaste if ((offset == old_offset) || (ok == NULL)) 479254721Semaste error.SetErrorString("unable to read data"); 480254721Semaste } 481254721Semaste if (log) 482263363Semaste log->Printf ("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%zu) => " 483254721Semaste "(%p)", error.get(), offset, buf, size, ok); 484254721Semaste return ok ? size : 0; 485254721Semaste} 486254721Semaste 487254721Semastevoid 488254721SemasteSBData::SetData (lldb::SBError& error, 489254721Semaste const void *buf, 490254721Semaste size_t size, 491254721Semaste lldb::ByteOrder endian, 492254721Semaste uint8_t addr_size) 493254721Semaste{ 494254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 495254721Semaste if (!m_opaque_sp.get()) 496254721Semaste m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size)); 497254721Semaste else 498254721Semaste m_opaque_sp->SetData(buf, size, endian); 499254721Semaste if (log) 500263363Semaste log->Printf ("SBData::SetData (error=%p,buf=%p,size=%zu,endian=%d,addr_size=%c) => " 501254721Semaste "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get()); 502254721Semaste} 503254721Semaste 504254721Semastebool 505254721SemasteSBData::Append (const SBData& rhs) 506254721Semaste{ 507254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 508254721Semaste bool value = false; 509254721Semaste if (m_opaque_sp.get() && rhs.m_opaque_sp.get()) 510254721Semaste value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp); 511254721Semaste if (log) 512254721Semaste log->Printf ("SBData::Append (rhs=%p) => " 513254721Semaste "(%s)", rhs.get(), value ? "true" : "false"); 514254721Semaste return value; 515254721Semaste} 516254721Semaste 517254721Semastelldb::SBData 518254721SemasteSBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data) 519254721Semaste{ 520254721Semaste if (!data || !data[0]) 521254721Semaste return SBData(); 522254721Semaste 523254721Semaste uint32_t data_len = strlen(data); 524254721Semaste 525254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len)); 526254721Semaste lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size)); 527254721Semaste 528254721Semaste SBData ret(data_sp); 529254721Semaste 530254721Semaste return ret; 531254721Semaste} 532254721Semaste 533254721Semastelldb::SBData 534254721SemasteSBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len) 535254721Semaste{ 536254721Semaste if (!array || array_len == 0) 537254721Semaste return SBData(); 538254721Semaste 539254721Semaste size_t data_len = array_len * sizeof(uint64_t); 540254721Semaste 541254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 542254721Semaste lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size)); 543254721Semaste 544254721Semaste SBData ret(data_sp); 545254721Semaste 546254721Semaste return ret; 547254721Semaste} 548254721Semaste 549254721Semastelldb::SBData 550254721SemasteSBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len) 551254721Semaste{ 552254721Semaste if (!array || array_len == 0) 553254721Semaste return SBData(); 554254721Semaste 555254721Semaste size_t data_len = array_len * sizeof(uint32_t); 556254721Semaste 557254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 558254721Semaste lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size)); 559254721Semaste 560254721Semaste SBData ret(data_sp); 561254721Semaste 562254721Semaste return ret; 563254721Semaste} 564254721Semaste 565254721Semastelldb::SBData 566254721SemasteSBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len) 567254721Semaste{ 568254721Semaste if (!array || array_len == 0) 569254721Semaste return SBData(); 570254721Semaste 571254721Semaste size_t data_len = array_len * sizeof(int64_t); 572254721Semaste 573254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 574254721Semaste lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size)); 575254721Semaste 576254721Semaste SBData ret(data_sp); 577254721Semaste 578254721Semaste return ret; 579254721Semaste} 580254721Semaste 581254721Semastelldb::SBData 582254721SemasteSBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len) 583254721Semaste{ 584254721Semaste if (!array || array_len == 0) 585254721Semaste return SBData(); 586254721Semaste 587254721Semaste size_t data_len = array_len * sizeof(int32_t); 588254721Semaste 589254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 590254721Semaste lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size)); 591254721Semaste 592254721Semaste SBData ret(data_sp); 593254721Semaste 594254721Semaste return ret; 595254721Semaste} 596254721Semaste 597254721Semastelldb::SBData 598254721SemasteSBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len) 599254721Semaste{ 600254721Semaste if (!array || array_len == 0) 601254721Semaste return SBData(); 602254721Semaste 603254721Semaste size_t data_len = array_len * sizeof(double); 604254721Semaste 605254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 606254721Semaste lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size)); 607254721Semaste 608254721Semaste SBData ret(data_sp); 609254721Semaste 610254721Semaste return ret; 611254721Semaste} 612254721Semaste 613254721Semastebool 614254721SemasteSBData::SetDataFromCString (const char* data) 615254721Semaste{ 616254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 617254721Semaste 618254721Semaste if (!data) 619254721Semaste { 620254721Semaste if (log) 621254721Semaste log->Printf ("SBData::SetDataFromCString (data=%p) => " 622254721Semaste "false", data); 623254721Semaste return false; 624254721Semaste } 625254721Semaste 626254721Semaste size_t data_len = strlen(data); 627254721Semaste 628254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len)); 629254721Semaste 630254721Semaste if (!m_opaque_sp.get()) 631254721Semaste m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize())); 632254721Semaste else 633254721Semaste m_opaque_sp->SetData(buffer_sp); 634254721Semaste 635254721Semaste if (log) 636254721Semaste log->Printf ("SBData::SetDataFromCString (data=%p) => " 637254721Semaste "true", data); 638254721Semaste 639254721Semaste return true; 640254721Semaste} 641254721Semaste 642254721Semastebool 643254721SemasteSBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len) 644254721Semaste{ 645254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 646254721Semaste 647254721Semaste if (!array || array_len == 0) 648254721Semaste { 649254721Semaste if (log) 650263363Semaste log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %zu) => " 651254721Semaste "false", array, array_len); 652254721Semaste return false; 653254721Semaste } 654254721Semaste 655254721Semaste size_t data_len = array_len * sizeof(uint64_t); 656254721Semaste 657254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 658254721Semaste 659254721Semaste if (!m_opaque_sp.get()) 660254721Semaste m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize())); 661254721Semaste else 662254721Semaste m_opaque_sp->SetData(buffer_sp); 663254721Semaste 664254721Semaste if (log) 665263363Semaste log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %zu) => " 666254721Semaste "true", array, array_len); 667254721Semaste 668254721Semaste return true; 669254721Semaste} 670254721Semaste 671254721Semastebool 672254721SemasteSBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len) 673254721Semaste{ 674254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 675254721Semaste 676254721Semaste if (!array || array_len == 0) 677254721Semaste { 678254721Semaste if (log) 679263363Semaste log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %zu) => " 680254721Semaste "false", array, array_len); 681254721Semaste return false; 682254721Semaste } 683254721Semaste 684254721Semaste size_t data_len = array_len * sizeof(uint32_t); 685254721Semaste 686254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 687254721Semaste 688254721Semaste if (!m_opaque_sp.get()) 689254721Semaste m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize())); 690254721Semaste else 691254721Semaste m_opaque_sp->SetData(buffer_sp); 692254721Semaste 693254721Semaste if (log) 694263363Semaste log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %zu) => " 695254721Semaste "true", array, array_len); 696254721Semaste 697254721Semaste return true; 698254721Semaste} 699254721Semaste 700254721Semastebool 701254721SemasteSBData::SetDataFromSInt64Array (int64_t* array, size_t array_len) 702254721Semaste{ 703254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 704254721Semaste 705254721Semaste if (!array || array_len == 0) 706254721Semaste { 707254721Semaste if (log) 708263363Semaste log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %zu) => " 709254721Semaste "false", array, array_len); 710254721Semaste return false; 711254721Semaste } 712254721Semaste 713254721Semaste size_t data_len = array_len * sizeof(int64_t); 714254721Semaste 715254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 716254721Semaste 717254721Semaste if (!m_opaque_sp.get()) 718254721Semaste m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize())); 719254721Semaste else 720254721Semaste m_opaque_sp->SetData(buffer_sp); 721254721Semaste 722254721Semaste if (log) 723263363Semaste log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %zu) => " 724254721Semaste "true", array, array_len); 725254721Semaste 726254721Semaste return true; 727254721Semaste} 728254721Semaste 729254721Semastebool 730254721SemasteSBData::SetDataFromSInt32Array (int32_t* array, size_t array_len) 731254721Semaste{ 732254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 733254721Semaste 734254721Semaste if (!array || array_len == 0) 735254721Semaste { 736254721Semaste if (log) 737263363Semaste log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %zu) => " 738254721Semaste "false", array, array_len); 739254721Semaste return false; 740254721Semaste } 741254721Semaste 742254721Semaste size_t data_len = array_len * sizeof(int32_t); 743254721Semaste 744254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 745254721Semaste 746254721Semaste if (!m_opaque_sp.get()) 747254721Semaste m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize())); 748254721Semaste else 749254721Semaste m_opaque_sp->SetData(buffer_sp); 750254721Semaste 751254721Semaste if (log) 752263363Semaste log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %zu) => " 753254721Semaste "true", array, array_len); 754254721Semaste 755254721Semaste return true; 756254721Semaste} 757254721Semaste 758254721Semastebool 759254721SemasteSBData::SetDataFromDoubleArray (double* array, size_t array_len) 760254721Semaste{ 761254721Semaste Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 762254721Semaste 763254721Semaste if (!array || array_len == 0) 764254721Semaste { 765254721Semaste if (log) 766263363Semaste log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %zu) => " 767254721Semaste "false", array, array_len); 768254721Semaste return false; 769254721Semaste } 770254721Semaste 771254721Semaste size_t data_len = array_len * sizeof(double); 772254721Semaste 773254721Semaste lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); 774254721Semaste 775254721Semaste if (!m_opaque_sp.get()) 776254721Semaste m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize())); 777254721Semaste else 778254721Semaste m_opaque_sp->SetData(buffer_sp); 779254721Semaste 780254721Semaste if (log) 781263363Semaste log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %zu) => " 782254721Semaste "true", array, array_len); 783254721Semaste 784254721Semaste return true; 785254721Semaste} 786