uint8_t *
RecordingMemoryManager::allocateSpace(intptr_t Size, unsigned Alignment)
{
    uint8_t *return_value = m_default_mm_ap->allocateSpace(Size, Alignment);

    Allocation allocation;
    allocation.m_size = Size;
    allocation.m_alignment = Alignment;
    allocation.m_local_start = (uintptr_t)return_value;

    if (m_log)
    {
        m_log->Printf("RecordingMemoryManager::allocateSpace(Size=%" PRIu64 ", Alignment=%u) = %p",
                      (uint64_t)Size, Alignment, return_value);
        allocation.dump(m_log);
    }

    m_allocations.push_back(allocation);

    return return_value;
}
uint8_t *
RecordingMemoryManager::allocateStub(const llvm::GlobalValue* F, unsigned StubSize,
                                     unsigned Alignment)
{
    uint8_t *return_value = m_default_mm_ap->allocateStub(F, StubSize, Alignment);

    Allocation allocation;
    allocation.m_size = StubSize;
    allocation.m_alignment = Alignment;
    allocation.m_local_start = (uintptr_t)return_value;

    if (m_log)
    {
        m_log->Printf("RecordingMemoryManager::allocateStub (F=%p, StubSize=%u, Alignment=%u) = %p",
                      F, StubSize, Alignment, return_value);
        allocation.dump(m_log);
    }

    m_allocations.push_back(allocation);

    return return_value;
}
uint8_t *
RecordingMemoryManager::allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, bool IsReadOnly)
{
    uint8_t *return_value = m_default_mm_ap->allocateDataSection(Size, Alignment, SectionID, IsReadOnly);

    Allocation allocation;
    allocation.m_size = Size;
    allocation.m_alignment = Alignment;
    allocation.m_local_start = (uintptr_t)return_value;
    allocation.m_section_id = SectionID;

    if (m_log)
    {
        m_log->Printf("RecordingMemoryManager::allocateDataSection(Size=0x%" PRIx64 ", Alignment=%u, SectionID=%u) = %p",
                      (uint64_t)Size, Alignment, SectionID, return_value);
        allocation.dump(m_log);
    }

    m_allocations.push_back(allocation);

    return return_value;
}