[LLD] Emit dynamic relocations for references to script symbols in -pie links

https://reviews.llvm.org/D55423 caused LLD to stop emitting dynamic relocations for references to script symbols in -pie links.

This patch fixes that regression.

https://reviews.llvm.org/D61298

llvm-svn: 359683
This commit is contained in:
Ben Dunbobbin 2019-05-01 14:07:31 +00:00
parent 9779908494
commit 6e32dd6cfd
2 changed files with 24 additions and 5 deletions

View File

@ -421,11 +421,6 @@ static bool isStaticLinkTimeConstant(RelExpr E, RelType Type, const Symbol &Sym,
if (E == R_SIZE)
return true;
// We set the final symbols values for linker script defined symbols later.
// They always can be computed as a link time constant.
if (Sym.ScriptDefined)
return true;
// For the target and the relocation, we want to know if they are
// absolute or relative.
bool AbsVal = isAbsoluteValue(Sym);
@ -449,6 +444,11 @@ static bool isStaticLinkTimeConstant(RelExpr E, RelType Type, const Symbol &Sym,
if (Sym.isUndefWeak())
return true;
// We set the final symbols values for linker script defined symbols later.
// They always can be computed as a link time constant.
if (Sym.ScriptDefined)
return true;
error("relocation " + toString(Type) + " cannot refer to absolute symbol: " +
toString(Sym) + getLocation(S, Sym, RelOff));
return true;

View File

@ -0,0 +1,19 @@
# REQUIRES: x86
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
# RUN: echo "SECTIONS { .data 0x2000 : { foo = .; *(.data) } }" > %t.script
# RUN: ld.lld -pie -o %t --script %t.script %t.o
# RUN: llvm-readobj -r %t | FileCheck %s
## Position independent executables require dynamic
## relocations for references to non-absolute script
## symbols.
# CHECK: Relocations [
# CHECK-NEXT: Section ({{.*}}) .rela.dyn {
# CHECK-NEXT: 0x2000 R_X86_64_RELATIVE - 0x2000
# CHECK-NEXT: }
# CHECK-NEXT: ]
.data
.quad foo