1915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===-- SBData.h -----------------------------------------------*- C++ -*-===// 2915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// 3915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// The LLVM Compiler Infrastructure 4915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// 5915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// This file is distributed under the University of Illinois Open Source 6915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// License. See LICENSE.TXT for details. 7915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// 8915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===----------------------------------------------------------------------===// 9915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 10915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#ifndef LLDB_SBData_h_ 11915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#define LLDB_SBData_h_ 12915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 13915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/API/SBDefines.h" 14915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 15915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatanamespace lldb { 16915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 17915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataclass SBData 18915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{ 19915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatapublic: 20915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 21915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata SBData (); 22915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 23915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata SBData (const SBData &rhs); 24915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 25915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata const SBData & 26915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata operator = (const SBData &rhs); 27915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 28915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata ~SBData (); 29915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 30915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint8_t 31915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetAddressByteSize (); 32915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 33915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata void 34a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetAddressByteSize (uint8_t addr_byte_size); 35a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 36a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton void 37915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata Clear (); 38915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 39915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata bool 40915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata IsValid(); 41915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 42915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata size_t 43915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetByteSize (); 44915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 45915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::ByteOrder 46915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetByteOrder(); 47915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 48a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton void 49a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetByteOrder (lldb::ByteOrder endian); 50a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 51915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata float 5236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetFloat (lldb::SBError& error, lldb::offset_t offset); 53915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 54915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata double 5536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetDouble (lldb::SBError& error, lldb::offset_t offset); 56915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 57915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata long double 5836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetLongDouble (lldb::SBError& error, lldb::offset_t offset); 59915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 60915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::addr_t 6136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetAddress (lldb::SBError& error, lldb::offset_t offset); 62915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 63915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint8_t 6436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset); 65915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 66915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint16_t 6736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset); 68915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 69915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint32_t 7036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset); 71915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 72915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata uint64_t 7336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset); 74915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 75915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata int8_t 7636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset); 77915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 78915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata int16_t 7936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset); 80915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 81915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata int32_t 8236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset); 83915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 84915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata int64_t 8536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset); 86915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 87915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata const char* 8836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetString (lldb::SBError& error, lldb::offset_t offset); 89915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 90915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata size_t 91915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata ReadRawData (lldb::SBError& error, 9236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton lldb::offset_t offset, 93915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata void *buf, 94915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata size_t size); 95915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 96915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata bool 9715ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton GetDescription (lldb::SBStream &description, lldb::addr_t base_addr = LLDB_INVALID_ADDRESS); 98915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 99915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata // it would be nice to have SetData(SBError, const void*, size_t) when endianness and address size can be 100915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata // inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where 101915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata // the typemap isn't applied before resolving the overload, and thus the right function never gets called 102915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata void 103a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size); 104915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 105915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata // see SetData() for why we don't have Append(const void* buf, size_t size) 106915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata bool 107a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton Append (const SBData& rhs); 108a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 109a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton static lldb::SBData 110a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data); 111a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 112a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len 113a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton // should not be renamed or rearranged, because doing so will break the SWIG typemap 114a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton static lldb::SBData 115a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len); 116a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 117a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton static lldb::SBData 118a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len); 119a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 120a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton static lldb::SBData 121a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len); 122a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 123a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton static lldb::SBData 124a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len); 125a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 126a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton static lldb::SBData 127a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len); 128a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 129a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton bool 130a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetDataFromCString (const char* data); 131a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 132a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton bool 133a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetDataFromUInt64Array (uint64_t* array, size_t array_len); 134a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 135a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton bool 136a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetDataFromUInt32Array (uint32_t* array, size_t array_len); 137a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 138a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton bool 139a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetDataFromSInt64Array (int64_t* array, size_t array_len); 140a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 141a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton bool 142a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetDataFromSInt32Array (int32_t* array, size_t array_len); 143a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 144a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton bool 145a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton SetDataFromDoubleArray (double* array, size_t array_len); 146a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton 147915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 148915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprotected: 149915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 150915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata // Mimic shared pointer... 151915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb_private::DataExtractor * 152915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata get() const; 153915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 154915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb_private::DataExtractor * 155915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata operator->() const; 156915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 157915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::DataExtractorSP & 158915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata operator*(); 159915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 160915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata const lldb::DataExtractorSP & 161915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata operator*() const; 162915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 163915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata SBData (const lldb::DataExtractorSP &data_sp); 164915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 165915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata void 166915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata SetOpaque (const lldb::DataExtractorSP &data_sp); 167915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 168915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprivate: 16923b8abbe214c252028f6e09f79169529c846409dGreg Clayton friend class SBInstruction; 1709f074f0e030a74a3efd716a476b436f2d32bdf74Johnny Chen friend class SBProcess; 1713e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton friend class SBSection; 17223b8abbe214c252028f6e09f79169529c846409dGreg Clayton friend class SBValue; 1733e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton 174915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::DataExtractorSP m_opaque_sp; 175915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}; 176915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 177915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 178915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata} // namespace lldb 179915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 180915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#endif // LLDB_SBData_h_ 181