Add option to ar's 't' command to display the offset of elements within the archive.
[deliverable/binutils-gdb.git] / binutils / testsuite / binutils-all / ar.exp
index 6efc1598472586233223023a94b326e58b38d1df..7abde851e0d202437d3b6192f7c3e24586de4cc0 100644 (file)
@@ -1,16 +1,15 @@
-#   Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009, 2010, 2012
-#   Free Software Foundation, Inc.
+#   Copyright (C) 1995-2018 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
@@ -27,6 +26,10 @@ if ![is_remote host] {
     }
 }
 
+if { [istarget "alpha-*-*"] && ![is_elf_format] } then {
+    return
+}
+
 # send_user "Version [binutil_version $AR]"
 
 # Test long file name support
@@ -110,7 +113,7 @@ proc long_filenames { bfdtests } {
        fail $testname
        return
     }
-    
+
     if [is_remote host] {
        remote_file host delete $file1
        remote_file host delete $file2
@@ -432,6 +435,12 @@ proc deterministic_archive { } {
        return
     }
 
+    set got [binutils_run $AR "tvO $archive"]
+    if ![string match "rw-r--r-- 0/0 *bintest.o 0x*" $got] {
+       fail $testname
+       return
+    }
+
     pass $testname
 }
 
@@ -446,6 +455,7 @@ proc unique_symbol { } {
 
     if ![binutils_assemble $srcdir/$subdir/unique.s tmpdir/unique.o] {
        unresolved $testname
+       return
     }
 
     if [is_remote host] {
@@ -556,20 +566,66 @@ proc move_an_element { } {
     pass $testname
 }
 
+# PR 19775: Test creating and listing archives with an empty element.
+
+proc empty_archive { } {
+    global AR
+    global srcdir
+    global subdir
+
+    set testname "archive with empty element"
+
+    # FIXME: There ought to be a way to dynamically create an empty file.
+    set empty $srcdir/$subdir/empty
+
+    if [is_remote host] {
+       set archive artest.a
+       set objfile [remote_download host $empty]
+       remote_file host delete $archive
+    } else {
+       set archive tmpdir/artest.a
+       set objfile $empty
+    }
+
+    remote_file build delete tmpdir/artest.a
+
+    set got [binutils_run $AR "-r -c $archive ${objfile}"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    # This commmand used to fail with: "Malformed archive".
+    set got [binutils_run $AR "-t $archive"]
+    if ![string match "empty\r" $got] {
+       fail $testname
+       return
+    }
+
+    pass $testname
+}
+
 # Run the tests.
 
-set bfdtests [list bfdtest1 bfdtest2]
+# Only run the bfdtest checks if the programs exist.  Since these
+# programs are built but not installed, running the testsuite on an
+# installed toolchain will produce ERRORs about missing bfdtest1 and
+# bfdtest2 executables.
+if { ![istarget "tic30-*-*"] && [file exists $base_dir/bfdtest1] && [file exists $base_dir/bfdtest2] } {
+    set bfdtests [list bfdtest1 bfdtest2]
+
+    long_filenames $bfdtests
+    thin_archive $bfdtests
+    thin_archive_with_nested $bfdtests
+}
 
-long_filenames $bfdtests
 symbol_table
-thin_archive $bfdtests
-thin_archive_with_nested $bfdtests
 argument_parsing
 deterministic_archive
 delete_an_element
 move_an_element
-if { [is_elf_format]
-     && ![istarget "*-*-hpux*"]
-     && ![istarget "msp*-*-*"] } {
+empty_archive
+
+if { [is_elf_format] && [supports_gnu_unique] } {
     unique_symbol
 }
This page took 0.033812 seconds and 4 git commands to generate.