aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfnn-riscv.c
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/elfnn-riscv.c
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/elfnn-riscv.c')
-rw-r--r--bfd/elfnn-riscv.c2
1 files changed, 1 insertions, 1 deletions
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;