summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-05-23 08:05:14 +0930
committerAlan Modra <amodra@gmail.com>2020-05-23 14:56:07 +0930
commit3f3c36087ec4667e285b487e668da73614993828 (patch)
tree0f0787a305a31d9ebc2cc11a03c554836390e549
parenta3d674e0226291747cbfac9c73250e5193c06a57 (diff)
downloadbinutils-gdb-3f3c36087ec4667e285b487e668da73614993828.tar.gz
ar many_files test
This tests for the issue fixed with git commit 0490dd41ae. * testsuite/binutils-all/ar.exp (many_files): New test.
-rw-r--r--binutils/ChangeLog4
-rw-r--r--binutils/testsuite/binutils-all/ar.exp56
2 files changed, 60 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index a6194bda0d2..f607c6369c8 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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.
diff --git a/binutils/testsuite/binutils-all/ar.exp b/binutils/testsuite/binutils-all/ar.exp
index 8d1f0aabea1..bf30b016c7b 100644
--- a/binutils/testsuite/binutils-all/ar.exp
+++ b/binutils/testsuite/binutils-all/ar.exp
@@ -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