bfd/elf-ifunc.c: Add header size arg to _bfd_elf_allocate_ifunc_dyn_relocs.
[deliverable/binutils-gdb.git] / bfd / elf-bfd.h
index dd9ba6bb36e5a00704655e5c139a708b765fcb38..4a67d02198bb5bf11453e62c86308469c88adcc4 100644 (file)
@@ -641,7 +641,8 @@ enum elf_reloc_type_class {
   reloc_class_normal,
   reloc_class_relative,
   reloc_class_plt,
-  reloc_class_copy
+  reloc_class_copy,
+  reloc_class_ifunc
 };
 
 struct elf_reloc_cookie
@@ -1128,7 +1129,7 @@ struct elf_backend_data
 
   /* This function returns class of a reloc type.  */
   enum elf_reloc_type_class (*elf_backend_reloc_type_class)
-    (const Elf_Internal_Rela *);
+  (const struct bfd_link_info *, const asection *, const Elf_Internal_Rela *);
 
   /* This function, if defined, removes information about discarded functions
      from other sections which mention them.  */
@@ -1207,19 +1208,10 @@ struct elf_backend_data
   asection *(*common_section) (asection *);
 
   /* Return TRUE if we can merge 2 definitions.  */
-  bfd_boolean (*merge_symbol) (struct bfd_link_info *,
-                              struct elf_link_hash_entry **,
-                              struct elf_link_hash_entry *,
-                              Elf_Internal_Sym *, asection **,
-                              bfd_vma *, unsigned int *,
-                              bfd_boolean *, bfd_boolean *,
-                              bfd_boolean *, bfd_boolean *,
-                              bfd_boolean *, bfd_boolean *,
-                              bfd_boolean *, bfd_boolean *,
-                              bfd *, asection **,
-                              bfd_boolean *, bfd_boolean *,
-                              bfd_boolean *, bfd_boolean *,
-                              bfd *, asection **);
+  bfd_boolean (*merge_symbol) (struct elf_link_hash_entry *,
+                              const Elf_Internal_Sym *, asection **,
+                              bfd_boolean, bfd_boolean,
+                              bfd *, const asection *);
 
   /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
   bfd_boolean (*elf_hash_symbol) (struct elf_link_hash_entry *);
@@ -1786,7 +1778,8 @@ extern bfd_boolean _bfd_elf_can_make_relative
   (bfd *input_bfd, struct bfd_link_info *info, asection *eh_frame_section);
 
 extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
-  (const Elf_Internal_Rela *);
+  (const struct bfd_link_info *, const asection *,
+   const Elf_Internal_Rela *);
 extern bfd_vma _bfd_elf_rela_local_sym
   (bfd *, Elf_Internal_Sym *, asection **, Elf_Internal_Rela *);
 extern bfd_vma _bfd_elf_rel_local_sym
@@ -1919,8 +1912,6 @@ extern int _bfd_elf_sizeof_headers
   (bfd *, struct bfd_link_info *);
 extern bfd_boolean _bfd_elf_new_section_hook
   (bfd *, asection *);
-extern bfd_boolean _bfd_elf_init_reloc_shdr
-  (bfd *, struct bfd_elf_section_reloc_data *, asection *, bfd_boolean);
 extern const struct bfd_elf_special_section *_bfd_elf_get_special_section
   (const char *, const struct bfd_elf_special_section *, unsigned int);
 extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr
@@ -2387,12 +2378,9 @@ struct elf_dyn_relocs
 
 extern bfd_boolean _bfd_elf_create_ifunc_sections
   (bfd *, struct bfd_link_info *);
-extern asection * _bfd_elf_create_ifunc_dyn_reloc
-  (bfd *, struct bfd_link_info *, asection *sec, asection *sreloc,
-   struct elf_dyn_relocs **);
 extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs
   (struct bfd_link_info *, struct elf_link_hash_entry *,
-   struct elf_dyn_relocs **, unsigned int, unsigned int);
+   struct elf_dyn_relocs **, unsigned int, unsigned int, unsigned int);
 
 extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *);
 extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *);
@@ -2506,16 +2494,16 @@ extern asection _bfd_elf_large_com_section;
        rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \
                                                                        \
        /* Avoid empty output section.  */                              \
-       if (rel_hdr->sh_size > count * rel_hdr->sh_entsize)             \
+       if (rel_hdr->sh_size > rel_hdr->sh_entsize)                     \
          {                                                             \
-           rel_hdr->sh_size -= count * rel_hdr->sh_entsize;            \
+           rel_hdr->sh_size -= rel_hdr->sh_entsize;                    \
            rel_hdr = _bfd_elf_single_rel_hdr (input_section);          \
-           rel_hdr->sh_size -= count * rel_hdr->sh_entsize;            \
+           rel_hdr->sh_size -= rel_hdr->sh_entsize;                    \
                                                                        \
            memmove (rel, rel + count,                                  \
                     (relend - rel - count) * sizeof (*rel));           \
                                                                        \
-           input_section->reloc_count -= count;                        \
+           input_section->reloc_count--;                               \
            relend -= count;                                            \
            rel--;                                                      \
            continue;                                                   \
This page took 0.02677 seconds and 4 git commands to generate.