In processRelocAux(), we handle errors before copy relocation/canonical PLT.
This makes error checking a bit complex because we have to check for
conditions that will be allowed by copy relocation/canonical PLT.
Instead, move copy relocation/canonical PLT before error checking. This
simplifies the previous clumsy error checking code
`config->shared || (config->pie && expr == R_ABS && type != target->symbolicRel)`
to the simple `config->isPic`. Some diagnostics can be reported in
different ways. The code motion changes diagnostics for some contrived
test cases:
* copy-rel-pie-error.s -> copy-rel-pie2.s:
It was rejected before but accepted now. ld.bfd also accepts the case.
* copy-errors.s: "cannot preempt symbol" changes to "symbol 'bar' has no type"
* got32{,x}-i386.s: the suggestion changes from "-fPIC or -Wl,-z,notext" to "-fPIE"
* x86-64-dyn-rel-error5.s: one diagnostic changes for -pie case
Reviewed By: peter.smith
Differential Revision: https://reviews.llvm.org/D66007
llvm-svn: 369262
29 lines
1008 B
ArmAsm
29 lines
1008 B
ArmAsm
// REQUIRES: x86
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
|
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/protected-shared.s -o %t2.o
|
|
// RUN: ld.lld %t2.o -o %t2.so -shared
|
|
// RUN: not ld.lld %t.o %t2.so -o %t 2>&1 | FileCheck %s
|
|
|
|
// CHECK: error: cannot preempt symbol: bar
|
|
// CHECK: >>> defined in {{.*}}.so
|
|
// CHECK: >>> referenced by {{.*}}.o:(.text+0x1)
|
|
|
|
// CHECK: error: symbol 'zed' has no type
|
|
// CHECK-NEXT: >>> defined in {{.*}}.so
|
|
// CHECK-NEXT: >>> referenced by {{.*}}.o:(.text+0x6)
|
|
|
|
// RUN: ld.lld --noinhibit-exec %t.o %t2.so -o %t 2>&1 | FileCheck %s --check-prefix=NOINHIBIT
|
|
// NOINHIBIT: warning: cannot preempt symbol: bar
|
|
// NOINHIBIT-NEXT: >>> defined in {{.*}}.so
|
|
// NOINHIBIT-NEXT: >>> referenced by {{.*}}.o:(.text+0x1)
|
|
// NOINHIBIT: warning: symbol 'zed' has no type
|
|
// NOINHIBIT-NEXT: >>> defined in {{.*}}.so
|
|
// NOINHIBIT-NEXT: >>> referenced by {{.*}}.o:(.text+0x6)
|
|
|
|
.global _start
|
|
_start:
|
|
.byte 0xe8
|
|
.long bar - .
|
|
.byte 0xe8
|
|
.long zed - .
|