Remove STT_IFUNC support.
[deliverable/binutils-gdb.git] / bfd / elf32-i386.c
index ec0c16fd83ebad84eca5665f34d2dd23e0cefd11..dda6e1fa22537f774d57a8141d1a9bb887102d09 100644 (file)
@@ -1193,26 +1193,6 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd,
   return TRUE;
 }
 
-/* Returns true if the hash entry refers to a symbol
-   marked for indirect handling during reloc processing.  */
-
-static bfd_boolean
-is_indirect_symbol (bfd * abfd, struct elf_link_hash_entry * h)
-{
-  const struct elf_backend_data * bed;
-
-  if (abfd == NULL || h == NULL)
-    return FALSE;
-
-  bed = get_elf_backend_data (abfd);
-
-  return h->type == STT_IFUNC
-    && bed != NULL
-    && (bed->elf_osabi == ELFOSABI_LINUX
-       /* GNU/Linux is still using the default value 0.  */
-       || bed->elf_osabi == ELFOSABI_NONE);
-}
-
 /* Look through the relocs for a section during the first phase, and
    calculate needed space in the global offset table, procedure linkage
    table, and dynamic reloc sections.  */
@@ -1472,8 +1452,7 @@ elf_i386_check_relocs (bfd *abfd,
                  && (sec->flags & SEC_ALLOC) != 0
                  && h != NULL
                  && (h->root.type == bfd_link_hash_defweak
-                     || !h->def_regular))
-             || is_indirect_symbol (abfd, h))        
+                     || !h->def_regular)))
            {
              struct elf_i386_dyn_relocs *p;
              struct elf_i386_dyn_relocs **head;
@@ -1493,9 +1472,6 @@ elf_i386_check_relocs (bfd *abfd,
                    return FALSE;
                }
 
-             if (is_indirect_symbol (abfd, h))
-               (void) _bfd_elf_make_ifunc_reloc_section (abfd, sec, htab->elf.dynobj, 2);
-
              /* If this is a global symbol, we count the number of
                 relocations we need for this symbol.  */
              if (h != NULL)
@@ -2057,15 +2033,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
            }
        }
     }
-  else if (is_indirect_symbol (info->output_bfd, h))
-    {
-      if (h->dynindx == -1
-         && !h->forced_local)
-       {
-         if (! bfd_elf_link_record_dynamic_symbol (info, h))
-           return FALSE;
-       }
-    }
   else if (ELIMINATE_COPY_RELOCS)
     {
       /* For the non-shared case, discard space for relocs against
@@ -2104,11 +2071,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
     {
       asection *sreloc;
 
-      if (! info->shared
-         && is_indirect_symbol (info->output_bfd, h))
-       sreloc = elf_section_data (p->sec)->indirect_relocs;
-      else
-       sreloc = elf_section_data (p->sec)->sreloc;
+      sreloc = elf_section_data (p->sec)->sreloc;
 
       BFD_ASSERT (sreloc != NULL);
       sreloc->size += p->count * sizeof (Elf32_External_Rel);
@@ -2919,8 +2882,7 @@ elf_i386_relocate_section (bfd *output_bfd,
                  && ((h->def_dynamic
                       && !h->def_regular)
                      || h->root.type == bfd_link_hash_undefweak
-                     || h->root.type == bfd_link_hash_undefined))
-             || is_indirect_symbol (output_bfd, h))
+                     || h->root.type == bfd_link_hash_undefined)))
            {
              Elf_Internal_Rela outrel;
              bfd_byte *loc;
@@ -2960,10 +2922,7 @@ elf_i386_relocate_section (bfd *output_bfd,
                  outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
                }
 
-             if ((! info->shared) && is_indirect_symbol (output_bfd, h))
-               sreloc = elf_section_data (input_section)->indirect_relocs;
-             else
-               sreloc = elf_section_data (input_section)->sreloc;
+             sreloc = elf_section_data (input_section)->sreloc;
 
              BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL);
 
@@ -2976,7 +2935,7 @@ elf_i386_relocate_section (bfd *output_bfd,
                 not want to fiddle with the addend.  Otherwise, we
                 need to include the symbol value so that it becomes
                 an addend for the dynamic reloc.  */
-             if (! relocate || is_indirect_symbol (output_bfd, h))
+             if (! relocate)
                continue;
            }
          break;
This page took 0.024359 seconds and 4 git commands to generate.