]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/lldb/bindings/interface/SBData.i
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / lldb / bindings / interface / SBData.i
1 //===-- SWIG Interface for SBData -------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9
10 namespace lldb {
11
12 class SBData
13 {
14 public:
15
16     SBData ();
17
18     SBData (const SBData &rhs);
19
20     ~SBData ();
21
22     uint8_t
23     GetAddressByteSize ();
24
25     void
26     SetAddressByteSize (uint8_t addr_byte_size);
27
28     void
29     Clear ();
30
31     bool
32     IsValid();
33
34     explicit operator bool() const;
35
36     size_t
37     GetByteSize ();
38
39     lldb::ByteOrder
40     GetByteOrder();
41
42     void
43     SetByteOrder (lldb::ByteOrder endian);
44
45     float
46     GetFloat (lldb::SBError& error, lldb::offset_t offset);
47
48     double
49     GetDouble (lldb::SBError& error, lldb::offset_t offset);
50
51     long double
52     GetLongDouble (lldb::SBError& error, lldb::offset_t offset);
53
54     lldb::addr_t
55     GetAddress (lldb::SBError& error, lldb::offset_t offset);
56
57     uint8_t
58     GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset);
59
60     uint16_t
61     GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset);
62
63     uint32_t
64     GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset);
65
66     uint64_t
67     GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset);
68
69     int8_t
70     GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset);
71
72     int16_t
73     GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset);
74
75     int32_t
76     GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset);
77
78     int64_t
79     GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset);
80
81     const char*
82     GetString (lldb::SBError& error, lldb::offset_t offset);
83
84     bool
85     GetDescription (lldb::SBStream &description, lldb::addr_t base_addr);
86
87     size_t
88     ReadRawData (lldb::SBError& error,
89                  lldb::offset_t offset,
90                  void *buf,
91                  size_t size);
92
93     void
94     SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
95
96     bool
97     Append (const SBData& rhs);
98
99     static lldb::SBData
100     CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data);
101
102     // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len
103     // should not be renamed or rearranged, because doing so will break the SWIG typemap
104     static lldb::SBData
105     CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len);
106
107     static lldb::SBData
108     CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len);
109
110     static lldb::SBData
111     CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len);
112
113     static lldb::SBData
114     CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len);
115
116     static lldb::SBData
117     CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len);
118
119     bool
120     SetDataFromCString (const char* data);
121
122     bool
123     SetDataFromUInt64Array (uint64_t* array, size_t array_len);
124
125     bool
126     SetDataFromUInt32Array (uint32_t* array, size_t array_len);
127
128     bool
129     SetDataFromSInt64Array (int64_t* array, size_t array_len);
130
131     bool
132     SetDataFromSInt32Array (int32_t* array, size_t array_len);
133
134     bool
135     SetDataFromDoubleArray (double* array, size_t array_len);
136
137     STRING_EXTENSION(SBData)
138
139 #ifdef SWIGPYTHON
140     %pythoncode %{
141
142         class read_data_helper:
143             def __init__(self, sbdata, readerfunc, item_size):
144                 self.sbdata = sbdata
145                 self.readerfunc = readerfunc
146                 self.item_size = item_size
147             def __getitem__(self,key):
148                 if isinstance(key,slice):
149                     list = []
150                     for x in range(*key.indices(self.__len__())):
151                         list.append(self.__getitem__(x))
152                     return list
153                 if not (isinstance(key,six.integer_types)):
154                     raise TypeError('must be int')
155                 key = key * self.item_size # SBData uses byte-based indexes, but we want to use itemsize-based indexes here
156                 error = SBError()
157                 my_data = self.readerfunc(self.sbdata,error,key)
158                 if error.Fail():
159                     raise IndexError(error.GetCString())
160                 else:
161                     return my_data
162             def __len__(self):
163                 return int(self.sbdata.GetByteSize()/self.item_size)
164             def all(self):
165                 return self[0:len(self)]
166
167         @classmethod
168         def CreateDataFromInt (cls, value, size = None, target = None, ptr_size = None, endian = None):
169             import sys
170             lldbmodule = sys.modules[cls.__module__]
171             lldbdict = lldbmodule.__dict__
172             if 'target' in lldbdict:
173                 lldbtarget = lldbdict['target']
174             else:
175                 lldbtarget = None
176             if target == None and lldbtarget != None and lldbtarget.IsValid():
177                 target = lldbtarget
178             if ptr_size == None:
179                 if target and target.IsValid():
180                     ptr_size = target.addr_size
181                 else:
182                     ptr_size = 8
183             if endian == None:
184                 if target and target.IsValid():
185                     endian = target.byte_order
186                 else:
187                     endian = lldbdict['eByteOrderLittle']
188             if size == None:
189                 if value > 2147483647:
190                     size = 8
191                 elif value < -2147483648:
192                     size = 8
193                 elif value > 4294967295:
194                     size = 8
195                 else:
196                     size = 4
197             if size == 4:
198                 if value < 0:
199                     return SBData().CreateDataFromSInt32Array(endian, ptr_size, [value])
200                 return SBData().CreateDataFromUInt32Array(endian, ptr_size, [value])
201             if size == 8:
202                 if value < 0:
203                     return SBData().CreateDataFromSInt64Array(endian, ptr_size, [value])
204                 return SBData().CreateDataFromUInt64Array(endian, ptr_size, [value])
205             return None
206
207         def _make_helper(self, sbdata, getfunc, itemsize):
208             return self.read_data_helper(sbdata, getfunc, itemsize)
209
210         def _make_helper_uint8(self):
211             return self._make_helper(self, SBData.GetUnsignedInt8, 1)
212
213         def _make_helper_uint16(self):
214             return self._make_helper(self, SBData.GetUnsignedInt16, 2)
215
216         def _make_helper_uint32(self):
217             return self._make_helper(self, SBData.GetUnsignedInt32, 4)
218
219         def _make_helper_uint64(self):
220             return self._make_helper(self, SBData.GetUnsignedInt64, 8)
221
222         def _make_helper_sint8(self):
223             return self._make_helper(self, SBData.GetSignedInt8, 1)
224
225         def _make_helper_sint16(self):
226             return self._make_helper(self, SBData.GetSignedInt16, 2)
227
228         def _make_helper_sint32(self):
229             return self._make_helper(self, SBData.GetSignedInt32, 4)
230
231         def _make_helper_sint64(self):
232             return self._make_helper(self, SBData.GetSignedInt64, 8)
233
234         def _make_helper_float(self):
235             return self._make_helper(self, SBData.GetFloat, 4)
236
237         def _make_helper_double(self):
238             return self._make_helper(self, SBData.GetDouble, 8)
239
240         def _read_all_uint8(self):
241             return self._make_helper_uint8().all()
242
243         def _read_all_uint16(self):
244             return self._make_helper_uint16().all()
245
246         def _read_all_uint32(self):
247             return self._make_helper_uint32().all()
248
249         def _read_all_uint64(self):
250             return self._make_helper_uint64().all()
251
252         def _read_all_sint8(self):
253             return self._make_helper_sint8().all()
254
255         def _read_all_sint16(self):
256             return self._make_helper_sint16().all()
257
258         def _read_all_sint32(self):
259             return self._make_helper_sint32().all()
260
261         def _read_all_sint64(self):
262             return self._make_helper_sint64().all()
263
264         def _read_all_float(self):
265             return self._make_helper_float().all()
266
267         def _read_all_double(self):
268             return self._make_helper_double().all()
269
270         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.''')
271         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.''')
272         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.''')
273         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.''')
274         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.''')
275         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.''')
276         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.''')
277         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.''')
278         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.''')
279         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.''')
280         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.''')
281         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.''')
282         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.''')
283         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.''')
284         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.''')
285         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.''')
286         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.''')
287         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.''')
288         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.''')
289         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.''')
290         byte_order = property(GetByteOrder, SetByteOrder, doc='''A read/write property getting and setting the endianness of this SBData (data.byte_order = lldb.eByteOrderLittle).''')
291         size = property(GetByteSize, None, doc='''A read only property that returns the size the same result as GetByteSize().''')
292     %}
293 #endif
294
295 };
296
297 } // namespace lldb