Skip to content
This repository was archived by the owner on May 21, 2019. It is now read-only.

Commit a6b7e32

Browse files
author
Greg Clayton
committedJan 7, 2012
Patch from Enrico Granata that moves SBData related functions into the SBData
class instead of requiring a live process in order to be able to create useful SBData objects. git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@147702 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 6fc5c71 commit a6b7e32

File tree

7 files changed

+436
-183
lines changed

7 files changed

+436
-183
lines changed
 

‎include/lldb/API/SBData.h

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ class SBData
3232
uint8_t
3333
GetAddressByteSize ();
3434

35+
void
36+
SetAddressByteSize (uint8_t addr_byte_size);
37+
3538
void
3639
Clear ();
3740

@@ -44,6 +47,9 @@ class SBData
4447
lldb::ByteOrder
4548
GetByteOrder();
4649

50+
void
51+
SetByteOrder (lldb::ByteOrder endian);
52+
4753
float
4854
GetFloat (lldb::SBError& error, uint32_t offset);
4955

@@ -96,11 +102,50 @@ class SBData
96102
// inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where
97103
// the typemap isn't applied before resolving the overload, and thus the right function never gets called
98104
void
99-
SetData(lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
105+
SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
100106

101107
// see SetData() for why we don't have Append(const void* buf, size_t size)
102108
bool
103-
Append(const SBData& rhs);
109+
Append (const SBData& rhs);
110+
111+
static lldb::SBData
112+
CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data);
113+
114+
// in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len
115+
// should not be renamed or rearranged, because doing so will break the SWIG typemap
116+
static lldb::SBData
117+
CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len);
118+
119+
static lldb::SBData
120+
CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len);
121+
122+
static lldb::SBData
123+
CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len);
124+
125+
static lldb::SBData
126+
CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len);
127+
128+
static lldb::SBData
129+
CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len);
130+
131+
bool
132+
SetDataFromCString (const char* data);
133+
134+
bool
135+
SetDataFromUInt64Array (uint64_t* array, size_t array_len);
136+
137+
bool
138+
SetDataFromUInt32Array (uint32_t* array, size_t array_len);
139+
140+
bool
141+
SetDataFromSInt64Array (int64_t* array, size_t array_len);
142+
143+
bool
144+
SetDataFromSInt32Array (int32_t* array, size_t array_len);
145+
146+
bool
147+
SetDataFromDoubleArray (double* array, size_t array_len);
148+
104149

105150
protected:
106151

‎include/lldb/API/SBProcess.h

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -186,24 +186,6 @@ class SBProcess
186186
lldb::SBError
187187
UnloadImage (uint32_t image_token);
188188

189-
lldb::SBData
190-
GetDataFromCString(const char* data);
191-
192-
lldb::SBData
193-
GetDataFromUnsignedInt64Array(uint64_t* array, size_t array_len);
194-
195-
lldb::SBData
196-
GetDataFromUnsignedInt32Array(uint32_t* array, size_t array_len);
197-
198-
lldb::SBData
199-
GetDataFromSignedInt64Array(int64_t* array, size_t array_len);
200-
201-
lldb::SBData
202-
GetDataFromSignedInt32Array(int32_t* array, size_t array_len);
203-
204-
lldb::SBData
205-
GetDataFromDoubleArray(double* array, size_t array_len);
206-
207189
protected:
208190
friend class SBAddress;
209191
friend class SBBreakpoint;

‎scripts/Python/interface/SBData.i

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public:
2222

2323
uint8_t
2424
GetAddressByteSize ();
25+
26+
void
27+
SetAddressByteSize (uint8_t addr_byte_size);
2528

2629
void
2730
Clear ();
@@ -34,6 +37,9 @@ public:
3437

3538
lldb::ByteOrder
3639
GetByteOrder();
40+
41+
void
42+
SetByteOrder (lldb::ByteOrder endian);
3743

3844
float
3945
GetFloat (lldb::SBError& error, uint32_t offset);
@@ -84,11 +90,48 @@ public:
8490
size_t size);
8591

