1//===- RelocData.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/RelocData.h"
10
11#include "mcld/Support/GCFactory.h"
12
13#include <llvm/Support/ManagedStatic.h>
14
15namespace mcld {
16
17typedef GCFactory<RelocData, MCLD_SECTIONS_PER_INPUT> RelocDataFactory;
18
19static llvm::ManagedStatic<RelocDataFactory> g_RelocDataFactory;
20
21//===----------------------------------------------------------------------===//
22// RelocData
23//===----------------------------------------------------------------------===//
24RelocData::RelocData() : m_pSection(NULL) {
25}
26
27RelocData::RelocData(LDSection& pSection) : m_pSection(&pSection) {
28}
29
30RelocData* RelocData::Create(LDSection& pSection) {
31  RelocData* result = g_RelocDataFactory->allocate();
32  new (result) RelocData(pSection);
33  return result;
34}
35
36void RelocData::Destroy(RelocData*& pSection) {
37  pSection->~RelocData();
38  g_RelocDataFactory->deallocate(pSection);
39  pSection = NULL;
40}
41
42void RelocData::Clear() {
43  g_RelocDataFactory->clear();
44}
45
46RelocData& RelocData::append(Relocation& pRelocation) {
47  m_Relocations.push_back(&pRelocation);
48  return *this;
49}
50
51Relocation& RelocData::remove(Relocation& pRelocation) {
52  iterator iter(pRelocation);
53  Relocation* rel = m_Relocations.remove(iter);
54  return *rel;
55}
56
57}  // namespace mcld
58