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//===----------------------------------------------------------------------===// 922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/LD/RelocData.h> 10d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <mcld/Support/GCFactory.h> 11d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 12d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao#include <llvm/Support/ManagedStatic.h> 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaousing namespace mcld; 1522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 16d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaotypedef GCFactory<RelocData, MCLD_SECTIONS_PER_INPUT> RelocDataFactory; 17d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 18d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaostatic llvm::ManagedStatic<RelocDataFactory> g_RelocDataFactory; 19d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// RelocData 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoRelocData::RelocData() 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao : m_pSection(NULL) { 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 27d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei LiaoRelocData::RelocData(LDSection &pSection) 2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao : m_pSection(&pSection) { 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 31d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei LiaoRelocData* RelocData::Create(LDSection& pSection) 32d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao{ 33d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao RelocData* result = g_RelocDataFactory->allocate(); 34d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao new (result) RelocData(pSection); 35d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao return result; 36d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao} 37d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao 38d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaovoid RelocData::Destroy(RelocData*& pSection) 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 40d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao pSection->~RelocData(); 41d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao g_RelocDataFactory->deallocate(pSection); 42d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao pSection = NULL; 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 45d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liaovoid RelocData::Clear() 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 47d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao g_RelocDataFactory->clear(); 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 50d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei LiaoRelocData& RelocData::append(Relocation& pRelocation) 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 52d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao m_Relocations.push_back(&pRelocation); 53d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao return *this; 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 56f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesRelocation& RelocData::remove(Relocation& pRelocation) 57f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines{ 58f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines iterator iter(pRelocation); 59f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines Relocation* rel = m_Relocations.remove(iter); 60f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return *rel; 61f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 62