15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- LDSection.cpp ------------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSection.h> 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/GCFactory.h> 1222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <llvm/Support/ManagedStatic.h> 1422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaotypedef GCFactory<LDSection, MCLD_SECTIONS_PER_INPUT> SectionFactory; 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaostatic llvm::ManagedStatic<SectionFactory> g_SectFactory; 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao// LDSection 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao//===----------------------------------------------------------------------===// 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoLDSection::LDSection() 2522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao : m_Name(), 2622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Kind(LDFileFormat::Ignore), 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Type(0x0), 2822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Flag(0x0), 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Size(0), 3022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Offset(~uint64_t(0)), 3122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Addr(0x0), 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Align(0), 3322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Info(0), 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_pLink(NULL), 3522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Index(0) { 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Data.sect_data = NULL; 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoLDSection::LDSection(const std::string& pName, 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDFileFormat::Kind pKind, 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint32_t pType, 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint32_t pFlag, 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint64_t pSize, 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint64_t pAddr) 45cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao : m_Name(pName), 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Kind(pKind), 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Type(pType), 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Flag(pFlag), 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Size(pSize), 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Offset(~uint64_t(0)), 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Addr(pAddr), 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Align(0), 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Info(0), 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pLink(NULL), 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_Index(0) { 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao m_Data.sect_data = NULL; 5722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoLDSection::~LDSection() 6022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 6122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 6222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaobool LDSection::hasOffset() const 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return (m_Offset != ~uint64_t(0)); 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoLDSection* LDSection::Create(const std::string& pName, 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDFileFormat::Kind pKind, 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao uint32_t pType, 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao uint32_t pFlag, 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao uint64_t pSize, 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao uint64_t pAddr) 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDSection* result = g_SectFactory->allocate(); 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao new (result) LDSection(pName, pKind, pType, pFlag, pSize, pAddr); 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return result; 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid LDSection::Destroy(LDSection*& pSection) 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 8222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao g_SectFactory->destroy(pSection); 8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao g_SectFactory->deallocate(pSection); 8422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao pSection = NULL; 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaovoid LDSection::Clear() 8822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao g_SectFactory->clear(); 9022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 9122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaobool LDSection::hasSectionData() const 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 9422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao assert(LDFileFormat::Relocation != kind() && LDFileFormat::EhFrame != kind()); 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return (NULL != m_Data.sect_data); 9622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 9722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaobool LDSection::hasRelocData() const 9922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao assert(LDFileFormat::Relocation == kind()); 10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return (NULL != m_Data.reloc_data); 10222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaobool LDSection::hasEhFrame() const 10522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 10622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao assert(LDFileFormat::EhFrame == kind()); 10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return (NULL != m_Data.eh_frame); 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 110