From fc258af28da04fdb65439ccaadbb6dabc729a2ab Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 9 Feb 2010 10:46:26 +0000 Subject: [PATCH] * ld-elfvsb/elfvsb.exp: Fix tests for arm*-*-linux*. * ld-shared/shared.exp: Likewise. --- ld/testsuite/ChangeLog | 5 +++++ ld/testsuite/ld-elfvsb/elfvsb.exp | 32 ++++++++++++++++++++++++++++++++ ld/testsuite/ld-shared/shared.exp | 31 +++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c3ab37554..faec3f4aa 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-02-09 Matthew Gretton-Dann + + * ld-elfvsb/elfvsb.exp: Fix tests for arm*-*-linux*. + * ld-shared/shared.exp: Likewise. + 2010-02-08 David S. Miller * ld-ifunc/ifunc.exp: Run for sparc. diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-elfvsb/elfvsb.exp index fe146bf42..1a1882231 100644 --- a/ld/testsuite/ld-elfvsb/elfvsb.exp +++ b/ld/testsuite/ld-elfvsb/elfvsb.exp @@ -60,6 +60,7 @@ if ![isnative] then {return} set tmpdir tmpdir set SHCFLAG "" +set shared_needs_pic "no" if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } { @@ -91,6 +92,27 @@ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } { close $file } +if [istarget arm*-*-linux*] { + # On ARM section anchors can change the symbol pre-emptability for + # non-PIC shared libraries, causing these tests to fail. Turn section + # anchors off. + set SHCFLAG "-fno-section-anchors" + + # On targets that have MOVW the compiler will emit relocations which + # the linker doesn't support when compiling -shared without -fpic. The + # test to find out whether we want to XFAIL the non-PIC tests requires + # a compile - so we pre-calculate it here. We also note that this can + # only affect arm*-*-*eabi targets as the old ABI doesn't support v7. + if [istarget arm*-*-*eabi] { + set file [open $tmpdir/movw-detect.c w] + puts $file "void foo(void) { __asm (\"movw r0, #0\"); }" + close $file + if [run_host_cmd_yesno "$CC" "$CFLAGS -c $tmpdir/movw-detect.c -o $tmpdir/movw-detect.o"] { + set shared_needs_pic "yes" + } + } +} + set support_protected "no" if [istarget *-*-linux*] { @@ -201,6 +223,7 @@ proc visibility_run {visibility} { global picflag global target_triplet global support_protected + global shared_needs_pic if [ string match $visibility "hidden" ] { set VSBCFLAG "-DHIDDEN_TEST" @@ -273,6 +296,9 @@ proc visibility_run {visibility} { if { ![istarget hppa*64*-*-linux*] } { setup_xfail "hppa*-*-linux*" } + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o elfvsb @@ -311,6 +337,9 @@ proc visibility_run {visibility} { if { ![istarget hppa*64*-*-linux*] } { setup_xfail "hppa*-*-linux*" } + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } visibility_test $visibility vnp "visibility ($visibility) (non PIC, load offset)" \ mainnp.o sh1np.o sh2np.o elfvsb \ @@ -377,6 +406,9 @@ proc visibility_run {visibility} { if { ![istarget hppa*64*-*-linux*] } { setup_xfail "hppa*-*-linux*" } + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o elfvsb } diff --git a/ld/testsuite/ld-shared/shared.exp b/ld/testsuite/ld-shared/shared.exp index 479bf7625..7987b02bb 100644 --- a/ld/testsuite/ld-shared/shared.exp +++ b/ld/testsuite/ld-shared/shared.exp @@ -66,6 +66,7 @@ if { [istarget *-*-linux*aout*] \ set tmpdir tmpdir set SHCFLAG "" +set shared_needs_pic "no" if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } { @@ -97,6 +98,27 @@ if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } { close $file } +if [istarget arm*-*-linux*] { + # On ARM section anchors can change the symbol pre-emptability for + # non-PIC shared libraries, causing these tests to fail. Turn section + # anchors off. + set SHCFLAG "-fno-section-anchors" + + # On targets that have MOVW the compiler will emit relocations which + # the linker doesn't support when compiling -shared without -fpic. The + # test to find out whether we want to XFAIL the non-PIC tests requires + # a compile - so we pre-calculate it here. We also note that this can + # only affect arm*-*-*eabi targets as the old ABI doesn't support v7. + if [istarget arm*-*-*eabi] { + set file [open $tmpdir/movw-detect.c w] + puts $file "void foo(void) { __asm (\"movw r0, #0\"); }" + close $file + if [run_host_cmd_yesno "$CC" "$CFLAGS -c $tmpdir/movw-detect.c -o $tmpdir/movw-detect.o"] { + set shared_needs_pic "yes" + } + } +} + # The test procedure. proc shared_test { progname testname main sh1 sh2 dat args } { global CC @@ -212,6 +234,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] } setup_xfail "x86_64-*-linux*" setup_xfail "s390x-*-linux*" + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o shared # Test ELF shared library relocations with a non-zero load @@ -232,6 +257,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] } setup_xfail "x86_64-*-linux*" setup_xfail "s390x-*-linux*" + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } shared_test shnp "shared (non PIC, load offset)" \ mainnp.o sh1np.o sh2np.o shared \ "-T $srcdir/$subdir/elf-offset.ld" @@ -281,6 +309,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/main.c $tmpdir/m } setup_xfail "x86_64-*-linux*" setup_xfail "s390x-*-linux*" + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o shared } } else { -- 2.11.4.GIT