8692
void
87-
SetData(lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
93+
SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
8894

8995
bool
90-
Append(const SBData& rhs);
91-
96+
Append (const SBData& rhs);
97+
98+
static lldb::SBData
99+
CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data);
100+
101+
// in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len
102+
// should not be renamed or rearranged, because doing so will break the SWIG typemap
103+
static lldb::SBData
104+
CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len);
105+
106+
static lldb::SBData
107+
CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len);
108+
109+
static lldb::SBData
110+
CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len);
111+
112+
static lldb::SBData
113+
CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len);
114+
115+
static lldb::SBData
116+
CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len);
117+
118+
bool
119+
SetDataFromCString (const char* data);
120+
121+
bool
122+
SetDataFromUInt64Array (uint64_t* array, size_t array_len);
123+
124+
bool
125+
SetDataFromUInt32Array (uint32_t* array, size_t array_len);
126+
127+
bool
128+
SetDataFromSInt64Array (int64_t* array, size_t array_len);
129+
130+
bool
131+
SetDataFromSInt32Array (int32_t* array, size_t array_len);
132+
133+
bool
134+
SetDataFromDoubleArray (double* array, size_t array_len);
92135

93136
};
94137

‎scripts/Python/interface/SBProcess.i

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -281,24 +281,6 @@ public:
281281
lldb::SBError
282282
UnloadImage (uint32_t image_token);
283283

284-
lldb::SBData
285-
GetDataFromCString(const char* data);
286-
287-
lldb::SBData
288-
GetDataFromUnsignedInt64Array(uint64_t* array, size_t array_len);
289-
290-
lldb::SBData
291-
GetDataFromUnsignedInt32Array(uint32_t* array, size_t array_len);
292-
293-
lldb::SBData
294-
GetDataFromSignedInt64Array(int64_t* array, size_t array_len);
295-
296-
lldb::SBData
297-
GetDataFromSignedInt32Array(int32_t* array, size_t array_len);
298-
299-
lldb::SBData
300-
GetDataFromDoubleArray(double* array, size_t array_len);
301-
302284
};
303285

304286
} // namespace lldb

‎source/API/SBData.cpp

Lines changed: 300 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "lldb/API/SBError.h"
1212
#include "lldb/API/SBStream.h"
1313

14+
#include "lldb/Core/DataBufferHeap.h"
1415
#include "lldb/Core/DataExtractor.h"
1516
#include "lldb/Core/Log.h"
1617
#include "lldb/Core/Stream.h"
@@ -19,7 +20,8 @@
1920
using namespace lldb;
2021
using namespace lldb_private;
2122

22-
SBData::SBData ()
23+
SBData::SBData () :
24+
m_opaque_sp(new DataExtractor())
2325
{
2426
}
2527

@@ -94,6 +96,16 @@ SBData::GetAddressByteSize ()
9496
return value;
9597
}
9698

99+
void
100+
SBData::SetAddressByteSize (uint8_t addr_byte_size)
101+
{
102+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
103+
if (m_opaque_sp.get())
104+
m_opaque_sp->SetAddressByteSize(addr_byte_size);
105+
if (log)
106+
log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size);
107+
}
108+
97109
void
98110
SBData::Clear ()
99111
{
@@ -127,6 +139,17 @@ SBData::GetByteOrder ()
127139
return value;
128140
}
129141

