aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2021-06-28 17:57:17 +0200
committerMichael Matz <matz@suse.de>2021-07-06 15:49:03 +0200
commit235f5ef4a6b8fbdcfaea8b629f7c6a9792a789de (patch)
tree147f3a5973fd72d560102b3689083714b5b1326c /bfd
parent46f2c22eabb3d2b13ed56f528a4f45dc5e8f3a32 (diff)
downloadgdb-235f5ef4a6b8fbdcfaea8b629f7c6a9792a789de.zip
gdb-235f5ef4a6b8fbdcfaea8b629f7c6a9792a789de.tar.gz
gdb-235f5ef4a6b8fbdcfaea8b629f7c6a9792a789de.tar.bz2
elf/riscv: Fix relaxation with aliases [PR28021]
the fix for PR22756 only changed behaviour for hidden aliases, but the same situation exists for non-hidden aliases: sym_hashes[] can contain multiple entries pointing to the same symbol structure leading to relaxation adjustment to be applied twice. Fix this by testing for duplicates for everything that looks like it has a version. PR ld/28021 bfd/ * elfnn-riscv.c (riscv_relax_delete_bytes): Check for any versioning. ld/ * testsuite/ld-riscv-elf/relax-twice.ver: New. * testsuite/ld-riscv-elf/relax-twice-1.s: New. * testsuite/ld-riscv-elf/relax-twice-2.s: New. * testsuite/ld-riscv-elf/ld-riscv-elf.exp (run_relax_twice_test): New, and call it.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elfnn-riscv.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index dd72561..7591469 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2021-07-06 Michael Matz <matz@suse.de>
+
+ PR ld/28021
+ * elfnn-riscv.c (riscv_relax_delete_bytes): Check for any
+ versioning.
+
2021-07-06 Alan Modra <amodra@gmail.com>
PR 28055
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index 2dfa635..85a99f3 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -3995,7 +3995,7 @@ riscv_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, size_t count,
foo becomes an alias for foo@BAR, and hence they need the same
treatment. */
if (link_info->wrap_hash != NULL
- || sym_hash->versioned == versioned_hidden)
+ || sym_hash->versioned != unversioned)
{
struct elf_link_hash_entry **cur_sym_hashes;