X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=binutils%2Ftestsuite%2Fbinutils-all%2Far.exp;h=f7c37b4a822e2d940e98356c28a293497fc7bbbb;hb=8fd75781892c7458702f72b3b9cb1927609716de;hp=02d12351b7a6eb5d989497441be2d8856eb1e229;hpb=b43b5d5f768ed7a7a150d78c9fda0c194a11497d;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/testsuite/binutils-all/ar.exp b/binutils/testsuite/binutils-all/ar.exp index 02d12351b7..f7c37b4a82 100644 --- a/binutils/testsuite/binutils-all/ar.exp +++ b/binutils/testsuite/binutils-all/ar.exp @@ -1,8 +1,8 @@ -# Copyright 1995, 1997, 2002, 2004 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 2 of the License, or +# 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, @@ -26,13 +26,18 @@ if ![is_remote host] { } } +if { [istarget "alpha-*-*"] && ![is_elf_format] } then { + return +} + # send_user "Version [binutil_version $AR]" # 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" @@ -42,6 +47,7 @@ proc long_filenames { } { set file2 tmpdir/$n2 remote_file build delete $file1 + remote_file host delete $n1 # Some file systems truncate file names at 14 characters, which # makes it impossible to run this test. Check for that now. @@ -54,8 +60,8 @@ proc long_filenames { } { puts $f "first" close $f - remote_file build delete $file2 + remote_file host delete $n2 set status [catch "set f [open tmpdir/$n2 w]" errs] if { $status != 0 } { @@ -113,7 +119,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] { @@ -122,6 +127,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 @@ -214,6 +228,137 @@ proc symbol_table { } { pass $testname } +# Test building a thin archive. + +proc thin_archive { bfdtests } { + global AR + global AS + global NM + global srcdir + global subdir + global base_dir + + set testname "ar thin archive" + + 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 "rcT $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + 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] \ + || ![string match "*common_symbol in *bintest.o*" $got] \ + || [string match "*static_text_symbol in *bintest.o*" $got] \ + || [string match "*static_data_symbol in *bintest.o*" $got] \ + || [string match "*external_symbol in *bintest.o*" $got] } { + fail $testname + return + } + + pass $testname +} + +# Test building a thin archive with a nested archive. + +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" + + if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] { + unresolved $testname + return + } + + if [is_remote host] { + set archive artest.a + set archive2 artest2.a + set objfile [remote_download host tmpdir/bintest.o] + remote_file host delete $archive + } else { + set archive tmpdir/artest.a + set archive2 tmpdir/artest2.a + set objfile tmpdir/bintest.o + } + + remote_file build delete tmpdir/artest.a + + set got [binutils_run $AR "rc $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + remote_file build delete tmpdir/artest2.a + + set got [binutils_run $AR "rcT $archive2 ${archive}"] + if ![string match "" $got] { + fail $testname + 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] \ + || ![string match "*common_symbol in *bintest.o*" $got] \ + || [string match "*static_text_symbol in *bintest.o*" $got] \ + || [string match "*static_data_symbol in *bintest.o*" $got] \ + || [string match "*external_symbol in *bintest.o*" $got] } { + fail $testname + return + } + + pass $testname +} + # Test POSIX-compatible argument parsing. proc argument_parsing { } { @@ -249,8 +394,232 @@ proc argument_parsing { } { pass $testname } +# Test building a deterministic archive. + +proc deterministic_archive { } { + global AR + global AS + global NM + global srcdir + global subdir + + set testname "ar deterministic archive" + + 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 "rcD $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + set got [binutils_run $AR "tv $archive"] + # This only checks the file mode and uid/gid. We can't easily match + # date because it's printed with the user's timezone. + if ![string match "rw-r--r-- 0/0 *bintest.o*" $got] { + fail $testname + return + } + + pass $testname +} + +proc unique_symbol { } { + global AR + global AS + global NM + global srcdir + global subdir + + set testname "ar unique symbol in archive" + + if ![binutils_assemble $srcdir/$subdir/unique.s tmpdir/unique.o] { + unresolved $testname + return + } + + if [is_remote host] { + set archive artest.a + set objfile [remote_download host tmpdir/unique.o] + remote_file host delete $archive + } else { + set archive tmpdir/artest.a + set objfile tmpdir/unique.o + } + + remote_file build delete tmpdir/artest.a + + set got [binutils_run $AR "-s -r -c $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + set got [binutils_run $NM "--print-armap $archive"] + if ![string match "*foo in *unique.o*" $got] { + fail $testname + return + } + + 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 +} + +# 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 " $got] { + fail $testname + return + } + + pass $testname +} + # Run the tests. -long_filenames +# 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 +} + symbol_table argument_parsing +deterministic_archive +delete_an_element +move_an_element +empty_archive + +if { [is_elf_format] && [supports_gnu_unique] } { + unique_symbol +}