142+
void
143+
SBData::SetByteOrder (lldb::ByteOrder endian)
144+
{
145+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
146+
if (m_opaque_sp.get())
147+
m_opaque_sp->SetByteOrder(endian);
148+
if (log)
149+
log->Printf ("SBData::GetByteOrder (%i)", endian);
150+
}
151+
152+
130153
float
131154
SBData::GetFloat (lldb::SBError& error, uint32_t offset)
132155
{
@@ -462,11 +485,11 @@ SBData::ReadRawData (lldb::SBError& error,
462485
}
463486

464487
void
465-
SBData::SetData(lldb::SBError& error,
466-
const void *buf,
467-
size_t size,
468-
lldb::ByteOrder endian,
469-
uint8_t addr_size)
488+
SBData::SetData (lldb::SBError& error,
489+
const void *buf,
490+
size_t size,
491+
lldb::ByteOrder endian,
492+
uint8_t addr_size)
470493
{
471494
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
472495
if (!m_opaque_sp.get())
@@ -479,7 +502,7 @@ SBData::SetData(lldb::SBError& error,
479502
}
480503

481504
bool
482-
SBData::Append(const SBData& rhs)
505+
SBData::Append (const SBData& rhs)
483506
{
484507
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
485508
bool value = false;
@@ -490,3 +513,273 @@ SBData::Append(const SBData& rhs)
490513
"(%s)", rhs.get(), value ? "true" : "false");
491514
return value;
492515
}
516+
517+
lldb::SBData
518+
SBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
519+
{
520+
if (!data || !data[0])
521+
return SBData();
522+
523+
uint32_t data_len = strlen(data);
524+
525+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
526+
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
527+
528+
SBData ret(data_sp);
529+
530+
return ret;
531+
}
532+
533+
lldb::SBData
534+
SBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
535+
{
536+
if (!array || array_len == 0)
537+
return SBData();
538+
539+
size_t data_len = array_len * sizeof(uint64_t);
540+
541+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
542+
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
543+
544+
SBData ret(data_sp);
545+
546+
return ret;
547+
}
548+
549+
lldb::SBData
550+
SBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
551+
{
552+
if (!array || array_len == 0)
553+
return SBData();
554+
555+
size_t data_len = array_len * sizeof(uint32_t);
556+
557+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
558+
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
559+
560+
SBData ret(data_sp);
561+
562+
return ret;
563+
}
564+
565+
lldb::SBData
566+
SBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
567+
{
568+
if (!array || array_len == 0)
569+
return SBData();
570+
571+
size_t data_len = array_len * sizeof(int64_t);
572+
573+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
574+
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
575+
576+
SBData ret(data_sp);
577+
578+
return ret;
579+
}
580+
581+
lldb::SBData
582+
SBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
583+
{
584+
if (!array || array_len == 0)
585+
return SBData();
586+
587+
size_t data_len = array_len * sizeof(int32_t);
588+
589+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
590+
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
591+
592+
SBData ret(data_sp);
593+
594+
return ret;
595+
}
596+
597+
lldb::SBData
598+
SBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
599+
{
600+
if (!array || array_len == 0)
601+
return SBData();
602+
603+
size_t data_len = array_len * sizeof(double);
604+
605+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
606+
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
607+
608+
SBData ret(data_sp);
609+
610+
return ret;
611+
}
612+
613+
bool
614+
SBData::SetDataFromCString (const char* data)
615+
{
616+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
617+
618+
if (!data)
619+
{
620+
if (log)
621+
log->Printf ("SBData::SetDataFromCString (data=%p) => "
622+
"false", data);
623+
return false;
624+
}
625+
626+
size_t data_len = strlen(data);
627+
628+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
629+
630+
if (!m_opaque_sp.get())
631+
m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
632+
else
633+
m_opaque_sp->SetData(buffer_sp);
634+
635+
if (log)
636+
log->Printf ("SBData::SetDataFromCString (data=%p) => "
637+
"true", data);
638+
639+
return true;
640+
}
641+
642+
bool
643+
SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
644+
{
645+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
646+
647+
if (!array || array_len == 0)
648+
{
649+
if (log)
650+
log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
651+
"false", array, array_len);
652+
return false;
653+
}
654+
655+
size_t data_len = array_len * sizeof(uint64_t);
656+
657+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
658+
659+
if (!m_opaque_sp.get())
660+
m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
661+
else
662+
m_opaque_sp->SetData(buffer_sp);
663+
664+
if (log)
665+
log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
666+
"true", array, array_len);
667+
668+
return true;
669+
}
670+
671+
bool
672+
SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
673+
{
674+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
675+
676+
if (!array || array_len == 0)
677+
{
678+
if (log)
679+
log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
680+
"false", array, array_len);
681+
return false;
682+
}
683+
684+
size_t data_len = array_len * sizeof(uint32_t);
685+
686+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
687+
688+
if (!m_opaque_sp.get())
689+
m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
690+
else
691+
m_opaque_sp->SetData(buffer_sp);
692+
693+
if (log)
694+
log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
695+
"true", array, array_len);
696+
697+
return true;
698+
}
699+
700+
bool
701+
SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
702+
{
703+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
704+
705+
if (!array || array_len == 0)
706+
{
707+
if (log)
708+
log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
709+
"false", array, array_len);
710+
return false;
711+
}
712+
713+
size_t data_len = array_len * sizeof(int64_t);
714+
715+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
716+
717+
if (!m_opaque_sp.get())
718+
m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
719+
else
720+
m_opaque_sp->SetData(buffer_sp);
721+
722+
if (log)
723+
log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
724+
"true", array, array_len);
725+
726+
return true;
727+
}
728+
729+
bool
730+
SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
731+
{
732+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
733+
734+
if (!array || array_len == 0)
735+
{
736+
if (log)
737+
log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
738+
"false", array, array_len);
739+
return false;
740+
}
741+
742+
size_t data_len = array_len * sizeof(int32_t);
743+
744+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
745+
746+
if (!m_opaque_sp.get())
747+
m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
748+
else
749+
m_opaque_sp->SetData(buffer_sp);
750+
751+
if (log)
752+
log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
753+
"true", array, array_len);
754+
755+
return true;
756+
}
757+
758+
bool
759+
SBData::SetDataFromDoubleArray (double* array, size_t array_len)
760+
{
761+
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
762+
763+
if (!array || array_len == 0)
764+
{
765+
if (log)
766+
log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
767+
"false", array, array_len);
768+
return false;
769+
}
770+
771+
size_t data_len = array_len * sizeof(double);
772+
773+
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
774+
775+
if (!m_opaque_sp.get())
776+
m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
777+
else
778+
m_opaque_sp->SetData(buffer_sp);
779+
780+
if (log)
781+
log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
782+
"true", array, array_len);
783+
784+
return true;
785+
}

