llvm-project/lldb/source/Expression/ProcessDataAllocator.cpp
Sean Callanan 79763a42ab This commit integrates support for the LLVM MCJIT
into the mainline LLDB codebase.  MCJIT introduces
API improvements and better architectural support.

This commit adds a new subsystem, the
ProcessDataAllocator, which is responsible for
performing static data allocations on behalf of the
IR transformer.  MCJIT currently does not support
the relocations required to store the constant pool
in the same allocation as the function body, so we
allocate a heap region separately and redirect
static data references from the expression to that
heap region in a new IR modification pass.

This patch also fixes bugs in the IR
transformations that were exposed by the transition
to the MCJIT.  Finally, the patch also pulls in a
more recent revision of LLVM so that the MCJIT is
available for use.

llvm-svn: 131923
2011-05-23 21:40:23 +00:00

43 lines
1.6 KiB
C++

//===-- ProcessDataAllocator.cpp --------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "lldb/Core/DataBufferHeap.h"
#include "lldb/Core/DataExtractor.h"
#include "lldb/Expression/ProcessDataAllocator.h"
using namespace lldb_private;
void
ProcessDataAllocator::Dump(Stream &stream)
{
size_t data_size = m_stream_string.GetSize();
if (!m_allocation)
return;
lldb::DataBufferSP data(new DataBufferHeap(data_size, 0));
Error error;
if (m_process.ReadMemory (m_allocation, data->GetBytes(), data_size, error) != data_size)
return;
DataExtractor extractor(data, m_process.GetByteOrder(), m_process.GetAddressByteSize());
extractor.Dump(&stream, // stream
0, // offset
lldb::eFormatBytesWithASCII, // format
1, // byte size of individual entries
data_size, // number of entries
16, // entries per line
m_allocation, // address to print
0, // bit size (bitfields only; 0 means ignore)
0); // bit alignment (bitfields only; 0 means ignore)
stream.PutChar('\n');
}