Home | History | Annotate | Download | only in Support
      1 //===- MemoryAreaFactory.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/MemoryAreaFactory.h"
     10 #include "mcld/Support/RegionFactory.h"
     11 
     12 using namespace mcld;
     13 
     14 //==========================
     15 // MemoryAreaFactory
     16 MemoryAreaFactory::MemoryAreaFactory(size_t pNum)
     17   : UniqueGCFactoryBase<sys::fs::Path, MemoryArea, 0>(pNum) {
     18   // For each loaded file, MCLinker must load ELF header, section header,
     19   // symbol table, and string table. So, we set the size of chunk quadruple
     20   // larger than the number of input files.
     21   m_pRegionFactory = new RegionFactory(pNum*4);
     22 }
     23 
     24 MemoryAreaFactory::~MemoryAreaFactory()
     25 {
     26   delete m_pRegionFactory;
     27 }
     28 
     29 MemoryArea* MemoryAreaFactory::produce(const sys::fs::Path& pPath, int pFlags)
     30 {
     31   MemoryArea* result = find(pPath);
     32   if (0 == result) {
     33     result = allocate();
     34     new (result) MemoryArea(*m_pRegionFactory);
     35     result->map(pPath, pFlags);
     36     f_KeyMap.insert(std::make_pair(pPath, result));
     37   }
     38   return result;
     39 }
     40 
     41 MemoryArea* MemoryAreaFactory::produce(const sys::fs::Path& pPath, int pFlags, mode_t pMode)
     42 {
     43   MemoryArea* result = find(pPath);
     44   if (0 == result) {
     45     result = allocate();
     46     new (result) MemoryArea(*m_pRegionFactory);
     47     result->map(pPath, pFlags, pMode);
     48     f_KeyMap.insert(std::make_pair(pPath, result));
     49   }
     50   return result;
     51 }
     52 
     53