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