AArch64ELFDynamic.cpp revision 551ae4ebd3e9d137ea668fb83ae4a55b8cfba451
1551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===- AArch64ELFDynamic.cpp ----------------------------------------------===// 2551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// 3551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// The MCLinker Project 4551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// 5551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// This file is distributed under the University of Illinois Open Source 6551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// License. See LICENSE.TXT for details. 7551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// 8551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===// 9551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include "AArch64ELFDynamic.h" 10551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 11551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include <mcld/LD/ELFFileFormat.h> 12551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include <mcld/LinkerConfig.h> 13551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 14551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesusing namespace mcld; 15551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 16551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesAArch64ELFDynamic::AArch64ELFDynamic(const GNULDBackend& pParent, 17551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines const LinkerConfig& pConfig) 18551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines : ELFDynamic(pParent, pConfig) 19551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines{ 20551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 21551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 22551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesAArch64ELFDynamic::~AArch64ELFDynamic() 23551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines{ 24551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 25551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 26551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesvoid AArch64ELFDynamic::reserveTargetEntries(const ELFFileFormat& pFormat) 27551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines{ 28551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // reservePLTGOT 29551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (config().options().hasNow()) { 30551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOT()) 31551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines reserveOne(llvm::ELF::DT_PLTGOT); 32551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 33551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines else { 34551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOTPLT()) 35551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines reserveOne(llvm::ELF::DT_PLTGOT); 36551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 37551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 38551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 39551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesvoid AArch64ELFDynamic::applyTargetEntries(const ELFFileFormat& pFormat) 40551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines{ 41551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // applyPLTGOT 42551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (config().options().hasNow()) { 43551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOT()) 44551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOT().addr()); 45551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 46551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines else { 47551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOTPLT()) 48551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOTPLT().addr()); 49551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 50551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 51551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 52