summaryrefslogtreecommitdiffstats
path: root/lld/ELF/InputSection.cpp
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-05-17 14:11:03 +0000
committerFangrui Song <maskray@google.com>2019-05-17 14:11:03 +0000
commitf3a3b93f5453e4e07d449c1ed733c9ac8cfb4b58 (patch)
tree78a2ea7e00e24f8b7030dd693018325a6a620940 /lld/ELF/InputSection.cpp
parent62c7032c1832d50d474f562341a3283c5c6aa521 (diff)
downloadbcm5719-llvm-f3a3b93f5453e4e07d449c1ed733c9ac8cfb4b58.tar.gz
bcm5719-llvm-f3a3b93f5453e4e07d449c1ed733c9ac8cfb4b58.zip
[ELF] -r: fix R_*_NONE to section symbols on Elf*_Rel targets
On Elf*_Rel targets, for a relocation to a section symbol, an R_ABS is added which will be used by relocateOne() to compute the implicit addend. Addends of R_*_NONE should be ignored, so don't emit an R_ABS. This fixes crashes on X86 and ARM because their relocateOne() do not handle R_*_NONE. Reviewed By: peter.smith Differential Revision: https://reviews.llvm.org/D62052 llvm-svn: 361036
Diffstat (limited to 'lld/ELF/InputSection.cpp')
-rw-r--r--lld/ELF/InputSection.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp
index 6bb68bbf672..1bf67e2a338 100644
--- a/lld/ELF/InputSection.cpp
+++ b/lld/ELF/InputSection.cpp
@@ -470,7 +470,7 @@ void InputSection::copyRelocations(uint8_t *Buf, ArrayRef<RelTy> Rels) {
if (RelTy::IsRela)
P->r_addend = Sym.getVA(Addend) - Section->getOutputSection()->Addr;
- else if (Config->Relocatable)
+ else if (Config->Relocatable && Type != Target->NoneRel)
Sec->Relocations.push_back({R_ABS, Type, Rel.r_offset, Addend, &Sym});
}
}
OpenPOWER on IntegriCloud