RISC-V: Fix symbol address problem with versioned symbols.
authorJim Wilson <jimw@sifive.com>
Sun, 3 Jun 2018 21:44:44 +0000 (14:44 -0700)
committerJim Wilson <jimw@sifive.com>
Sun, 3 Jun 2018 21:44:44 +0000 (14:44 -0700)
bfd/
PR ld/22756
* elfnn-riscv.c (riscv_relax_delete_bytes): Add versioned_hidden check
to code that ignores duplicate symbols.

bfd/ChangeLog
bfd/elfnn-riscv.c

index 1a4a30110c117b80c84604b48eef565b55163dd6..250e4165b072e643403f2194ca03ddcc9c323a2e 100644 (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
index b82e655b7be5f0363be32a1ba7a995febdeda168..a0bdee54b2dc285092b14cded248ce8244ee8862 100644 (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;