122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===- RelocData.cpp ------------------------------------------------------===// 222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// The MCLinker Project 422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// This file is distributed under the University of Illinois Open Source 622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// License. See LICENSE.TXT for details. 722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// 822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/RelocData.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h" 12d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 13d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <llvm/Support/ManagedStatic.h> 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 17d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaotypedef GCFactory<RelocData, MCLD_SECTIONS_PER_INPUT> RelocDataFactory; 18d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 19d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaostatic llvm::ManagedStatic<RelocDataFactory> g_RelocDataFactory; 20d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// RelocData 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2437b74a387bb3993387029859c2d9d051c41c724eStephen HinesRelocData::RelocData() : m_pSection(NULL) { 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2737b74a387bb3993387029859c2d9d051c41c724eStephen HinesRelocData::RelocData(LDSection& pSection) : m_pSection(&pSection) { 2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3037b74a387bb3993387029859c2d9d051c41c724eStephen HinesRelocData* RelocData::Create(LDSection& pSection) { 31d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao RelocData* result = g_RelocDataFactory->allocate(); 32d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao new (result) RelocData(pSection); 33d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao return result; 34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao} 35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid RelocData::Destroy(RelocData*& pSection) { 37d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao pSection->~RelocData(); 38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao g_RelocDataFactory->deallocate(pSection); 39d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao pSection = NULL; 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid RelocData::Clear() { 43d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao g_RelocDataFactory->clear(); 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4637b74a387bb3993387029859c2d9d051c41c724eStephen HinesRelocData& RelocData::append(Relocation& pRelocation) { 47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_Relocations.push_back(&pRelocation); 48d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao return *this; 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5137b74a387bb3993387029859c2d9d051c41c724eStephen HinesRelocation& RelocData::remove(Relocation& pRelocation) { 52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines iterator iter(pRelocation); 53f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines Relocation* rel = m_Relocations.remove(iter); 54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return *rel; 55f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 58