X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=binutils%2Ftestsuite%2Fbinutils-all%2Far.exp;fp=binutils%2Ftestsuite%2Fbinutils-all%2Far.exp;h=3ad868b1d6f7308569650569f55ea1feb139dfd8;hp=f90fed8b9b6efef06f95efbb914fbea9bd68889b;hb=88750007d7869f178f0ba528f41efd3b74c424cf;hpb=6df9443a374e2b81278c61b8afc0a1eef7db280b diff --git a/binutils/testsuite/binutils-all/ar.exp b/binutils/testsuite/binutils-all/ar.exp index f90fed8..3ad868b 100644 --- a/binutils/testsuite/binutils-all/ar.exp +++ b/binutils/testsuite/binutils-all/ar.exp @@ -1,4 +1,5 @@ -# Copyright 1995, 1997, 2002, 2004, 2007 Free Software Foundation, Inc. +# Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009 +# 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 @@ -42,6 +43,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 +56,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 } { @@ -214,6 +216,110 @@ proc symbol_table { } { pass $testname } +# Test building a thin archive. + +proc thin_archive { } { + global AR + global AS + global NM + global srcdir + global subdir + + 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 + } + + 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 { } { + global AR + global AS + global NM + global srcdir + global subdir + + 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 + } + + 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 +355,55 @@ 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 +} + # Run the tests. long_filenames symbol_table +thin_archive +thin_archive_with_nested argument_parsing +deterministic_archive