1cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===- SectionData.cpp ----------------------------------------------------===//
2cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//
3cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//                     The MCLinker Project
4cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//
5cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// This file is distributed under the University of Illinois Open Source
6cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// License. See LICENSE.TXT for details.
7cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//
8cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/SectionData.h"
1022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/LDSection.h"
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h"
1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/ManagedStatic.h>
15cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
1637b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao
1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaotypedef GCFactory<SectionData, MCLD_SECTIONS_PER_INPUT> SectDataFactory;
1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaostatic llvm::ManagedStatic<SectDataFactory> g_SectDataFactory;
2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
22cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===----------------------------------------------------------------------===//
23cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao// SectionData
24cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao//===----------------------------------------------------------------------===//
2537b74a387bb3993387029859c2d9d051c41c724eStephen HinesSectionData::SectionData() : m_pSection(NULL) {
2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
2837b74a387bb3993387029859c2d9d051c41c724eStephen HinesSectionData::SectionData(LDSection& pSection) : m_pSection(&pSection) {
29cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao}
3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3137b74a387bb3993387029859c2d9d051c41c724eStephen HinesSectionData* SectionData::Create(LDSection& pSection) {
3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  SectionData* result = g_SectDataFactory->allocate();
3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  new (result) SectionData(pSection);
3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  return result;
3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
3737b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid SectionData::Destroy(SectionData*& pSection) {
3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  pSection->~SectionData();
3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  g_SectDataFactory->deallocate(pSection);
4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao  pSection = NULL;
4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao}
4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid SectionData::Clear() {
44d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao  g_SectDataFactory->clear();
45d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao}
46d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao
4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
48