diff --git a/_multibuild b/_multibuild
index b9ee536..735a855 100644
--- a/_multibuild
+++ b/_multibuild
@@ -16,6 +16,7 @@
spu
avr
pru
+ loongarch64
mips
m68k
epiphany
diff --git a/aarch64-common-pagesize.patch b/aarch64-common-pagesize.patch
deleted file mode 100644
index e6bea47..0000000
--- a/aarch64-common-pagesize.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Change default common-page-size to 64K on aarch64. This enables the use
-of RELRO since we are using 64K pages.
-
-Index: binutils-2.41/bfd/elfnn-aarch64.c
-===================================================================
---- binutils-2.41.orig/bfd/elfnn-aarch64.c 2023-07-03 01:00:00.000000000 +0200
-+++ binutils-2.41/bfd/elfnn-aarch64.c 2023-08-16 16:31:51.238779641 +0200
-@@ -10251,7 +10251,7 @@ const struct elf_size_info elfNN_aarch64
- #define ELF_ARCH bfd_arch_aarch64
- #define ELF_MACHINE_CODE EM_AARCH64
- #define ELF_MAXPAGESIZE 0x10000
--#define ELF_COMMONPAGESIZE 0x1000
-+#define ELF_COMMONPAGESIZE 0x10000
-
- #define bfd_elfNN_bfd_free_cached_info \
- elfNN_aarch64_bfd_free_cached_info
-Index: binutils-2.41/gold/aarch64.cc
-===================================================================
---- binutils-2.41.orig/gold/aarch64.cc 2023-07-03 01:00:00.000000000 +0200
-+++ binutils-2.41/gold/aarch64.cc 2023-08-16 16:28:35.959450565 +0200
-@@ -3555,7 +3555,7 @@ const Target::Target_info Target_aarch64
- "/lib/ld.so.1", // program interpreter
- 0x400000, // default_text_segment_address
- 0x10000, // abi_pagesize (overridable by -z max-page-size)
-- 0x1000, // common_pagesize (overridable by -z common-page-size)
-+ 0x10000, // common_pagesize (overridable by -z common-page-size)
- false, // isolate_execinstr
- 0, // rosegment_gap
- elfcpp::SHN_UNDEF, // small_common_shndx
-@@ -3584,7 +3584,7 @@ const Target::Target_info Target_aarch64
- "/lib/ld.so.1", // program interpreter
- 0x400000, // default_text_segment_address
- 0x10000, // abi_pagesize (overridable by -z max-page-size)
-- 0x1000, // common_pagesize (overridable by -z common-page-size)
-+ 0x10000, // common_pagesize (overridable by -z common-page-size)
- false, // isolate_execinstr
- 0, // rosegment_gap
- elfcpp::SHN_UNDEF, // small_common_shndx
-@@ -3613,7 +3613,7 @@ const Target::Target_info Target_aarch64
- "/lib/ld.so.1", // program interpreter
- 0x400000, // default_text_segment_address
- 0x10000, // abi_pagesize (overridable by -z max-page-size)
-- 0x1000, // common_pagesize (overridable by -z common-page-size)
-+ 0x10000, // common_pagesize (overridable by -z common-page-size)
- false, // isolate_execinstr
- 0, // rosegment_gap
- elfcpp::SHN_UNDEF, // small_common_shndx
-@@ -3642,7 +3642,7 @@ const Target::Target_info Target_aarch64
- "/lib/ld.so.1", // program interpreter
- 0x400000, // default_text_segment_address
- 0x10000, // abi_pagesize (overridable by -z max-page-size)
-- 0x1000, // common_pagesize (overridable by -z common-page-size)
-+ 0x10000, // common_pagesize (overridable by -z common-page-size)
- false, // isolate_execinstr
- 0, // rosegment_gap
- elfcpp::SHN_UNDEF, // small_common_shndx
diff --git a/binutils-2.43-branch.diff.gz b/binutils-2.43-branch.diff.gz
index 2e93059..149dd9e 100644
--- a/binutils-2.43-branch.diff.gz
+++ b/binutils-2.43-branch.diff.gz
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:900843788bb54f1e28ecf8f9bf2c4e785ec83246a6d8055f9c8f438f8300783b
-size 31775
+oid sha256:6d541618e25f85bf7207ffa30b4ebb60448b50cf46c2572dedd82bc3971b4ea7
+size 57614
diff --git a/binutils-fix-branch.diff b/binutils-fix-branch.diff
new file mode 100644
index 0000000..6e410eb
--- /dev/null
+++ b/binutils-fix-branch.diff
@@ -0,0 +1,22 @@
+This is used to manually patch the bison generated files when
+the binutils-X.YZ-branch.diff touches them. That diff is generated
+directly from git and doesn't contain the generated .c/h files.
+The base tarball does contain them, but generated from the unpatched state.
+In SLE12 and older we can't regenerate them due to too old versions
+of flex and bison.
+So, when the branch diff _does_ touch them we need to do the regeneration
+via such a manual patch.
+Index: binutils-2.43/ld/ldgram.c
+===================================================================
+--- binutils-2.43.orig/ld/ldgram.c 2024-08-04 01:00:00.000000000 +0200
++++ binutils-2.43/ld/ldgram.c 2024-12-09 16:41:08.089715376 +0100
+@@ -2839,7 +2839,7 @@ yyreduce:
+
+ case 73: /* ifile_p1: SEARCH_DIR '(' filename ')' */
+ #line 324 "ldgram.y"
+- { ldfile_add_library_path ((yyvsp[-1].name), search_dir_linker_script); }
++ { ldfile_add_library_path ((yyvsp[-1].name), false); }
+ #line 2844 "ldgram.c"
+ break;
+
+
diff --git a/binutils.changes b/binutils.changes
index 79ff1c9..8d9937c 100644
--- a/binutils.changes
+++ b/binutils.changes
@@ -1,3 +1,70 @@
+-------------------------------------------------------------------
+Thu Jul 10 05:26:01 UTC 2025 - Bernhard Wiedemann
+
+- Skip PGO with %want_reproducible_builds (boo#1040589)
+
+-------------------------------------------------------------------
+Wed Jun 18 09:30:37 UTC 2025 - Andreas Schwab
+
+- pr33029.patch: Fix crash in assembler with -gdwarf-5
+
+-------------------------------------------------------------------
+Tue Jun 3 09:07:07 UTC 2025 - Andreas Schwab
+
+- Drop aarch64-common-pagesize.patch, aarch64 no longer uses 64K page size
+
+-------------------------------------------------------------------
+Tue May 6 14:33:48 UTC 2025 - Michael Matz
+
+- Add -std=gnu17 to move gcc15 forward, as temporary measure until
+ the binutils version can be updated [bsc#1241916].
+
+-------------------------------------------------------------------
+Thu Feb 13 09:39:06 UTC 2025 - Richard Biener
+
+- Do not build binutils-gold for SLFO.
+
+-------------------------------------------------------------------
+Fri Jan 10 08:54:55 UTC 2025 - JS
+
+- Enable multitarget build on loongarch64
+
+-------------------------------------------------------------------
+Tue Dec 17 14:09:54 UTC 2024 - Andreas Schwab
+
+- Unset SUSE_ZNOW while running testsuite, many tests cannot cope
+
+-------------------------------------------------------------------
+Mon Dec 9 14:49:46 UTC 2024 - Michael Matz
+
+- Update to current 2.43.1 branch [PED-10254, PED-10306]:
+ * s390 - Add arch15 instructions
+ * various fixes from upstream: PR32153, PR32171, PR32189,
+ PR32196, PR32191, PR32109, PR32372, PR32387
+- Adjusted binutils-2.43-branch.diff.gz.
+- Disable zstd-by-default again (needs adjustments in at least
+ golang,llvm15,llvm17 first)
+- Add binutils-fix-branch.diff.
+- Check non-changing of flex/bison inputs only after applying
+ branch and fix-branch diffs.
+
+-------------------------------------------------------------------
+Wed Nov 20 14:59:28 UTC 2024 - Jiri Slaby
+
+- drop ld-relro.diff (relro is the default for some time)
+ and it warns on avr spuriously (bsc#1233520)
+
+-------------------------------------------------------------------
+Mon Nov 18 18:12:05 UTC 2024 - John Paul Adrian Glaubitz
+
+- Add loongarch64 as new target
+
+-------------------------------------------------------------------
+Tue Sep 10 05:25:27 UTC 2024 - Martin Liška
+
+- Enable zstd compression algorithm (instead of zlib)
+ for debug info sections by default.
+
-------------------------------------------------------------------
Wed Aug 28 13:18:28 UTC 2024 - Michael Matz
diff --git a/binutils.spec b/binutils.spec
index c6f4001..f070f31 100644
--- a/binutils.spec
+++ b/binutils.spec
@@ -1,7 +1,7 @@
#
# spec file for package binutils
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -99,12 +99,12 @@ Release: 0
%define make_check_handling false
%endif
# handle all binary object formats supported by SUSE (and a few more)
-%ifarch %ix86 %arm aarch64 ia64 ppc ppc64 ppc64le riscv64 s390 s390x x86_64 %x86_64
+%ifarch %ix86 %arm aarch64 ia64 ppc ppc64 ppc64le riscv64 s390 s390x x86_64 %x86_64 loongarch64
%define build_multitarget 1
%else
%define build_multitarget 0
%endif
-%define target_list aarch64 alpha armv5l armv6l armv7l armv8l avr pru epiphany hppa hppa64 i686 ia64 m68k mips powerpc powerpc64 powerpc64le riscv64 rx s390 s390x sh4 sparc sparc64 x86_64 xtensa
+%define target_list aarch64 alpha armv5l armv6l armv7l armv8l avr pru epiphany hppa hppa64 i686 ia64 loongarch64 m68k mips powerpc powerpc64 powerpc64le riscv64 rx s390 s390x sh4 sparc sparc64 x86_64 xtensa
%define build_gprofng 0
@@ -132,18 +132,17 @@ Source2: binutils-%{version}.tar.bz2.sig
Source3: binutils.keyring
Source4: baselibs.conf
Patch1: binutils-2.43-branch.diff.gz
+Patch2: binutils-fix-branch.diff
Patch3: binutils-skip-rpaths.patch
Patch4: s390-biarch.diff
Patch5: x86-64-biarch.patch
Patch6: unit-at-a-time.patch
-Patch8: ld-relro.diff
Patch9: testsuite.diff
Patch10: enable-targets-gold.diff
Patch12: s390-pic-dso.diff
Patch14: binutils-build-as-needed.diff
Patch15: binutils-znow.patch
Patch22: binutils-bfd_h.patch
-Patch34: aarch64-common-pagesize.patch
Patch37: binutils-revert-plt32-in-branches.diff
Patch38: binutils-fix-invalid-op-errata.diff
Patch39: binutils-revert-nm-symversion.diff
@@ -153,6 +152,7 @@ Patch42: binutils-compat-old-behaviour.diff
Patch43: binutils-revert-hlasm-insns.diff
Patch44: binutils-revert-rela.diff
Patch60: binutils-disable-code-arch-error.diff
+Patch61: pr33029.patch
Patch90: cross-avr-nesc-as.patch
Patch92: cross-avr-omit_section_dynsym.patch
Patch93: cross-avr-size.patch
@@ -178,7 +178,8 @@ Requires: alts
%else
PreReq: update-alternatives
%endif
-%if 0%{!?cross:1} && 0%{?suse_version} >= 1310
+# We want gold for SLE15 and (newer) openSUSE, but not SLE16
+%if 0%{!?cross:1} && 0%{?suse_version} >= 1310 && ( 0%{?suse_version} < 1600 || 0%{?is_opensuse} )
%define gold_archs %ix86 aarch64 %arm x86_64 %x86_64 ppc ppc64 ppc64le s390x %sparc
%endif
@@ -245,26 +246,29 @@ The next generation profiling tool for Linux
echo "make check will return with %{make_check_handling} in case of testsuite failures."
%setup -q -n binutils-%{version}
-# Backup flex and biscon files for later verification.
-cp ld/ldlex.l ld/ldlex.l.orig
-cp ld/ldgram.y ld/ldgram.y.orig
-
# Patch is outside test_vanilla because it's supposed to be the
# patch bringing the tarball to the newest upstream version
%patch -P 1 -p1
+%patch -P 2 -p1
+
+# Backup flex and biscon files for later verification. Do this
+# after branch and fix-branch patches are applied (which are assumed
+# to manual fixup generated files, in case the branch diff touches
+# the flex/bison source files)
+cp ld/ldlex.l ld/ldlex.l.orig
+cp ld/ldgram.y ld/ldgram.y.orig
+
%if !%{test_vanilla}
%patch -P 3 -p1
%patch -P 4
%patch -P 5
%patch -P 6
-%patch -P 8
%patch -P 9
%patch -P 10
%patch -P 12
%patch -P 14
%patch -P 15
%patch -P 22
-%patch -P 34 -p1
%if %{suse_version} < 1550
%patch -P 37 -p1
%endif
@@ -278,6 +282,7 @@ cp ld/ldgram.y ld/ldgram.y.orig
%patch -P 44 -p1
%endif
%patch -P 60 -p1
+%patch -P 61 -p1
%if "%{TARGET}" == "avr"
cp gas/config/tc-avr.h gas/config/tc-avr-nesc.h
%patch -P 90
@@ -298,6 +303,14 @@ diff -u ld/ldgram.y ld/ldgram.y.orig
sed -i -e '/BFD_VERSION_DATE/s/$/-%(echo %release | sed 's/\.[0-9]*$//')/' bfd/version.h
RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error"
+# gcc15 and up default to c23, these older binutils would need patches
+# for that. As an impeding version update fixes that as well, simply
+# override the compiler instead of bothering with backports
+%if %{suse_version} > 1600
+CC="gcc -std=gnu17"
+export CC
+%endif
+
%if 0%{!?cross:1}
# Building native binutils
echo "Building native binutils."
@@ -376,7 +389,7 @@ cd build-dir
%endif
--enable-shared \
%if %{suse_version} > 1500
-%if %{with bootstrap} && 0%{?do_profiling}
+%if %{with bootstrap} && 0%{?do_profiling} && !0%{?want_reproducible_builds}
--enable-pgo-build=lto \
%endif
--enable-colored-disassembly \
@@ -388,8 +401,9 @@ cd build-dir
--enable-warn-execstack=yes \
--enable-warn-rwx-segments=yes
-#FIXME: enable in the future
-#%if %{suse_version} > 1550
+# FIXME: enable in future, when at least llvm15,llvm17,golang are
+# fixed to accept zstd
+#%if %{suse_version} > 1600
# --enable-default-compressed-debug-sections-algorithm=zstd \
#%endif
@@ -489,7 +503,7 @@ make -C gas-nesc %{?make_output_sync} %{?_smp_mflags}
%endif
%check
-unset SUSE_ASNEEDED
+unset SUSE_ASNEEDED SUSE_ZNOW
# newer distros set this envvar (e.g. to get deterministic archives by default)
# but of course that breaks tests that precisely are
# designed for checking file replacement in archives based on mtime.
diff --git a/ld-relro.diff b/ld-relro.diff
deleted file mode 100644
index 23e727b..0000000
--- a/ld-relro.diff
+++ /dev/null
@@ -1,63 +0,0 @@
-Index: ld/lexsup.c
-===================================================================
---- ld/lexsup.c.orig 2024-08-04 01:00:00.000000000 +0200
-+++ ld/lexsup.c 2024-08-06 16:02:35.554864901 +0200
-@@ -772,6 +772,9 @@ parse_args (unsigned argc, char **argv)
- }
- }
-
-+ optarg = "relro";
-+ ldemul_handle_option ('z');
-+
- last_optind = -1;
- while (1)
- {
-Index: ld/testsuite/config/default.exp
-===================================================================
---- ld/testsuite/config/default.exp.orig 2024-08-04 01:00:00.000000000 +0200
-+++ ld/testsuite/config/default.exp 2024-08-06 16:05:13.860859897 +0200
-@@ -39,7 +39,7 @@ if [info exists env(LD_UNDER_TEST)] {
- }
-
- if ![info exists ld] then {
-- set ld [findfile $base_dir/ld-new $base_dir/ld-new [transform ld]]
-+ set ld "[findfile $base_dir/ld-new $base_dir/ld-new [transform ld]] -znorelro"
- }
-
- if ![info exists as] then {
-@@ -92,7 +92,7 @@ if {[info exists ld_testsuite_bindir]} {
- }
- catch "exec ln -s ld tmpdir/ld/collect-ld" status
- catch "exec ln -s ../../../gas/as-new tmpdir/ld/as" status
-- set gcc_B_opt "-B[pwd]/tmpdir/ld/"
-+ set gcc_B_opt "-B[pwd]/tmpdir/ld/ -Wl,-z,norelro"
- }
-
- # load the linker path
-@@ -343,7 +343,7 @@ if ![info exists ELFEDIT] then {
- }
-
- if ![info exists LD] then {
-- set LD [findfile $base_dir/ld-new ./ld-new [transform ld]]
-+ set LD "[findfile $base_dir/ld-new ./ld-new [transform ld]] -znorelro"
- }
-
- if ![info exists LDFLAGS] then {
-Index: ld/testsuite/ld-bootstrap/bootstrap.exp
-===================================================================
---- ld/testsuite/ld-bootstrap/bootstrap.exp.orig 2024-08-04 01:00:00.000000000 +0200
-+++ ld/testsuite/ld-bootstrap/bootstrap.exp 2024-08-06 16:02:35.554864901 +0200
-@@ -112,7 +112,12 @@ foreach flags $test_flags {
-
- # This test can only be run if we have the ld build directory,
- # since we need the object files.
-- if {[file normalize $ld] != [file normalize $objdir/ld-new]} {
-+ set ldexe $ld
-+ set ldparm [string first " " $ld]
-+ if { $ldparm > 0 } then {
-+ set ldexe [string range $ld 0 $ldparm]
-+ }
-+ if {[file normalize $ldexe] != [file normalize $objdir/ld-new]} {
- untested $testname
- continue
- }
diff --git a/pr33029.patch b/pr33029.patch
new file mode 100644
index 0000000..e2a0a68
--- /dev/null
+++ b/pr33029.patch
@@ -0,0 +1,43 @@
+From f601ffb52199a883f16df385b73a14e756b3e19a Mon Sep 17 00:00:00 2001
+From: Alan Modra
+Date: Wed, 28 May 2025 18:20:17 +0930
+Subject: [PATCH] PR 33029 segv in dwarf2_finish with --gdwarf-5
+
+Specifying --gdwarf-5 with a source lacking a ".file 0" directive
+results in this segfault.
+
+ * dwarf2dbg.c (out_debug_str): Use files[1] if files[0] is
+ empty regardless of dwarf level.
+---
+ gas/dwarf2dbg.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c
+index fd1f96d80c5..a40fe6967d5 100644
+--- a/gas/dwarf2dbg.c
++++ b/gas/dwarf2dbg.c
+@@ -3019,6 +3019,11 @@ out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym,
+ int len;
+ int first_file = DWARF2_LINE_VERSION > 4 ? 0 : 1;
+
++ if (files_in_use == 0)
++ abort ();
++ if (first_file == 0 && files[first_file].filename == NULL)
++ first_file = 1;
++
+ subseg_set (str_seg, 0);
+
+ /* DW_AT_name. We don't have the actual file name that was present
+@@ -3026,8 +3031,7 @@ out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym,
+ We're not supposed to get called unless at least one line number
+ entry was emitted, so this should always be defined. */
+ *name_sym = symbol_temp_new_now_octets ();
+- if (files_in_use == 0)
+- abort ();
++
+ if (files[first_file].dir)
+ {
+ char *dirname = remap_debug_filename (dirs[files[first_file].dir]);
+--
+2.50.0
+