| //===-- SWIG Interface for SBData -------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| |
| namespace lldb { |
| |
| %feature("docstring", |
| "Represents a data buffer." |
| ) SBData; |
| class SBData |
| { |
| public: |
| |
| SBData (); |
| |
| SBData (const SBData &rhs); |
| |
| ~SBData (); |
| |
| uint8_t |
| GetAddressByteSize (); |
| |
| void |
| SetAddressByteSize (uint8_t addr_byte_size); |
| |
| void |
| Clear (); |
| |
| bool |
| IsValid(); |
| |
| explicit operator bool() const; |
| |
| size_t |
| GetByteSize (); |
| |
| lldb::ByteOrder |
| GetByteOrder(); |
| |
| void |
| SetByteOrder (lldb::ByteOrder endian); |
| |
| float |
| GetFloat (lldb::SBError& error, lldb::offset_t offset); |
| |
| double |
| GetDouble (lldb::SBError& error, lldb::offset_t offset); |
| |
| long double |
| GetLongDouble (lldb::SBError& error, lldb::offset_t offset); |
| |
| lldb::addr_t |
| GetAddress (lldb::SBError& error, lldb::offset_t offset); |
| |
| uint8_t |
| GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset); |
| |
| uint16_t |
| GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset); |
| |
| uint32_t |
| GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset); |
| |
| uint64_t |
| GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset); |
| |
| int8_t |
| GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset); |
| |
| int16_t |
| GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset); |
| |
| int32_t |
| GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset); |
| |
| int64_t |
| GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset); |
| |
| const char* |
| GetString (lldb::SBError& error, lldb::offset_t offset); |
| |
| bool |
| GetDescription (lldb::SBStream &description, lldb::addr_t base_addr); |
| |
| size_t |
| ReadRawData (lldb::SBError& error, |
| lldb::offset_t offset, |
| void *buf, |
| size_t size); |
| |
| void |
| SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size); |
| |
| bool |
| Append (const SBData& rhs); |
| |
| static lldb::SBData |
| CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data); |
| |
| // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len |
| // should not be renamed or rearranged, because doing so will break the SWIG typemap |
| static lldb::SBData |
| CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len); |
| |
| static lldb::SBData |
| CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len); |
| |
| static lldb::SBData |
| CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len); |
| |
| static lldb::SBData |
| CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len); |
| |
| static lldb::SBData |
| CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len); |
| |
| bool |
| SetDataFromCString (const char* data); |
| |
| bool |
| SetDataFromUInt64Array (uint64_t* array, size_t array_len); |
| |
| bool |
| SetDataFromUInt32Array (uint32_t* array, size_t array_len); |
| |
| bool |
| SetDataFromSInt64Array (int64_t* array, size_t array_len); |
| |
| bool |
| SetDataFromSInt32Array (int32_t* array, size_t array_len); |
| |
| bool |
| SetDataFromDoubleArray (double* array, size_t array_len); |
| |
| STRING_EXTENSION(SBData) |
| |
| #ifdef SWIGPYTHON |
| %pythoncode %{ |
| |
| class read_data_helper: |
| def __init__(self, sbdata, readerfunc, item_size): |
| self.sbdata = sbdata |
| self.readerfunc = readerfunc |
| self.item_size = item_size |
| def __getitem__(self,key): |
| if isinstance(key,slice): |
| list = [] |
| for x in range(*key.indices(self.__len__())): |
| list.append(self.__getitem__(x)) |
| return list |
| if not (isinstance(key,six.integer_types)): |
| raise TypeError('must be int') |
| key = key * self.item_size # SBData uses byte-based indexes, but we want to use itemsize-based indexes here |
| error = SBError() |
| my_data = self.readerfunc(self.sbdata,error,key) |
| if error.Fail(): |
| raise IndexError(error.GetCString()) |
| else: |
| return my_data |
| def __len__(self): |
| return int(self.sbdata.GetByteSize()/self.item_size) |
| def all(self): |
| return self[0:len(self)] |
| |
| @classmethod |
| def CreateDataFromInt (cls, value, size = None, target = None, ptr_size = None, endian = None): |
| import sys |
| lldbmodule = sys.modules[cls.__module__] |
| lldbdict = lldbmodule.__dict__ |
| if 'target' in lldbdict: |
| lldbtarget = lldbdict['target'] |
| else: |
| lldbtarget = None |
| if target == None and lldbtarget != None and lldbtarget.IsValid(): |
| target = lldbtarget |
| if ptr_size == None: |
| if target and target.IsValid(): |
| ptr_size = target.addr_size |
| else: |
| ptr_size = 8 |
| if endian == None: |
| if target and target.IsValid(): |
| endian = target.byte_order |
| else: |
| endian = lldbdict['eByteOrderLittle'] |
| if size == None: |
| if value > 2147483647: |
| size = 8 |
| elif value < -2147483648: |
| size = 8 |
| elif value > 4294967295: |
| size = 8 |
| else: |
| size = 4 |
| if size == 4: |
| if value < 0: |
| return SBData().CreateDataFromSInt32Array(endian, ptr_size, [value]) |
| return SBData().CreateDataFromUInt32Array(endian, ptr_size, [value]) |
| if size == 8: |
| if value < 0: |
| return SBData().CreateDataFromSInt64Array(endian, ptr_size, [value]) |
| return SBData().CreateDataFromUInt64Array(endian, ptr_size, [value]) |
| return None |
| |
| def _make_helper(self, sbdata, getfunc, itemsize): |
| return self.read_data_helper(sbdata, getfunc, itemsize) |
| |
| def _make_helper_uint8(self): |
| return self._make_helper(self, SBData.GetUnsignedInt8, 1) |
| |
| def _make_helper_uint16(self): |
| return self._make_helper(self, SBData.GetUnsignedInt16, 2) |
| |
| def _make_helper_uint32(self): |
| return self._make_helper(self, SBData.GetUnsignedInt32, 4) |
| |
| def _make_helper_uint64(self): |
| return self._make_helper(self, SBData.GetUnsignedInt64, 8) |
| |
| def _make_helper_sint8(self): |
| return self._make_helper(self, SBData.GetSignedInt8, 1) |
| |
| def _make_helper_sint16(self): |
| return self._make_helper(self, SBData.GetSignedInt16, 2) |
| |
| def _make_helper_sint32(self): |
| return self._make_helper(self, SBData.GetSignedInt32, 4) |
| |
| def _make_helper_sint64(self): |
| return self._make_helper(self, SBData.GetSignedInt64, 8) |
| |
| def _make_helper_float(self): |
| return self._make_helper(self, SBData.GetFloat, 4) |
| |
| def _make_helper_double(self): |
| return self._make_helper(self, SBData.GetDouble, 8) |
| |
| def _read_all_uint8(self): |
| return self._make_helper_uint8().all() |
| |
| def _read_all_uint16(self): |
| return self._make_helper_uint16().all() |
| |
| def _read_all_uint32(self): |
| return self._make_helper_uint32().all() |
| |
| def _read_all_uint64(self): |
| return self._make_helper_uint64().all() |
| |
| def _read_all_sint8(self): |
| return self._make_helper_sint8().all() |
| |
| def _read_all_sint16(self): |
| return self._make_helper_sint16().all() |
| |
| def _read_all_sint32(self): |
| return self._make_helper_sint32().all() |
| |
| def _read_all_sint64(self): |
| return self._make_helper_sint64().all() |
| |
| def _read_all_float(self): |
| return self._make_helper_float().all() |
| |
| def _read_all_double(self): |
| return self._make_helper_double().all() |
| |
| uint8 = property(_make_helper_uint8, None, doc='''A read only property that returns an array-like object out of which you can read uint8 values.''') |
| uint16 = property(_make_helper_uint16, None, doc='''A read only property that returns an array-like object out of which you can read uint16 values.''') |
| uint32 = property(_make_helper_uint32, None, doc='''A read only property that returns an array-like object out of which you can read uint32 values.''') |
| uint64 = property(_make_helper_uint64, None, doc='''A read only property that returns an array-like object out of which you can read uint64 values.''') |
| sint8 = property(_make_helper_sint8, None, doc='''A read only property that returns an array-like object out of which you can read sint8 values.''') |
| sint16 = property(_make_helper_sint16, None, doc='''A read only property that returns an array-like object out of which you can read sint16 values.''') |
| sint32 = property(_make_helper_sint32, None, doc='''A read only property that returns an array-like object out of which you can read sint32 values.''') |
| sint64 = property(_make_helper_sint64, None, doc='''A read only property that returns an array-like object out of which you can read sint64 values.''') |
| float = property(_make_helper_float, None, doc='''A read only property that returns an array-like object out of which you can read float values.''') |
| double = property(_make_helper_double, None, doc='''A read only property that returns an array-like object out of which you can read double values.''') |
| uint8s = property(_read_all_uint8, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint8 values.''') |
| uint16s = property(_read_all_uint16, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint16 values.''') |
| uint32s = property(_read_all_uint32, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint32 values.''') |
| uint64s = property(_read_all_uint64, None, doc='''A read only property that returns an array with all the contents of this SBData represented as uint64 values.''') |
| sint8s = property(_read_all_sint8, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint8 values.''') |
| sint16s = property(_read_all_sint16, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint16 values.''') |
| sint32s = property(_read_all_sint32, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint32 values.''') |
| sint64s = property(_read_all_sint64, None, doc='''A read only property that returns an array with all the contents of this SBData represented as sint64 values.''') |
| floats = property(_read_all_float, None, doc='''A read only property that returns an array with all the contents of this SBData represented as float values.''') |
| doubles = property(_read_all_double, None, doc='''A read only property that returns an array with all the contents of this SBData represented as double values.''') |
| byte_order = property(GetByteOrder, SetByteOrder, doc='''A read/write property getting and setting the endianness of this SBData (data.byte_order = lldb.eByteOrderLittle).''') |
| size = property(GetByteSize, None, doc='''A read only property that returns the size the same result as GetByteSize().''') |
| %} |
| #endif |
| |
| }; |
| |
| } // namespace lldb |