* ld-elfvsb/elfvsb.exp: Fix tests for arm*-*-linux*.
authorNick Clifton <nickc@redhat.com>
Tue, 9 Feb 2010 10:46:27 +0000 (10:46 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 9 Feb 2010 10:46:27 +0000 (10:46 +0000)
        * ld-shared/shared.exp: Likewise.

ld/testsuite/ChangeLog
ld/testsuite/ld-elfvsb/elfvsb.exp
ld/testsuite/ld-shared/shared.exp

index c3ab375..faec3f4 100644 (file)
@@ -1,3 +1,8 @@
+2010-02-09  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * ld-elfvsb/elfvsb.exp: Fix tests for arm*-*-linux*.
+       * ld-shared/shared.exp: Likewise.
+
 2010-02-08  David S. Miller  <davem@davemloft.net>
 
        * ld-ifunc/ifunc.exp: Run for sparc.
index fe146bf..1a18822 100644 (file)
@@ -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
            }
index 479bf76..7987b02 100644 (file)
@@ -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 {