X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=binutils%2Ftestsuite%2Fbinutils-all%2Far.exp;h=f7c37b4a822e2d940e98356c28a293497fc7bbbb;hb=8fd75781892c7458702f72b3b9cb1927609716de;hp=e85201410bde4ab6c4d95abd100e518fec6dacc2;hpb=36e4dce69dd23bea9ea2258dea35f034b6d6351c;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/testsuite/binutils-all/ar.exp b/binutils/testsuite/binutils-all/ar.exp index e85201410b..f7c37b4a82 100644 --- a/binutils/testsuite/binutils-all/ar.exp +++ b/binutils/testsuite/binutils-all/ar.exp @@ -1,4 +1,4 @@ -# Copyright 1995, 1997, 2002, 2004, 2007, 2008 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 @@ -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" @@ -114,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] { @@ -123,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 @@ -217,12 +230,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" @@ -248,6 +262,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] \ @@ -264,12 +287,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" @@ -305,6 +329,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] \ @@ -398,11 +438,188 @@ proc deterministic_archive { } { 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 -thin_archive -thin_archive_with_nested argument_parsing deterministic_archive +delete_an_element +move_an_element +empty_archive + +if { [is_elf_format] && [supports_gnu_unique] } { + unique_symbol +}