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