From 4b97e3893ed2af7bdb9dcaa34fae1a207e2d7042 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 7 Oct 2017 03:07:36 -0700 Subject: [PATCH] Add 2 testcases for PR ld/22269 Since undefined weak symbols in static PIE are always resolved to 0 at run-time, linker should resolve them as 0 at link-time, regardless of whether "-z dynamic-undefined-weak" is used. "-z dynamic-undefined-weak" only makes undefined weak symbols dynamic, but doesn't change undefined weak symbol resolution in static PIE at link-time. These tests currently pass on x86, but fails on many other targets. The framework to resolve weak symbols in static PE at link-time is posted at https://sourceware.org/ml/binutils/2017-10/msg00087.html which requires users/hjl/check_relocs branch to call check_relocs after opening all inputs. I will submit backend patches for failling targets after merging users/hjl/check_relocs branch next. * PR ld/22269 * testsuite/ld-elf/pr22269.s: New file. * testsuite/ld-elf/pr22269a.d: Likewise. * testsuite/ld-elf/pr22269b.d: Likewise. --- ld/ChangeLog | 7 +++++++ ld/testsuite/ld-elf/pr22269.s | 13 +++++++++++++ ld/testsuite/ld-elf/pr22269a.d | 10 ++++++++++ ld/testsuite/ld-elf/pr22269b.d | 10 ++++++++++ 4 files changed, 40 insertions(+) create mode 100644 ld/testsuite/ld-elf/pr22269.s create mode 100644 ld/testsuite/ld-elf/pr22269a.d create mode 100644 ld/testsuite/ld-elf/pr22269b.d diff --git a/ld/ChangeLog b/ld/ChangeLog index 17192529fed..43fa479b727 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2017-10-11 H.J. Lu + + * PR ld/22269 + * testsuite/ld-elf/pr22269.s: New file. + * testsuite/ld-elf/pr22269a.d: Likewise. + * testsuite/ld-elf/pr22269b.d: Likewise. + 2017-10-11 H.J. Lu * testsuite/ld-i386/i386.exp: Run pr19636-1j, pr19636-1k, diff --git a/ld/testsuite/ld-elf/pr22269.s b/ld/testsuite/ld-elf/pr22269.s new file mode 100644 index 00000000000..71c1c06eeae --- /dev/null +++ b/ld/testsuite/ld-elf/pr22269.s @@ -0,0 +1,13 @@ + .globl main + .globl start + .globl _start + .globl __start + .text +main: +start: +_start: +__start: + .byte 0 + .section .data.rel.ro.local,"aw",%progbits + .weak func + .dc.a func diff --git a/ld/testsuite/ld-elf/pr22269a.d b/ld/testsuite/ld-elf/pr22269a.d new file mode 100644 index 00000000000..d993d19ba50 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22269a.d @@ -0,0 +1,10 @@ +#name: PR ld/22269 +#source: pr22269.s +#ld: -pie --no-dynamic-linker +#readelf: -r -x .data.rel.ro +#target: *-*-linux* *-*-gnu* *-*-nacl* + +There are no relocations in this file. + +Hex dump of section '.data.rel.ro': + 0x[a-f0-9]+ [0 ]+[ ]+.+ diff --git a/ld/testsuite/ld-elf/pr22269b.d b/ld/testsuite/ld-elf/pr22269b.d new file mode 100644 index 00000000000..8810922e7a3 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22269b.d @@ -0,0 +1,10 @@ +#name: PR ld/22269 (-z dynamic-undefined-weak) +#source: pr22269.s +#ld: -pie --no-dynamic-linker -z dynamic-undefined-weak +#readelf: -r -x .data.rel.ro +#target: *-*-linux* *-*-gnu* *-*-nacl* + +There are no relocations in this file. + +Hex dump of section '.data.rel.ro': + 0x[a-f0-9]+ [0 ]+[ ]+.+