]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/sparc/sparc32/dl-irel.h
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / sparc / sparc32 / dl-irel.h
index 2753fb4ceb4670790732b5589aafeeef9644bbce..cc3e49bf184e0f6fc5f42d23abe2db8ecd8ece45 100644 (file)
@@ -1,6 +1,6 @@
 /* Machine-dependent ELF indirect relocation inline functions.
    SPARC 32-bit version.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -14,9 +14,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #ifndef _DL_IREL_H
 #define _DL_IREL_H
 
 #define ELF_MACHINE_IRELA      1
 
+static inline Elf32_Addr
+__attribute ((always_inline))
+elf_ifunc_invoke (Elf32_Addr addr)
+{
+  return ((Elf32_Addr (*) (int)) (addr)) (GLRO(dl_hwcap));
+}
+
 static inline void
 __attribute ((always_inline))
 elf_irela (const Elf32_Rela *reloc)
 {
   unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
 
-  if (__builtin_expect (r_type == R_SPARC_IRELATIVE, 1))
+  if (__glibc_likely (r_type == R_SPARC_IRELATIVE))
     {
       Elf32_Addr *const reloc_addr = (void *) reloc->r_offset;
-      Elf32_Addr value = ((Elf32_Addr (*) (int)) reloc->r_addend) (GLRO(dl_hwcap));
+      Elf32_Addr value = elf_ifunc_invoke(reloc->r_addend);
       *reloc_addr = value;
     }
-  else if (__builtin_expect (r_type == R_SPARC_JMP_IREL, 1))
+  else if (__glibc_likely (r_type == R_SPARC_JMP_IREL))
     {
       Elf32_Addr *const reloc_addr = (void *) reloc->r_offset;
-      Elf32_Addr value = ((Elf32_Addr (*) (int)) reloc->r_addend) (GLRO(dl_hwcap));
+      Elf32_Addr value = elf_ifunc_invoke(reloc->r_addend);
 
       sparc_fixup_plt (reloc, reloc_addr, value, 0, 1);
     }
   else if (r_type == R_SPARC_NONE)
     ;
   else
-    __libc_fatal ("unexpected reloc type in static binary");
+    __libc_fatal ("Unexpected reloc type in static binary.\n");
 }
 
 #endif /* dl-irel.h */