Compare commits

..

18 commits

Author SHA1 Message Date
Nick Clifton
10df332a21 Stop a potential call to abort when display the debug information of a corrupt input file. (#2404498) 2025-11-03 13:19:13 +00:00
Nick Clifton
9ae9a31a87 Stop a potential illegal memory access when linking a corrupt input file. (#2404547) 2025-11-03 12:26:50 +00:00
Nick Clifton
8fc43948c9 Stop a potential illegal memory access when linking a corrupt input file. (#2402830) 2025-10-13 11:44:17 +01:00
Nick Clifton
c480582c53 Stop a potential illegal memory access when linking a corrupt input file. (#2402827) 2025-10-10 13:11:19 +01:00
Nick Clifton
e4eb4b56e9 Stop a potential illegal memory access when linking a corrupt input file. (#2400311) 2025-10-03 13:23:42 +01:00
Nick Clifton
5f2f73705b Stop a potential illegal memory access when linking a corrupt input file. (#2400304) 2025-10-02 16:05:03 +01:00
Nick Clifton
990ade43af Stop a potential null pointer dereference when generating sframe information. (#1282126) 2025-07-21 12:04:57 +01:00
Nick Clifton
698ef7dd10 Stop excessive memory allocation when copying corrupt files. (#2379829)
Stop illegal memory access when parsing corrupt files.  (#2379836)
2025-07-14 14:52:00 +01:00
Nick Clifton
f6591b4749 Stop a call to abort in the linker when processing fuzzed input. (#2344837)
Fix an illegal memory access when the linker processed a fuzzed input file.  (#2344835)
2025-02-11 12:50:33 +00:00
Nick Clifton
8db331e7cb Restore the .note.build-id section placement patch.
Resolves: #2331487
2024-12-13 13:41:22 +00:00
Nick Clifton
056dc6ee1d Fix linker testsuite failures 2024-11-27 09:41:44 +00:00
Björn Esser
66262eec5d Fix ppc64 TLS optimization bug with -fno-plt code.
Solution for PR 32387
Resolves: 2324491

Signed-off-by: Björn Esser <besser82@fedoraproject.org>
2024-11-26 12:15:22 +01:00
Nick Clifton
839a6a093e Fix more linker testsuite issues for the RISC-V target. 2024-10-04 18:26:13 +01:00
Nick Clifton
11fc25375a Disable the default enablement of the linker's "-z separate-code" feature for non-x86 architectures. 2024-09-10 10:05:31 +01:00
Nick Clifton
805e066009 Rebase to 2.43.1 release. (#2305399) 2024-09-09 12:55:16 +01:00
Nick Clifton
bb4d098e2f Rebase to 2.43.1 release. (#2305399) 2024-09-09 12:35:41 +01:00
Nick Clifton
36a450d6d2 now with the patch file itself. 2024-08-14 10:29:41 +01:00
Nick Clifton
e92140ca5d Place the .build-id section near the ELF headers. 2024-08-14 10:28:55 +01:00
26 changed files with 1481 additions and 925 deletions

4
.gitignore vendored
View file

@ -64,7 +64,3 @@ stamp-*
/gmp*
/isl*
/binutils-2.19.50.0.1-output-format.sed
/binutils-2.44.50-13.fc43.src.rpm
/binutils-with-gold-2.45.50-be970c68891.tar.gz
/binutils-with-gold-2.45.50-ba5838a98fb.tar.gz
/binutils-2.47.50-1.fc46.src.rpm

View file

@ -0,0 +1,42 @@
From ea1a0737c7692737a644af0486b71e4a392cbca8 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Mon, 22 Sep 2025 15:20:34 +0800
Subject: [PATCH] elf: Don't read beyond .eh_frame section size
PR ld/33464
* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Don't read beyond
.eh_frame section size.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
bfd/elf-eh-frame.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff -rup binutils-2.43.1.orig/bfd/elf-eh-frame.c binutils-2.43.1/bfd/elf-eh-frame.c
--- binutils-2.43.1.orig/bfd/elf-eh-frame.c 2025-10-03 12:00:40.473590498 +0100
+++ binutils-2.43.1/bfd/elf-eh-frame.c 2025-10-03 12:00:59.521264872 +0100
@@ -734,6 +734,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, stru
if (hdr_id == 0)
{
unsigned int initial_insn_length;
+ char *null_byte;
/* CIE */
this_inf->cie = 1;
@@ -750,10 +751,13 @@ _bfd_elf_parse_eh_frame (bfd *abfd, stru
REQUIRE (cie->version == 1
|| cie->version == 3
|| cie->version == 4);
- REQUIRE (strlen ((char *) buf) < sizeof (cie->augmentation));
+ null_byte = memchr ((char *) buf, 0, end - buf);
+ REQUIRE (null_byte != NULL);
+ REQUIRE ((size_t) (null_byte - (char *) buf)
+ < sizeof (cie->augmentation));
strcpy (cie->augmentation, (char *) buf);
- buf = (bfd_byte *) strchr ((char *) buf, '\0') + 1;
+ buf = (bfd_byte *) null_byte + 1;
this_inf->u.cie.aug_str_len = buf - start - 1;
ENSURE_NO_RELOCS (buf);
if (buf[0] == 'e' && buf[1] == 'h')

View file

@ -0,0 +1,76 @@
From 9ca499644a21ceb3f946d1c179c38a83be084490 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Thu, 18 Sep 2025 16:59:25 -0700
Subject: [PATCH] elf: Don't match corrupt section header in linker input
Don't swap in nor match corrupt section header in linker input to avoid
linker crash later.
PR ld/33457
* elfcode.h (elf_swap_shdr_in): Changed to return bool. Return
false for corrupt section header in linker input.
(elf_object_p): Reject if elf_swap_shdr_in returns false.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
bfd/elfcode.h | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index 9c65852e103..5224a1abee6 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -311,7 +311,7 @@ elf_swap_ehdr_out (bfd *abfd,
/* Translate an ELF section header table entry in external format into an
ELF section header table entry in internal format. */
-static void
+static bool
elf_swap_shdr_in (bfd *abfd,
const Elf_External_Shdr *src,
Elf_Internal_Shdr *dst)
@@ -341,6 +341,9 @@ elf_swap_shdr_in (bfd *abfd,
{
_bfd_error_handler (_("warning: %pB has a section "
"extending past end of file"), abfd);
+ /* PR ld/33457: Don't match corrupt section header. */
+ if (abfd->is_linker_input)
+ return false;
abfd->read_only = 1;
}
}
@@ -350,6 +353,7 @@ elf_swap_shdr_in (bfd *abfd,
dst->sh_entsize = H_GET_WORD (abfd, src->sh_entsize);
dst->bfd_section = NULL;
dst->contents = NULL;
+ return true;
}
/* Translate an ELF section header table entry in internal format into an
@@ -642,9 +646,9 @@ elf_object_p (bfd *abfd)
/* Read the first section header at index 0, and convert to internal
form. */
- if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
+ if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr)
+ || !elf_swap_shdr_in (abfd, &x_shdr, &i_shdr))
goto got_no_match;
- elf_swap_shdr_in (abfd, &x_shdr, &i_shdr);
/* If the section count is zero, the actual count is in the first
section header. */
@@ -730,9 +734,9 @@ elf_object_p (bfd *abfd)
to internal form. */
for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
{
- if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
+ if (bfd_read (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr)
+ || !elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex))
goto got_no_match;
- elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
/* Sanity check sh_link and sh_info. */
if (i_shdrp[shindex].sh_link >= num_sec)
--
2.51.0

View file

@ -0,0 +1,45 @@
From b6ac5a8a5b82f0ae6a4642c8d7149b325f4cc60a Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 30 Sep 2025 08:13:56 +0800
Subject: [PATCH] x86: Keep _GLOBAL_OFFSET_TABLE_ for .eh_frame
Since x86 .eh_frame section may reference _GLOBAL_OFFSET_TABLE_, keep
_GLOBAL_OFFSET_TABLE_ if there is dynamic section and the output
.eh_frame section is non-empty.
PR ld/33499
* elfxx-x86.c (_bfd_x86_elf_late_size_sections): Keep
_GLOBAL_OFFSET_TABLE_ if there is dynamic section and the
output .eh_frame section is non-empty.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
bfd/elfxx-x86.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff -rup binutils-with-gold-2.44.orig/bfd/elfxx-x86.c binutils-with-gold-2.44/bfd/elfxx-x86.c
--- binutils-with-gold-2.44.orig/bfd/elfxx-x86.c 2025-10-13 10:42:42.345160623 +0100
+++ binutils-with-gold-2.44/bfd/elfxx-x86.c 2025-10-13 10:42:52.941568120 +0100
@@ -2458,6 +2458,8 @@ _bfd_x86_elf_late_size_sections (bfd *ou
if (htab->elf.sgotplt)
{
+ asection *eh_frame;
+
/* Don't allocate .got.plt section if there are no GOT nor PLT
entries and there is no reference to _GLOBAL_OFFSET_TABLE_. */
if ((htab->elf.hgot == NULL
@@ -2470,7 +2472,11 @@ _bfd_x86_elf_late_size_sections (bfd *ou
&& (htab->elf.iplt == NULL
|| htab->elf.iplt->size == 0)
&& (htab->elf.igotplt == NULL
- || htab->elf.igotplt->size == 0))
+ || htab->elf.igotplt->size == 0)
+ && (!htab->elf.dynamic_sections_created
+ || (eh_frame = bfd_get_section_by_name (output_bfd,
+ ".eh_frame")) == NULL
+ || eh_frame->rawsize == 0))
{
htab->elf.sgotplt->size = 0;
/* Solaris requires to keep _GLOBAL_OFFSET_TABLE_ even if it

View file

@ -0,0 +1,198 @@
From 6b21c8b2ecfef5c95142cbc2c32f185cb1c26ab0 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 30 Sep 2025 08:18:29 +0800
Subject: [PATCH] x86: Disallow TLS relocation in non executable section
Since TLS relocations are applied to executable machine instructions,
disallow TLS relocation in non-SHT_PROGBITS, non-SHF_EXECINSTR section.
PR ld/33451
PR ld/33502
* elf32-i386.c (elf_i386_tls_transition): Disallow TLS relocation
in non-SHT_PROGBITS, non-SHF_EXECINSTR section.
(elf_i386_scan_relocs): Likewise.
* elf64-x86-64.c (elf_x86_64_tls_transition): Likewise.
(elf_x86_64_scan_relocs): Likewise.
* elfxx-x86.c (_bfd_x86_elf_link_report_tls_invalid_section_error):
New.
* elfxx-x86.h (_bfd_x86_elf_link_report_tls_invalid_section_error):
Likewise.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
bfd/elf32-i386.c | 19 +++++++++++++++++++
bfd/elf64-x86-64.c | 20 ++++++++++++++++++++
bfd/elfxx-x86.c | 20 ++++++++++++++++++++
bfd/elfxx-x86.h | 4 ++++
4 files changed, 63 insertions(+)
diff -rup binutils-with-gold-2.44.orig/bfd/elf32-i386.c binutils-with-gold-2.44/bfd/elf32-i386.c
--- binutils-with-gold-2.44.orig/bfd/elf32-i386.c 2025-10-10 10:27:34.128669391 +0100
+++ binutils-with-gold-2.44/bfd/elf32-i386.c 2025-10-10 10:27:45.159754790 +0100
@@ -1166,6 +1166,15 @@ elf_i386_tls_transition (struct bfd_link
return true;
}
+ if ((elf_section_type (sec) != SHT_PROGBITS
+ || (sec->flags & SEC_CODE) == 0))
+ {
+ reloc_howto_type *howto = elf_i386_rtype_to_howto (from_type);
+ _bfd_x86_elf_link_report_tls_invalid_section_error
+ (abfd, sec, symtab_hdr, h, sym, howto);
+ return false;
+ }
+
/* Return TRUE if there is no transition. */
if (from_type == to_type)
return true;
@@ -1685,6 +1694,16 @@ elf_i386_scan_relocs (bfd *abfd,
tls_type = GOT_TLS_IE_POS; break;
}
+ if (tls_type >= GOT_TLS_GD
+ && tls_type <= GOT_TLS_GDESC
+ && (elf_section_type (sec) != SHT_PROGBITS
+ || (sec->flags & SEC_CODE) == 0))
+ {
+ _bfd_x86_elf_link_report_tls_invalid_section_error
+ (abfd, sec, symtab_hdr, h, isym, howto);
+ goto error_return;
+ }
+
if (h != NULL)
{
h->got.refcount = 1;
diff -rup binutils-with-gold-2.44.orig/bfd/elf64-x86-64.c binutils-with-gold-2.44/bfd/elf64-x86-64.c
--- binutils-with-gold-2.44.orig/bfd/elf64-x86-64.c 2025-10-10 10:27:34.147669538 +0100
+++ binutils-with-gold-2.44/bfd/elf64-x86-64.c 2025-10-10 10:27:45.161165453 +0100
@@ -1598,6 +1598,16 @@ elf_x86_64_tls_transition (struct bfd_li
return true;
}
+ if ((elf_section_type (sec) != SHT_PROGBITS
+ || (sec->flags & SEC_CODE) == 0))
+ {
+ reloc_howto_type *howto = elf_x86_64_rtype_to_howto (abfd,
+ from_type);
+ _bfd_x86_elf_link_report_tls_invalid_section_error
+ (abfd, sec, symtab_hdr, h, sym, howto);
+ return false;
+ }
+
/* Return TRUE if there is no transition. */
if (from_type == to_type
|| (from_type == R_X86_64_CODE_4_GOTTPOFF
@@ -2351,6 +2361,16 @@ elf_x86_64_scan_relocs (bfd *abfd, struc
break;
}
+ if (tls_type >= GOT_TLS_GD
+ && tls_type <= GOT_TLS_GDESC
+ && (elf_section_type (sec) != SHT_PROGBITS
+ || (sec->flags & SEC_CODE) == 0))
+ {
+ _bfd_x86_elf_link_report_tls_invalid_section_error
+ (abfd, sec, symtab_hdr, h, isym, howto);
+ goto error_return;
+ }
+
if (h != NULL)
{
h->got.refcount = 1;
diff -rup binutils-with-gold-2.44.orig/bfd/elfxx-x86.c binutils-with-gold-2.44/bfd/elfxx-x86.c
--- binutils-with-gold-2.44.orig/bfd/elfxx-x86.c 2025-10-10 10:27:34.204669979 +0100
+++ binutils-with-gold-2.44/bfd/elfxx-x86.c 2025-10-10 10:27:45.161625095 +0100
@@ -3359,6 +3359,26 @@ _bfd_x86_elf_link_report_tls_transition_
bfd_set_error (bfd_error_bad_value);
}
+/* Report TLS invalid section error. */
+
+void
+_bfd_x86_elf_link_report_tls_invalid_section_error
+ (bfd *abfd, asection *sec, Elf_Internal_Shdr *symtab_hdr,
+ struct elf_link_hash_entry *h, Elf_Internal_Sym *sym,
+ reloc_howto_type *howto)
+{
+ const char *name;
+ if (h)
+ name = h->root.root.string;
+ else
+ name = bfd_elf_sym_name (abfd, symtab_hdr, sym, NULL);
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("%pB: relocation %s against thread local symbol `%s' in "
+ "invalid section `%pA'"), abfd, howto->name, name, sec);
+ bfd_set_error (bfd_error_bad_value);
+}
+
/* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
bool
diff -rup binutils-with-gold-2.44.orig/bfd/elfxx-x86.h binutils-with-gold-2.44/bfd/elfxx-x86.h
--- binutils-with-gold-2.44.orig/bfd/elfxx-x86.h 2025-10-10 10:27:34.157669616 +0100
+++ binutils-with-gold-2.44/bfd/elfxx-x86.h 2025-10-10 10:27:45.162048003 +0100
@@ -939,6 +939,10 @@ extern void _bfd_x86_elf_link_report_tls
const Elf_Internal_Rela *, const char *, const char *,
enum elf_x86_tls_error_type);
+extern void _bfd_x86_elf_link_report_tls_invalid_section_error
+ (bfd *, asection *, Elf_Internal_Shdr *, struct elf_link_hash_entry *,
+ Elf_Internal_Sym *, reloc_howto_type *);
+
#define bfd_elf64_mkobject \
_bfd_x86_elf_mkobject
#define bfd_elf32_mkobject \
--- binutils-with-gold-2.44.orig/bfd/elf64-x86-64.c 2025-10-10 10:58:00.684202576 +0100
+++ binutils-with-gold-2.44/bfd/elf64-x86-64.c 2025-10-10 11:01:54.310462809 +0100
@@ -2169,6 +2169,7 @@ elf_x86_64_scan_relocs (bfd *abfd, struc
bool size_reloc;
bool converted_reloc;
bool no_dynreloc;
+ reloc_howto_type *howto;
r_symndx = htab->r_sym (rel->r_info);
r_type = ELF32_R_TYPE (rel->r_info);
@@ -2185,6 +2186,14 @@ elf_x86_64_scan_relocs (bfd *abfd, struc
goto error_return;
}
+ howto = elf_x86_64_rtype_to_howto (abfd, r_type);
+ if (howto == NULL)
+ {
+ _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+ abfd, r_type);
+ goto error_return;
+ }
+
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */
--- binutils-with-gold-2.44.orig/bfd/elf32-i386.c 2025-10-10 11:05:23.893062517 +0100
+++ binutils-with-gold-2.44/bfd/elf32-i386.c 2025-10-10 11:06:31.136544677 +0100
@@ -1540,6 +1540,7 @@ elf_i386_scan_relocs (bfd *abfd,
const char *name;
bool size_reloc;
bool no_dynreloc;
+ reloc_howto_type *howto;
r_symndx = ELF32_R_SYM (rel->r_info);
r_type = ELF32_R_TYPE (rel->r_info);
@@ -1556,6 +1557,17 @@ elf_i386_scan_relocs (bfd *abfd,
goto error_return;
}
+ howto = elf_i386_rtype_to_howto (r_type);
+ if (rel->r_offset + bfd_get_reloc_size (howto) > sec->size)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler
+ (_("%pB: bad reloc offset (%#" PRIx32 " > %#" PRIx32 ") for"
+ " section `%pA'"), abfd, (uint32_t) rel->r_offset,
+ (uint32_t) sec->size, sec);
+ goto error_return;
+ }
+
if (r_symndx < symtab_hdr->sh_info)
{
/* A local symbol. */

View file

@ -0,0 +1,27 @@
From 12ef7d5b7b02d0023db645d86eb9d0797bc747fe Mon Sep 17 00:00:00 2001
From: Nick Clifton <nickc@redhat.com>
Date: Mon, 3 Nov 2025 11:49:02 +0000
Subject: [PATCH] Remove call to abort in the DGB debug format printing code,
thus allowing the display of a fuzzed input file to complete without
triggering an abort.
PR 33448
---
binutils/prdbg.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/binutils/prdbg.c b/binutils/prdbg.c
index c239aeb1a79..5d405c48e3d 100644
--- a/binutils/prdbg.c
+++ b/binutils/prdbg.c
@@ -2449,7 +2449,6 @@ tg_tag_type (void *p, const char *name, unsigned int id,
t = "union class ";
break;
default:
- abort ();
return false;
}
--
2.51.1

View file

@ -0,0 +1,24 @@
From f6b0f53a36820da91eadfa9f466c22f92e4256e0 Mon Sep 17 00:00:00 2001
From: Alan Modra <amodra@gmail.com>
Date: Mon, 3 Nov 2025 09:03:37 +1030
Subject: [PATCH] PR 33455 SEGV in vfinfo at ldmisc.c:527
A reloc howto set up with EMPTY_HOWTO has a NULL name. More than one
place emitting diagnostics assumes a reloc howto won't have a NULL
name.
PR 33455
* coffcode.h (coff_slurp_reloc_table): Don't allow a howto with
a NULL name.
---
--- binutils-2.43.1.orig/bfd/coffcode.h 2025-11-03 11:17:09.463206752 +0000
+++ binutils-2.43.1/bfd/coffcode.h 2025-11-03 11:17:21.031291895 +0000
@@ -5347,7 +5347,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_
RTYPE2HOWTO (cache_ptr, &dst);
#endif /* RELOC_PROCESSING */
- if (cache_ptr->howto == NULL)
+ if (cache_ptr->howto == NULL || cache_ptr->howto->name == NULL)
{
_bfd_error_handler
/* xgettext:c-format */

View file

@ -0,0 +1,38 @@
From 08c3cbe5926e4d355b5cb70bbec2b1eeb40c2944 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 21 Jun 2025 06:36:56 +0800
Subject: [PATCH] objcopy: Don't extend the output section size
Since the output section contents are copied from the input, don't
extend the output section size beyond the input section size.
PR binutils/33049
* objcopy.c (copy_section): Don't extend the output section
size beyond the input section size.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
diff -rup binutils-2.43.1.orig/binutils/objcopy.c binutils-2.43.1/binutils/objcopy.c
--- binutils-2.43.1.orig/binutils/objcopy.c 2025-07-14 13:55:09.475539153 +0100
+++ binutils-2.43.1/binutils/objcopy.c 2025-07-14 13:55:21.639628637 +0100
@@ -4665,6 +4665,7 @@ copy_section (bfd *ibfd, sec_ptr isectio
char *to = (char *) memhunk;
char *end = (char *) memhunk + size;
int i;
+ bfd_size_type memhunk_size = size;
/* If the section address is not exactly divisible by the interleave,
then we must bias the from address. If the copy_byte is less than
@@ -4684,6 +4685,11 @@ copy_section (bfd *ibfd, sec_ptr isectio
}
size = (size + interleave - 1 - copy_byte) / interleave * copy_width;
+
+ /* Don't extend the output section size. */
+ if (size > memhunk_size)
+ size = memhunk_size;
+
osection->lma /= interleave;
if (copy_byte < extra)
osection->lma++;
Only in binutils-2.43.1/binutils: objcopy.c.orig

View file

@ -0,0 +1,48 @@
From 41461010eb7c79fee7a9d5f6209accdaac66cc6b Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 21 Jun 2025 06:52:00 +0800
Subject: [PATCH] elf: Report corrupted group section
Report corrupted group section instead of trying to recover.
PR binutils/33050
* elf.c (bfd_elf_set_group_contents): Report corrupted group
section.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
diff -rup binutils-2.43.1.orig/bfd/elf.c binutils-2.43.1/bfd/elf.c
--- binutils-2.43.1.orig/bfd/elf.c 2025-07-14 13:55:09.383538476 +0100
+++ binutils-2.43.1/bfd/elf.c 2025-07-14 13:56:50.081279234 +0100
@@ -3931,20 +3931,17 @@ bfd_elf_set_group_contents (bfd *abfd, a
break;
}
- /* We should always get here with loc == sec->contents + 4, but it is
- possible to craft bogus SHT_GROUP sections that will cause segfaults
- in objcopy without checking loc here and in the loop above. */
- if (loc == sec->contents)
- BFD_ASSERT (0);
- else
+ /* We should always get here with loc == sec->contents + 4. Return
+ an error for bogus SHT_GROUP sections. */
+ loc -= 4;
+ if (loc != sec->contents)
{
- loc -= 4;
- if (loc != sec->contents)
- {
- BFD_ASSERT (0);
- memset (sec->contents + 4, 0, loc - sec->contents);
- loc = sec->contents;
- }
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB: corrupted group section: `%pA'"),
+ abfd, sec);
+ bfd_set_error (bfd_error_bad_value);
+ *failedptr = true;
+ return;
}
H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
Only in binutils-2.43.1/bfd: elf.c.orig

View file

@ -1,12 +0,0 @@
--- binutils.orig/bfd/elfnn-aarch64.c 2025-02-07 13:42:20.961333141 +0000
+++ binutils-with-gold-2.44/bfd/elfnn-aarch64.c 2025-02-07 13:42:29.781353740 +0000
@@ -10162,7 +10162,8 @@ elfNN_aarch64_init_small_plt0_entry (bfd
/* PR 26312: Explicitly set the sh_entsize to 0 so that
consumers do not think that the section contains fixed
sized objects. */
- elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize = 0;
+ if (elf_section_data (htab->root.splt->output_section) != NULL)
+ elf_section_data (htab->root.splt->output_section)->this_hdr.sh_entsize = 0;
plt_got_2nd_ent = (htab->root.sgotplt->output_section->vma
+ htab->root.sgotplt->output_offset

View file

@ -51,9 +51,10 @@ diff -rup binutils.orig/configure binutils-2.40/configure
if test -n "$ac_tool_prefix"; then
--- binutils.orig/configure.ac 2024-11-26 15:08:50.162328683 +0000
+++ binutils-2.43.50-1686dc7079f/configure.ac 2024-11-26 15:08:56.929374527 +0000
@@ -1410,26 +1410,6 @@ if test -z "$LD"; then
diff -rup binutils.orig/configure.ac binutils-2.40/configure.ac
--- binutils.orig/configure.ac 2023-02-13 14:43:00.728877170 +0000
+++ binutils-2.40/configure.ac 2023-02-13 14:43:13.671864892 +0000
@@ -1435,26 +1435,6 @@ if test -z "$LD"; then
fi
fi
@ -79,4 +80,6 @@ diff -rup binutils.orig/configure binutils-2.40/configure
-
ACX_PROG_GNAT
ACX_PROG_GDC
ACX_PROG_CARGO
ACX_PROG_CMP_IGNORE_INITIAL
Only in binutils-2.40: configure.ac.orig
Only in binutils-2.40: configure.orig

View file

@ -1,40 +0,0 @@
# The gold linker does not build if the target list includes s390x-linux
# but does not include s390-linux. ie it needs the 32-bit target to be
# enabled in order for the 64-bit target to work. On the other hand the
# BFD library does not support the 32-bit s390 target. So this patch
# "enhances" the gold configure script so that if s390x is listed, the
# s390 target will automatically be added to the list as well.
diff -upr orig/gold/configure binutils-2.47/gold/configure
--- orig/gold/configure 2026-07-27 09:38:54.907192013 +0100
+++ binutils-2.47/gold/configure 2026-07-27 10:12:02.759629540 +0100
@@ -5223,7 +5223,12 @@ if test -n "$enable_targets"; then
for targ in `echo $enable_targets | sed -e 's/,/ /g'`; do
result=`$ac_config_sub $targ 2>/dev/null`
if test -n "$result"; then
- canon_targets="$canon_targets $result"
+ canon_targets="$canon_targets $result" ;
+ case "$result" in
+ s390x-*)
+ canon_targets="$canon_targets s390-gnu-linux"
+ ;;
+ esac
else
# Permit unrecognized target names, like "all".
canon_targets="$canon_targets $targ"
diff -upr orig/gold/configure.ac binutils-2.47/gold/configure.ac
--- orig/gold/configure.ac 2026-07-27 09:38:54.907192013 +0100
+++ binutils-2.47/gold/configure.ac 2026-07-27 10:18:18.480766140 +0100
@@ -133,6 +133,12 @@ if test -n "$enable_targets"; then
result=`$ac_config_sub $targ 2>/dev/null`
if test -n "$result"; then
canon_targets="$canon_targets $result"
+ # Hack: Enable the s390-linux target if s390x-linux is enabled.
+ case "$result" in
+ s390x-*)
+ canon_targets="$canon_targets s390-gnu-linux"
+ ;;
+ esac
else
# Permit unrecognized target names, like "all".
canon_targets="$canon_targets $targ"

View file

@ -24,6 +24,26 @@ diff -rup binutils.orig/gold/configure.ac binutils-2.34/gold/configure.ac
else
targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
if test "$targ_extra_obj" != ""; then
--- binutils.orig/ld/configure.tgt 2020-04-20 12:35:12.465301359 +0100
+++ binutils-2.34/ld/configure.tgt 2020-04-20 14:17:52.123066333 +0100
@@ -220,7 +220,7 @@ bfin-*-linux-uclibc*) targ_emul=elf32bfi
targ_extra_emuls="elf32bfin"
targ_extra_libpath=$targ_extra_emuls
;;
-bpf-*-*) targ_emul=elf64bpf
+bpf-* | bpf-*-*) targ_emul=elf64bpf
;;
cr16-*-elf*) targ_emul=elf32cr16
;;
@@ -1026,7 +1026,7 @@ z8k-*-coff) targ_emul=z8002
targ_extra_ofiles=
;;
*)
- echo 2>&1 "*** ld does not support target ${targ}"
+ echo 2>&1 "*** ld does not support target '${targ}' NO REALLY"
echo 2>&1 "*** see ld/configure.tgt for supported targets"
exit 1
--- binutils.orig/bfd/config.bfd 2020-04-20 12:35:13.038297375 +0100
+++ binutils-2.34/bfd/config.bfd 2020-04-20 14:25:26.452869193 +0100
@@ -473,7 +473,7 @@ case "${targ}" in
@ -35,14 +55,12 @@ diff -rup binutils.orig/gold/configure.ac binutils-2.34/gold/configure.ac
targ_defvec=bpf_elf64_le_vec
targ_selvecs=bpf_elf64_be_vec
targ_underscore=yes
--- binutils.orig/ld/configure.tgt 2026-01-05 08:51:02.908224792 +0000
+++ binutils-with-gold-2.45.50-be970c68891/ld/configure.tgt 2026-01-05 08:51:55.852677409 +0000
@@ -255,7 +255,7 @@ bfin-*-uclinux*) targ_emul=elf32bfin;
bfin-*-linux-uclibc*) targ_emul=elf32bfinfd;
targ_extra_libpath=elf32bfin
;;
-bpf-*-*) targ_emul=elf64bpf
+bpf-* | bpf-*-*) targ_emul=elf64bpf
;;
cr16-*-elf*) targ_emul=elf32cr16
;;
@@ -1427,7 +1427,7 @@ case "${targ}" in
;;
*)
- echo 1>&2 "*** BFD does not support target ${targ}."
+ echo 1>&2 "*** BFD does not support target '${targ}'. Honest."
echo 1>&2 "*** Look in bfd/config.bfd for supported targets."
exit 1
;;

View file

@ -1,52 +0,0 @@
diff -rup binutils.orig/bfd/elflink.c binutils-with-gold-2.45.50-be970c68891/bfd/elflink.c
--- binutils.orig/bfd/elflink.c 2026-01-14 09:21:14.835847967 +0000
+++ binutils-with-gold-2.45.50-be970c68891/bfd/elflink.c 2026-01-14 09:23:48.780495205 +0000
@@ -13786,7 +13786,7 @@ _bfd_elf_final_link (bfd *abfd, struct b
{
if (info->textrel_check == textrel_check_error)
info->callbacks->einfo
- (_("%P%X: read-only segment has dynamic relocations\n"));
+ (_("%P%X: error: read-only segment has dynamic relocations\n"));
else if (bfd_link_dll (info))
info->callbacks->einfo
(_("%P: warning: creating DT_TEXTREL in a shared object\n"));
diff -rup binutils.orig/ld/testsuite/ld-aarch64/dt-memtag-mode.d binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/dt-memtag-mode.d
--- binutils.orig/ld/testsuite/ld-aarch64/dt-memtag-mode.d 2026-01-14 09:21:15.248851537 +0000
+++ binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/dt-memtag-mode.d 2026-01-14 09:22:24.603416270 +0000
@@ -1,5 +1,5 @@
#source: dt-memtag.s
-#ld: -shared -z memtag-mode=async
+#ld: -shared -z memtag-mode=async -z notext
#readelf: -d
#...
diff -rup binutils.orig/ld/testsuite/ld-aarch64/dt-memtag-stack.d binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/dt-memtag-stack.d
--- binutils.orig/ld/testsuite/ld-aarch64/dt-memtag-stack.d 2026-01-14 09:21:15.248851537 +0000
+++ binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/dt-memtag-stack.d 2026-01-14 09:24:19.594780414 +0000
@@ -1,5 +1,5 @@
#source: dt-memtag.s
-#ld: -shared -z memtag-stack
+#ld: -shared -z memtag-stack -z notext
#readelf: -d
#...
diff -rup binutils.orig/ld/testsuite/ld-aarch64/relr-text-pie.d binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/relr-text-pie.d
--- binutils.orig/ld/testsuite/ld-aarch64/relr-text-pie.d 2026-01-14 09:21:15.246851520 +0000
+++ binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/relr-text-pie.d 2026-01-14 09:24:45.363485698 +0000
@@ -1,5 +1,5 @@
#source: relr-text.s
-#ld: -pie -z pack-relative-relocs -T relocs.ld
+#ld: -pie -z pack-relative-relocs -T relocs.ld -z notext
#readelf: -drW
#...
diff -rup binutils.orig/ld/testsuite/ld-aarch64/relr-text-shared.d binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/relr-text-shared.d
--- binutils.orig/ld/testsuite/ld-aarch64/relr-text-shared.d 2026-01-14 09:21:15.246851520 +0000
+++ binutils-with-gold-2.45.50-be970c68891/ld/testsuite/ld-aarch64/relr-text-shared.d 2026-01-14 09:25:06.651664713 +0000
@@ -1,5 +1,5 @@
#source: relr-text.s
-#ld: -shared -z pack-relative-relocs -T relocs.ld
+#ld: -shared -z pack-relative-relocs -T relocs.ld -z notext
#readelf: -drW
#...

View file

@ -0,0 +1,28 @@
From 75086e9de1707281172cc77f178e7949a4414ed0 Mon Sep 17 00:00:00 2001
From: Nick Clifton <nickc@redhat.com>
Date: Wed, 5 Feb 2025 13:26:51 +0000
Subject: [PATCH] Prevent an abort in the bfd linker when attempting to
generate dynamic relocs for a corrupt input file.
PR 32638
diff -rup binutils.orig/bfd/elf64-x86-64.c binutils-2.43.1/bfd/elf64-x86-64.c
--- binutils.orig/bfd/elf64-x86-64.c 2025-02-11 10:40:56.262887171 +0000
+++ binutils-2.43.1/bfd/elf64-x86-64.c 2025-02-11 10:41:26.312036385 +0000
@@ -4951,6 +4951,15 @@ elf_x86_64_finish_dynamic_symbol (bfd *o
if (generate_dynamic_reloc)
{
+ /* If the relgot section has not been created, then
+ generate an error instead of a reloc. cf PR 32638. */
+ if (relgot == NULL || relgot->size == 0)
+ {
+ info->callbacks->einfo (_("%F%pB: Unable to generate dynamic relocs because a suitable section does not exist\n"),
+ output_bfd);
+ return false;
+ }
+
if (relative_reloc_name != NULL
&& htab->params->report_relative_reloc)
_bfd_x86_elf_link_report_relative_reloc
Only in binutils-2.43.1/bfd: elf64-x86-64.c.orig

View file

@ -0,0 +1,464 @@
commit b425859021d17adf62f06fb904797cf8642986ad
Author: Nick Clifton <nickc@redhat.com>
Date: Wed Feb 5 16:27:38 2025 +0000
Fix another illegal memory access triggered by corrupt ELF input files.
PR 32644
commit 931494c9a89558acb36a03a340c01726545eef24
Author: Nick Clifton <nickc@redhat.com>
Date: Wed Feb 5 15:43:04 2025 +0000
Add even more checks for corrupt input when processing relocations for ELF files.
PR 32643
commit 18cc11a2771d9e40180485da9a4fb660c03efac3
Author: Nick Clifton <nickc@redhat.com>
Date: Wed Feb 5 14:31:10 2025 +0000
Prevent illegal memory access when checking relocs in a corrupt ELF binary.
PR 32641
commit f9978defb6fab0bd8583942d97c112b0932ac814
Author: Nick Clifton <nickc@redhat.com>
Date: Wed Feb 5 11:15:11 2025 +0000
Prevent illegal memory access when indexing into the sym_hashes array of the elf bfd cookie structure.
PR 32636
diff -rup binutils.orig/bfd/elf-bfd.h binutils-2.43.1/bfd/elf-bfd.h
--- binutils.orig/bfd/elf-bfd.h 2025-02-11 10:58:25.223874250 +0000
+++ binutils-2.43.1/bfd/elf-bfd.h 2025-02-11 11:13:12.177965286 +0000
@@ -3147,6 +3147,9 @@ extern bool _bfd_elf_link_mmap_section_c
extern void _bfd_elf_link_munmap_section_contents
(asection *);
+extern struct elf_link_hash_entry * _bfd_elf_get_link_hash_entry
+ (struct elf_link_hash_entry **, unsigned int, Elf_Internal_Shdr *);
+
/* Large common section. */
extern asection _bfd_elf_large_com_section;
diff -rup binutils.orig/bfd/elflink.c binutils-2.43.1/bfd/elflink.c
--- binutils.orig/bfd/elflink.c 2025-02-11 10:58:25.256874290 +0000
+++ binutils-2.43.1/bfd/elflink.c 2025-02-11 11:11:22.536375589 +0000
@@ -96,22 +96,64 @@ _bfd_elf_link_keep_memory (struct bfd_li
return true;
}
-asection *
-_bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
- unsigned long r_symndx,
- bool discard)
+static struct elf_link_hash_entry *
+get_link_hash_entry (struct elf_link_hash_entry ** sym_hashes,
+ unsigned int symndx,
+ unsigned int ext_sym_start)
+{
+ if (sym_hashes == NULL
+ /* Guard against corrupt input. See PR 32636 for an example. */
+ || symndx < ext_sym_start)
+ return NULL;
+
+ struct elf_link_hash_entry *h = sym_hashes[symndx - ext_sym_start];
+
+ /* The hash might be empty. See PR 32641 for an example of this. */
+ if (h == NULL)
+ return NULL;
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ return h;
+}
+
+struct elf_link_hash_entry *
+_bfd_elf_get_link_hash_entry (struct elf_link_hash_entry ** sym_hashes,
+ unsigned int symndx,
+ Elf_Internal_Shdr * symtab_hdr)
+{
+ if (symtab_hdr == NULL)
+ return NULL;
+
+ return get_link_hash_entry (sym_hashes, symndx, symtab_hdr->sh_info);
+}
+
+static struct elf_link_hash_entry *
+get_ext_sym_hash_from_cookie (struct elf_reloc_cookie *cookie, unsigned long r_symndx)
{
+ if (cookie == NULL || cookie->sym_hashes == NULL)
+ return NULL;
+
if (r_symndx >= cookie->locsymcount
|| ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
- {
- struct elf_link_hash_entry *h;
+ return get_link_hash_entry (cookie->sym_hashes, r_symndx, cookie->extsymoff);
- h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
+ return NULL;
+}
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+asection *
+_bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
+ unsigned long r_symndx,
+ bool discard)
+{
+ struct elf_link_hash_entry *h;
+ h = get_ext_sym_hash_from_cookie (cookie, r_symndx);
+
+ if (h != NULL)
+ {
if ((h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
&& discarded_section (h->root.u.def.section))
@@ -119,21 +161,20 @@ _bfd_elf_section_for_symbol (struct elf_
else
return NULL;
}
- else
- {
- /* It's not a relocation against a global symbol,
- but it could be a relocation against a local
- symbol for a discarded section. */
- asection *isec;
- Elf_Internal_Sym *isym;
- /* Need to: get the symbol; get the section. */
- isym = &cookie->locsyms[r_symndx];
- isec = bfd_section_from_elf_index (cookie->abfd, isym->st_shndx);
- if (isec != NULL
- && discard ? discarded_section (isec) : 1)
- return isec;
- }
+ /* It's not a relocation against a global symbol,
+ but it could be a relocation against a local
+ symbol for a discarded section. */
+ asection *isec;
+ Elf_Internal_Sym *isym;
+
+ /* Need to: get the symbol; get the section. */
+ isym = &cookie->locsyms[r_symndx];
+ isec = bfd_section_from_elf_index (cookie->abfd, isym->st_shndx);
+ if (isec != NULL
+ && discard ? discarded_section (isec) : 1)
+ return isec;
+
return NULL;
}
@@ -9058,7 +9099,6 @@ set_symbol_value (bfd *bfd_with_globals,
size_t symidx,
bfd_vma val)
{
- struct elf_link_hash_entry **sym_hashes;
struct elf_link_hash_entry *h;
size_t extsymoff = locsymcount;
@@ -9081,12 +9121,12 @@ set_symbol_value (bfd *bfd_with_globals,
/* It is a global symbol: set its link type
to "defined" and give it a value. */
-
- sym_hashes = elf_sym_hashes (bfd_with_globals);
- h = sym_hashes [symidx - extsymoff];
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ h = get_link_hash_entry (elf_sym_hashes (bfd_with_globals), symidx, extsymoff);
+ if (h == NULL)
+ {
+ /* FIXMEL What should we do ? */
+ return;
+ }
h->root.type = bfd_link_hash_defined;
h->root.u.def.value = val;
h->root.u.def.section = bfd_abs_section_ptr;
@@ -11568,10 +11608,19 @@ elf_link_input_bfd (struct elf_final_lin
|| (elf_bad_symtab (input_bfd)
&& flinfo->sections[symndx] == NULL))
{
- struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ struct elf_link_hash_entry *h;
+
+ h = get_link_hash_entry (sym_hashes, symndx, extsymoff);
+ if (h == NULL)
+ {
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("error: %pB: unable to create group section symbol"),
+ input_bfd);
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
/* Arrange for symbol to be output. */
h->indx = -2;
elf_section_data (osec)->this_hdr.sh_info = -2;
@@ -11706,7 +11755,7 @@ elf_link_input_bfd (struct elf_final_lin
|| (elf_bad_symtab (input_bfd)
&& flinfo->sections[r_symndx] == NULL))
{
- h = sym_hashes[r_symndx - extsymoff];
+ h = get_link_hash_entry (sym_hashes, r_symndx, extsymoff);
/* Badly formatted input files can contain relocs that
reference non-existant symbols. Check here so that
@@ -11715,17 +11764,13 @@ elf_link_input_bfd (struct elf_final_lin
{
_bfd_error_handler
/* xgettext:c-format */
- (_("error: %pB contains a reloc (%#" PRIx64 ") for section %pA "
+ (_("error: %pB contains a reloc (%#" PRIx64 ") for section '%pA' "
"that references a non-existent global symbol"),
input_bfd, (uint64_t) rel->r_info, o);
bfd_set_error (bfd_error_bad_value);
return false;
}
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
-
s_type = h->type;
/* If a plugin symbol is referenced from a non-IR file,
@@ -11941,7 +11986,6 @@ elf_link_input_bfd (struct elf_final_lin
&& flinfo->sections[r_symndx] == NULL))
{
struct elf_link_hash_entry *rh;
- unsigned long indx;
/* This is a reloc against a global symbol. We
have not yet output all the local symbols, so
@@ -11950,11 +11994,13 @@ elf_link_input_bfd (struct elf_final_lin
reloc to point to the global hash table entry
for this symbol. The symbol index is then
set at the end of bfd_elf_final_link. */
- indx = r_symndx - extsymoff;
- rh = elf_sym_hashes (input_bfd)[indx];
- while (rh->root.type == bfd_link_hash_indirect
- || rh->root.type == bfd_link_hash_warning)
- rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
+ rh = get_link_hash_entry (elf_sym_hashes (input_bfd),
+ r_symndx, extsymoff);
+ if (rh == NULL)
+ {
+ /* FIXME: Generate an error ? */
+ continue;
+ }
/* Setting the index to -2 tells
elf_link_output_extsym that this symbol is
@@ -13958,25 +14004,21 @@ _bfd_elf_gc_mark_hook (asection *sec,
struct elf_link_hash_entry *h,
Elf_Internal_Sym *sym)
{
- if (h != NULL)
+ if (h == NULL)
+ return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+
+ switch (h->root.type)
{
- switch (h->root.type)
- {
- case bfd_link_hash_defined:
- case bfd_link_hash_defweak:
- return h->root.u.def.section;
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ return h->root.u.def.section;
- case bfd_link_hash_common:
- return h->root.u.c.p->section;
+ case bfd_link_hash_common:
+ return h->root.u.c.p->section;
- default:
- break;
- }
+ default:
+ return NULL;
}
- else
- return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-
- return NULL;
}
/* Return the debug definition section. */
@@ -14025,56 +14067,49 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_i
if (r_symndx == STN_UNDEF)
return NULL;
- if (r_symndx >= cookie->locsymcount
- || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
+ h = get_ext_sym_hash_from_cookie (cookie, r_symndx);
+ if (h == NULL)
{
- bool was_marked;
+ /* A corrup tinput file can lead to a situation where the index
+ does not reference either a local or an external symbol. */
+ if (r_symndx >= cookie->locsymcount)
+ return NULL;
- h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
- if (h == NULL)
- {
- info->callbacks->einfo (_("%F%P: corrupt input: %pB\n"),
- sec->owner);
- return NULL;
- }
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
+ &cookie->locsyms[r_symndx]);
+ }
- was_marked = h->mark;
- h->mark = 1;
- /* Keep all aliases of the symbol too. If an object symbol
- needs to be copied into .dynbss then all of its aliases
- should be present as dynamic symbols, not just the one used
- on the copy relocation. */
- hw = h;
- while (hw->is_weakalias)
- {
- hw = hw->u.alias;
- hw->mark = 1;
- }
+ bool was_marked = h->mark;
- if (!was_marked && h->start_stop && !h->root.ldscript_def)
- {
- if (info->start_stop_gc)
- return NULL;
+ h->mark = 1;
+ /* Keep all aliases of the symbol too. If an object symbol
+ needs to be copied into .dynbss then all of its aliases
+ should be present as dynamic symbols, not just the one used
+ on the copy relocation. */
+ hw = h;
+ while (hw->is_weakalias)
+ {
+ hw = hw->u.alias;
+ hw->mark = 1;
+ }
- /* To work around a glibc bug, mark XXX input sections
- when there is a reference to __start_XXX or __stop_XXX
- symbols. */
- else if (start_stop != NULL)
- {
- asection *s = h->u2.start_stop_section;
- *start_stop = true;
- return s;
- }
- }
+ if (!was_marked && h->start_stop && !h->root.ldscript_def)
+ {
+ if (info->start_stop_gc)
+ return NULL;
- return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
+ /* To work around a glibc bug, mark XXX input sections
+ when there is a reference to __start_XXX or __stop_XXX
+ symbols. */
+ else if (start_stop != NULL)
+ {
+ asection *s = h->u2.start_stop_section;
+ *start_stop = true;
+ return s;
+ }
}
- return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
- &cookie->locsyms[r_symndx]);
+ return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
}
/* COOKIE->rel describes a relocation against section SEC, which is
@@ -15095,17 +15130,12 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma
if (r_symndx == STN_UNDEF)
return true;
- if (r_symndx >= rcookie->locsymcount
- || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
- {
- struct elf_link_hash_entry *h;
-
- h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
-
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ struct elf_link_hash_entry *h;
+ h = get_ext_sym_hash_from_cookie (rcookie, r_symndx);
+
+ if (h != NULL)
+ {
if ((h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
&& (h->root.u.def.section->owner != rcookie->abfd
@@ -15115,6 +15145,10 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma
}
else
{
+ if (r_symndx >= rcookie->locsymcount)
+ /* This can happen with corrupt input. */
+ return false;
+
/* It's not a relocation against a global symbol,
but it could be a relocation against a local
symbol for a discarded section. */
diff -rup binutils.orig/bfd/elfxx-x86.c binutils-2.43.1/bfd/elfxx-x86.c
--- binutils.orig/bfd/elfxx-x86.c 2025-02-11 10:58:25.307874350 +0000
+++ binutils-2.43.1/bfd/elfxx-x86.c 2025-02-11 11:15:21.937392450 +0000
@@ -972,15 +972,7 @@ _bfd_x86_elf_check_relocs (bfd *abfd,
goto error_return;
}
- if (r_symndx < symtab_hdr->sh_info)
- h = NULL;
- else
- {
- h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
- }
+ h = _bfd_elf_get_link_hash_entry (sym_hashes, r_symndx, symtab_hdr);
if (X86_NEED_DYNAMIC_RELOC_TYPE_P (is_x86_64, r_type)
&& NEED_DYNAMIC_RELOCATION_P (is_x86_64, info, true, h, sec,
@@ -1205,10 +1197,12 @@ _bfd_x86_elf_link_relax_section (bfd *ab
else
{
/* Get H and SEC for GENERATE_DYNAMIC_RELOCATION_P below. */
- h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- while (h->root.type == bfd_link_hash_indirect
- || h->root.type == bfd_link_hash_warning)
- h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ h = _bfd_elf_get_link_hash_entry (sym_hashes, r_symndx, symtab_hdr);
+ if (h == NULL)
+ {
+ /* FIXMEL: Issue an error message ? */
+ continue;
+ }
if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)

View file

@ -0,0 +1,22 @@
--- binutils.orig/ld/scripttempl/elf.sc 2024-08-14 08:32:58.565047220 +0100
+++ binutils-2.43/ld/scripttempl/elf.sc 2024-08-14 08:34:07.837496401 +0100
@@ -425,7 +425,6 @@ emit_early_ro()
{
cat <<EOF
${INITIAL_READONLY_SECTIONS}
- .note.gnu.build-id ${RELOCATING-0}: { *(.note.gnu.build-id) }
EOF
}
@@ -436,6 +435,11 @@ cat <<EOF
${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR}${SIZEOF_HEADERS_CODE};}}
${CREATE_PIE+${RELOCATING+PROVIDE (__executable_start = ${SHLIB_TEXT_START_ADDR}); . = ${SHLIB_TEXT_START_ADDR}${SIZEOF_HEADERS_CODE};}}
+
+ /* Place build-id as close to the ELF headers as possible. This
+ maximises the chance the build-id will be present in core files,
+ which GDB can use to improve the debug experience. */
+ .note.gnu.build-id ${RELOCATING-0}: { *(.note.gnu.build-id) }
EOF
}

View file

@ -0,0 +1,45 @@
From 1686dc7079f1c03bdaffd2f779b92aa2b7ad97b5 Mon Sep 17 00:00:00 2001
From: Alan Modra <amodra@gmail.com>
Date: Tue, 26 Nov 2024 08:24:19 +1030
Subject: [PATCH] PR32387 ppc64 TLS optimization bug with -fno-plt code
The inline plt code emitted by gcc is incompatible with the
linker/ld.so --tls-get-addr-optimize scheme. This is the runtime
optimisation where the first call to __tls_get_addr results in
__tls_get_addr updating the tls_index pair, then the special linker
stub using that to short-circuit second and subsequent calls for a
given tls symbol. Enabled by default when the linker sees
__tls_get_addr_opt is preseent, and enabled in ld.so when DT_PPC64_OPT
has PPC64_OPT_TLS set. Note that this is distinct from link-time tls
optimisation.
PR 32387
* elf64-ppc.c (ppc64_elf_check_relocs): Disable tls_get_addr_opt
on detecting inline plt calls to __tls_get_addr.
---
bfd/elf64-ppc.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 9674fcdd6be..f7debc1edbc 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -4915,6 +4915,15 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
tls_type = 0;
switch (r_type)
{
+ case R_PPC64_PLTSEQ:
+ case R_PPC64_PLTSEQ_NOTOC:
+ /* Inline plt call code emitted by gcc doesn't support
+ modifying the tls_index words to short-circuit
+ __tls_get_addr calls. See PR32387. */
+ if (h != NULL && (h == tga || h == dottga))
+ htab->params->tls_get_addr_opt = 0;
+ break;
+
case R_PPC64_TLSGD:
case R_PPC64_TLSLD:
/* These special tls relocs tie a call to __tls_get_addr with
--
2.43.5

View file

@ -1,33 +0,0 @@
diff -rup binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp binutils-with-gold-2.45.50-96b8a8a633a/ld/testsuite/ld-x86-64/x86-64.exp
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2025-11-20 12:02:23.738336155 +0000
+++ binutils-with-gold-2.45.50-96b8a8a633a/ld/testsuite/ld-x86-64/x86-64.exp 2025-11-20 12:03:17.894485264 +0000
@@ -1413,14 +1413,6 @@ if { [isnative] && [check_compiler_avail
"libprotected-func-2b.so" \
] \
[list \
- "Build protected-func-2 without PIE" \
- "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2b.so" \
- "$DIRECT_EXTERN_ACCESS_CFLAGS $NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
- { protected-func-1b.c } \
- {} \
- "protected-func-2" \
- ] \
- [list \
"Build libprotected-func-2c.so" \
"-shared" \
"-fPIC -Wa,-mx86-used-note=yes" \
@@ -1429,14 +1421,6 @@ if { [isnative] && [check_compiler_avail
"libprotected-func-2c.so" \
] \
[list \
- "Build protected-func-2a without PIE" \
- "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2c.so" \
- "$DIRECT_EXTERN_ACCESS_CFLAGS $NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
- { protected-func-1b.c } \
- {} \
- "protected-func-2a" \
- ] \
- [list \
"Build libprotected-data-1a.so" \
"-shared -z noindirect-extern-access" \
"-fPIC -Wa,-mx86-used-note=yes" \

View file

@ -134,6 +134,19 @@ diff -rup binutils.orig/ld/testsuite/ld-elf/tls.exp binutils-2.40/ld/testsuite/l
objcopy_test_without_global_symbol
--- binutils.orig/ld/testsuite/ld-ifunc/ifunc.exp 2024-02-08 10:12:23.739591113 +0000
+++ binutils-2.42/ld/testsuite/ld-ifunc/ifunc.exp 2024-02-08 10:14:58.243670115 +0000
@@ -666,6 +666,10 @@ run_cc_link_tests [list \
] \
]
+if {[istarget "riscv*-*-*"]} {
+ return
+}
+
run_ld_link_exec_tests [list \
[list \
"Run pr18808" \
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d binutils-2.43.50-1f4aee70ed1/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d 2024-10-03 15:21:47.926570551 +0100
+++ binutils-2.43.50-1f4aee70ed1/ld/testsuite/ld-riscv-elf/pcgp-relax-01-norelaxgp.d 2024-10-03 15:24:26.152502612 +0100
@ -172,98 +185,3 @@ diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/pcgp-relax-02.d binutils-2.43.
-.*:[ ]+[0-9a-f]+[ ]+mv[ ]+a1,a1
+.*:[ ]+[0-9a-f]+[ ]+.*
#pass
--- binutils-with-gold-2.45.50-79b2b564fec.orig/ld/testsuite/ld-riscv-elf/zicfilp-unlabeled-plt.d 2025-09-09 15:52:30.684689609 +0100
+++ binutils-with-gold-2.45.50-79b2b564fec/ld/testsuite/ld-riscv-elf/zicfilp-unlabeled-plt.d 2025-09-09 15:53:12.837859447 +0100
@@ -30,6 +30,6 @@ Disassembly of section \.plt:
[0-9a-f]+ <bar@plt>:
.*:[ ]+[0-9a-f]+[ ]+lpad[ ]+0x0
-.*:[ ]+[0-9a-f]+[ ]+auipc[ ]+t3,0x1
+.*:[ ]+[0-9a-f]+[ ]+auipc[ ]+t3,0x[0-9a-f]+
.*:[ ]+[0-9a-f]+[ ]+ld[ ]+t3,[0-9]+\(t3\) # [0-9a-f]+ <bar>
.*:[ ]+[0-9a-f]+[ ]+jalr[ ]+t1,t3
diff -rup binutils-with-gold-2.45.50-beab972c07d,orig/binutils/testsuite/binutils-all/objcopy.exp binutils-with-gold-2.45.50-beab972c07d/binutils/testsuite/binutils-all/objcopy.exp
--- binutils-with-gold-2.45.50-beab972c07d,orig/binutils/testsuite/binutils-all/objcopy.exp 2025-12-02 12:47:19.063123207 +0000
+++ binutils-with-gold-2.45.50-beab972c07d/binutils/testsuite/binutils-all/objcopy.exp 2025-12-04 12:39:26.079989597 +0000
@@ -602,14 +602,19 @@ proc strip_test { } {
set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"]
set exec_output [prune_warnings $exec_output]
if ![string equal "" $exec_output] {
- fail $test
+ fail "$test (warnings in linker output)"
+ verbose $exec_output
return
}
set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"]
set exec_output [prune_warnings $exec_output]
if ![string match "*: no symbols*" $exec_output] {
- fail $test
+
+ # The RISC-V target compiles with annotation enabled and these symbols remain after stripping.
+ setup_xfail riscv*-*-*
+
+ fail "$test (symbols in nm output)"
return
}
@@ -659,6 +664,9 @@ proc strip_test_with_saving_a_symbol { }
pass $test
}
+# The RISC-V target compiles with annotation enabled and these symbols remain after stripping.
+setup_xfail riscv*-*-*
+
strip_test_with_saving_a_symbol
# Test stripping an archive.
@@ -1503,7 +1519,7 @@ proc objcopy_test_without_global_symbol
# in object files, so they will fail this test.
setup_xfail aarch64*-*-* arm*-*-*
# The RISC-V target compiles with annotation enabled and these symbols remain after stripping.
-# setup_xfail riscv*-*-*
+setup_xfail riscv*-*-*
objcopy_test_without_global_symbol
diff -rup binutils-with-gold-2.45.50-beab972c07d,orig/ld/testsuite/lib/ld-lib.exp binutils-with-gold-2.45.50-beab972c07d/ld/testsuite/lib/ld-lib.exp
--- binutils-with-gold-2.45.50-beab972c07d,orig/ld/testsuite/lib/ld-lib.exp 2025-12-02 12:47:19.201090894 +0000
+++ binutils-with-gold-2.45.50-beab972c07d/ld/testsuite/lib/ld-lib.exp 2025-12-03 09:30:07.184360005 +0000
@@ -1633,6 +1633,12 @@ proc compile_one_cc { src output additio
proc check_ctf_available { } {
global ctf_available_saved
+ # Skip CTF tests for the Risc-V target for now, as the
+ # tests have not been tweaked to support the riscv format.
+ if { [istarget "riscv*-*-linux*"] } {
+ return 0
+ }
+
if {![info exists ctf_available_saved]} {
set ctf_available_saved 0
--- fred/binutils/testsuite/lib/binutils-common.exp 2026-03-16 09:18:37.205413649 +0000
+++ binutils-with-gold-2.46.50-d712202846b/binutils/testsuite/lib/binutils-common.exp 2026-03-16 09:18:49.559358668 +0000
@@ -803,6 +803,9 @@ proc prune_warnings_extra { text } {
# Ignore warnings about linking objects with an old sframe format
regsub -all {(^|\n)([^\n]* unexpected SFrame format version [^\n]*\n[^\n]* SFrame section ignored\n?)+} $text {\1} text
+ # Skip warnings about the LTO plugin being needed.
+ regsub -all "(^|\n)(\[^\n\]*:\[^\n\]*plugin needed to handle lto object\[^\n\]*\n?)+" $text "\\1" text
+
return $text
}
--- binutils.orig/ld/testsuite/ld-elf/shared.exp 2026-06-10 15:32:21.012274073 +0100
+++ binutils-with-gold-2.46.50-48997323b0f/ld/testsuite/ld-elf/shared.exp 2026-06-10 15:34:41.397899263 +0100
@@ -1859,6 +1859,10 @@ run_cc_link_tests [list \
"pr29655.so" \
] \
]
+
+# FIXME: Find out why the Risc-V fails this test.
+setup_xfail "riscv64-*-*"
+
# PR 29655 (cont.): Check that in PIC code linked as PDE taking the address
# of a function defined in a DSO results in the function address (from GOT)
# and not the "canonical PLT" address from the PDE.

View file

@ -0,0 +1,77 @@
From 3602da6fa285d6b22d87bcc39056e919e939ef07 Mon Sep 17 00:00:00 2001
From: Claudiu Zissulescu <claudiu.zissulescu-ianculescu@oracle.com>
Date: Tue, 15 Apr 2025 12:20:40 +0300
Subject: [PATCH] gas: sframe: fix handling of .cfi_def_cfa_register
Fix PR gas/32879 sframe: Assembler internal error when translating
cfi_def_cfa_register
As per the documentation, .cfi_def_cfa_register modifies a rule for
computing CFA; the register is updated, but the offset remains the same.
While translating .cfi_def_cfa_register into SFrame context, we use the
information from last translated FRE to set the CFA offset. However,
there may be cases when the last translated FRE is empty. Use last FRE
only if available.
Signed-off-by: Claudiu Zissulescu <claudiu.zissulescu-ianculescu@oracle.com>
Signed-off-by: Indu Bhagat <indu.bhagat@oracle.com>
---
diff -rupN binutils-2.43.1.orig/gas/gen-sframe.c binutils-2.43.1/gas/gen-sframe.c
--- binutils-2.43.1.orig/gas/gen-sframe.c 2025-07-21 10:18:20.701626832 +0100
+++ binutils-2.43.1/gas/gen-sframe.c 2025-07-21 10:19:04.972504129 +0100
@@ -1051,7 +1051,9 @@ sframe_xlate_do_def_cfa_register (struct
return SFRAME_XLATE_ERR_NOTREPRESENTED; /* Not represented. */
}
sframe_fre_set_cfa_base_reg (cur_fre, cfi_insn->u.ri.reg);
- sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset);
+ if (last_fre)
+ sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset);
+
cur_fre->merge_candidate = false;
return SFRAME_XLATE_OK;
diff -rupN binutils-2.43.1.orig/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d binutils-2.43.1/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d
--- binutils-2.43.1.orig/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.43.1/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d 2025-07-21 10:18:35.950185785 +0100
@@ -0,0 +1,21 @@
+#as: --gsframe
+#objdump: --sframe=.sframe
+#name: Check .cfi_def_cfa_register with no previous offset
+#...
+Contents of the SFrame section .sframe:
+
+ Header :
+
+ Version: SFRAME_VERSION_2
+ Flags: NONE
+#? CFA fixed FP offset: \-?\d+
+#? CFA fixed RA offset: \-?\d+
+ Num FDEs: 1
+ Num FREs: 1
+
+ Function Index :
+
+ func idx \[0\]: pc = 0x0, size = 0 bytes
+ STARTPC +CFA +FP +RA +
+ 0+0000 +fp\+8 +u +f +
+#pass
diff -rupN binutils-2.43.1.orig/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s binutils-2.43.1/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s
--- binutils-2.43.1.orig/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s 1970-01-01 01:00:00.000000000 +0100
+++ binutils-2.43.1/gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s 2025-07-21 10:18:35.950246411 +0100
@@ -0,0 +1,4 @@
+# Although not a useful construct by itself, ensure graceful handling.
+ .cfi_startproc
+ .cfi_def_cfa_register 6
+ .cfi_endproc
diff -rupN binutils-2.43.1.orig/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp binutils-2.43.1/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
--- binutils-2.43.1.orig/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp 2025-07-21 10:18:20.756742820 +0100
+++ binutils-2.43.1/gas/testsuite/gas/cfi-sframe/cfi-sframe.exp 2025-07-21 10:19:33.756745567 +0100
@@ -89,6 +89,7 @@ if { [istarget "x86_64-*-*"] && [gas_sfr
if { [gas_x86_64_check] } then {
set ASFLAGS "$ASFLAGS --64"
run_dump_test "cfi-sframe-x86_64-1"
+ run_dump_test "cfi-sframe-x86_64-2"
set ASFLAGS "$old_ASFLAGS"
}
}

View file

@ -27,6 +27,17 @@
if ![regexp $want $got] then {
fail "$testname -s option $got\n"
} else {
--- binutils.orig/binutils/testsuite/binutils-all/objdump.exp 2023-08-03 13:09:07.631503783 +0100
+++ binutils-2.41/binutils/testsuite/binutils-all/objdump.exp 2023-08-03 14:51:54.621295727 +0100
@@ -921,7 +921,7 @@ proc test_objdump_S { } {
}
}
-test_objdump_S
+# test_objdump_S
# Test objdump --private
proc test_objdump_P {} {
--- binutils.orig/ld/testsuite/ld-scripts/ld-version.d 2023-08-03 13:09:07.949504208 +0100
+++ binutils-2.41/ld/testsuite/ld-scripts/ld-version.d 2023-08-03 15:13:01.374590134 +0100
@@ -4,4 +4,4 @@
@ -63,7 +74,7 @@
+++ binutils-2.41/ld/testsuite/ld-x86-64/x86-64.exp 2023-08-03 15:46:29.537416942 +0100
@@ -1386,7 +1386,7 @@ if { [isnative] && [check_compiler_avail
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2b.so" \
"$DIRECT_EXTERN_ACCESS_CFLAGS $NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
"$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
{ protected-func-1b.c } \
- {{error_output "pr28875-func.err"}} \
+ {} \
@ -72,13 +83,21 @@
[list \
@@ -1402,7 +1402,7 @@ if { [isnative] && [check_compiler_avail
"$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2c.so" \
"$DIRECT_EXTERN_ACCESS_CFLAGS $NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
"$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
{ protected-func-1b.c } \
- {{error_output "pr28875-func.err"}} \
+ {} \
"protected-func-2a" \
] \
[list \
@@ -2155,7 +2155,6 @@ if { [isnative] && [check_compiler_avail
}
}
- undefined_weak "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
undefined_weak "-fPIE" ""
undefined_weak "-fPIE" "-pie"
undefined_weak "-fPIE" "-Wl,-z,nodynamic-undefined-weak"
--- binutils.orig/binutils/testsuite/binutils-all/addr2line.exp 2023-08-04 14:00:37.692356718 +0100
+++ binutils-2.41/binutils/testsuite/binutils-all/addr2line.exp 2023-08-04 14:04:32.627697316 +0100
@@ -39,9 +39,9 @@ if ![regexp -line "^(\[0-9a-fA-F\]+)? +\
@ -170,6 +189,31 @@
{pr29086.c} \
{} \
"pr29086" \
diff -rup binutils.orig/ld/testsuite/ld-aarch64/bti-plt-5.d binutils-2.41/ld/testsuite/ld-aarch64/bti-plt-5.d
--- binutils.orig/ld/testsuite/ld-aarch64/bti-plt-5.d 2023-08-15 09:03:21.676463687 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/bti-plt-5.d 2023-08-15 09:17:56.751533569 +0100
@@ -12,8 +12,8 @@ Disassembly of section \.plt:
[0-9a-f]+ <.*>:
.*: d503245f bti c
.*: a9bf7bf0 stp x16, x30, \[sp, #-16\]!
-.*: 90000090 adrp x16, 410000 <.*>
-.*: f9...... ldr x17, \[x16, #....\]
+.*: 90000090 adrp x16, 4.0000 <.*>
+.*: f9...... ldr x17, \[x16, #.*\]
.*: 91...... add x16, x16, #0x...
.*: d61f0220 br x17
.*: d503201f nop
@@ -21,8 +21,8 @@ Disassembly of section \.plt:
[0-9a-f]+ <.*>:
.*: d503245f bti c
-.*: 90000090 adrp x16, 410000 <.*>
-.*: f9...... ldr x17, \[x16, #....\]
+.*: 90000090 adrp x16, 4.0000 <.*>
+.*: f9...... ldr x17, \[x16, #.*\]
.*: 91...... add x16, x16, #0x...
.*: d61f0220 br x17
.*: d503201f nop
diff -rup binutils.orig/ld/testsuite/ld-aarch64/erratum843419-far-full.d binutils-2.41/ld/testsuite/ld-aarch64/erratum843419-far-full.d
--- binutils.orig/ld/testsuite/ld-aarch64/erratum843419-far-full.d 2023-08-15 09:03:21.683463694 +0100
+++ binutils-2.41/ld/testsuite/ld-aarch64/erratum843419-far-full.d 2023-08-15 09:05:41.549608111 +0100
@ -723,6 +767,25 @@ diff -rup binutils.orig/ld/testsuite/ld-powerpc/tls32.d binutils-2.41/ld/testsui
[list "pr26580-4" \
"" "" \
{pr26580-a.c} "pr26580-4" "pr26580-4.out" "-fcommon" "c" "" \
@@ -1579,18 +1575,6 @@ if { [istarget *-*-linux*]
"pr22393-2-static" \
"pass.out" \
] \
- [list \
- "Run pr21964-4" \
- "" \
- "" \
- {pr21964-4.c} \
- "pr21964-4" \
- "pass.out" \
- "" \
- "" \
- "" \
- "-ldl" \
- ] \
]
}
--- binutils.orig/ld/testsuite/ld-s390/s390.exp 2023-08-15 14:30:13.292890888 +0100
+++ binutils-2.41/ld/testsuite/ld-s390/s390.exp 2023-08-15 14:48:38.327360916 +0100
@@ -35,6 +35,8 @@ if { !([istarget "s390-*-*"] || [istarge
@ -773,6 +836,19 @@ diff -rup binutils.orig/ld/testsuite/ld-powerpc/tls32.d binutils-2.41/ld/testsui
# Check cross references for ld -r
if { ![ld_compile "$CC_FOR_TARGET $NOSANITIZE_CFLAGS $NOLTO_CFLAGS" "$srcdir/$subdir/cross4.c" tmpdir/cross4.o] } {
--- binutils.orig/ld/testsuite/ld-shared/shared.exp 2023-08-15 14:30:13.309890913 +0100
+++ binutils-2.41/ld/testsuite/ld-shared/shared.exp 2023-08-15 15:00:31.929701875 +0100
@@ -204,6 +204,10 @@ if { [istarget mips*-*-*] && ! [at_least
}
verbose "Using $picflag to compile PIC code"
+if { [istarget "i686-*-*"] } {
+ return
+}
+
# Compile the main program.
if ![ld_compile "$CC_FOR_TARGET $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] {
unsupported "shared (non PIC)"
--- binutils.orig/ld/testsuite/ld-srec/srec.exp 2023-08-15 14:30:13.315890922 +0100
+++ binutils-2.41/ld/testsuite/ld-srec/srec.exp 2023-08-15 15:01:24.104806404 +0100
@@ -442,6 +442,9 @@ setup_xfail "csky*-*-*"
@ -960,190 +1036,18 @@ diff -rup binutils.orig/ld/testsuite/ld-powerpc/tls32no.d binutils-2.42.50-6b19a
.*: (3b de 80 a0|.. 80 de 3b) addi r30,r30,-[0-9]+
.*: (38 7f ff e4|e4 ff 7f 38) addi r3,r31,-28
.*: (48 00 00 6d|6d 00 00 48) bl .*
720,725d719
< [list "Run pr20267a" \
< "-O2 -flto -fcommon tmpdir/pr20267a.o tmpdir/libpr20267a.a" "" \
< {dummy.c} "pr20267a" "pass.out" "-flto -O2 -fcommon" "c"] \
< [list "Run pr20267b" \
< "-O2 -flto -fcommon tmpdir/pr20267a.o tmpdir/libpr20267b.a" "" \
< {dummy.c} "pr20267b" "pass.out" "-flto -O2 -fcommon" "c"] \
diff -rup bin.orig/ld/testsuite/ld-x86-64/sframe-pltgot-1.d binutils-2.43.50-55e32b3c682/ld/testsuite/ld-x86-64/sframe-pltgot-1.d
--- bin.orig/ld/testsuite/ld-x86-64/sframe-pltgot-1.d 2024-11-04 13:34:33.522976068 +0000
+++ binutils-2.43.50-55e32b3c682/ld/testsuite/ld-x86-64/sframe-pltgot-1.d 2024-11-04 13:37:17.985526186 +0000
@@ -23,6 +23,6 @@ Contents of the SFrame section .sframe:
func idx \[1\]: pc = 0x1010, size = 64 bytes
STARTPC\[m\] +CFA +FP +RA +
- 0+0000 +sp\+16 +u +f +
+ 0+0000 +sp\+[0-9]+ +u +f +
#...
diff -rup bin.orig/ld/testsuite/ld-x86-64/sframe-pltgot-2.d binutils-2.43.50-55e32b3c682/ld/testsuite/ld-x86-64/sframe-pltgot-2.d
--- bin.orig/ld/testsuite/ld-x86-64/sframe-pltgot-2.d 2024-11-04 13:34:33.522976068 +0000
+++ binutils-2.43.50-55e32b3c682/ld/testsuite/ld-x86-64/sframe-pltgot-2.d 2024-11-04 13:37:43.874611190 +0000
@@ -23,6 +23,6 @@ Contents of the SFrame section .sframe:
func idx \[1\]: pc = 0x1010, size = 32 bytes
STARTPC\[m\] +CFA +FP +RA +
- 0+0000 +sp\+16 +u +f +
+ 0+0000 +sp\+[0-9]+ +u +f +
#...
diff -rup bin.orig/ld/testsuite/ld-x86-64/sframe-pltgot-2.d binutils-2.43.50-55e32b3c682/ld/testsuite/ld-x86-64/sframe-pltgot-2.d
--- bin.orig/ld/testsuite/ld-x86-64/sframe-pltgot-2.d 2024-11-04 14:26:07.983307843 +0000
+++ binutils-2.43.50-55e32b3c682/ld/testsuite/ld-x86-64/sframe-pltgot-2.d 2024-11-04 14:26:18.781353913 +0000
@@ -21,7 +21,7 @@ Contents of the SFrame section .sframe:
0+1000 +sp\+16 +u +f +
0+1006 +sp\+24 +u +f +
- func idx \[1\]: pc = 0x1010, size = 32 bytes
+ func idx \[1\]: pc = 0x1010, size = [0-9]+ bytes
STARTPC\[m\] +CFA +FP +RA +
0+0000 +sp\+[0-9]+ +u +f +
--- binutils.orig/ld/testsuite/ld-bootstrap/bootstrap.exp 2025-02-03 11:13:50.829608207 +0000
+++ binutils-with-gold-2.44/ld/testsuite/ld-bootstrap/bootstrap.exp 2025-02-03 11:17:34.589136290 +0000
@@ -29,6 +29,12 @@ if ![isnative] {
return
}
+# FIXME: The AArch64 rawhide libz and libjanson libraries are built
+# without GCS support and so cannot be linked.
+if {[istarget "aarch64*-*-*"] } {
+ return
+}
+
# Skip if OFILES aren't provided, it can happen when lauching
# the testsuites outside the build directory.
if {![info exists OFILES]} {
--- binutils.orig/ld/testsuite/ld-vsb/vsb.exp 2025-02-07 11:24:06.084525843 +0000
+++ binutils-with-gold-2.44/ld/testsuite/ld-vsb/vsb.exp 2025-02-07 11:26:34.984041584 +0000
@@ -366,7 +366,6 @@ proc visibility_run {visibility} {
|| [ string match $visibility "protected_weak" ]
|| [ string match $visibility "normal" ] } {
setup_xfail "powerpc-*-linux*"
- setup_xfail "s390x-*-linux*"
if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
setup_xfail "sparc*-*-linux*"
}
--- binutils.orig/ld/testsuite/ld-x86-64/x86-64.exp 2025-03-31 09:24:34.260146421 +0100
+++ binutils-with-gold-2.44.50-7109ea04ac7/ld/testsuite/ld-x86-64/x86-64.exp 2025-03-31 09:25:38.951438172 +0100
@@ -2167,7 +2167,6 @@ if { [isnative] && [check_compiler_avail
}
}
- undefined_weak "$DIRECT_EXTERN_ACCESS_CFLAGS $NOPIE_CFLAGS" "$NOPIE_LDFLAGS"
undefined_weak "-fPIE" "$NOPIE_LDFLAGS"
undefined_weak "-fPIE" "-pie"
undefined_weak "-fPIE" "$NOPIE_LDFLAGS -Wl,-z,nodynamic-undefined-weak"
--- binutils.orig/ld/testsuite/ld-shared/shared.exp 2025-03-31 11:25:50.792541423 +0100
+++ binutils-with-gold-2.44.50-7109ea04ac7/ld/testsuite/ld-shared/shared.exp 2025-03-31 11:27:36.680868036 +0100
@@ -205,6 +205,10 @@ if { [istarget mips*-*-*] && ! [at_least
}
verbose "Using $picflag to compile PIC code"
+if { [istarget "i686-*-*"] } {
+ return
+}
+
# Compile the main program.
global PLT_CFLAGS NOPIE_CFLAGS NOPIE_LDFLAGS
verbose "Using $NOPIE_CFLAGS to compile and $NOPIE_LDFLAGS to link non PIC code"
--- binutils.orig/ld/testsuite/ld-elf/shared.exp 2025-03-31 11:25:50.643275417 +0100
+++ binutils-with-gold-2.44.50-7109ea04ac7/ld/testsuite/ld-elf/shared.exp 2025-03-31 11:28:38.353212702 +0100
@@ -1612,18 +1612,6 @@ if { [istarget *-*-linux*]
"pr22393-2-static" \
"pass.out" \
] \
- [list \
- "Run pr21964-4" \
- "$NOPIE_LDFLAGS" \
- "" \
- {pr21964-4.c} \
- "pr21964-4" \
- "pass.out" \
- "$NOPIE_CFLAGS" \
- "" \
- "" \
- "-ldl" \
- ] \
]
}
--- fred/binutils/testsuite/binutils-all/objdump.exp 2026-02-16 09:03:27.457277379 +0000
+++ binutils-with-gold-2.46.50-2d306bf8a70/binutils/testsuite/binutils-all/objdump.exp 2026-02-16 09:03:30.592967621 +0000
@@ -957,7 +957,7 @@ proc test_objdump_S { } {
}
}
-test_objdump_S
+# test_objdump_S
# Test objdump --map-global-vars on file containing dwarf-2 encoding information.
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pic.d binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pic.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pic.d 2026-03-20 13:02:05.468700958 +0000
+++ binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pic.d 2026-03-20 13:05:31.155200130 +0000
@@ -1,6 +1,6 @@
#source: data-reloc.s
#as: -march=rv32i -mabi=ilp32 -defsym __abs__=1 -defsym __addr__=1 -defsym __undef__=1
-#ld: -m[riscv_choose_ilp32_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared
+#ld: -m[riscv_choose_ilp32_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared -z notext
#objdump: -dR
.*:[ ]+file format .*
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pie.d binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pie.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pie.d 2026-03-20 13:02:05.468700958 +0000
+++ binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv32-pie.d 2026-03-20 13:05:52.846252771 +0000
@@ -1,6 +1,6 @@
#source: data-reloc.s
#as: -march=rv32i -mabi=ilp32 -defsym __abs__=1 -defsym __addr__=1
-#ld: -m[riscv_choose_ilp32_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -pie
+#ld: -m[riscv_choose_ilp32_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -pie -z notext
#objdump: -dR
.*:[ ]+file format .*
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv32-symbolic.d binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv32-symbolic.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv32-symbolic.d 2026-03-20 13:02:05.468700958 +0000
+++ binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv32-symbolic.d 2026-03-20 13:06:01.427273593 +0000
@@ -1,6 +1,6 @@
#source: data-reloc.s
#as: -march=rv32i -mabi=ilp32 -defsym __abs__=1 -defsym __addr__=1 -defsym __undef__=1
-#ld: -m[riscv_choose_ilp32_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared -Bsymbolic
+#ld: -m[riscv_choose_ilp32_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared -Bsymbolic -z notext
#objdump: -dR
.*:[ ]+file format .*
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pic.d binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pic.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pic.d 2026-03-20 13:02:05.468700958 +0000
+++ binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pic.d 2026-03-20 13:04:07.601997355 +0000
@@ -1,6 +1,6 @@
#source: data-reloc.s
#as: -march=rv64i -mabi=lp64 -defsym __64_bit__=1 -defsym __abs__=1 -defsym __addr__=1 -defsym __undef__=1
-#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared
+#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared -z notext
#objdump: -dR
.*:[ ]+file format .*
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pie.d binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pie.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pie.d 2026-03-20 13:02:05.468700958 +0000
+++ binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv64-pie.d 2026-03-20 13:04:57.106117494 +0000
@@ -1,6 +1,6 @@
#source: data-reloc.s
#as: -march=rv64i -mabi=lp64 -defsym __64_bit__=1 -defsym __abs__=1 -defsym __addr__=1
-#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -pie
+#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -pie -z notext
#objdump: -dR
.*:[ ]+file format .*
diff -rup binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv64-symbolic.d binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv64-symbolic.d
--- binutils.orig/ld/testsuite/ld-riscv-elf/data-reloc-rv64-symbolic.d 2026-03-20 13:02:05.468700958 +0000
+++ binutils-with-gold-2.46/ld/testsuite/ld-riscv-elf/data-reloc-rv64-symbolic.d 2026-03-20 13:05:14.650160073 +0000
@@ -1,6 +1,6 @@
#source: data-reloc.s
#as: -march=rv64i -mabi=lp64 -defsym __64_bit__=1 -defsym __abs__=1 -defsym __addr__=1 -defsym __undef__=1
-#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared -Bsymbolic
+#ld: -m[riscv_choose_lp64_emul] -Ttext 0x8000 --defsym _start=0x0 --defsym abs=0x100 --defsym abs_local=0x200 -shared -Bsymbolic -z notext
#objdump: -dR
.*:[ ]+file format .*
--- binutils.orig/ld/testsuite/ld-plugin/lto.exp 2024-11-26 16:03:01.214914908 +0000
+++ binutils-2.41/ld/testsuite/ld-plugin/lto.exp 2024-11-26 16:04:39.983307748 +0000
@@ -638,12 +638,6 @@ set lto_run_tests [list \
[list "Run pr20276" \
"-O2 -flto tmpdir/pr20276a.o tmpdir/pr20276b.o" "" \
{dummy.c} "pr20276" "pass.out" "-flto -O2" "c"] \
- [list "Run pr20267a" \
- "-O2 -flto -fcommon tmpdir/pr20267a.o tmpdir/libpr20267a.a" "" \
- {dummy.c} "pr20267a" "pass.out" "-flto -O2 -fcommon" "c"] \
- [list "Run pr20267b" \
- "-O2 -flto -fcommon tmpdir/pr20267a.o tmpdir/libpr20267b.a" "" \
- {dummy.c} "pr20267b" "pass.out" "-flto -O2 -fcommon" "c"] \
[list "Run pr22502" \
"-O2 -flto tmpdir/pr22502a.o tmpdir/pr22502b.o" "" \
{dummy.c} "pr20267" "pass.out" "-flto -O2 -fcommon" "c"] \

View file

@ -6,8 +6,8 @@ Name: binutils%{?_with_debug:-debug}
# A version number of X.XX.90 is a pre-release snapshot.
# The variable %%{source} (see below) should be set to indicate which of these
# origins is being used.
Version: 2.47.50
Release: 6%{?dist}
Version: 2.43.1
Release: 14%{?dist}
License: GPL-3.0-or-later AND (GPL-3.0-or-later WITH Bison-exception-2.2) AND (LGPL-2.0-or-later WITH GCC-exception-2.0) AND BSD-3-Clause AND GFDL-1.3-or-later AND GPL-2.0-or-later AND LGPL-2.1-or-later AND LGPL-2.0-or-later
URL: https://sourceware.org/binutils
@ -24,10 +24,8 @@ URL: https://sourceware.org/binutils
# --without docs Skip building documentation. Default is with docs, except when building a cross binutils.
# --without gold Disable building of the GOLD linker.
# --without gprofng Do not build the GprofNG profiler.
# --without systemzlib Use the binutils version of zlib. Default is to use the system version.
# --without systemzlib Use the binutils version of zlib.
# --without testsuite Do not run the testsuite. Default is to run it.
# --without xxhash Do not link against the xxhash library.
# --without zstd Do not link against the zstd library.
# Other configuration options can be set by modifying the following defines.
@ -87,45 +85,30 @@ URL: https://sourceware.org/binutils
# Enable the use of separate code and data segments. Whilst potentially
# useful from a security point of view, it is problematic from a file
# size point of view. So for now, only enable it for the i686, x86_64
# and riscv64 architectures as these are the ones that have the most
# potential vulnerability.
%ifarch %{ix86} x86_64 riscv64
# size point of view. So for now, only enable it for the i686 and x86_64
# architectures as these are the ones that have the most potential
# vulnerability.
%ifarch %{ix86} x86_64
%define enable_separate_code 1
%else
%define enable_separate_code 0
%endif
# Enable the creation of relocations against the contents of read-only
# sections (such as .text). This is a security vulnerability, so it is
# disabled here by default.
# Note - the upstream GNU Binutils sources enable the generation of this
# kind of relocation by default, so this is a difference between Ferdora
# and upstream.
%define enable_textrel 0
# Indicate where the sources come from.
#
# Official releases come from: https://ftp.gnu.org/gnu/binutils
# Pre releases come from: https://sourceware.org/pub/binutils/snapshots/
# (Even numbered pre releases include gold)
# Snapshots come from: https://snapshots.sourceware.org/binutils/trunk/
# and are turned into commits by following this process:
# Tarballs are made by hand following a process outlined in this document:
# https://fedoraproject.org/wiki/BinutilsRawhideSync
# Tarballs are made by hand as and when necessary.
#
# Note - the Linux Kernel binutils releases are too unstable and contain
# too many controversial patches so we stick with the official GNU version
# instead.
#
# Note - there is a confusing misnomer in the URL for the pre-release tarballs.
# They are a "snapshot" of the about to be released branch sources, rather than
# a snapshot of the mainline development sources.
# %%define source official-release
# %%define source even-pre-release
# %%define source odd-pre-release
%define source snapshot
%define source official-release
# %%define source pre-release
# %%define source snapshot
# %%define source tarball
# For snapshots and tarballs an extension is used to indicate the commit ID.
@ -133,50 +116,39 @@ URL: https://sourceware.org/binutils
# correctly. Note %%(echo) is used because you cannot directly set a
# spec variable to a hexadecimal string value.
%define commit_id %(echo "48c933a69a8")
%define commit_id %(echo "49cc32b732a")
#----End of Configure Options------------------------------------------------
# Default: Not bootstrapping.
%bcond bootstrap 0
%bcond_with bootstrap
# Default: Not debug
%bcond debug 0
%bcond_with debug
# Default: support debuginfod.
%bcond debuginfod 1
%bcond_without debuginfod
# Default: Always build documentation.
%bcond docs 1
%bcond_without docs
# Default: build binutils-gprofng package.
%bcond gprofng 1
%bcond_without gprofng
# Default: Use the system supplied version of the zlib compression library.
%bcond systemzlib 1
%bcond_without systemzlib
# Default: Always run the testsuite.
%bcond testsuite 1
# Default: Use the xxhash-devel library.
%bcond xxhash 1
# Default: Use the libztsd-devel library.
%bcond zstd 1
# Default: Do not create cross targeted versions of the binutils.
%bcond crossbuilds 0
%bcond_without testsuite
# Note - in the future the gold linker will become deprecated in Fedora.
# And it will be deprecated in RHEL-11.
%if 0%{?rhel} >= 11
%bcond gold 0
# Note - in the future the gold linker may become deprecated.
%ifnarch riscv64
%bcond_without gold
%else
# RISC-V does not have ld.gold thus disable by default.
%ifarch riscv64
%bcond gold 0
%else
%bcond gold 1
%endif
%bcond_with gold
%endif
# Allow the user to override the compiler used to build the binutils.
# The default build compiler is gcc if %%toolchain is not clang.
%if "%toolchain" == "clang"
%bcond clang 1
%bcond_without clang
%else
%bcond clang 0
%bcond_with clang
%endif
%if %{with clang}
@ -185,6 +157,10 @@ URL: https://sourceware.org/binutils
%global toolchain gcc
%endif
# (Do not) create cross targeted versions of the binutils.
%bcond_with crossbuilds
# %%bcond_without crossbuilds
%if %{with bootstrap}
%undefine with_docs
%undefine with_testsuite
@ -212,35 +188,23 @@ URL: https://sourceware.org/binutils
# its debug informnation.
%undefine __brp_strip_static_archive
# ODD numbered upstream GNU Binutils releases do not include the sources
# for the GOLD linker, so we use a snapshot from the mainline development
# sources instead - but only for GOLD, not for the rest of the binutils.
# FIXME: Delete this once the gold linker is fully deprecated.
# %%define gold_tarball %%(echo "binutils-with-gold-2.46.50-f85ff0c4bce")
%define gold_tarball none
#----------------------------------------------------------------------------
%if "%{source}" == "official-release"
# Source0: https://ftp.gnu.org/gnu/binutils/binutils-with-gold-%%{version}.tar.xz
Source0: https://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz
%elif "%{source}" == "even-pre-release"
Source0: binutils-with-gold-%{version}.tar.xz
%elif "%{source}" == "odd-pre-release"
%if "%{source}" == "tarball"
Source0: binutils-%{version}-%{commit_id}.tar.xz
%endif
%if "%{source}" == "snapshot"
Source0: binutils-%{version}-%{commit_id}.tar.xz
%endif
%if "%{source}" == "pre-release"
Source0: binutils-%{version}.tar.xz
%elif "%{source}" == "snapshot"
Source0: binutils-with-gold-%{version}-%{commit_id}.tar.xz
%elif "%{source}" == "tarball"
Source0: binutils-with-gold-%{version}-%{commit_id}.tar.xz
%endif
%if "%{source}" == "official-release"
Source0: https://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.xz
%endif
Source1: binutils-2.19.50.0.1-output-format.sed
%if "%{gold_tarball}" != "none"
Source2: %{gold_tarball}.tar.xz
%endif
#----------------------------------------------------------------------------
# Purpose: Use /lib64 and /usr/lib64 instead of /lib and /usr/lib in the
@ -291,79 +255,121 @@ Patch06: binutils-2.27-aarch64-ifunc.patch
# Lifetime: Permanent.
Patch07: binutils-do-not-link-with-static-libstdc++.patch
# Purpose: Allow the binutils to be configured with any (recent) version of
# autoconf.
# Lifetime: Fixed in 2.46 (maybe ?)
Patch08: binutils-autoconf-version.patch
# Purpose: Stop libtool from inserting useless runpaths into binaries.
# Lifetime: Who knows.
Patch09: binutils-libtool-no-rpath.patch
# Purpose: Fix binutils testsuite failures.
# Lifetime: Permanent, but varies with each rebase.
Patch10: binutils-testsuite-fixes.patch
# Purpose: Fix binutils testsuite failures for the RISCV-64 target.
# Lifetime: Permanent, but varies with each rebase.
Patch11: binutils-riscv-testsuite-fixes.patch
# Purpose: Fix the ar test of non-deterministic archives.
# Lifetime: Fixed in 2.46
Patch12: binutils-fix-ar-test.patch
# Purpose: Fix a seg fault in the AArch64 linker when building u-boot.
# Lifetime: Fixed in 2.46
Patch13: binutils-aarch64-small-plt0.patch
%if %{with gold}
# Purpose: Make the GOLD linker ignore the "-z pack-relative-relocs" command line option.
# Lifetime: Fixed in 2.46 (maybe)
Patch14: binutils-gold-pack-relative-relocs.patch
# Purpose: Let the gold linker ignore --error-execstack and --error-rwx-segments.
# Lifetime: Fixed in 2.46 (maybe)
Patch15: binutils-gold-ignore-execstack-error.patch
# Purpose: Allow OS specific sections in section groups.
# Lifetime: Fixed in 2.43 (maybe)
# Patch08: binutils-special-sections-in-groups.patch
# Purpose: Stop gold from aborting when input sections with the same name
# have different flags.
# Lifetime: Fixed in 2.43 (maybe)
Patch16: binutils-gold-mismatched-section-flags.patch
Patch09: binutils-gold-mismatched-section-flags.patch
# Purpose: Change the gold configuration script to only warn about
# unsupported targets. This allows the binutils to be built with
# BPF support enabled.
# Lifetime: Permanent.
Patch17: binutils-gold-warn-unsupported.patch
Patch10: binutils-gold-warn-unsupported.patch
# Purpose: Enable the creation of .note.gnu.property sections by the GOLD
# linker for x86 binaries.
# Lifetime: Permanent.
Patch18: binutils-gold-i386-gnu-property-notes.patch
Patch11: binutils-gold-i386-gnu-property-notes.patch
# Purpose: Allow the binutils to be configured with any (recent) version of
# autoconf.
# Lifetime: Fixed in 2.44 (maybe ?)
Patch12: binutils-autoconf-version.patch
# Purpose: Stop libtool from inserting useless runpaths into binaries.
# Lifetime: Who knows.
Patch13: binutils-libtool-no-rpath.patch
# Purpose: Stop an abort when using dwp to process a file with no dwo links.
# Lifetime: Fixed in 2.46 (maybe)
Patch19: binutils-gold-empty-dwp.patch
# Lifetime: Fixed in 2.44 (maybe)
Patch15: binutils-gold-empty-dwp.patch
# Purpose: Enable building the gold linker with the target is s390x-linux.
# Lifetime: Fixed in 2.48 (maybe)
Patch20: binutils-gold-s390-configure.patch
# Purpose: Fix binutils testsuite failures.
# Lifetime: Permanent, but varies with each rebase.
Patch16: binutils-testsuite-fixes.patch
%endif
# Purpose: Fix binutils testsuite failures for the RISCV-64 target.
# Lifetime: Permanent, but varies with each rebase.
Patch17: binutils-riscv-testsuite-fixes.patch
# Purpose: Fix ld testsuite failures when enable_textrel is set.
# Lifetime: Permanent.
Patch21: binutils-ld-default-z-text.patch
# Purpose: Make the GOLD linker ignore the "-z pack-relative-relocs" command line option.
# Lifetime: Fixed in 2.44 (maybe)
Patch18: binutils-gold-pack-relative-relocs.patch
# Purpose: Let the gold linker ignore --error-execstack and --error-rwx-segments.
# Lifetime: Fixed in 2.44 (maybe)
Patch19: binutils-gold-ignore-execstack-error.patch
# Purpose: Fix the ar test of non-deterministic archives.
# Lifetime: Fixed in 2.44
Patch20: binutils-fix-ar-test.patch
# Purpose: Fix ppc64 TLS optimization bug with -fno-plt code.
# Lifetime: Fixed in 2.44
Patch21: binutils-ppc64-TLS-no_plt-optimization-bug.patch
# Purpose: Place the .build-id section near the ELF headers
# Lifetime: Fixed in 2.44
Patch22: binutils-linker-script-build-id-placement.patch
# Purpose: Stops a call to abort in the linker when processing fuzzed input.
# Lifetime: Fixed in 2.45
Patch23: binutils-ld-gen-dynamic-relocs.patch
# Purpose: Stops a call to abort in the linker when processing fuzzed input.
# Lifetime: Fixed in 2.45
Patch24: binutils-ld-sym-hashes.patch
# Purpose: Stops excessive memory use when copying corrupt files.
# Lifetime: Fixed in 2.45
Patch25: binutils-CVE-2025-7545.patch
# Purpose: Stops illegal memory access when parsing corrupt files.
# Lifetime: Fixed in 2.45
Patch26: binutils-CVE-2025-7546.patch
# Purpose: Stops a potential null pointer dereference when generating sframe
# information in the assembler.
# Lifetime: Fixed in 2.45
Patch27: binutils-sframe-PR32879.patch
# Purpose: Stops a potential illegal memory access when linking a corrupt
# input file. PR 33457
# Lifetime: Fixed in 2.46
Patch28: binutils-CVE-2025-11083.patch
# Purpose: Stops a potential illegal memory access when linking a corrupt
# input file. PR 33464
# Lifetime: Fixed in 2.46
Patch29: binutils-CVE-2025-11082.patch
# Purpose: Stops a potential illegal memory access when linking a corrupt
# input file. PR 33451
# Lifetime: Fixed in 2.46
Patch30: binutils-CVE-2025-11495.patch
# Purpose: Stops a potential illegal memory access when linking a corrupt
# input file. PR 33499
# Lifetime: Fixed in 2.46
Patch31: binutils-CVE-2025-11494.patch
# Purpose: Stops a potential illegal memory access when linking a corrupt
# input file. PR 33455
# Lifetime: Fixed in 2.46
Patch32: binutils-CVE-2025-11840.patch
# Purpose: Stops a potential call to abort when displaying the debug info
# of a corrupt input file. PR 33448
# Lifetime: Fixed in 2.46
Patch33: binutils-CVE-2025-11839.patch
#----------------------------------------------------------------------------
# Purpose: Remove the Build protected-func-2 without PIE linker tests
# as these are currently failing.
# Lifetime: TEMPORARY - should be fixed by the 2.46 release.
Patch98: binutils-remove-ld-protected-func-2-test.patch
# Purpose: Suppress the x86 linker's p_align-1 tests due to kernel bug on CentOS-10.
# Purpose: Suppress the x86 linker's p_align-1 tests due to kernel bug on CentOS-10
# Lifetime: TEMPORARY
Patch99: binutils-suppress-ld-align-tests.patch
@ -381,9 +387,6 @@ Provides: bundled(libiberty)
# Perl, sed and touch are all used in the %%prep section of this spec file.
BuildRequires: autoconf, automake, perl, sed, coreutils, make
# Bison is used to generate gold/yyscript.c and ld/ldgram.c.
BuildRequires: bison
%if %{with clang}
BuildRequires: clang compiler-rt
%else
@ -391,8 +394,8 @@ BuildRequires: gcc
%endif
%if %{with gold}
# The GOLD testsuite needs a static libc++
BuildRequires: libstdc++-static
# Gold needs bison in order to build gold/yyscript.c. The GOLD testsuite needs a static libc++
BuildRequires: bison, m4, gcc-c++, libstdc++-static
%if ! %{with clang}
BuildRequires: gcc-c++
@ -430,19 +433,20 @@ BuildRequires: zlib-devel
BuildRequires: elfutils-debuginfod-client-devel
%endif
%if %{with xxhash}
BuildRequires: xxhash-devel
%endif
%if %{with zstd}
BuildRequires: libzstd-devel
%endif
Requires(post): %{_sbindir}/alternatives
Requires(preun): %{_sbindir}/alternatives
# We also need rm.
Requires(post): coreutils
# %%if %%{with gold}
# # For now we make the binutils package require the gold sub-package.
# # That way other packages that have a requirement on "binutils" but
# # actually want gold will not have to be changed. In the future, if
# # we decide to deprecate gold, we can remove this requirement, and
# # then update other packages as necessary.
# Requires: binutils-gold >= %%{version}
# %%endif
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
%ifnarch %{arm}
@ -504,9 +508,7 @@ using libelf instead of BFD.
%package gold
Summary: The GOLD linker, a faster alternative to the BFD linker
# The GOLD linker is now deprecated as it is not being developed upstream.
# For more details see: https://fedoraproject.org/wiki/Changes/DeprecateGoldLinker
Provides: deprecated()
Provides: gold = %{version}-%{release}
Requires: binutils >= %{version}
%description gold
@ -531,6 +533,7 @@ linker, and it may become deprecated in the future.
Summary: Next Generating code profiling tool
Provides: gprofng = %{version}-%{release}
Requires: binutils = %{version}-%{release}
BuildRequires: bison
%description gprofng
GprofNG is the GNU Next Generation Profiler for analyzing the performance
@ -615,37 +618,17 @@ use by developers. It is NOT INTENDED FOR PRODUCTION use.
%prep
%if "%{gold_tarball}" != "none"
%setup -q -n binutils-%{version} -a 0
%if %{with gold}
%setup -q -n binutils-%{version} -D -b 2
mv ../%{gold_tarball}/gold .
mv ../%{gold_tarball}/elfcpp .
%endif
%autopatch -p1
%elif "%{source}" == "snapshot"
%autosetup -p1 -n binutils-with-gold-%{version}-%{commit_id}
%elif "%{source}" == "official-release"
%autosetup -p1 -n binutils-with-gold-%{version}
%elif "%{source}" == "even-pre-release"
%autosetup -p1 -n binutils-with-gold-%{version}
%elif "%{source}" == "odd-pre-release"
%autosetup -p1 -n binutils-%{version}
%if "%{source}" == "snapshot"
%autosetup -p1 -n binutils-%{version}-%{commit_id}
%else
%autosetup -p1 -n binutils-with-gold-%{version}
%autosetup -p1 -n binutils-%{version}
%endif
# On ppc64 and aarch64, we might use 64KiB pages
sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*ppc.c
sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*aarch64.c
%if %{with gold}
sed -i -e '/common_pagesize/s/4 /64 /' gold/powerpc.cc
sed -i -e '/pagesize/s/0x1000,/0x10000,/' gold/aarch64.cc
%endif
# LTP sucks
perl -pi -e 's/i\[3-7\]86/i[34567]86/g' */conf*
@ -701,7 +684,6 @@ compute_global_configuration()
--enable-ld \
--enable-plugins \
--enable-64-bit-bfd \
--enable-default-hash-style=gnu \
--with-bugurl=%{dist_bug_report_url}"
%if %{without bootstrap}
@ -719,19 +701,7 @@ compute_global_configuration()
%endif
%if %{with systemzlib}
CARGS="$CARGS --with-system-zlib=yes"
%endif
%if %{with xxhash}
CARGS="$CARGS --with-xxhash=yes"
%else
CARGS="$CARGS --with-xxhash=no"
%endif
%if %{with zstd}
CARGS="$CARGS --with-zstd=yes"
%else
CARGS="$CARGS --with-zstd=no"
CARGS="$CARGS --with-system-zlib"
%endif
%if %{default_compress_debug}
@ -799,18 +769,16 @@ compute_global_configuration()
CARGS="$CARGS --enable-threads=no"
%endif
%if %{enable_textrel}
CARGS="$CARGS --enable-textrel-check=no"
%else
CARGS="$CARGS --enable-textrel-check=error"
%endif
# The binutils build system enables -Werror by default, which is a problem
# because there is a known issue with the libiberty library sources:
%if "%{source}" != "official-release"
# Since non official release tarballs are created directly from development
# sources they will have "development=true" set in the bfd/development.sh file.
# This enables -Werror by default, which is a problem because there is a
# known issue with the libiberty library:
# libiberty/cp-demangle.c: In function 'd_demangle_callback.constprop':
# libiberty/cp-demangle.c:6794:1: error: stack usage might be unbounded [-Werror=stack-usage=]
# So we explicitly disable werror for builds.
# So we explicitly disable werror for builds from these tarballs.
CARGS="$CARGS --enable-werror=no"
%endif
}
# run_target_configuration()
@ -835,16 +803,10 @@ run_target_configuration()
%set_build_flags
%if %{enable_lto}
# RHEL-121799: Builders may want to restrict the number of CPUs used by
# the LTO compiler. The normal way to do this is to set RPM_BUILD_NCPUS.
# But this only affects the -j option passed to make. By adding -flto=N
# we can also restrict the number of threads used by the LTO compiler.
export CFLAGS="$RPM_OPT_FLAGS -flto=$RPM_BUILD_NCPUS"
%endif
%ifarch %{power64}
export CFLAGS="$CFLAGS -Wno-error"
export CFLAGS="$RPM_OPT_FLAGS -Wno-error"
%else
export CFLAGS="$RPM_OPT_FLAGS"
%endif
%if %{with debug}
@ -854,10 +816,6 @@ run_target_configuration()
export CXXFLAGS="$CXXFLAGS $CFLAGS"
# Some GNU extensions to the C11 standard are used.
# Note set here as -std=gnu11 is not a valid G++ command line option.
export CFLAGS="$CFLAGS -std=gnu11"
# BZ 1541027 - include the linker flags from redhat-rpm-config as well.
export LDFLAGS=$RPM_LD_FLAGS
@ -875,8 +833,12 @@ run_target_configuration()
#
# Also enable the BPF target so that strip will work on BPF files.
case $target in
s390x*)
TARGS="--enable-targets=s390x-linux,x86_64-pep,bpf-unknown-none"
s390*)
# Note - The s390-linux target is there so that the GOLD linker will
# build. By default, if configured for just s390x-linux, the GOLD
# configure system will only include support for 64-bit targets, but
# the s390x gold backend uses both 32-bit and 64-bit templates.
TARGS="--enable-targets=s390-linux,s390x-linux,x86_64-pep,bpf-unknown-none"
;;
ia64*)
TARGS="--enable-targets=ia64-linux,x86_64-pep,bpf-unknown-none"
@ -941,8 +903,6 @@ build_target()
pushd $builddir
mkdir -p gas/doc
%if %{with docs}
# Because of parallel building, info has to be made after all.
# %%make_build %%{_smp_mflags} tooldir=%%{_prefix} all
@ -1173,9 +1133,6 @@ install_binutils()
%if %{without docs}
rm -f $local_mandir/{addr2line,ar,as,c++filt,elfedit,gp,ld,nm,objcopy,objdump,ranlib,readelf,size,strings,strip}*
rm -f $local_infodir/{as,bfd,binutils,ctf,gprof,ld,sframe}*
%if %{with gprofng}
rm -fr $local_infodir/../doc/gprofng
%endif
%endif
%if %{enable_shared}
@ -1373,13 +1330,12 @@ exit 0
%{_bindir}/[!l]*
# %%verify(symlink) does not work for some reason, so using "owner" instead.
%verify(owner) %{_bindir}/ld
# %%verify(mtime) does not work, probably because of the alternatives command in the %%post stage, so using "not mtime" instead. (#2277349)(RHEL-238406)
%verify(not mtime) %{_bindir}/ld.bfd
# %%verify(mtime) does not work, probably because of the alternatives command in the %%post stage, so using "owner" instead. (#2277349)
%verify(owner) %{_bindir}/ld.bfd
%if %{with gprofng}
%exclude %{_bindir}/gp-*
%exclude %{_bindir}/gprofng
%exclude %{_bindir}/gprofng-*
%endif
%exclude %dir %{_exec_prefix}/lib/debug
@ -1394,42 +1350,23 @@ exit 0
%{_infodir}/ctf-spec.info.*
%{_infodir}/gprof.info.*
%{_infodir}/sframe-spec.info.*
%if %{with gprofng}
%exclude %{_docdir}/gprofng/examples.tar.gz
%exclude %{_infodir}/gprofng*
%exclude %{_mandir}/man1/gprofng*
%{_mandir}/man1/gp-*
%{_mandir}/man1/gprofng*
%{_infodir}/gprofng*
%endif
%endif
%if %{enable_shared}
%{_libdir}/lib*.so
%{_libdir}/lib*.so.*
%dir %{_libdir}/bfd-plugins
%{_libdir}/bfd-plugins/libdep.so
%exclude %{_libdir}/libbfd.so
%exclude %{_libdir}/libopcodes.so
%exclude %{_libdir}/libctf.a
%exclude %{_libdir}/libctf-nobfd.a
%if %{with gprofng}
%exclude %{_libdir}/libgprofng.*
%endif
%endif
#------------------------------------
%files devel
%{_prefix}/include/*
%{_libdir}/lib*.a
%{_libdir}/libbfd.so
%{_libdir}/libopcodes.so
%if %{enable_shared}
%exclude %{_libdir}/lib*.la
%dir %{_libdir}/bfd-plugins
%{_libdir}/bfd-plugins/libdep.so
%endif
%if %{with debug}
@ -1437,39 +1374,29 @@ exit 0
%{_libdir}/bfd-plugins/libdep.a
%endif
#------------------------------------
%files devel
%{_prefix}/include/*
%{_libdir}/lib*.a
%{_libdir}/libbfd.so
%{_libdir}/libopcodes.so
%if %{enable_shared}
%exclude %{_libdir}/lib*.la
%endif
%if %{with gold}
%files gold
%{_bindir}/%{?cross}ld.gold
%endif
#------------------------------------
%if %{with gprofng}
%files gprofng
%{_bindir}/gp-*
%{_bindir}/gprofng
%{_bindir}/gprofng-*
%dir %{_libdir}/gprofng
%{_libdir}/gprofng/*
%{_sysconfdir}/gprofng.rc
%if %{enable_shared}
%{_libdir}/libgprofng.*
%endif
%if %{with docs}
%dir %{_docdir}/gprofng
%{_docdir}/gprofng/examples.tar.gz
%{_infodir}/gprofng*
%{_mandir}/man1/gprofng*
%endif
%endif
#------------------------------------
%if %{with crossbuilds}
%if "%{_target_platform}" != "aarch64-%{system}"
@ -1500,261 +1427,54 @@ exit 0
#----------------------------------------------------------------------------
%changelog
* Tue Sep 01 2026 Nick Clifton <nickc@redhat.com> - 2.47.50-6
- Rebase to commit 48c933a69a8
* Mon Oct 13 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-14
- Stop a potential call to abort when display the debug information of a corrupt input file. (#2404498)
* Tue Sep 01 2026 Jesus Checa Hidalgo <jchecahi@redhat.com> - 2.47.50-5
- Fix logic to enable and disable gold linker.
* Mon Oct 13 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-13
- Stop a potential illegal memory access when linking a corrupt input file. (#2404547)
* Wed Aug 19 2026 Nick Clifton <nickc@redhat.com> - 2.47.50-4
- Rebase to bring in commits d9ab6e42e739fe826b02a5f868586132ea2d893a and
- 0f9faaebc91bc1886a563bde6c178601b4be743b, thus fixing CVE-2026-19548. (#2514618)
* Mon Oct 13 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-12
- Stop a potential illegal memory access when linking a corrupt input file. (#2402830)
* Thu Aug 13 2026 Nick Clifton <nickc@redhat.com> - 2.47.50-3
- Switch from using %%bcond_with and %%bcond_without to just %%bcond <0|1>
* Fri Oct 10 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-11
- Stop a potential illegal memory access when linking a corrupt input file. (#2402827)
* Thu Aug 13 2026 Nick Clifton <nickc@redhat.com> - 2.47.50-2
- Re-enable the gold linker - for now - for Rawhide.
* Fri Oct 03 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-10
- Stop a potential illegal memory access when linking a corrupt input file. (#2400311)
* Wed Aug 12 2026 Nick Clifton <nickc@redhat.com> - 2.47.50-1
- Rebase to commit 4e8ba93fdb2.
- Disable the gold linker for Rawhide as well.
* Thu Oct 02 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-9
- Stop a potential illegal memory access when linking a corrupt input file. (#2400304)
* Wed Aug 12 2026 Yaakov Selkowitz <yselkowi@redhat.com>
- Disable the gold linker by default for RHEL-11+.
* Mon Jul 21 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-8
- Stop a potential null pointer dereference when generating sframe information. (#1282126)
* Mon Jul 27 2026 Nick Clifton <nickc@redhat.com> - 2.47-1
- Rebase to 2.47 release.
* Mon Jul 14 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-7
- Stop excessive memory allocation when copying corrupt files. (#2379829)
- Stop illegal memory access when parsing corrupt files. (#2379836)
* Wed Jul 15 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2.46.90-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Tue Feb 11 2025 Nick Clifton <nickc@redhat.com> - 2.43.1-6
- Stop a call to abort in the linker when processing fuzzed input. (#2344837)
- Fix an illegal memory access when the linker processed a fuzzed input file. (#2344835)
* Mon Jul 13 2026 Nick Clifton <nickc@redhat.com> - 2.46.90-1
- Rebase to 2.47 pre-release tarball.
* Fri Dec 13 2024 Björn Esser <besser82@fedoraproject.org> - 2.43.1-5
- Restore the .note.build-id section placement patch. (#2331487)
* Thu Jun 25 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-12
- Rebase to commit f85ff0c4bce
* Tue Nov 26 2024 Björn Esser <besser82@fedoraproject.org> - 2.43.1-4
- Fix ppc64 TLS optimization bug with -fno-plt code. (#2324491)
* Thu Jun 11 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-11
- Fix linker testsuite problem for Risc-V.
* Thu Jun 04 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-10
- Rebase to commit 48997323b0f
* Thu May 14 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-9
- Rebase to commit 2ea3f3a7ac2
* Fri Apr 24 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-8
- Rebase to commit 991cf245839.
* Wed Apr 08 2026 Nick Clifton <nickc@redhat.com> - 2.45.50-7
- Add support for zstd compression. (#2454341)
* Tue Apr 07 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-6
- Rebase to commit c220f3ab8c0
* Mon Mar 30 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-5
- Rebase to commit c220f3ab8c0
* Fri Mar 20 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-4
- Fix Risc-V linker testsuite failures caused by #2428281.
* Mon Mar 16 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-3
- Rebase to commit d712202846b.
* Mon Mar 02 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-2
- Rebase to commit dd9a411627a.
* Mon Feb 16 2026 Nick Clifton <nickc@redhat.com> - 2.46.50-1
- Rebase to commit 2d306bf8a70
* Mon Feb 09 2026 Nick Clifton <nickc@redhat.com> - 2.46-1
- Rebase to GNU Binutils 2.46.
* Tue Jan 27 2026 Nick Clifton <nickc@redhat.com> - 2.45.90-1
- Rebase to pre-release snapshot.
* Mon Jan 19 2026 Nick Clifton <nickc@redhat.com> - 2.45.50-19
- Rebase to commit ba5838a98fb
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2.45.50-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2.45.50-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Thu Jan 15 2026 Nick Clifton <nickc@redhat.com> - 2.45.50-16
- Remove experimental Risc-V patch added with -12 revision.
* Tue Jan 13 2026 Nick Clifton <nickc@redhat.com> - 2.45.50-15
- Disallow the creation of shared object that use text relocations. (#2428281)
* Fri Jan 09 2026 Nick Clifton <nickc@redhat.com> - 2.45.50-14
- Fix Risc-V related test failures caused by -12 revision.
* Mon Jan 05 2026 Nick Clifton <nickc@redhat.com> - 2.45.50-13
- Rebase to commit be970c68891
* Thu Dec 18 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-12
- Fix compile time warning messages about discarded qualifiers.
- Change Risc-V assembler to default to disabling relaxation.
* Mon Dec 08 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-11
- Rebase to commit 8e992ccb1e4
* Thu Dec 04 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-10
- Fix testsuite failures for Risc-V target.
* Mon Nov 24 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-9
- Rebase to commit beab972c07d
- Revert patches for PR 33577
* Tue Nov 11 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-8
- Rebase to commit 96b8a8a633a
* Tue Nov 04 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-7
- Pass -flto=$RPM_BUILD_NCPUS in CFLAGS. (RHEL-121799)
* Tue Oct 28 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-6
- Rebase to commit 2006dea18d5
* Mon Oct 06 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-5
- Rebase to commit b05d1d89605
* Tue Sep 09 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-4
- Enhance the riscv-64 zicfilp-unlabeled-plt test to cope with larger offsets.
* Mon Sep 08 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-3
- Rebase to commit 79b2b564fec
* Tue Aug 19 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-2
- Rebase to commit 7e432e93f8a (previous rebase appears to be broken)
* Mon Aug 18 2025 Nick Clifton <nickc@redhat.com> - 2.45.50-1
- Rebase to commit 570f4c0c119.
* Fri Aug 15 2025 Nick Clifton <nickc@redhat.com> - 2.45-3
- Oops - the gold linker was disabled too soon, re-enabling.
* Wed Aug 13 2025 Nick Clifton <nickc@redhat.com> - 2.45-2
- Disable building of gold by default. Ref: https://fedoraproject.org/wiki/Changes/DeprecateGoldLinker
* Mon Jul 28 2025 Nick Clifton <nickc@redhat.com> - 2.45-1
- Rebase to official GNU Binutils 2.45 release.
* Fri Jul 25 2025 Nick Clifton <nickc@redhat.com> - 2.44.90-4
- Properly handle LLVM IR bitcodes. (#2382341) (PR 33198)
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.44.90-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Tue Jul 22 2025 Nick Clifton <nickc@redhat.com> - 2.44.90-2
- Improve strip's handling of archives containing bitcodes. (#2382341)
* Mon Jul 14 2025 Nick Clifton <nickc@redhat.com> - 2.44.90-1
- Rebase to 2.45 pre-release snapshot.
* Mon Jul 07 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-13
- Rebase to commit 21e608528c3
* Mon Jun 23 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-12
- Rebase to commit 28b75d9dcb8
* Mon Jun 09 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-11
- Rebase to commit a259da93f3c
* Tue May 27 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-10
- Rebase to commit d13aaae402f
* Mon May 12 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-9
- Rebase to commit 8dc4e62fc94
* Mon Apr 14 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-8
- Rebase to commit 6ef74a3985b
* Thu Apr 10 2025 Andrea Bolognani <abologna@redhat.com> - 2.44.50-7
- Fix BuildRequires on bison
* Wed Apr 02 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-6
- Deprecate the GOLD linker.
* Mon Mar 31 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-5
- Rebase to commit 7109ea04ac7
* Mon Mar 17 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-4
- Rebase to commit a07c8b3a73c
* Mon Mar 03 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-3
- Rebase to commit 56a0188548e
* Wed Feb 26 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-2
- Renumber patches.
- Add -std=gnu11 to CFLAGS to support the use of static_assert in the sources.
* Tue Feb 18 2025 Nick Clifton <nickc@redhat.com> - 2.44.50-1
- Rebase to commit 1256b9860f3
* Fri Feb 07 2025 Nick Clifton <nickc@redhat.com> - 2.44-3
- Fix seg fault in AArch64 linker when building u-boot. (#2326190)
* Thu Feb 06 2025 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.44-2
- Default gcs-report-dynamic to NONE for Fedora.
* Mon Feb 03 2025 Nick Clifton <nickc@redhat.com> - 2.44-1
- Rebase to official GNU Binutils 2.44 release
* Mon Jan 27 2025 Nick Clifton <nickc@redhat.com> - 2.43.90-2
- Enable separate-code by default for the RISC-V target.
* Mon Jan 20 2025 Nick Clifton <nickc@redhat.com> - 2.43.90-1
- Rebased to 2.43.90 pre-release tarball.
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.43.50-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Mon Jan 06 2025 Nick Clifton <nickc@redhat.com> - 2.43.50-11
- Rebase to commit f832531609d
* Mon Dec 09 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-10
- Rebase to commit 3d75969bd0e
* Tue Nov 26 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-9
- Rebase to commit 1686dc7079f
* Fri Nov 15 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-8
- Spec File: Move all gprofng files into the binutils-gprofng sub-package. (2326286)
* Mon Nov 04 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-7
- Rebase to commit 55e32b3c682
- Revert commit 4f576180 which moves the .note.build-id section back to the start of the file. (PR 2321588)
* Thu Oct 31 2024 Miro Hrončok <mhroncok@redhat.com> - 2.43.50-6
- Spec File: Do not install gprofng documentation when using --without docs
* Tue Oct 22 2024 Richard W.M. Jones <rjones@redhat.com> - 2.43.50-5
- Rebuild for Jansson 2.14
(https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/3PYINSQGKQ4BB25NQUI2A2UCGGLAG5ND/)
* Mon Oct 14 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-4
- Rebase to commit 22c62092858.
* Thu Oct 03 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-3
- Add more fixes for linker testsuite failures for the RISC-V.
* Mon Sep 30 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-2
- Rebase to commit 1f4aee70ed1.
- Configure the linker to support xxhash by default.
* Tue Sep 10 2024 Nick Clifton <nickc@redhat.com> - 2.43.50-1
- Rebase to commit c839a44c391.
* Fri Oct 04 2024 Nick Clifton <nickc@redhat.com> - 2.43.1-3
- Fix more linker testsuite issues for the RISC-V target.
* Mon Sep 09 2024 Nick Clifton <nickc@redhat.com> - 2.43.1-2
- Disable the default enablement of the linker's "-z separate-code" feature for non-x86 architectures.
* Sat Aug 17 2024 Nick Clifton <nickc@redhat.com> - 2.43.1-1
* Mon Sep 09 2024 Nick Clifton <nickc@redhat.com> - 2.43.1-1
- Rebase to 2.43.1 release. (#2305399)
- Retire: binutils-LTO-restore-wrapper-symbol.patch
* Wed Aug 14 2024 Nick Clifton <nickc@redhat.com> - 2.43-3
- Place the .build-id section near the ELF headers.
* Mon Aug 05 2024 Nick Clifton <nickc@redhat.com> - 2.43-2
- Use correct fix for BZ 2301454.

View file

@ -5,14 +5,14 @@
/common:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/binutils.git
url: https://src.fedoraproject.org/tests/binutils.git
ref: main
name: /plans/build-gating/common
/kernel-rebuild:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/binutils.git
url: https://src.fedoraproject.org/tests/binutils.git
ref: main
name: /plans/build-gating/kernel-rebuild

View file

@ -5,7 +5,7 @@
/common:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/binutils.git
url: https://src.fedoraproject.org/tests/binutils.git
ref: main
name: /plans/regression

View file

@ -1,2 +1,2 @@
SHA512 (binutils-with-gold-2.47.50-48c933a69a8.tar.xz) = c4300e4881227c431c0bbbb949a5ee5bc113701f993766418b152df7d46d9df378ebace9efffcb6e1f0b7e72ad716bbcccf5b6aa55851dc28216555b242d18a0
SHA512 (binutils-2.43.1.tar.xz) = 20977ad17729141a2c26d358628f44a0944b84dcfefdec2ba029c2d02f40dfc41cc91c0631044560d2bd6f9a51e1f15846b4b311befbe14f1239f14ff7d57824
SHA512 (binutils-2.19.50.0.1-output-format.sed) = 2f8686b0c8af13c98cda056824c2820416f6e2d003f70b78ccf5314525b9ee3684d421dfa83e638a2d42d06ea4d4bdaf5226b64d6ec26f7ff59c44ffb2a23dd2