]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix: strip --strip-debug breaks relocations
authorNick Clifton <nickc@redhat.com>
Tue, 5 Dec 2023 15:18:40 +0000 (15:18 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 5 Dec 2023 15:18:40 +0000 (15:18 +0000)
  PR 31106
  * elfcode.h (elf_write_relocs): Do not convert a relocation against a zero-value absolute symbol into a relocation without a symbol if the symbol is being used for a complex relocation.

bfd/ChangeLog
bfd/elfcode.h

index e9f571acac26690cf5a4216cb4fed3223340dd6e..1cc8d3ae9f04e6726fe10021c736e4ea94bb6195 100644 (file)
@@ -1,3 +1,10 @@
+2023-12-05  Nick Clifton  <nickc@redhat.com>
+
+       PR 31106
+       * elfcode.h (elf_write_relocs): Do not convert a relocation
+       against a zero-value absolute symbol into a relocation without a
+       symbol if the symbol is being used for a complex relocation.
+
 2023-11-21  Nick Clifton  <nickc@redhat.com>
 
        PR 31067
index ab8c3eaaf4c6f152e1134a1a4a32e11742ef46b3..2c2eb368df986bdc02b2187cbb6f145a405804d0 100644 (file)
@@ -1014,7 +1014,13 @@ elf_write_relocs (bfd *abfd, asection *sec, void *data)
       sym = *ptr->sym_ptr_ptr;
       if (sym == last_sym)
        n = last_sym_idx;
-      else if (bfd_is_abs_section (sym->section) && sym->value == 0)
+      /* If the relocation is against an absolute symbol whoes value is
+        zero, then the symbol can be dropped, simplifying the reloc.
+        PR 31106: Except for complex relocations where the symbols
+        itself might be significant.  */
+      else if (bfd_is_abs_section (sym->section)
+              && sym->value == 0
+              && (sym->flags & BSF_RELC) == 0)
        n = STN_UNDEF;
       else
        {