1 //===- X86ELFDynamic.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 10 #include <mcld/LD/ELFFileFormat.h> 11 #include "X86ELFDynamic.h" 12 13 using namespace mcld; 14 X86ELFDynamic(const GNULDBackend & pParent)15X86ELFDynamic::X86ELFDynamic(const GNULDBackend& pParent) 16 : ELFDynamic(pParent), m_HasGOTPLT(false) { 17 } 18 ~X86ELFDynamic()19X86ELFDynamic::~X86ELFDynamic() { 20 } 21 reserveTargetEntries(const ELFFileFormat & pFormat)22void X86ELFDynamic::reserveTargetEntries(const ELFFileFormat& pFormat) { 23 // reservePLTGOT 24 if (m_HasGOTPLT ? pFormat.hasGOTPLT() : pFormat.hasGOT()) 25 reserveOne(llvm::ELF::DT_PLTGOT); 26 } 27 applyTargetEntries(const ELFFileFormat & pFormat)28void X86ELFDynamic::applyTargetEntries(const ELFFileFormat& pFormat) { 29 // applyPLTGOT 30 if (m_HasGOTPLT) { 31 if (pFormat.hasGOTPLT()) 32 applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOTPLT().addr()); 33 } 34 else if (pFormat.hasGOT()) 35 applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOT().addr()); 36 } 37