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