[binutils-gdb] LD/testsuite: Expand archive verification to group feature

Maciej W. Rozycki macro@sourceware.org
Mon Dec 15 19:11:51 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ad15f9c23401cf06504b1765aeaf8db9dd404ad8

commit ad15f9c23401cf06504b1765aeaf8db9dd404ad8
Author: Maciej W. Rozycki <macro@redhat.com>
Date:   Mon Dec 15 19:04:30 2025 +0000

    LD/testsuite: Expand archive verification to group feature
    
    Expand archive verification to cover the group feature.  Linker error
    messages for unsatisfied symbol references vary between targets a bit,
    in particular `arc-*-*' produce duplicate messages and `alpha*-*-osf*'
    and `alpha*-*-linux*ecoff*' add a "final link failed" message.  Factor
    this in with the error pattern list to match.  Usual XFAIL annotations
    apply.

Diff:
---
 ld/testsuite/ld-archive/abcg.vd     | 28 ++++++++++++++++++++++
 ld/testsuite/ld-archive/abcn.ed     |  6 +++++
 ld/testsuite/ld-archive/abtctg.vd   | 28 ++++++++++++++++++++++
 ld/testsuite/ld-archive/archive.exp | 48 ++++++++++++++++++++++++++++++++++++-
 4 files changed, 109 insertions(+), 1 deletion(-)

diff --git a/ld/testsuite/ld-archive/abcg.vd b/ld/testsuite/ld-archive/abcg.vd
new file mode 100644
index 00000000000..40c7c88fd4c
--- /dev/null
+++ b/ld/testsuite/ld-archive/abcg.vd
@@ -0,0 +1,28 @@
+#...
+using ..ternal linker script:.*
+==================================================
+#...
+==================================================
+.*: mode .*
+attempt to open tmpdir/ab\.a succeeded
+tmpdir/ab\.a
+attempt to open tmpdir/abc\.a succeeded
+tmpdir/abc\.a
+Archive member included to satisfy reference by file \(symbol\)
+
+tmpdir/abc\.a\(abc\.o(:?bj)?\) +\(ff\)
+\(tmpdir/abc\.a\)abc\.o(:?bj)?
+tmpdir/ab\.a
+tmpdir/ab\.a\(a\.o(:?bj)?\) +tmpdir/abc\.a\(abc\.o(:?bj)?\) \(aa\)
+\(tmpdir/ab\.a\)a\.o(:?bj)?
+tmpdir/ab\.a\(b\.o(:?bj)?\) +tmpdir/abc\.a\(abc\.o(:?bj)?\) \(bb\)
+\(tmpdir/ab\.a\)b\.o(:?bj)?
+tmpdir/abc\.a
+!(:?\()?tmpdir/.*
+#...
+START GROUP
+LOAD tmpdir/ab\.a
+LOAD tmpdir/abc\.a
+END GROUP
+!LOAD .*
+#pass
diff --git a/ld/testsuite/ld-archive/abcn.ed b/ld/testsuite/ld-archive/abcn.ed
new file mode 100644
index 00000000000..2a5376a2384
--- /dev/null
+++ b/ld/testsuite/ld-archive/abcn.ed
@@ -0,0 +1,6 @@
+#?.*: in function `cc':
+.*: undefined reference to `aa'
+#?.*: undefined reference to `aa'
+.*: undefined reference to `bb'
+#?.*: undefined reference to `bb'
+#?.*: final link failed
diff --git a/ld/testsuite/ld-archive/abtctg.vd b/ld/testsuite/ld-archive/abtctg.vd
new file mode 100644
index 00000000000..9ad6e7720ec
--- /dev/null
+++ b/ld/testsuite/ld-archive/abtctg.vd
@@ -0,0 +1,28 @@
+#...
+using ..ternal linker script:.*
+==================================================
+#...
+==================================================
+.*: mode .*
+attempt to open tmpdir/abt\.a succeeded
+tmpdir/abt\.a
+attempt to open tmpdir/abct\.a succeeded
+tmpdir/abct\.a
+Archive member included to satisfy reference by file \(symbol\)
+
+tmpdir/abc\.o +\(ff\)
+tmpdir/abc\.o
+tmpdir/abt\.a
+tmpdir/a\.o +tmpdir/abc\.o \(aa\)
+tmpdir/a\.o
+tmpdir/b\.o +tmpdir/abc\.o \(bb\)
+tmpdir/b\.o
+tmpdir/abct\.a
+!(:?\()?tmpdir/.*
+#...
+START GROUP
+LOAD tmpdir/abt\.a
+LOAD tmpdir/abct\.a
+END GROUP
+!LOAD .*
+#pass
diff --git a/ld/testsuite/ld-archive/archive.exp b/ld/testsuite/ld-archive/archive.exp
index 490db9e7b34..861405b2ae8 100644
--- a/ld/testsuite/ld-archive/archive.exp
+++ b/ld/testsuite/ld-archive/archive.exp
@@ -20,7 +20,8 @@
 
 remote_file host delete \
     "tmpdir/ab.a" "tmpdir/cd.a" "tmpdir/abt.a" "tmpdir/cdt.a" \
-    "tmpdir/abn.a" "tmpdir/abnt.a"
+    "tmpdir/abn.a" "tmpdir/abnt.a" "tmpdir/abc.a" "tmpdir/abct.a" \
+    "tmpdir/abcn.a" "tmpdir/abcnt.a"
 
 run_ld_link_tests {
     {"First regular archive create"     ""   "" "" {a.s b.s x.s} {} "ab.a"   }
@@ -29,6 +30,10 @@ run_ld_link_tests {
     {"Second thin archive create"       "T"  "" "" {c.s d.s y.s} {} "cdt.a"  }
     {"Regular archive w/o index create" "S"  "" "" {a.s b.s x.s} {} "abn.a"  }
     {"Thin archive w/o index create"    "ST" "" "" {a.s b.s x.s} {} "abnt.a" }
+    {"Other regular archive create"           ""   "" "" {abc.s} {} "abc.a"  }
+    {"Other thin archive create"              "T"  "" "" {abc.s} {} "abct.a" }
+    {"Other regular archive w/o index create" "S"  "" "" {abc.s} {} "abcn.a" }
+    {"Other thin archive w/o index create"    "ST" "" "" {abc.s} {} "abcnt.a"}
 }
 
 set old_ldflags $LDFLAGS
@@ -110,6 +115,47 @@ run_ld_link_tests [list \
     ] \
 ]
 
+# Group archive tests.
+run_ld_link_tests [list \
+    [list "Regular non-group archive link reject" \
+	"-e ff tmpdir/ab.a" "tmpdir/abc.a" \
+	"" {} \
+	{{ld abcn.ed}} \
+	"abcn" \
+    ] \
+    [list "Thin non-group archive link reject" \
+	"-e ff tmpdir/abt.a" "tmpdir/abct.a" \
+	"" {} \
+	{{ld abcn.ed}} \
+	"abtctn" \
+    ] \
+    [list "Regular group archive link accept" \
+	"-e ff -\\( tmpdir/ab.a" "tmpdir/abc.a -\\) --verbose --print-map" \
+	"" {} \
+	[ld_archive_filter_tests {{ld abcg.vd} \
+				  {nm "" abc.nd} \
+				  {nm "" nx.nd}}] \
+	"abcg" \
+    ] \
+]
+setup_xfail "binutils/33484" "alpha*-*-linux*ecoff*" "alpha*-*-osf*"
+setup_xfail "binutils/33485" "cris-*-*aout*" "i\[3-7\]86-*-bsd*" \
+    "i\[3-7\]86-*-msdos*" "ns32k-*-*" "pdp11-*-*"
+setup_xfail "binutils/33600" "alpha*-*-*vms*"
+if { [is_xcoff_format] } {
+    setup_xfail "binutils/33600" "*-*-*"
+}
+run_ld_link_tests [list \
+    [list "Thin group archive link accept" \
+	"-e ff -\\( tmpdir/abt.a" "tmpdir/abct.a -\\) --verbose --print-map" \
+	"" {} \
+	[ld_archive_filter_tests {{ld abtctg.vd} \
+				  {nm "" abc.nd} \
+				  {nm "" nx.nd}}] \
+	"abtctg" \
+    ] \
+]
+
 # Dual archive tests.
 run_ld_link_tests [list \
     [list "Regular archive plus regular link" \


More information about the Binutils-cvs mailing list