diff options
| author | Fangrui Song <maskray@google.com> | 2019-05-17 14:11:03 +0000 |
|---|---|---|
| committer | Fangrui Song <maskray@google.com> | 2019-05-17 14:11:03 +0000 |
| commit | f3a3b93f5453e4e07d449c1ed733c9ac8cfb4b58 (patch) | |
| tree | 78a2ea7e00e24f8b7030dd693018325a6a620940 /lld/ELF/InputSection.cpp | |
| parent | 62c7032c1832d50d474f562341a3283c5c6aa521 (diff) | |
| download | bcm5719-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.cpp | 2 |
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}); } } |

