15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MemoryRegion.cpp ---------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/MemoryRegion.h> 1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/RegionFactory.h> 1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/ManagedStatic.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaostatic llvm::ManagedStatic<RegionFactory> g_RegionFactory; 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// MemoryRegion 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoMemoryRegion::MemoryRegion() 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao : m_pParent(NULL), m_VMAStart(0), m_Length(0) { 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoMemoryRegion::MemoryRegion(MemoryRegion::Address pVMAStart, size_t pSize) 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao : m_pParent(NULL), m_VMAStart(pVMAStart), m_Length(pSize) { 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoMemoryRegion::~MemoryRegion() 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoMemoryRegion* MemoryRegion::Create(void* pStart, size_t pSize) 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return g_RegionFactory->produce(static_cast<Address>(pStart), pSize); 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoMemoryRegion* MemoryRegion::Create(void* pStart, size_t pSize, Space& pSpace) 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MemoryRegion* result = g_RegionFactory->produce(static_cast<Address>(pStart), 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pSize); 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao result->setParent(pSpace); 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pSpace.addRegion(*result); 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return result; 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid MemoryRegion::Destroy(MemoryRegion*& pRegion) 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao if (NULL == pRegion) 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return; 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao if (pRegion->hasParent()) 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pRegion->parent()->removeRegion(*pRegion); 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao g_RegionFactory->destruct(pRegion); 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pRegion = NULL; 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 58