[lld] r284750 - [ELF][MIPS] Separate calculation of MIPS GOT index and offset of the corresponding part of the GOT. NFC
Simon Atanasyan via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 20 10:53:56 PDT 2016
Author: atanasyan
Date: Thu Oct 20 12:53:55 2016
New Revision: 284750
URL: http://llvm.org/viewvc/llvm-project?rev=284750&view=rev
Log:
[ELF][MIPS] Separate calculation of MIPS GOT index and offset of the corresponding part of the GOT. NFC
MIPS GOT consists of some parts: local, global, TLS entries. This change
separates calculation of MIPS GOT index and offset of the corresponding
part of the GOT. That makes code a bit clear and allow to extend number
of parts in the future.
Modified:
lld/trunk/ELF/OutputSections.cpp
Modified: lld/trunk/ELF/OutputSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=284750&r1=284749&r2=284750&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.cpp (original)
+++ lld/trunk/ELF/OutputSections.cpp Thu Oct 20 12:53:55 2016
@@ -244,19 +244,24 @@ GotSection<ELFT>::getMipsLocalPageOffset
template <class ELFT>
typename GotSection<ELFT>::uintX_t
GotSection<ELFT>::getMipsGotOffset(const SymbolBody &B, uintX_t Addend) const {
- uintX_t Off = MipsPageEntries;
+ // Calculate offset of the GOT entries block: TLS, global, local.
+ uintX_t GotBlockOff;
if (B.isTls())
- Off += MipsLocal.size() + MipsGlobal.size() + B.GotIndex;
+ GotBlockOff = getMipsTlsOffset();
else if (B.IsInGlobalMipsGot)
- Off += MipsLocal.size() + B.GotIndex;
- else if (B.isInGot())
- Off += B.GotIndex;
+ GotBlockOff = getMipsLocalEntriesNum() * sizeof(uintX_t);
+ else
+ GotBlockOff = MipsPageEntries * sizeof(uintX_t);
+ // Calculate index of the GOT entry in the block.
+ uintX_t GotIndex;
+ if (B.isInGot())
+ GotIndex = B.GotIndex;
else {
auto It = MipsGotMap.find({&B, Addend});
assert(It != MipsGotMap.end());
- Off += It->second;
+ GotIndex = It->second;
}
- return Off * sizeof(uintX_t) - MipsGPOffset;
+ return GotBlockOff + GotIndex * sizeof(uintX_t) - MipsGPOffset;
}
template <class ELFT>
More information about the llvm-commits
mailing list