[PATCH v3 02/18] LD/testsuite: Fix archive verification for Alpha/VMS

Maciej W. Rozycki macro@orcam.me.uk
Thu Nov 20 10:56:02 GMT 2025


From: Maciej W. Rozycki <macro@redhat.com>

As from commit a2298f23f2e2 ("PR 33385 vms archives") the handling of 
Alpha/VMS archives has been recently unbroken, after 7 years, revealing 
issues with archive tests added with commit 435223a9ae70 ("LD/testsuite: 
Add tests for archive handling"), the change of the failure mode of 
which went unnoticed.

In particular there is no NM support for executables and archives always 
have an index by the nature of the format; cf. `_bfd_vms_lib_archive_p': 
"The map is always present."

Address these peculiarities by excluding NM tests for the executables 
produced and by omitting mapless archive rejection tests just as with 
XCOFF targets, removing all the test failures:

alpha-dec-vms  -FAIL: Regular archive link
alpha-dec-vms  -FAIL: Thin archive link
alpha-dec-vms  -FAIL: Regular archive plus regular link
alpha-dec-vms  -FAIL: Regular archive plus thin link
alpha-dec-vms  -FAIL: Thin archive plus regular link
alpha-dec-vms  -FAIL: Thin archive plus thin link
alpha-dec-vms  -FAIL: Regular archive w/o index link
alpha-dec-vms  -FAIL: Thin archive w/o index link

Factor out code to filter out unwanted tests to a procedure for a better 
structure of the code.
---
No change from v2, 
<https://inbox.sourceware.org/binutils/alpine.DEB.2.21.2511060047030.25436@angie.orcam.me.uk/>.

New change in v2.
---
 ld/testsuite/ld-archive/archive.exp |   34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

binutils-ld-test-archive-alphavms.diff
Index: binutils-gdb/ld/testsuite/ld-archive/archive.exp
===================================================================
--- binutils-gdb.orig/ld/testsuite/ld-archive/archive.exp
+++ binutils-gdb/ld/testsuite/ld-archive/archive.exp
@@ -38,12 +38,27 @@ if { [is_xcoff_format] } {
     append LDFLAGS " -bexpall"
 }
 
-# For MS-DOS there's no way to keep symbols, so just check for success.
+# With Alpha/VMS NM doesn't handle executables and for MS-DOS there's no way
+# to keep symbols, so filter out any NM tests.
+proc ld_archive_filter_tests { arg } {
+    if { ![istarget "*-*-msdos"] && ![istarget "alpha*-*-*vms*"] } {
+	return $arg
+    } else {
+	set tests {}
+	foreach test $arg {
+	    if { [lindex $test 0] != "nm" } {
+		lappend tests $test
+	    }
+	}
+	return $tests
+    }
+}
+
 run_ld_link_tests [list \
     [list "Regular archive link" \
 	"-e ff" "tmpdir/ab.a" \
 	"" {abc.s} \
-	[expr { [istarget "*-*-msdos"] ? {} : {{nm "" abc.nd}} }] \
+	[ld_archive_filter_tests {{nm "" abc.nd}}] \
 	"abc" \
     ] \
 ]
@@ -54,7 +69,7 @@ run_ld_link_tests [list \
     [list "Thin archive link" \
 	"-e ff" "tmpdir/abt.a" \
 	"" {abc.s} \
-	[expr { [istarget "*-*-msdos"] ? {} : {{nm "" abc.nd}} }] \
+	[ld_archive_filter_tests {{nm "" abc.nd}}] \
 	"abtc" \
     ] \
 ]
@@ -62,7 +77,7 @@ run_ld_link_tests [list \
     [list "Regular archive plus regular link" \
 	"-e ff" "tmpdir/ab.a tmpdir/cd.a" \
 	"" {abcde.s} \
-	[expr { [istarget "*-*-msdos"] ? {} : {{nm "" abcde.nd}} }] \
+	[ld_archive_filter_tests {{nm "" abcde.nd}}] \
 	"abcde" \
     ] \
 ]
@@ -73,7 +88,7 @@ run_ld_link_tests [list \
     [list "Regular archive plus thin link" \
 	"-e ff" "tmpdir/ab.a tmpdir/cdt.a" \
 	"" {abcde.s} \
-	[expr { [istarget "*-*-msdos"] ? {} : {{nm "" abcde.nd}} }] \
+	[ld_archive_filter_tests {{nm "" abcde.nd}}] \
 	"abcdte" \
     ] \
 ]
@@ -84,7 +99,7 @@ run_ld_link_tests [list \
     [list "Thin archive plus regular link" \
 	"-e ff" "tmpdir/abt.a tmpdir/cd.a" \
 	"" {abcde.s} \
-	[expr { [istarget "*-*-msdos"] ? {} : {{nm "" abcde.nd}} }] \
+	[ld_archive_filter_tests {{nm "" abcde.nd}}] \
 	"abtcde" \
     ] \
 ]
@@ -95,15 +110,16 @@ run_ld_link_tests [list \
     [list "Thin archive plus thin link" \
 	"-e ff" "tmpdir/abt.a tmpdir/cdt.a" \
 	"" {abcde.s} \
-	[expr { [istarget "*-*-msdos"] ? {} : {{nm "" abcde.nd}} }] \
+	[ld_archive_filter_tests {{nm "" abcde.nd}}] \
 	"abtcdte" \
     ] \
 ]
 
 set LDFLAGS $old_ldflags
 
-# XCOFF targets currently accept archives w/o index.
-if { [is_xcoff_format] } {
+# Alpha/VMS archives always have an index and XCOFF targets currently
+# accept archives without one.
+if { [istarget "alpha*-*-*vms*"] || [is_xcoff_format] } {
     return
 }
 


More information about the Binutils mailing list