‎source/API/SBProcess.cpp

Lines changed: 0 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
#include "lldb/lldb-types.h"
1414

1515
#include "lldb/Interpreter/Args.h"
16-
#include "lldb/Core/DataBufferHeap.h"
17-
#include "lldb/Core/DataExtractor.h"
1816
#include "lldb/Core/Debugger.h"
1917
#include "lldb/Core/Log.h"
2018
#include "lldb/Core/State.h"
@@ -918,130 +916,3 @@ SBProcess::UnloadImage (uint32_t image_token)
918916
sb_error.SetErrorString("invalid process");
919917
return sb_error;
920918
}
921-
922-
lldb::SBData
923-
SBProcess::GetDataFromCString(const char* data)
924-
{
925-
if (!IsValid())
926-
return SBData();
927-
928-
if (!data || !data[0])
929-
return SBData();
930-
931-
uint32_t data_len = strlen(data);
932-
lldb::ByteOrder byte_order = GetByteOrder();
933-
uint8_t addr_size = GetAddressByteSize();
934-
935-
lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
936-
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
937-
938-
SBData ret(data_sp);
939-
940-
return ret;
941-
}
942-
943-
lldb::SBData
944-
SBProcess::GetDataFromUnsignedInt64Array(uint64_t* array, size_t array_len)
945-
{
946-
if (!IsValid())
947-
return SBData();
948-
949-
if (!array || array_len == 0)
950-
return SBData();
951-
952-
lldb::ByteOrder byte_order = GetByteOrder();
953-
uint8_t addr_size = GetAddressByteSize();
954-
size_t data_len = array_len * sizeof(uint64_t);
955-
956-
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
957-
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
958-
959-
SBData ret(data_sp);
960-
961-
return ret;
962-
}
963-
964-
lldb::SBData
965-
SBProcess::GetDataFromUnsignedInt32Array(uint32_t* array, size_t array_len)
966-
{
967-
if (!IsValid())
968-
return SBData();
969-
970-
if (!array || array_len == 0)
971-
return SBData();
972-
973-
lldb::ByteOrder byte_order = GetByteOrder();
974-
uint8_t addr_size = GetAddressByteSize();
975-
size_t data_len = array_len * sizeof(uint32_t);
976-
977-
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
978-
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
979-
980-
SBData ret(data_sp);
981-
982-
return ret;
983-
}
984-
985-
lldb::SBData
986-
SBProcess::GetDataFromSignedInt64Array(int64_t* array, size_t array_len)
987-
{
988-
if (!IsValid())
989-
return SBData();
990-
991-
if (!array || array_len == 0)
992-
return SBData();
993-
994-
lldb::ByteOrder byte_order = GetByteOrder();
995-
uint8_t addr_size = GetAddressByteSize();
996-
size_t data_len = array_len * sizeof(int64_t);
997-
998-
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
999-
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
1000-
1001-
SBData ret(data_sp);
1002-
1003-
return ret;
1004-
}
1005-
1006-
lldb::SBData
1007-
SBProcess::GetDataFromSignedInt32Array(int32_t* array, size_t array_len)
1008-
{
1009-
if (!IsValid())
1010-
return SBData();
1011-
1012-
if (!array || array_len == 0)
1013-
return SBData();
1014-
1015-
lldb::ByteOrder byte_order = GetByteOrder();
1016-
uint8_t addr_size = GetAddressByteSize();
1017-
size_t data_len = array_len * sizeof(int32_t);
1018-
1019-
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
1020-
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
1021-
1022-
SBData ret(data_sp);
1023-
1024-
return ret;
1025-
}
1026-
1027-
lldb::SBData
1028-
SBProcess::GetDataFromDoubleArray(double* array, size_t array_len)
1029-
{
1030-
if (!IsValid())
1031-
return SBData();
1032-
1033-
if (!array || array_len == 0)
1034-
return SBData();
1035-
1036-
lldb::ByteOrder byte_order = GetByteOrder();
1037-
uint8_t addr_size = GetAddressByteSize();
1038-
size_t data_len = array_len * sizeof(double);
1039-
1040-
lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
1041-
lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
1042-
1043-
SBData ret(data_sp);
1044-
1045-
return ret;
1046-
}
1047-

