void MipsELFDynamic::applyTargetEntries(const ELFFileFormat& pFormat) {
  if (pFormat.hasGOT())
    applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOT().addr());

  applyOne(llvm::ELF::DT_MIPS_RLD_VERSION, 1);
  applyOne(llvm::ELF::DT_MIPS_FLAGS, llvm::ELF::RHF_NOTPOT);
  applyOne(llvm::ELF::DT_MIPS_BASE_ADDRESS, getBaseAddress());
  applyOne(llvm::ELF::DT_MIPS_LOCAL_GOTNO, getLocalGotNum(pFormat));
  applyOne(llvm::ELF::DT_MIPS_SYMTABNO, getSymTabNum(pFormat));
  applyOne(llvm::ELF::DT_MIPS_GOTSYM, getGotSym(pFormat));

  if (pFormat.hasGOTPLT())
    applyOne(llvm::ELF::DT_MIPS_PLTGOT, pFormat.getGOTPLT().addr());
}
void MipsELFDynamic::reserveTargetEntries(const ELFFileFormat& pFormat) {
  if (pFormat.hasGOT())
    reserveOne(llvm::ELF::DT_PLTGOT);

  reserveOne(llvm::ELF::DT_MIPS_RLD_VERSION);
  reserveOne(llvm::ELF::DT_MIPS_FLAGS);
  reserveOne(llvm::ELF::DT_MIPS_BASE_ADDRESS);
  reserveOne(llvm::ELF::DT_MIPS_LOCAL_GOTNO);
  reserveOne(llvm::ELF::DT_MIPS_SYMTABNO);
  reserveOne(llvm::ELF::DT_MIPS_GOTSYM);

  if (pFormat.hasGOTPLT())
    reserveOne(llvm::ELF::DT_MIPS_PLTGOT);
}
size_t MipsELFDynamic::getLocalGotNum(const ELFFileFormat& pFormat) const {
  if (!pFormat.hasGOT())
    return 0;

  return m_pParent.getGOT().getLocalNum();
}
size_t MipsELFDynamic::getGotSym(const ELFFileFormat& pFormat) const {
  if (!pFormat.hasGOT())
    return 0;

  return getSymTabNum(pFormat) - m_pParent.getGOT().getGlobalNum();
}
void ARMELFDynamic::applyTargetEntries(const ELFFileFormat& pFormat) {
  // applyPLTGOT
  if (pFormat.hasGOT())
    applyOne(llvm::ELF::DT_PLTGOT, pFormat.getGOT().addr());
}
void ARMELFDynamic::reserveTargetEntries(const ELFFileFormat& pFormat) {
  // reservePLTGOT
  if (pFormat.hasGOT())
    reserveOne(llvm::ELF::DT_PLTGOT);
}