diff options
| author | Johnny Chen <johnny.chen@apple.com> | 2012-01-06 00:46:12 +0000 |
|---|---|---|
| committer | Johnny Chen <johnny.chen@apple.com> | 2012-01-06 00:46:12 +0000 |
| commit | 39c6d0f9ae60dae09d48eaa264339ff438bbebd2 (patch) | |
| tree | d3f4c34417b7acdfd1de8514df5f8f8daec75a1a /lldb/source/API/SBProcess.cpp | |
| parent | 650e3b014ea230203bebd8a293c893cdb6b3727e (diff) | |
http://llvm.org/bugs/show_bug.cgi?id=11619
Allow creating SBData values from arrays or primitives in Python
Patch submitted by Enrico Granata.
llvm-svn: 147639
Diffstat (limited to 'lldb/source/API/SBProcess.cpp')
| -rw-r--r-- | lldb/source/API/SBProcess.cpp | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp index 89932a37208e..2930f2868765 100644 --- a/lldb/source/API/SBProcess.cpp +++ b/lldb/source/API/SBProcess.cpp @@ -919,4 +919,129 @@ SBProcess::UnloadImage (uint32_t image_token) return sb_error; } +lldb::SBData +SBProcess::GetDataFromCString(const char* data) +{ + if (!IsValid()) + return SBData(); + + if (!data || !data[0]) + return SBData(); + + uint32_t data_len = strlen(data); + lldb::ByteOrder byte_order = GetByteOrder(); + uint8_t addr_size = GetAddressByteSize(); + + lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len)); + lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size)); + + SBData ret(data_sp); + + return ret; +} + +lldb::SBData +SBProcess::GetDataFromUnsignedInt64Array(uint64_t* array, size_t array_len) +{ + if (!IsValid()) + return SBData(); + + if (!array || array_len == 0) + return SBData(); + + lldb::ByteOrder byte_order = GetByteOrder(); + uint8_t addr_size = GetAddressByteSize(); + size_t data_len = array_len * sizeof(uint64_t); + + lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); + lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size)); + + SBData ret(data_sp); + + return ret; +} + +lldb::SBData +SBProcess::GetDataFromUnsignedInt32Array(uint32_t* array, size_t array_len) +{ + if (!IsValid()) + return SBData(); + + if (!array || array_len == 0) + return SBData(); + + lldb::ByteOrder byte_order = GetByteOrder(); + uint8_t addr_size = GetAddressByteSize(); + size_t data_len = array_len * sizeof(uint32_t); + + lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); + lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size)); + + SBData ret(data_sp); + + return ret; +} + +lldb::SBData +SBProcess::GetDataFromSignedInt64Array(int64_t* array, size_t array_len) +{ + if (!IsValid()) + return SBData(); + + if (!array || array_len == 0) + return SBData(); + + lldb::ByteOrder byte_order = GetByteOrder(); + uint8_t addr_size = GetAddressByteSize(); + size_t data_len = array_len * sizeof(int64_t); + + lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); + lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size)); + + SBData ret(data_sp); + + return ret; +} + +lldb::SBData +SBProcess::GetDataFromSignedInt32Array(int32_t* array, size_t array_len) +{ + if (!IsValid()) + return SBData(); + + if (!array || array_len == 0) + return SBData(); + + lldb::ByteOrder byte_order = GetByteOrder(); + uint8_t addr_size = GetAddressByteSize(); + size_t data_len = array_len * sizeof(int32_t); + + lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); + lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size)); + + SBData ret(data_sp); + + return ret; +} + +lldb::SBData +SBProcess::GetDataFromDoubleArray(double* array, size_t array_len) +{ + if (!IsValid()) + return SBData(); + + if (!array || array_len == 0) + return SBData(); + + lldb::ByteOrder byte_order = GetByteOrder(); + uint8_t addr_size = GetAddressByteSize(); + size_t data_len = array_len * sizeof(double); + + lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len)); + lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size)); + + SBData ret(data_sp); + + return ret; +} |