‎test/python_api/sbdata/TestSBData.py

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def data_api(self):
215215
# check the new API calls introduced per LLVM bugzilla enhancement request
216216
# 11619 (Allow creating SBData values from arrays or primitives in Python)
217217

218-
data2 = process.GetDataFromCString('hello!')
218+
data2 = lldb.SBData.CreateDataFromCString(process.GetByteOrder(),process.GetAddressByteSize(),'hello!')
219219
self.assertTrue(data2.GetUnsignedInt8(error,0) == 104, 'h == 104')
220220
self.assertTrue(data2.GetUnsignedInt8(error,1) == 101, 'e == 101')
221221
self.assertTrue(data2.GetUnsignedInt8(error,2) == 108, 'l == 108')
@@ -224,35 +224,72 @@ def data_api(self):
224224
self.assertTrue(data2.GetUnsignedInt8(error,5) == 33, '! == 33')
225225
self.assertTrue(data2.GetUnsignedInt8(error,6) == 0, 'binary 0 terminator')
226226

227-
data2 = process.GetDataFromUnsignedInt64Array([1,2,3,4,5])
227+
data2 = lldb.SBData.CreateDataFromUInt64Array(process.GetByteOrder(),process.GetAddressByteSize(),[1,2,3,4,5])
228228
self.assertTrue(data2.GetUnsignedInt64(error,0) == 1, 'data2[0] = 1')
229229
self.assertTrue(data2.GetUnsignedInt64(error,8) == 2, 'data2[1] = 2')
230230
self.assertTrue(data2.GetUnsignedInt64(error,16) == 3, 'data2[2] = 3')
231231
self.assertTrue(data2.GetUnsignedInt64(error,24) == 4, 'data2[3] = 4')
232232
self.assertTrue(data2.GetUnsignedInt64(error,32) == 5, 'data2[4] = 5')
233233

234-
data2 = process.GetDataFromSignedInt32Array([2, -2])
234+
data2 = lldb.SBData.CreateDataFromSInt32Array(process.GetByteOrder(),process.GetAddressByteSize(),[2, -2])
235235
self.assertTrue(data2.GetSignedInt32(error,0) == 2, 'signed32 data2[0] = 2')
236236
self.assertTrue(data2.GetSignedInt32(error,4) == -2, 'signed32 data2[1] = -2')
237237

238-
data2.Append(process.GetDataFromSignedInt64Array([2, -2]))
238+
data2.Append(lldb.SBData.CreateDataFromSInt64Array(process.GetByteOrder(),process.GetAddressByteSize(),[2, -2]))
239239
self.assertTrue(data2.GetSignedInt32(error,0) == 2, 'signed32 data2[0] = 2')
240240
self.assertTrue(data2.GetSignedInt32(error,4) == -2, 'signed32 data2[1] = -2')
241241
self.assertTrue(data2.GetSignedInt64(error,8) == 2, 'signed64 data2[0] = 2')
242242
self.assertTrue(data2.GetSignedInt64(error,16) == -2, 'signed64 data2[1] = -2')
243243

244-
data2 = process.GetDataFromUnsignedInt32Array([1,2,3,4,5])
244+
data2 = lldb.SBData.CreateDataFromUInt32Array(process.GetByteOrder(),process.GetAddressByteSize(),[1,2,3,4,5])
245245
self.assertTrue(data2.GetUnsignedInt32(error,0) == 1, '32-bit data2[0] = 1')
246246
self.assertTrue(data2.GetUnsignedInt32(error,4) == 2, '32-bit data2[1] = 2')
247247
self.assertTrue(data2.GetUnsignedInt32(error,8) == 3, '32-bit data2[2] = 3')
248248
self.assertTrue(data2.GetUnsignedInt32(error,12) == 4, '32-bit data2[3] = 4')
249249
self.assertTrue(data2.GetUnsignedInt32(error,16) == 5, '32-bit data2[4] = 5')
250250

