RISC-V: Fix symbol address problem with versioned symbols.

bfd/
	PR ld/22756
	* elfnn-riscv.c (riscv_relax_delete_bytes): Add versioned_hidden check
	to code that ignores duplicate symbols.
This commit is contained in:
Jim Wilson 2018-06-03 14:44:44 -07:00
parent b15fe636af
commit 137b5cbd20
2 changed files with 12 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2018-06-03 Jim Wilson <jimw@sifive.com>
PR ld/22756
* elfnn-riscv.c (riscv_relax_delete_bytes): Add versioned_hidden check
to code that ignores duplicate symbols.
2018-06-01 H.J. Lu <hongjiu.lu@intel.com>
* version.m4: Bump version to 2.30.52

View file

@ -2708,9 +2708,12 @@ riscv_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, size_t count,
call to SYMBOL as well. Since both __wrap_SYMBOL and SYMBOL reference
the same symbol (which is __wrap_SYMBOL), but still exist as two
different symbols in 'sym_hashes', we don't want to adjust
the global symbol __wrap_SYMBOL twice.
This check is only relevant when symbols are being wrapped. */
if (link_info->wrap_hash != NULL)
the global symbol __wrap_SYMBOL twice. */
/* The same problem occurs with symbols that are versioned_hidden, as
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)
{
struct elf_link_hash_entry **cur_sym_hashes;