Get the address of Sun3 dynamic relocs right.
authorIan Lance Taylor <ian@airs.com>
Thu, 2 Jun 1994 23:51:26 +0000 (23:51 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 2 Jun 1994 23:51:26 +0000 (23:51 +0000)
bfd/sunos.c

index 7039d742fafacbbf254d77ff13719bedba7d65c2..9740cddc927bef7254ffa7178aea7cf98cc72cf0 100644 (file)
@@ -1731,6 +1731,10 @@ sunos_write_dynamic_symbol (output_bfd, info, harg)
       s = bfd_get_section_by_name (sunos_hash_table (info)->dynobj, ".dynrel");
       BFD_ASSERT (s != NULL);
 
+      r_address = (h->root.root.u.def.section->output_section->vma
+                  + h->root.root.u.def.section->output_offset
+                  + h->root.root.u.def.value);
+
       switch (bfd_get_arch (output_bfd))
        {
        case bfd_arch_sparc:
@@ -1748,6 +1752,7 @@ sunos_write_dynamic_symbol (output_bfd, info, harg)
          bfd_put_16 (output_bfd, M68K_PLT_ENTRY_WORD0, p);
          bfd_put_32 (output_bfd, (- (h->root.root.u.def.value + 2)), p + 2);
          bfd_put_16 (output_bfd, s->reloc_count, p + 6);
+         r_address += 2;
          break;
 
        default:
@@ -1756,9 +1761,6 @@ sunos_write_dynamic_symbol (output_bfd, info, harg)
 
       /* We also need to add a jump table reloc.  */
       p = s->contents + s->reloc_count * obj_reloc_entry_size (output_bfd);
-      r_address = (h->root.root.u.def.section->output_section->vma
-                  + h->root.root.u.def.section->output_offset
-                  + h->root.root.u.def.value);
       if (obj_reloc_entry_size (output_bfd) == RELOC_STD_SIZE)
        {
          struct reloc_std_external *srel;