diff options
author | Michael Matz <matz@suse.de> | 2021-06-28 17:57:17 +0200 |
---|---|---|
committer | Michael Matz <matz@suse.de> | 2021-07-06 15:49:03 +0200 |
commit | 235f5ef4a6b8fbdcfaea8b629f7c6a9792a789de (patch) | |
tree | 147f3a5973fd72d560102b3689083714b5b1326c /bfd/elfnn-riscv.c | |
parent | 46f2c22eabb3d2b13ed56f528a4f45dc5e8f3a32 (diff) | |
download | gdb-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.c | 2 |
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; |