//===- RelocData.cpp ------------------------------------------------------===// // // The MCLinker Project // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include <mcld/LD/RelocData.h> #include <mcld/Support/GCFactory.h> #include <llvm/Support/ManagedStatic.h> using namespace mcld; typedef GCFactory<RelocData, MCLD_SECTIONS_PER_INPUT> RelocDataFactory; static llvm::ManagedStatic<RelocDataFactory> g_RelocDataFactory; //===----------------------------------------------------------------------===// // RelocData //===----------------------------------------------------------------------===// RelocData::RelocData() : m_pSection(NULL) { } RelocData::RelocData(LDSection &pSection) : m_pSection(&pSection) { } RelocData* RelocData::Create(LDSection& pSection) { RelocData* result = g_RelocDataFactory->allocate(); new (result) RelocData(pSection); return result; } void RelocData::Destroy(RelocData*& pSection) { pSection->~RelocData(); g_RelocDataFactory->deallocate(pSection); pSection = NULL; } void RelocData::Clear() { g_RelocDataFactory->clear(); } RelocData& RelocData::append(Relocation& pRelocation) { m_Relocations.push_back(&pRelocation); return *this; } Relocation& RelocData::remove(Relocation& pRelocation) { iterator iter(pRelocation); Relocation* rel = m_Relocations.remove(iter); return *rel; }