ar many_files test
authorAlan Modra <amodra@gmail.com>
Fri, 22 May 2020 22:35:14 +0000 (08:05 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 23 May 2020 05:26:07 +0000 (14:56 +0930)
This tests for the issue fixed with git commit 0490dd41ae.

* testsuite/binutils-all/ar.exp (many_files): New test.

binutils/ChangeLog
binutils/testsuite/binutils-all/ar.exp

index a6194bda0d2fc23bb4b642d78591b3adebe18957..f607c6369c84ee7323262a559293bccec19a1891 100644 (file)
@@ -1,3 +1,7 @@
+2020-05-23  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/binutils-all/ar.exp (many_files): New test.
+
 2020-05-21  Alan Modra  <amodra@gmail.com>
 
        * addr2line.c: Replace "if (x) free (x)" with "free (x)" throughout.
index 8d1f0aabea1b0afe5d11cb0c52b1e84327e9d22f..bf30b016c7b5ce495843c50a44bc5b9225665f3b 100644 (file)
@@ -649,6 +649,61 @@ proc extract_an_element { } {
     pass $testname
 }
 
+proc many_files { } {
+    global AR
+    global AS
+    global srcdir
+    global subdir
+
+    set testname "ar many files"
+
+    set ofiles {}
+    set max_file 150
+    for { set i 0 } { $i < $max_file } { incr i } {
+       set sfile "tmpdir/d-$i.s"
+       if [catch { set ofd [open $sfile w] } x] {
+           perror "$x"
+           unresolved $testname
+           return
+       }
+
+       puts $ofd " .globl data_sym$i"
+       puts $ofd " .data"
+       puts $ofd "data_sym$i:"
+       puts $ofd " .long $i"
+       close $ofd
+
+       set ofile "tmpdir/d-$i.o"
+       if ![binutils_assemble $sfile $ofile] {
+           unresolved $testname
+           return
+       }
+
+       set objfile $ofile
+       if [is_remote host] {
+           remote_file host delete $sfile
+           set objfile [remote_download host $ofile]
+           remote_file build delete $ofile
+       }
+       remote_file build delete $sfile
+       lappend ofiles $objfile
+    }
+
+    set archive tmpdir/many.a
+    remote_file host delete $archive
+
+    set got [binutils_run $AR "cr $archive $ofiles"]
+    if ![string match "" $got] {
+       fail $testname
+       return
+    }
+
+    remote_file host delete $archive
+    eval remote_file host delete $ofiles
+
+    pass $testname
+}
+
 # Run the tests.
 
 # Only run the bfdtest checks if the programs exist.  Since these
@@ -670,6 +725,7 @@ delete_an_element
 move_an_element
 empty_archive
 extract_an_element
+many_files
 
 if { [is_elf_format] && [supports_gnu_unique] } {
     unique_symbol