This is the mail archive of the
libc-ports@sources.redhat.com
mailing list for the libc-ports project.
ARM elf_ifunc_invoke
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: libc-ports at sourceware dot org
- Date: Tue, 21 Jun 2011 14:20:34 +0000 (UTC)
- Subject: ARM elf_ifunc_invoke
I've applied this patch to update ARM (the only ports architecture with
IFUNC support) for a recent libc change.
diff --git a/ChangeLog.arm b/ChangeLog.arm
index 30405dd..1737b24 100644
--- a/ChangeLog.arm
+++ b/ChangeLog.arm
@@ -1,3 +1,8 @@
+2011-06-21 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/arm/dl-irel.h (elf_ifunc_invoke): New.
+ (elf_irel): Use it.
+
2010-06-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/arm/eabi/internal_sendmmsg.S: New.
diff --git a/sysdeps/arm/dl-irel.h b/sysdeps/arm/dl-irel.h
index 735e0a3..ab33ef8 100644
--- a/sysdeps/arm/dl-irel.h
+++ b/sysdeps/arm/dl-irel.h
@@ -1,6 +1,6 @@
/* Machine-dependent ELF indirect relocation inline functions.
ARM version.
- Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2009, 2010, 2011 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
@@ -26,6 +26,13 @@
#define ELF_MACHINE_IREL 1
+static inline Elf32_Addr
+__attribute ((always_inline))
+elf_ifunc_invoke (Elf32_Addr addr)
+{
+ return ((Elf32_Addr (*) (void)) (addr)) ();
+}
+
static inline void
__attribute ((always_inline))
elf_irel (const Elf32_Rel *reloc)
@@ -35,7 +42,7 @@ elf_irel (const Elf32_Rel *reloc)
if (__builtin_expect (r_type == R_ARM_IRELATIVE, 1))
{
- Elf32_Addr value = ((Elf32_Addr (*) (void)) (*reloc_addr)) ();
+ Elf32_Addr value = elf_ifunc_invoke (*reloc_addr);
*reloc_addr = value;
}
else
--
Joseph S. Myers
joseph@codesourcery.com