15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MemoryAreaFactory.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//===----------------------------------------------------------------------===// 9affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/MemoryAreaFactory.h> 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/MsgHandling.h> 11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#include <mcld/Support/SystemUtils.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 15affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// MemoryAreaFactory 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoMemoryAreaFactory::MemoryAreaFactory(size_t pNum) 19affc150dc44fab1911775a49636d0ce85333b634Zonr Chang : GCFactory<MemoryArea, 0>(pNum) { 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoMemoryAreaFactory::~MemoryAreaFactory() 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesMemoryArea* MemoryAreaFactory::produce(const sys::fs::Path& pPath, 27f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines FileHandle::OpenMode pMode) 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::StringRef name(pPath.native()); 30f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (m_AreaMap.find(name) == m_AreaMap.end()) { 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang MemoryArea* result = allocate(); 32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines new (result) MemoryArea(name); 33f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_AreaMap[name] = result; 34affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return result; 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return m_AreaMap[name]; 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesMemoryArea* MemoryAreaFactory::produce(const sys::fs::Path& pPath, 41f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines FileHandle::OpenMode pMode, 42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines FileHandle::Permission pPerm) 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 44f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::StringRef name(pPath.native()); 45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (m_AreaMap.find(name) == m_AreaMap.end()) { 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang MemoryArea* result = allocate(); 47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines new (result) MemoryArea(name); 48f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_AreaMap[name] = result; 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang return result; 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return m_AreaMap[name]; 53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoMemoryArea* MemoryAreaFactory::produce(void* pMemBuffer, size_t pSize) 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 57f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines const char* base = reinterpret_cast<const char*>(pMemBuffer); 58f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::StringRef name(base, pSize); 59f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines if (m_AreaMap.find(name) == m_AreaMap.end()) { 60f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines MemoryArea* result = allocate(); 61f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines new (result) MemoryArea(base, pSize); 62f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_AreaMap[name] = result; 63f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return result; 64f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines } 65f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 66f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return m_AreaMap[name]; 67affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 69f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesMemoryArea* MemoryAreaFactory::produce(int pFD, FileHandle::OpenMode pMode) 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang{ 71f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines // TODO 72f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return NULL; 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid MemoryAreaFactory::destruct(MemoryArea* pArea) 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao destroy(pArea); 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao deallocate(pArea); 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 80