1//===- SectionData.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/LD/SectionData.h>
10
11#include <mcld/LD/LDSection.h>
12#include <mcld/Support/GCFactory.h>
13
14#include <llvm/Support/ManagedStatic.h>
15
16using namespace mcld;
17
18typedef GCFactory<SectionData, MCLD_SECTIONS_PER_INPUT> SectDataFactory;
19
20static llvm::ManagedStatic<SectDataFactory> g_SectDataFactory;
21
22//===----------------------------------------------------------------------===//
23// SectionData
24//===----------------------------------------------------------------------===//
25SectionData::SectionData()
26  : m_pSection(NULL) {
27}
28
29SectionData::SectionData(LDSection &pSection)
30  : m_pSection(&pSection) {
31}
32
33SectionData* SectionData::Create(LDSection& pSection)
34{
35  SectionData* result = g_SectDataFactory->allocate();
36  new (result) SectionData(pSection);
37  return result;
38}
39
40void SectionData::Destroy(SectionData*& pSection)
41{
42  pSection->~SectionData();
43  g_SectDataFactory->deallocate(pSection);
44  pSection = NULL;
45}
46
47void SectionData::Clear()
48{
49  g_SectDataFactory->clear();
50}
51
52