//===- ELFSegment.cpp -----------------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/LD/ELFSegment.h>
using namespace mcld;
//==========================
// ELFSegment
ELFSegment::ELFSegment(uint32_t pType,
uint32_t pFlag,
uint64_t pOffset,
uint64_t pVaddr,
uint64_t pPaddr,
uint64_t pFilesz,
uint64_t pMemsz,
uint64_t pAlign,
uint64_t pMaxSectAlign)
: m_Type(pType),
m_Flag(pFlag),
m_Offset(pOffset),
m_Vaddr(pVaddr),
m_Paddr(pPaddr),
m_Filesz(pFilesz),
m_Memsz(pMemsz),
m_Align(pAlign),
m_MaxSectionAlign(pMaxSectAlign) {
}
ELFSegment::~ELFSegment()
{
}
bool ELFSegment::isDataSegment() const
{
bool result = false;
if ((type() == llvm::ELF::PT_LOAD) && (flag() & llvm::ELF::PF_W) != 0x0) {
for (const_sect_iterator it = begin(), ie = end(); it != ie; ++it) {
if ((*it)->kind() != LDFileFormat::BSS) {
result = true;
break;
}
}
}
return result;
}
bool ELFSegment::isBssSegment() const
{
bool result = false;
if ((type() == llvm::ELF::PT_LOAD) && (flag() & llvm::ELF::PF_W) != 0x0) {
const_sect_iterator it = begin(), ie = end();
for (; it != ie; ++it) {
if ((*it)->kind() != LDFileFormat::BSS)
break;
}
if (it == ie)
result = true;
}
return result;
}