1 //===-- SBData.h -----------------------------------------------*- 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 #ifndef LLDB_API_SBDATA_H 10 #define LLDB_API_SBDATA_H 11 12 #include "lldb/API/SBDefines.h" 13 14 namespace lldb { 15 16 class LLDB_API SBData { 17 public: 18 SBData(); 19 20 SBData(const SBData &rhs); 21 22 const SBData &operator=(const SBData &rhs); 23 24 ~SBData(); 25 26 uint8_t GetAddressByteSize(); 27 28 void SetAddressByteSize(uint8_t addr_byte_size); 29 30 void Clear(); 31 32 explicit operator bool() const; 33 34 bool IsValid(); 35 36 size_t GetByteSize(); 37 38 lldb::ByteOrder GetByteOrder(); 39 40 void SetByteOrder(lldb::ByteOrder endian); 41 42 float GetFloat(lldb::SBError &error, lldb::offset_t offset); 43 44 double GetDouble(lldb::SBError &error, lldb::offset_t offset); 45 46 long double GetLongDouble(lldb::SBError &error, lldb::offset_t offset); 47 48 lldb::addr_t GetAddress(lldb::SBError &error, lldb::offset_t offset); 49 50 uint8_t GetUnsignedInt8(lldb::SBError &error, lldb::offset_t offset); 51 52 uint16_t GetUnsignedInt16(lldb::SBError &error, lldb::offset_t offset); 53 54 uint32_t GetUnsignedInt32(lldb::SBError &error, lldb::offset_t offset); 55 56 uint64_t GetUnsignedInt64(lldb::SBError &error, lldb::offset_t offset); 57 58 int8_t GetSignedInt8(lldb::SBError &error, lldb::offset_t offset); 59 60 int16_t GetSignedInt16(lldb::SBError &error, lldb::offset_t offset); 61 62 int32_t GetSignedInt32(lldb::SBError &error, lldb::offset_t offset); 63 64 int64_t GetSignedInt64(lldb::SBError &error, lldb::offset_t offset); 65 66 const char *GetString(lldb::SBError &error, lldb::offset_t offset); 67 68 size_t ReadRawData(lldb::SBError &error, lldb::offset_t offset, void *buf, 69 size_t size); 70 71 bool GetDescription(lldb::SBStream &description, 72 lldb::addr_t base_addr = LLDB_INVALID_ADDRESS); 73 74 // it would be nice to have SetData(SBError, const void*, size_t) when 75 // endianness and address size can be inferred from the existing 76 // DataExtractor, but having two SetData() signatures triggers a SWIG bug 77 // where the typemap isn't applied before resolving the overload, and thus 78 // the right function never gets called 79 void SetData(lldb::SBError &error, const void *buf, size_t size, 80 lldb::ByteOrder endian, uint8_t addr_size); 81 82 // see SetData() for why we don't have Append(const void* buf, size_t size) 83 bool Append(const SBData &rhs); 84 85 static lldb::SBData CreateDataFromCString(lldb::ByteOrder endian, 86 uint32_t addr_byte_size, 87 const char *data); 88 89 // in the following CreateData*() and SetData*() prototypes, the two 90 // parameters array and array_len should not be renamed or rearranged, 91 // because doing so will break the SWIG typemap 92 static lldb::SBData CreateDataFromUInt64Array(lldb::ByteOrder endian, 93 uint32_t addr_byte_size, 94 uint64_t *array, 95 size_t array_len); 96 97 static lldb::SBData CreateDataFromUInt32Array(lldb::ByteOrder endian, 98 uint32_t addr_byte_size, 99 uint32_t *array, 100 size_t array_len); 101 102 static lldb::SBData CreateDataFromSInt64Array(lldb::ByteOrder endian, 103 uint32_t addr_byte_size, 104 int64_t *array, 105 size_t array_len); 106 107 static lldb::SBData CreateDataFromSInt32Array(lldb::ByteOrder endian, 108 uint32_t addr_byte_size, 109 int32_t *array, 110 size_t array_len); 111 112 static lldb::SBData CreateDataFromDoubleArray(lldb::ByteOrder endian, 113 uint32_t addr_byte_size, 114 double *array, 115 size_t array_len); 116 117 bool SetDataFromCString(const char *data); 118 119 bool SetDataFromUInt64Array(uint64_t *array, size_t array_len); 120 121 bool SetDataFromUInt32Array(uint32_t *array, size_t array_len); 122 123 bool SetDataFromSInt64Array(int64_t *array, size_t array_len); 124 125 bool SetDataFromSInt32Array(int32_t *array, size_t array_len); 126 127 bool SetDataFromDoubleArray(double *array, size_t array_len); 128 129 protected: 130 // Mimic shared pointer... 131 lldb_private::DataExtractor *get() const; 132 133 lldb_private::DataExtractor *operator->() const; 134 135 lldb::DataExtractorSP &operator*(); 136 137 const lldb::DataExtractorSP &operator*() const; 138 139 SBData(const lldb::DataExtractorSP &data_sp); 140 141 void SetOpaque(const lldb::DataExtractorSP &data_sp); 142 143 private: 144 friend class SBInstruction; 145 friend class SBProcess; 146 friend class SBSection; 147 friend class SBTarget; 148 friend class SBValue; 149 150 lldb::DataExtractorSP m_opaque_sp; 151 }; 152 153 } // namespace lldb 154 155 #endif // LLDB_API_SBDATA_H 156