From 2955ec4c12dbffa517fe1d821e7c5d1f7dde5f8a Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 21 Jul 2009 21:37:26 +0000 Subject: bfd/ 2009-07-21 H.J. Lu PR ld/10426 * elflink.c (elf_link_add_object_symbols): Turn an IFUNC symbol from a DSO into a normal FUNC symbol. (elf_link_output_extsym): Turn an undefined IFUNC symbol into a normal FUNC symbol. ld/testsuite/ 2009-07-21 H.J. Lu PR ld/10426 * ld-ifunc/ifunc.exp: Check test-1 and libtest-2.so. Updated. * ld-ifunc/test-1.c: New. * ld-ifunc/test-2.c: Likewise. --- ld/testsuite/ld-ifunc/ifunc.exp | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'ld/testsuite/ld-ifunc/ifunc.exp') diff --git a/ld/testsuite/ld-ifunc/ifunc.exp b/ld/testsuite/ld-ifunc/ifunc.exp index 6824d04..786b32b 100644 --- a/ld/testsuite/ld-ifunc/ifunc.exp +++ b/ld/testsuite/ld-ifunc/ifunc.exp @@ -181,6 +181,14 @@ if ![ld_assemble $as "$srcdir/ld-elf/empty.s" "tmpdir/empty.o"] { fail "Could not create an empty object file" set fails [expr $fails + 1] } +if ![ld_compile "$CC -c" "$srcdir/$subdir/test-1.c" "tmpdir/test-1.o"] { + fail "Could not create test-1.o" + set fails [expr $fails + 1] +} +if ![ld_compile "$CC -fPIC -c" "$srcdir/$subdir/test-2.c" "tmpdir/test-2.o"] { + fail "Could not create test-2.o" + set fails [expr $fails + 1] +} if { $fails != 0 } { return @@ -215,6 +223,14 @@ if ![ld_simple_link $ld "tmpdir/static_nonifunc_prog" "-static tmpdir/empty.o"] fail "Could not link a non-ifunc using static executable" set fails [expr $fails + 1] } +if ![default_ld_link $ld "tmpdir/test-1" "tmpdir/test-1.o tmpdir/libshared_ifunc.so"] { + fail "Could not link test-1" + set fails [expr $fails + 1] +} +if ![ld_simple_link $ld "tmpdir/libtest-2.so" "-shared tmpdir/test-2.o"] { + fail "Could not link libtest-2.so" + set fails [expr $fails + 1] +} if { $fails == 0 } { pass "Building ifunc binaries" @@ -266,14 +282,22 @@ if {[contains_ifunc_symbol tmpdir/static_prog] != 1} { fail "Static ifunc-using executable does not contain an IFUNC symbol" set fails [expr $fails + 1] } -if {[contains_ifunc_symbol tmpdir/dynamic_prog] != 1} { - fail "Dynamic ifunc-using executable does not contain an IFUNC symbol" +if {[contains_ifunc_symbol tmpdir/dynamic_prog] != 0} { + fail "Dynamic ifunc-using executable contains an IFUNC symbol" set fails [expr $fails + 1] } if {[contains_ifunc_symbol tmpdir/static_nonifunc_prog] != 0} { fail "Static non-ifunc-using executable contains an IFUNC symbol" set fails [expr $fails + 1] } +if {[contains_ifunc_symbol tmpdir/test-1] != 0} { + fail "test-1 contains IFUNC symbols" + set fails [expr $fails + 1] +} +if {[contains_ifunc_symbol tmpdir/libtest-2.so] != 0} { + fail "libtest-2.so contains IFUNC symbols" + set fails [expr $fails + 1] +} # The linked ifunc using executables and shared libraries should contain # a dynamic reloc referencing the IFUNC symbol. (Even the static @@ -292,8 +316,8 @@ if {[contains_irelative_reloc tmpdir/static_prog] != 1} { fail "Static ifunc-using executable does not contain R_*_IRELATIVE relocation" set fails [expr $fails + 1] } -if {[contains_ifunc_reloc tmpdir/dynamic_prog] != 1} { - fail "Dynamic ifunc-using executable does not contain a reloc against an IFUNC symbol" +if {[contains_ifunc_reloc tmpdir/dynamic_prog] != 0} { + fail "Dynamic ifunc-using executable contains a reloc against an IFUNC symbol" set fails [expr $fails + 1] } if {[contains_ifunc_reloc tmpdir/static_nonifunc_prog] == 1} { -- cgit v1.1