diff options
Diffstat (limited to 'lld/ELF/InputSection.cpp')
-rw-r--r-- | lld/ELF/InputSection.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 7fcb279b8d3..88eccbe7e42 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -624,15 +624,15 @@ static uint64_t getRelocTargetVA(const InputFile *File, RelType Type, int64_t A, return Sym.getGotVA() + A; case R_GOTONLY_PC: return In.Got->getVA() + A - P; - case R_GOTONLY_PC_FROM_END: - return In.Got->getVA() + A - P + In.Got->getSize(); + case R_GOTPLTONLY_PC: + return In.GotPlt->getVA() + A - P; case R_GOTREL: return Sym.getVA(A) - In.Got->getVA(); - case R_GOTREL_FROM_END: - return Sym.getVA(A) - In.Got->getVA() - In.Got->getSize(); - case R_GOT_FROM_END: + case R_GOTPLTREL: + return Sym.getVA(A) - In.GotPlt->getVA(); + case R_GOTPLT: case R_RELAX_TLS_GD_TO_IE_END: - return Sym.getGotOffset() + A - In.Got->getSize(); + return Sym.getGotVA() + A - In.GotPlt->getVA(); case R_TLSLD_GOT_OFF: case R_GOT_OFF: case R_RELAX_TLS_GD_TO_IE_GOT_OFF: @@ -758,12 +758,12 @@ static uint64_t getRelocTargetVA(const InputFile *File, RelType Type, int64_t A, getAArch64Page(P); case R_TLSGD_GOT: return In.Got->getGlobalDynOffset(Sym) + A; - case R_TLSGD_GOT_FROM_END: - return In.Got->getGlobalDynOffset(Sym) + A - In.Got->getSize(); + case R_TLSGD_GOTPLT: + return In.Got->getVA() + In.Got->getGlobalDynOffset(Sym) + A - In.GotPlt->getVA(); case R_TLSGD_PC: return In.Got->getGlobalDynAddr(Sym) + A - P; - case R_TLSLD_GOT_FROM_END: - return In.Got->getTlsIndexOff() + A - In.Got->getSize(); + case R_TLSLD_GOTPLT: + return In.Got->getVA() + In.Got->getTlsIndexOff() + A - In.GotPlt->getVA(); case R_TLSLD_GOT: return In.Got->getTlsIndexOff() + A; case R_TLSLD_PC: |