]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: Check if needed dynamic relocation section is created
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 1 Aug 2026 03:23:39 +0000 (11:23 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 5 Aug 2026 23:08:37 +0000 (07:08 +0800)
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

index da5fc3886ce5557e0d1d8382ac8227af56e74878..8935bfc9c770f3a6fbead72483f969f5937c02ea 100644 (file)
@@ -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)