1 //===- ELFSegment.cpp -----------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #include <mcld/LD/ELFSegment.h> 10 11 using namespace mcld; 12 13 //========================== 14 // ELFSegment 15 ELFSegment::ELFSegment(uint32_t pType, 16 uint32_t pFlag, 17 uint64_t pOffset, 18 uint64_t pVaddr, 19 uint64_t pPaddr, 20 uint64_t pFilesz, 21 uint64_t pMemsz, 22 uint64_t pAlign, 23 uint64_t pMaxSectAlign) 24 : m_Type(pType), 25 m_Flag(pFlag), 26 m_Offset(pOffset), 27 m_Vaddr(pVaddr), 28 m_Paddr(pPaddr), 29 m_Filesz(pFilesz), 30 m_Memsz(pMemsz), 31 m_Align(pAlign), 32 m_MaxSectionAlign(pMaxSectAlign) { 33 } 34 35 ELFSegment::~ELFSegment() 36 { 37 } 38 39 bool ELFSegment::isDataSegment() const 40 { 41 bool result = false; 42 if ((type() == llvm::ELF::PT_LOAD) && (flag() & llvm::ELF::PF_W) != 0x0) { 43 for (const_sect_iterator it = begin(), ie = end(); it != ie; ++it) { 44 if ((*it)->kind() != LDFileFormat::BSS) { 45 result = true; 46 break; 47 } 48 } 49 } 50 return result; 51 } 52 53 bool ELFSegment::isBssSegment() const 54 { 55 bool result = false; 56 if ((type() == llvm::ELF::PT_LOAD) && (flag() & llvm::ELF::PF_W) != 0x0) { 57 const_sect_iterator it = begin(), ie = end(); 58 for (; it != ie; ++it) { 59 if ((*it)->kind() != LDFileFormat::BSS) 60 break; 61 } 62 if (it == ie) 63 result = true; 64 } 65 return result; 66 } 67 68