diff options
author | Nick Clifton <nickc@redhat.com> | 2023-12-05 15:18:40 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2023-12-05 15:18:40 +0000 |
commit | e60675a228a8ecd2cfdc7e45cb315a1838b91f74 (patch) | |
tree | db6dc8b4df4319dae001e4c28b0e89c69ab9edc7 /bfd | |
parent | 3381781151c60cc70a9fb44856e2dd5611465a73 (diff) | |
download | binutils-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/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elfcode.h | 8 |
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 { |