]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - binutils/testsuite/binutils-all/ar.exp
Imported binutils-2.20
[msp430-binutils.git] / binutils / testsuite / binutils-all / ar.exp
index f90fed8b9b6efef06f95efbb914fbea9bd68889b..3ad868b1d6f7308569650569f55ea1feb139dfd8 100644 (file)
@@ -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