diff options
author | Rui Ueyama <ruiu@google.com> | 2016-01-26 04:58:58 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2016-01-26 04:58:58 +0000 |
commit | d6cea14cbbac0133b6d61dba4cc6f139af84d005 (patch) | |
tree | 4bf746f940a32612d6341994441abcce3e1f7d95 | |
parent | dd54a3a8878a2d81ff840c6e3a1b866767c41dcc (diff) | |
download | bcm5719-llvm-d6cea14cbbac0133b6d61dba4cc6f139af84d005.tar.gz bcm5719-llvm-d6cea14cbbac0133b6d61dba4cc6f139af84d005.zip |
Simplify. NFC.
This new code should be logically equivalent to the previous code.
llvm-svn: 258792
-rw-r--r-- | lld/ELF/OutputSections.cpp | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 67e1a0d0238..c4f9311f2f6 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -325,7 +325,6 @@ template <class ELFT> void RelocationSection<ELFT>::writeTo(uint8_t *Buf) { bool LazyReloc = Body && Target->supportsLazyRelocations() && Target->relocNeedsPlt(Type, *Body); - unsigned Sym = CBP ? Body->DynamicSymbolTableIndex : 0; unsigned Reloc; if (!CBP) Reloc = Target->getRelativeReloc(); @@ -335,7 +334,8 @@ template <class ELFT> void RelocationSection<ELFT>::writeTo(uint8_t *Buf) { Reloc = Body->isTls() ? Target->getTlsGotReloc() : Target->getGotReloc(); else Reloc = Target->getDynReloc(Type); - P->setSymbolAndType(Sym, Reloc, Config->Mips64EL); + P->setSymbolAndType(CBP ? Body->DynamicSymbolTableIndex : 0, Reloc, + Config->Mips64EL); if (LazyReloc) P->r_offset = Out<ELFT>::GotPlt->getEntryAddr(*Body); @@ -344,24 +344,18 @@ template <class ELFT> void RelocationSection<ELFT>::writeTo(uint8_t *Buf) { else P->r_offset = C.getOffset(RI.r_offset) + C.OutSec->getVA(); - uintX_t OrigAddend = 0; - if (IsRela && !NeedsGot) - OrigAddend = static_cast<const Elf_Rela &>(RI).r_addend; + if (!IsRela) + continue; + auto R = static_cast<const Elf_Rela &>(RI); uintX_t Addend; if (CBP) - Addend = OrigAddend; + Addend = NeedsGot ? 0 : R.r_addend; else if (Body) - Addend = getSymVA<ELFT>(*Body) + OrigAddend; - else if (IsRela) - Addend = - getLocalRelTarget(File, static_cast<const Elf_Rela &>(RI), - getAddend<ELFT>(static_cast<const Elf_Rela &>(RI))); + Addend = getSymVA<ELFT>(*Body) + (NeedsGot ? 0 : R.r_addend); else - Addend = getLocalRelTarget(File, RI, 0); - - if (IsRela) - static_cast<Elf_Rela *>(P)->r_addend = Addend; + Addend = getLocalRelTarget(File, R, R.r_addend); + static_cast<Elf_Rela *>(P)->r_addend = Addend; } } |