diff -rupN binutils/binutils/bucomm.c binutils.patched/binutils/bucomm.c
--- binutils/binutils/bucomm.c	2025-07-08 09:06:31.847667410 +0100
+++ binutils.patched/binutils/bucomm.c	2025-07-08 09:07:12.368482018 +0100
@@ -534,6 +534,61 @@ template_in_dir (const char *path)
 #undef template
 }
 
+#if defined (_WIN32) && !defined (__CYGWIN32__)
+
+/*
+ * Workaround mingw mkstemp producing duplicate filenames when cross-compiled
+ * on Linux.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <io.h>
+#include <errno.h>
+#include <share.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+static int mingw_mkstemp (char *template_name)
+{
+    int i, j, fd, len, index;
+
+    /* These are the (62) characters used in temporary filenames. */
+    static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+    /* The last six characters of template must be "XXXXXX" */
+    if (template_name == NULL || (len = strlen (template_name)) < 6
+            || memcmp (template_name + (len - 6), "XXXXXX", 6)) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    /* User may supply more than six trailing Xs */
+    for (index = len - 6; index > 0 && template_name[index - 1] == 'X'; index--);
+
+    /*
+        Like OpenBSD, mkstemp() will try at least 2 ** 31 combinations before
+        giving up.
+     */
+    for (i = 0; i >= 0; i++) {
+        for(j = index; j < len; j++) {
+            template_name[j] = letters[rand () % 62];
+        }
+        fd = _sopen(template_name,
+                _O_RDWR | _O_CREAT | _O_EXCL | _O_BINARY,
+                _SH_DENYRW, _S_IREAD | _S_IWRITE);
+        if (fd != -1) return fd;
+        if (fd == -1 && errno != EEXIST && errno != EACCES) return -1;
+    }
+
+    return -1;
+}
+
+#define mkstemp mingw_mkstemp
+
+#endif
+
 /* Return the name of a created temporary file in the same directory
    as FILENAME.  */
 
diff -rupN binutils/binutils/configure binutils.patched/binutils/configure
--- binutils/binutils/configure	2025-07-08 09:06:31.851667490 +0100
+++ binutils.patched/binutils/configure	2025-07-08 09:07:12.372482098 +0100
@@ -16489,7 +16489,7 @@ do
 	BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)'
 	BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)'
 	;;
-    x86_64-*-mingw* | x86_64-*-cygwin*)
+    x86_64-*-mingw* | aarch64-*-mingw* | x86_64-*-cygwin*)
 	BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)'
 	if test -z "$DLLTOOL_DEFAULT"; then
 	    DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_MX86_64"
diff -rupN binutils/binutils/Makefile.in binutils.patched/binutils/Makefile.in
--- binutils/binutils/Makefile.in	2025-07-08 09:06:31.847667410 +0100
+++ binutils.patched/binutils/Makefile.in	2025-07-08 09:07:12.372482098 +0100
@@ -876,8 +876,7 @@ man_MANS = \
 info_TEXINFOS = doc/binutils.texi
 binutils_TEXI = $(srcdir)/doc/binutils.texi
 AM_MAKEINFOFLAGS = -I "$(srcdir)/doc" -I "$(top_srcdir)/../libiberty" \
-		   -I "$(top_srcdir)/../bfd/doc" -I ../bfd/doc \
-		   --no-split
+		   -I "$(top_srcdir)/../bfd/doc" -I ../bfd/doc
 
 TEXI2DVI = texi2dvi -I "$(srcdir)/doc" -I "$(top_srcdir)/../libiberty" \
 		    -I "$(top_srcdir)/../bfd/doc" -I ../bfd/doc
diff -rupN binutils/configure binutils.patched/configure
--- binutils/configure	2025-07-08 09:06:31.223654865 +0100
+++ binutils.patched/configure	2025-07-08 09:07:12.380482259 +0100
@@ -3594,7 +3594,7 @@ case "${target}" in
   i[3456789]86-*-mingw*)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
