aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2023-12-05 15:18:40 +0000
committerNick Clifton <nickc@redhat.com>2023-12-05 15:18:40 +0000
commite60675a228a8ecd2cfdc7e45cb315a1838b91f74 (patch)
treedb6dc8b4df4319dae001e4c28b0e89c69ab9edc7 /bfd
parent3381781151c60cc70a9fb44856e2dd5611465a73 (diff)
downloadbinutils-e60675a228a8ecd2cfdc7e45cb315a1838b91f74.zip
binutils-e60675a228a8ecd2cfdc7e45cb315a1838b91f74.tar.gz
binutils-e60675a228a8ecd2cfdc7e45cb315a1838b91f74.tar.bz2
Fix: strip --strip-debug breaks relocations
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.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elfcode.h8
2 files changed, 14 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e9f571a..1cc8d3a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index ab8c3ea..2c2eb36 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -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
{