x86-64: Handle undefined IFUNC symbol with -z now
Since undefined IFUNC symbol is treated as normal FUNC symbol, don't abort on undefined IFUNC symbol in the second PLT. bfd/ PR ld/21401 * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't abort on on undefined IFUNC symbol in the second PLT. ld/ PR ld/21401 * testsuite/ld-ifunc/ifunc.exp: Add a libtest-2-now.so test with -z now.
This commit is contained in:
parent
a6c21d4a55
commit
e492d2f8ac
|
@ -1,3 +1,9 @@
|
||||||
|
2017-04-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/21401
|
||||||
|
* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't abort
|
||||||
|
on on undefined IFUNC symbol in the second PLT.
|
||||||
|
|
||||||
2017-04-19 Wedson Almeida Filho <wedsonaf@gmail.com>
|
2017-04-19 Wedson Almeida Filho <wedsonaf@gmail.com>
|
||||||
|
|
||||||
* peXXigen.c (pe_print_reloc): Correct chunk_end.
|
* peXXigen.c (pe_print_reloc): Correct chunk_end.
|
||||||
|
|
|
@ -6013,7 +6013,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
|
||||||
got_offset = h->got.offset;
|
got_offset = h->got.offset;
|
||||||
|
|
||||||
if (got_offset == (bfd_vma) -1
|
if (got_offset == (bfd_vma) -1
|
||||||
|| h->type == STT_GNU_IFUNC
|
|| (h->type == STT_GNU_IFUNC && h->def_regular)
|
||||||
|| plt == NULL
|
|| plt == NULL
|
||||||
|| got == NULL)
|
|| got == NULL)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2017-04-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/21401
|
||||||
|
* testsuite/ld-ifunc/ifunc.exp: Add a libtest-2-now.so test with
|
||||||
|
-z now.
|
||||||
|
|
||||||
2017-04-19 Alan Modra <amodra@gmail.com>
|
2017-04-19 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* ld.texinfo (dynamic-undefined-weak): Document.
|
* ld.texinfo (dynamic-undefined-weak): Document.
|
||||||
|
|
|
@ -234,6 +234,10 @@ if ![ld_link $ld "tmpdir/libtest-2.so" "-shared tmpdir/test-2.o"] {
|
||||||
fail "Could not link libtest-2.so"
|
fail "Could not link libtest-2.so"
|
||||||
set fails [expr $fails + 1]
|
set fails [expr $fails + 1]
|
||||||
}
|
}
|
||||||
|
if ![ld_link $ld "tmpdir/libtest-2-now.so" "-shared -z now tmpdir/test-2.o"] {
|
||||||
|
fail "Could not link libtest-2-now.so"
|
||||||
|
set fails [expr $fails + 1]
|
||||||
|
}
|
||||||
|
|
||||||
if { $fails == 0 } {
|
if { $fails == 0 } {
|
||||||
pass "Building ifunc binaries"
|
pass "Building ifunc binaries"
|
||||||
|
@ -306,6 +310,10 @@ if {[contains_ifunc_symbol tmpdir/libtest-2.so] != 0} {
|
||||||
fail "libtest-2.so contains IFUNC symbols"
|
fail "libtest-2.so contains IFUNC symbols"
|
||||||
set fails [expr $fails + 1]
|
set fails [expr $fails + 1]
|
||||||
}
|
}
|
||||||
|
if {[contains_ifunc_symbol tmpdir/libtest-2-now.so] != 0} {
|
||||||
|
fail "libtest-2-now.so contains IFUNC symbols"
|
||||||
|
set fails [expr $fails + 1]
|
||||||
|
}
|
||||||
|
|
||||||
# The linked ifunc using executables and shared libraries should contain
|
# The linked ifunc using executables and shared libraries should contain
|
||||||
# a dynamic reloc referencing the IFUNC symbol. (Even the static
|
# a dynamic reloc referencing the IFUNC symbol. (Even the static
|
||||||
|
|
Loading…
Reference in New Issue