SBData.h revision 7dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//===-- SBData.h -----------------------------------------------*- C++ -*-===// 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// The LLVM Compiler Infrastructure 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// License. See LICENSE.TXT for details. 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//===----------------------------------------------------------------------===// 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef LLDB_SBData_h_ 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define LLDB_SBData_h_ 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "lldb/API/SBDefines.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace lldb { 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SBData 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles){ 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochpublic: 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SBData (); 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SBData (const SBData &rhs); 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const SBData & 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) operator = (const SBData &rhs); 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ~SBData (); 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) uint8_t 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetAddressByteSize (); 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetAddressByteSize (uint8_t addr_byte_size); 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Clear (); 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IsValid(); 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetByteSize (); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) lldb::ByteOrder 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetByteOrder(); 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SetByteOrder (lldb::ByteOrder endian); 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetFloat (lldb::SBError& error, uint32_t offset); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) double 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetDouble (lldb::SBError& error, uint32_t offset); 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) long double 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetLongDouble (lldb::SBError& error, uint32_t offset); 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) lldb::addr_t 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetAddress (lldb::SBError& error, uint32_t offset); 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint8_t 64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetUnsignedInt8 (lldb::SBError& error, uint32_t offset); 65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint16_t 67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetUnsignedInt16 (lldb::SBError& error, uint32_t offset); 68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint32_t 70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetUnsignedInt32 (lldb::SBError& error, uint32_t offset); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint64_t 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetUnsignedInt64 (lldb::SBError& error, uint32_t offset); 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int8_t 76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSignedInt8 (lldb::SBError& error, uint32_t offset); 77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int16_t 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSignedInt16 (lldb::SBError& error, uint32_t offset); 80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int32_t 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSignedInt32 (lldb::SBError& error, uint32_t offset); 83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int64_t 85ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetSignedInt64 (lldb::SBError& error, uint32_t offset); 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const char* 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetString (lldb::SBError& error, uint32_t offset); 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) size_t 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ReadRawData (lldb::SBError& error, 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) uint32_t offset, 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void *buf, 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t size); 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetDescription (lldb::SBStream &description, lldb::addr_t base_addr = LLDB_INVALID_ADDRESS); 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // it would be nice to have SetData(SBError, const void*, size_t) when endianness and address size can be 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // the typemap isn't applied before resolving the overload, and thus the right function never gets called 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size); 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // see SetData() for why we don't have Append(const void* buf, size_t size) 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Append (const SBData& rhs); 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static lldb::SBData 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data); 111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 112ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // should not be renamed or rearranged, because doing so will break the SWIG typemap 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static lldb::SBData 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len); 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static lldb::SBData 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len); 119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static lldb::SBData 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len); 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch static lldb::SBData 124ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len); 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static lldb::SBData 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len); 128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool 130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetDataFromCString (const char* data); 131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetDataFromUInt64Array (uint64_t* array, size_t array_len); 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetDataFromUInt32Array (uint32_t* array, size_t array_len); 137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool 139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch SetDataFromSInt64Array (int64_t* array, size_t array_len); 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SetDataFromSInt32Array (int32_t* array, size_t array_len); 143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool 145 SetDataFromDoubleArray (double* array, size_t array_len); 146 147 148protected: 149 150 // Mimic shared pointer... 151 lldb_private::DataExtractor * 152 get() const; 153 154 lldb_private::DataExtractor * 155 operator->() const; 156 157 lldb::DataExtractorSP & 158 operator*(); 159 160 const lldb::DataExtractorSP & 161 operator*() const; 162 163 SBData (const lldb::DataExtractorSP &data_sp); 164 165 void 166 SetOpaque (const lldb::DataExtractorSP &data_sp); 167 168private: 169 friend class SBInstruction; 170 friend class SBProcess; 171 friend class SBSection; 172 friend class SBValue; 173 174 lldb::DataExtractorSP m_opaque_sp; 175}; 176 177 178} // namespace lldb 179 180#endif // LLDB_SBData_h_ 181