[PATCH] objcopy: Fix a test case on Windows/MSYS2

Jan Dubiec jdx@o2.pl
Thu Nov 6 15:22:29 GMT 2025


When running binutils tests on Windows/MSYS2, one of objcopy test cases 
fails:

[...]
Executing on host: 
/d/Works/xcomp/build-binutils-arm-mingw/binutils/objcopy -I binary -B 
arm -O elf32-littlearm 
/d/Works/binutils/binutils/testsuite/binutils-all/version.s 
tmpdir/binary_implicit.o   (timeout = 300)
spawn -ignore SIGHUP 
/d/Works/xcomp/build-binutils-arm-mingw/binutils/objcopy -I binary -B 
arm -O elf32-littlearm 
/d/Works/binutils/binutils/testsuite/binutils-all/version.s 
tmpdir/binary_implicit.o
/d/Works/xcomp/build-binutils-arm-mingw/binutils/nm-new -a 
tmpdir/binary_implicit.o
Executing on host: 
/d/Works/xcomp/build-binutils-arm-mingw/binutils/nm-new -a 
tmpdir/binary_implicit.o   (timeout = 300)
spawn -ignore SIGHUP 
/d/Works/xcomp/build-binutils-arm-mingw/binutils/nm-new -a 
tmpdir/binary_implicit.o
00000018 D 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_end

00000018 A 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_size

00000000 D 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_start

00000018 D 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_end
00000018 A 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_size
00000000 D 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_start

expected: 
_binary__d_Works_binutils_binutils_testsuite_binutils_all_version_s_end 
_binary__d_Works_binutils_binutils_testsuite_binutils_all_version_s_size 
_binary__d_Works_binutils_binutils_testsuite_binutils_all_version_s_start, 
actual: 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_end 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_size 
_binary_D__Works_binutils_binutils_testsuite_binutils_all_version_s_start
FAIL: binary symbol (implicit)

As you can see, objcopy generates slightly different symbol names than 
those expected in the test case. I didn't even look into the sources, 
but objcopy likely gets from a syscall a path like D:\Works\binutils... 
and uses it to generate the symbol names (replacing non-alphanumeric 
characters with underscores). This is 100% OK in my opinion. On the 
other hand, TCL/DejaGnu gets from the "middleware" (MSYS2) a path like 
/d/Works/binutils... and uses it to generate expected symbol names by 
replacing slashes with underscores. The attached patch fixes the issue – 
see also the comment inside the patch.

/J.D.

binutils/
     * testsuite/binutils-all/objcopy.exp: Fix "binary symbol
     (implicit)" test case on Windows/MSYS2.

Signed-off-by: Jan Dubiec <jdx@o2.pl>
-------------- next part --------------
 binutils/testsuite/binutils-all/objcopy.exp | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index e6fcf5f7f12..c5cfde646a2 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -1639,5 +1639,17 @@ proc binary_symbol {name file args symbol} {
     pass $test
 }
 
-binary_symbol implicit $srcdir/$subdir/version.s "" _binary_[regsub -all {[^0-9a-zA-Z]} $srcdir/$subdir/version.s _]
+if {[string match "*-mingw*" ${host_triplet}]} {
+    # On Windows objcopy writes symbols like _binary_X__subdir1_subdir2...
+    # where X is the "drive letter" while TCL gets from the system (MSYS2)
+    # something like /x/subdir1/subdir2... So we just do a minor trick
+    # and replace "/x" with "X/" in $srcdir.
+    regexp {^/([a-z])/(.*)} $srcdir -> drive rest
+    set winpath "[string toupper $drive]//$rest"
+    binary_symbol implicit $srcdir/$subdir/version.s "" _binary_[regsub -all {[^0-9a-zA-Z]} $winpath/$subdir/version.s _]
+} else {
+    # Call the test for Unix-like hosts
+    binary_symbol implicit $srcdir/$subdir/version.s "" _binary_[regsub -all {[^0-9a-zA-Z]} $srcdir/$subdir/version.s _]
+}
+
 binary_symbol explicit $srcdir/$subdir/version.s "--binary-symbol-prefix symbol1" symbol1


More information about the Binutils mailing list