-  x86_64-*-mingw*)
+  x86_64-*-mingw* | aarch64-*-mingw*)
     noconfigdirs="$noconfigdirs target-libffi"
     ;;
   mmix-*-*)
@@ -11478,7 +11478,7 @@ case " $target_configdirs " in
 esac
 
 case "$target" in
-  x86_64-*mingw* | *-w64-mingw*)
+  x86_64-*mingw* | aarch64-*mingw* | *-w64-mingw*)
   # MinGW-w64 does not use newlib, nor does it use winsup. It may,
   # however, use a symlink named 'mingw' in ${prefix} .
     FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L${prefix}/${target}/lib -L${prefix}/mingw/lib -isystem ${prefix}/${target}/include -isystem ${prefix}/mingw/include'
diff -rupN binutils/gas/Makefile.in binutils.patched/gas/Makefile.in
--- binutils/gas/Makefile.in	2025-07-08 09:06:31.903668535 +0100
+++ binutils.patched/gas/Makefile.in	2025-07-08 09:07:12.380482259 +0100
@@ -955,8 +955,7 @@ man_MANS = doc/as.1
 info_TEXINFOS = doc/as.texi
 doc_as_TEXINFOS = doc/asconfig.texi $(CPU_DOCS)
 AM_MAKEINFOFLAGS = -I "$(srcdir)/doc" -I doc -I "$(srcdir)/../libiberty" \
-		   -I "$(srcdir)/../bfd/doc" -I ../bfd/doc \
-		   --no-split
+		   -I "$(srcdir)/../bfd/doc" -I ../bfd/doc
 
 TEXI2DVI = texi2dvi -I "$(srcdir)/doc" -I doc -I "$(srcdir)/../libiberty" \
 		   -I "$(srcdir)/../bfd/doc" -I ../bfd/doc
diff -rupN binutils/ld/Makefile.in binutils.patched/ld/Makefile.in
--- binutils/ld/Makefile.in	2025-07-08 09:06:31.223654865 +0100
+++ binutils.patched/ld/Makefile.in	2025-07-08 09:07:12.380482259 +0100
@@ -647,7 +647,7 @@ ld_TEXINFOS = configdoc.texi
 noinst_TEXINFOS = ldint.texi
 man_MANS = ld.1
 AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
-		   -I $(top_srcdir)/../libiberty --no-split
+		   -I $(top_srcdir)/../libiberty
 
 TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I ../bfd/doc \
 		    -I $(top_srcdir)/../libiberty
diff -rupN binutils/libdecnumber/configure binutils.patched/libdecnumber/configure
--- binutils/libdecnumber/configure	2025-07-08 09:06:33.347697566 +0100
+++ binutils.patched/libdecnumber/configure	2025-07-08 09:07:12.380482259 +0100
@@ -4768,7 +4768,7 @@ else
     aarch64* | \
     powerpc*-*-linux* | i?86*-*-linux* | x86_64*-*-linux* | s390*-*-linux* | \
     i?86*-*-elfiamcu | i?86*-*-gnu* | x86_64*-*-gnu* | \
-    i?86*-*-mingw* | x86_64*-*-mingw* | \
+    i?86*-*-mingw* | x86_64*-*-mingw* | aarch64*-*-mingw* | \
     i?86*-*-cygwin* | x86_64*-*-cygwin*)
       enable_decimal_float=yes
       ;;
diff -rupN binutils/libiberty/configure binutils.patched/libiberty/configure
--- binutils/libiberty/configure	2025-07-08 09:06:33.351697646 +0100
+++ binutils.patched/libiberty/configure	2025-07-08 09:07:12.384482339 +0100
@@ -5338,7 +5338,7 @@ case "${host}" in
 	;;
     i[34567]86-*-cygwin* | x86_64-*-cygwin*)
 	;;
-    i[34567]86-*-mingw* | x86_64-*-mingw*)
+    i[34567]86-*-mingw* | x86_64-*-mingw* | aarch64-*-mingw*)
 	;;
     i[34567]86-*-interix[3-9]*)
 	# Interix 3.x gcc -fpic/-fPIC options generate broken code.
