1//===- MemoryRegion.cpp ---------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include <mcld/Support/MemoryRegion.h> 10#include <mcld/Support/RegionFactory.h> 11 12#include <llvm/Support/ManagedStatic.h> 13 14using namespace mcld; 15 16static llvm::ManagedStatic<RegionFactory> g_RegionFactory; 17 18//===----------------------------------------------------------------------===// 19// MemoryRegion 20//===----------------------------------------------------------------------===// 21MemoryRegion::MemoryRegion() 22 : m_pParent(NULL), m_VMAStart(0), m_Length(0) { 23} 24 25MemoryRegion::MemoryRegion(MemoryRegion::Address pVMAStart, size_t pSize) 26 : m_pParent(NULL), m_VMAStart(pVMAStart), m_Length(pSize) { 27} 28 29MemoryRegion::~MemoryRegion() 30{ 31} 32 33MemoryRegion* MemoryRegion::Create(void* pStart, size_t pSize) 34{ 35 return g_RegionFactory->produce(static_cast<Address>(pStart), pSize); 36} 37 38MemoryRegion* MemoryRegion::Create(void* pStart, size_t pSize, Space& pSpace) 39{ 40 MemoryRegion* result = g_RegionFactory->produce(static_cast<Address>(pStart), 41 pSize); 42 result->setParent(pSpace); 43 pSpace.addRegion(*result); 44 return result; 45} 46 47void MemoryRegion::Destroy(MemoryRegion*& pRegion) 48{ 49 if (NULL == pRegion) 50 return; 51 52 if (pRegion->hasParent()) 53 pRegion->parent()->removeRegion(*pRegion); 54 g_RegionFactory->destruct(pRegion); 55 pRegion = NULL; 56} 57 58