From 39c6d0f9ae60dae09d48eaa264339ff438bbebd2 Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Fri, 6 Jan 2012 00:46:12 +0000 Subject: 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 --- lldb/source/API/SBProcess.cpp | 125 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) (limited to 'lldb/source/API/SBProcess.cpp') 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; +} -- cgit v1.2.3