ProcessDataAllocator.h [plain text]
#ifndef liblldb_ProcessDataAllocator_h_
#define liblldb_ProcessDataAllocator_h_
#include "lldb/lldb-forward.h"
#include "lldb/lldb-private.h"
#include "lldb/Expression/IRForTarget.h"
#include "lldb/Target/Process.h"
namespace lldb_private
{
class ProcessDataAllocator : public IRForTarget::StaticDataAllocator {
public:
ProcessDataAllocator(Process &process) :
IRForTarget::StaticDataAllocator(),
m_process(process),
m_stream_string(StreamString::eBinary, process.GetAddressByteSize(), process.GetByteOrder()),
m_allocation(0)
{
}
~ProcessDataAllocator()
{
if (m_allocation)
m_process.DeallocateMemory(m_allocation);
}
lldb_private::StreamString &GetStream()
{
return m_stream_string;
}
lldb::addr_t Allocate()
{
Error err;
if (m_allocation)
m_process.DeallocateMemory(m_allocation);
m_allocation = m_process.AllocateMemory(m_stream_string.GetSize(), lldb::ePermissionsReadable | lldb::ePermissionsWritable, err);
if (!err.Success())
return 0;
if (m_allocation)
m_process.WriteMemory(m_allocation, m_stream_string.GetData(), m_stream_string.GetSize(), err);
if (!err.Success())
return 0;
return m_allocation;
}
void Dump(lldb_private::Stream &stream);
private:
Process &m_process;
StreamString m_stream_string;
lldb::addr_t m_allocation;
};
}
#endif