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 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LD/ELFFileFormat.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/LinkerConfig.h" 13551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 15551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 16551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesAArch64ELFDynamic::AArch64ELFDynamic(const GNULDBackend& pParent, 17551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines const LinkerConfig& pConfig) 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hines : ELFDynamic(pParent, pConfig) { 19551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 20551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 2137b74a387bb3993387029859c2d9d051c41c724eStephen HinesAArch64ELFDynamic::~AArch64ELFDynamic() { 22551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 23551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid AArch64ELFDynamic::reserveTargetEntries(const ELFFileFormat& pFormat) { 25551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // reservePLTGOT 26551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (config().options().hasNow()) { 27551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOT()) 28551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines reserveOne(llvm::ELF::DT_PLTGOT); 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines } else { 30551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOTPLT()) 31551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines reserveOne(llvm::ELF::DT_PLTGOT); 32551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 33551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 34551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid AArch64ELFDynamic::applyTargetEntries(const ELFFileFormat& pFormat) { 36551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // applyPLTGOT 37551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (config().options().hasNow()) { 38551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOT()) 39551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOT().addr()); 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines } else { 41551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pFormat.hasGOTPLT()) 42551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOTPLT().addr()); 43551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 44551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} 45551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 47