* elf32-cris.c (elf_cris_copy_indirect_symbol): New function.
authorHans-Peter Nilsson <hp@axis.com>
Mon, 15 Dec 2008 03:17:49 +0000 (03:17 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 15 Dec 2008 03:17:49 +0000 (03:17 +0000)
(elf_backend_copy_indirect_symbol): Define to above.

bfd/ChangeLog
bfd/elf32-cris.c

index ec121d1ba54f938455b868b3e2a0b89cc4b7ea49..0836a4679f79965c672d18686b026a0944d0af82 100644 (file)
@@ -1,5 +1,8 @@
 2008-12-15  Hans-Peter Nilsson  <hp@axis.com>
 
+       * elf32-cris.c (elf_cris_copy_indirect_symbol): New function.
+       (elf_backend_copy_indirect_symbol): Define to above.
+
        * elf32-cris.c (struct elf_cris_pcrel_relocs_copied): New member
        r_type.  Fix formatting.
        (cris_elf_relocate_section) <R_CRIS_8_PCREL, R_CRIS_16_PCREL>
index 8c9a79b084b468b358c8d1dbaac3074c76aa46b5..389798db7d9431a1fcd6aa07f1e08d36534c6e44 100644 (file)
@@ -3012,6 +3012,35 @@ elf_cris_adjust_dynamic_symbol (info, h)
   return _bfd_elf_adjust_dynamic_copy (h, s);
 }
 
+/* Adjust our "subclass" elements for an indirect symbol.  */
+
+static void
+elf_cris_copy_indirect_symbol (struct bfd_link_info *info,
+                              struct elf_link_hash_entry *dir,
+                              struct elf_link_hash_entry *ind)
+{
+  struct elf_cris_link_hash_entry *edir, *eind;
+
+  edir = (struct elf_cris_link_hash_entry *) dir;
+  eind = (struct elf_cris_link_hash_entry *) ind;
+
+  BFD_ASSERT (edir->pcrel_relocs_copied == NULL);
+  BFD_ASSERT (edir->gotplt_offset == 0 || eind->gotplt_offset == 0);
+
+#define XMOVOPZ(F, OP, Z) edir->F OP eind->F; eind->F = Z
+#define XMOVE(F) XMOVOPZ (F, +=, 0)
+  XMOVOPZ (pcrel_relocs_copied, =, NULL);
+  XMOVE (gotplt_refcount);
+  XMOVE (gotplt_offset);
+  XMOVE (reg_got_refcount);
+  XMOVE (tprel_refcount);
+  XMOVE (dtp_refcount);
+#undef XMOVE
+#undef XMOVOPZ
+
+  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
+}
+
 /* Look through the relocs for a section during the first phase.  */
 
 static bfd_boolean
@@ -4238,6 +4267,8 @@ elf_cris_got_elt_size (bfd *abfd ATTRIBUTE_UNUSED,
        elf_cris_link_hash_table_create
 #define elf_backend_adjust_dynamic_symbol \
        elf_cris_adjust_dynamic_symbol
+#define elf_backend_copy_indirect_symbol \
+       elf_cris_copy_indirect_symbol
 #define elf_backend_size_dynamic_sections \
        elf_cris_size_dynamic_sections
 #define elf_backend_init_index_section         _bfd_elf_init_1_index_section