[ELF] Do not produce DT_JMPREL and DT_PLTGOT if .rela.plt is empty.
authorIgor Kudrin <ikudrin@accesssoftek.com>
Fri, 28 Jun 2019 10:14:14 +0000 (10:14 +0000)
committerIgor Kudrin <ikudrin@accesssoftek.com>
Fri, 28 Jun 2019 10:14:14 +0000 (10:14 +0000)
commitfd0ad4b24d6519b6ff3b9ff881abe01adcf59dba
tree7fe5733115cf62a2eb31b23162e4fead77b800bd
parent02e743586e9bc04c793c8942d2ab8a0378623559
[ELF] Do not produce DT_JMPREL and DT_PLTGOT if .rela.plt is empty.

If .rela.plt is mentioned in a linker script, it might be preserved
even if it is empty. In that case, LLD created DT_JMPREL and DT_PLTGOT
dynamic tags. When the tags exist, a dynamic loader writes values into
reserved slots in .got.plt to support lazy symbol resolution.
The problem is that, in fact, the linker has not reserved that space,
and the writing may occur into the memory allocated for something else.

Differential Revision: https://reviews.llvm.org/D63869

llvm-svn: 364639
lld/ELF/SyntheticSections.cpp
lld/test/ELF/linkerscript/empty-relaplt-dyntags.test [new file with mode: 0644]