summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2016-01-26 04:58:58 +0000
committerRui Ueyama <ruiu@google.com>2016-01-26 04:58:58 +0000
commitd6cea14cbbac0133b6d61dba4cc6f139af84d005 (patch)
tree4bf746f940a32612d6341994441abcce3e1f7d95
parentdd54a3a8878a2d81ff840c6e3a1b866767c41dcc (diff)
downloadbcm5719-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.cpp24
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;
}
}
OpenPOWER on IntegriCloud