1 //===- AArch64ELFDynamic.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 "AArch64ELFDynamic.h" 10 11 #include <mcld/LD/ELFFileFormat.h> 12 #include <mcld/LinkerConfig.h> 13 14 using namespace mcld; 15 16 AArch64ELFDynamic::AArch64ELFDynamic(const GNULDBackend& pParent, 17 const LinkerConfig& pConfig) 18 : ELFDynamic(pParent, pConfig) 19 { 20 } 21 22 AArch64ELFDynamic::~AArch64ELFDynamic() 23 { 24 } 25 26 void AArch64ELFDynamic::reserveTargetEntries(const ELFFileFormat& pFormat) 27 { 28 // reservePLTGOT 29 if (config().options().hasNow()) { 30 if (pFormat.hasGOT()) 31 reserveOne(llvm::ELF::DT_PLTGOT); 32 } 33 else { 34 if (pFormat.hasGOTPLT()) 35 reserveOne(llvm::ELF::DT_PLTGOT); 36 } 37 } 38 39 void AArch64ELFDynamic::applyTargetEntries(const ELFFileFormat& pFormat) 40 { 41 // applyPLTGOT 42 if (config().options().hasNow()) { 43 if (pFormat.hasGOT()) 44 applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOT().addr()); 45 } 46 else { 47 if (pFormat.hasGOTPLT()) 48 applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOTPLT().addr()); 49 } 50 } 51 52