x86: Check if needed dynamic relocation section is created
Checks
| Context |
Check |
Description |
| linaro-tcwg-bot/tcwg_binutils_build--master-arm |
success
|
Build passed
|
| linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 |
success
|
Build passed
|
| linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 |
success
|
Test passed
|
| linaro-tcwg-bot/tcwg_binutils_check--master-arm |
success
|
Test passed
|
Commit Message
Since elf_link_read_relocs_from_section aborts for bad relocation,
further relocations won't be processed and needed dynamic relocation
section won't be created. Skip dynamic relocation count if needed
dynamic relocation section hasn't been created.
PR ld/34448
* elfxx-x86.c (_bfd_x86_elf_late_size_sections): Skip dynamic
relocation count if needed dynamic relocation section hasn't been
created.
From ba6cb4e9161aafeb5579f82d6a0856adf68d0e36 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 1 Aug 2026 11:23:39 +0800
Subject: [PATCH] x86: Check if needed dynamic relocation section is created
Since elf_link_read_relocs_from_section aborts for bad relocation,
further relocations won't be processed and needed dynamic relocation
section won't be created. Skip dynamic relocation count if needed
dynamic relocation section hasn't been created.
PR ld/34448
* elfxx-x86.c (_bfd_x86_elf_late_size_sections): Skip dynamic
relocation count if needed dynamic relocation section hasn't been
created.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
bfd/elfxx-x86.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
@@ -2331,6 +2331,19 @@ _bfd_x86_elf_late_size_sections (struct bfd_link_info *info)
else if (p->count != 0)
{
srel = elf_section_data (p->sec)->sreloc;
+ if (!srel)
+ {
+ /* NB: Since elf_link_read_relocs_from_section
+ aborts for bad relocation, further relocations
+ won't be processed and needed dynamic relocation
+ section won't be created afterwards. */
+ _bfd_error_handler
+ /* xgettext:c-format */
+ (_("%pB: dynamic relocation section is needed "
+ "for section `%pA'"),
+ p->sec->owner, p->sec);
+ continue;
+ }
srel->size += p->count * htab->sizeof_reloc;
if ((p->sec->output_section->flags & SEC_READONLY) != 0
&& (info->flags & DF_TEXTREL) == 0)
--
2.55.0