* elf64-ppc.c (dec_dynrel_count): Don't error when elf_gc_sweep_symbol
[external/binutils.git] / binutils / testsuite / binutils-all / ar.exp
index ab1afdc..6efc159 100644 (file)
@@ -1,4 +1,4 @@
-#   Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009, 2010
+#   Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009, 2010, 2012
 #   Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
@@ -31,9 +31,10 @@ if ![is_remote host] {
 
 # Test long file name support
 
-proc long_filenames { } {
+proc long_filenames { bfdtests } {
     global AR
     global host_triplet
+    global base_dir
 
     set testname "ar long file names"
 
@@ -115,7 +116,6 @@ proc long_filenames { } {
        remote_file host delete $file2
     }
 
-    verbose -log "$AR x $dest"
     set exec_output [binutils_run $AR "x $dest"]
     set exec_output [prune_warnings $exec_output]
     if ![string match "" $exec_output] {
@@ -124,6 +124,15 @@ proc long_filenames { } {
        return
     }
 
+    foreach bfdtest $bfdtests {
+       set exec_output [binutils_run "$base_dir/$bfdtest" "$dest"]
+       if ![string match "" $exec_output] {
+           verbose -log $exec_output
+           fail "$testname ($bfdtest)"
+           return
+       }
+    }
+
     if [is_remote host] {
        remote_upload host $n1 tmpdir/$n1
        remote_upload host $n2 tmpdir/$n2
@@ -218,12 +227,13 @@ proc symbol_table { } {
 
 # Test building a thin archive.
 
-proc thin_archive { } {
+proc thin_archive { bfdtests } {
     global AR
     global AS
     global NM
     global srcdir
     global subdir
+    global base_dir
 
     set testname "ar thin archive"
 
@@ -249,6 +259,15 @@ proc thin_archive { } {
        return
     }
 
+    foreach bfdtest $bfdtests {
+       set exec_output [binutils_run "$base_dir/$bfdtest" "$archive"]
+       if ![string match "" $exec_output] {
+           verbose -log $exec_output
+           fail "$testname ($bfdtest)"
+           return
+       }
+    }
+
     set got [binutils_run $NM "--print-armap $archive"]
     if { ![string match "*text_symbol in *bintest.o*" $got] \
         || ![string match "*data_symbol in *bintest.o*" $got] \
@@ -265,12 +284,13 @@ proc thin_archive { } {
 
 # Test building a thin archive with a nested archive.
 
-proc thin_archive_with_nested { } {
+proc thin_archive_with_nested { bfdtests } {
     global AR
     global AS
     global NM
     global srcdir
     global subdir
+    global base_dir
 
     set testname "ar thin archive with nested archive"
 
@@ -306,6 +326,22 @@ proc thin_archive_with_nested { } {
        return
     }
 
+    foreach bfdtest $bfdtests {
+       set exec_output [binutils_run "$base_dir/$bfdtest" "$archive"]
+       if ![string match "" $exec_output] {
+           verbose -log $exec_output
+           fail "$testname ($bfdtest)"
+           return
+       }
+
+       set exec_output [binutils_run "$base_dir/$bfdtest" "$archive2"]
+       if ![string match "" $exec_output] {
+           verbose -log $exec_output
+           fail "$testname ($bfdtest)"
+           return
+       }
+    }
+
     set got [binutils_run $NM "--print-armap $archive"]
     if { ![string match "*text_symbol in *bintest.o*" $got] \
         || ![string match "*data_symbol in *bintest.o*" $got] \
@@ -438,14 +474,102 @@ proc unique_symbol { } {
     pass $testname
 }
 
+# Test deleting an element.
+
+proc delete_an_element { } {
+    global AR
+    global AS
+    global srcdir
+    global subdir
+
+    set testname "ar deleting an element"
+
+    if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] {
+       unresolved $testname
+       return
+    }
+
+    if [is_remote host] {
+       set archive artest.a
+       set objfile [remote_download host tmpdir/bintest.o]
+       remote_file host delete $archive
+    } else {
+       set archive tmpdir/artest.a
+       set objfile tmpdir/bintest.o
+    }
+
+    remote_file build delete tmpdir/artest.a
+
+    set got [binutils_run $AR "-r -c $archive ${objfile}"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    set got [binutils_run $AR "-d $archive ${objfile}"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    pass $testname
+}
+
+# Test moving an element.
+
+proc move_an_element { } {
+    global AR
+    global AS
+    global srcdir
+    global subdir
+
+    set testname "ar moving an element"
+
+    if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] {
+       unresolved $testname
+       return
+    }
+
+    if [is_remote host] {
+       set archive artest.a
+       set objfile [remote_download host tmpdir/bintest.o]
+       remote_file host delete $archive
+    } else {
+       set archive tmpdir/artest.a
+       set objfile tmpdir/bintest.o
+    }
+
+    remote_file build delete tmpdir/artest.a
+
+    set got [binutils_run $AR "-r -c $archive ${objfile}"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    set got [binutils_run $AR "-m $archive ${objfile}"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    pass $testname
+}
+
 # Run the tests.
 
-long_filenames
+set bfdtests [list bfdtest1 bfdtest2]
+
+long_filenames $bfdtests
 symbol_table
-thin_archive
-thin_archive_with_nested
+thin_archive $bfdtests
+thin_archive_with_nested $bfdtests
 argument_parsing
 deterministic_archive
-if [is_elf_format] {
+delete_an_element
+move_an_element
+if { [is_elf_format]
+     && ![istarget "*-*-hpux*"]
+     && ![istarget "msp*-*-*"] } {
     unique_symbol
 }