251-
data2 = process.GetDataFromDoubleArray([3.14,6.28,2.71])
251+
data2 = lldb.SBData.CreateDataFromDoubleArray(process.GetByteOrder(),process.GetAddressByteSize(),[3.14,6.28,2.71])
252252
self.assertTrue( fabs(data2.GetDouble(error,0) - 3.14) < 0.5, 'double data2[0] = 3.14')
253253
self.assertTrue( fabs(data2.GetDouble(error,8) - 6.28) < 0.5, 'double data2[1] = 6.28')
254254
self.assertTrue( fabs(data2.GetDouble(error,16) - 2.71) < 0.5, 'double data2[2] = 2.71')
255+
256+
data2 = lldb.SBData()
257+
258+
data2.SetDataFromCString('hello!')
259+
self.assertTrue(data2.GetUnsignedInt8(error,0) == 104, 'set h == 104')
260+
self.assertTrue(data2.GetUnsignedInt8(error,1) == 101, 'set e == 101')
261+
self.assertTrue(data2.GetUnsignedInt8(error,2) == 108, 'set l == 108')
262+
self.assertTrue(data2.GetUnsignedInt8(error,3) == 108, 'set l == 108')
263+
self.assertTrue(data2.GetUnsignedInt8(error,4) == 111, 'set o == 111')
264+
self.assertTrue(data2.GetUnsignedInt8(error,5) == 33, 'set ! == 33')
265+
self.assertTrue(data2.GetUnsignedInt8(error,6) == 0, 'set binary 0 terminator')
266+
267+
data2.SetDataFromUInt64Array([1,2,3,4,5])
268+
self.assertTrue(data2.GetUnsignedInt64(error,0) == 1, 'set data2[0] = 1')
269+
self.assertTrue(data2.GetUnsignedInt64(error,8) == 2, 'set data2[1] = 2')
270+
self.assertTrue(data2.GetUnsignedInt64(error,16) == 3, 'set data2[2] = 3')
271+
self.assertTrue(data2.GetUnsignedInt64(error,24) == 4, 'set data2[3] = 4')
272+
self.assertTrue(data2.GetUnsignedInt64(error,32) == 5, 'set data2[4] = 5')
273+
274+
data2.SetDataFromSInt32Array([2, -2])
275+
self.assertTrue(data2.GetSignedInt32(error,0) == 2, 'set signed32 data2[0] = 2')
276+
self.assertTrue(data2.GetSignedInt32(error,4) == -2, 'set signed32 data2[1] = -2')
277+
278+
data2.SetDataFromSInt64Array([2, -2])
279+
self.assertTrue(data2.GetSignedInt32(error,0) == 2, 'set signed64 data2[0] = 2')
280+
self.assertTrue(data2.GetSignedInt32(error,8) == -2, 'set signed64 data2[1] = -2')
281+
282+
data2.SetDataFromUInt32Array([1,2,3,4,5])
283+
self.assertTrue(data2.GetUnsignedInt32(error,0) == 1, 'set 32-bit data2[0] = 1')
284+
self.assertTrue(data2.GetUnsignedInt32(error,4) == 2, 'set 32-bit data2[1] = 2')
285+
self.assertTrue(data2.GetUnsignedInt32(error,8) == 3, 'set 32-bit data2[2] = 3')
286+
self.assertTrue(data2.GetUnsignedInt32(error,12) == 4, 'set 32-bit data2[3] = 4')
287+
self.assertTrue(data2.GetUnsignedInt32(error,16) == 5, 'set 32-bit data2[4] = 5')
255288

289+
data2.SetDataFromDoubleArray([3.14,6.28,2.71])
290+
self.assertTrue( fabs(data2.GetDouble(error,0) - 3.14) < 0.5, 'set double data2[0] = 3.14')
291+
self.assertTrue( fabs(data2.GetDouble(error,8) - 6.28) < 0.5, 'set double data2[1] = 6.28')
292+
self.assertTrue( fabs(data2.GetDouble(error,16) - 2.71) < 0.5, 'set double data2[2] = 2.71')
256293

257294
if __name__ == '__main__':
258295
import atexit

0 commit comments

Comments
 (0)
This repository has been archived.