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