+2017-06-29  Andrew Waterman  <andrew@sifive.com>
+
+       * elfnn-riscv.c (riscv_elf_adjust_dynamic_symbol): Fix TLS copy
+       relocs.
+
 2017-06-29  Egeyar Bagcioglu  <egeyar.bagcioglu@oracle.com>
 
        * elfxx-sparc.c (allocate_dynrelocs): Don't make a symbol dynamic
 
      to copy the initial value out of the dynamic object and into the
      runtime process image.  We need to remember the offset into the
      .rel.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
+  if (eh->tls_type & ~GOT_NORMAL)
+    {
+      s = htab->sdyntdata;
+      srel = htab->elf.srelbss;
+    }
+  else if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
     {
       s = htab->elf.sdynrelro;
       srel = htab->elf.sreldynrelro;
       h->needs_copy = 1;
     }
 
-  if (eh->tls_type & ~GOT_NORMAL)
-    return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdyntdata);
-
   return _bfd_elf_adjust_dynamic_copy (info, h, s);
 }