+2012-05-25 Richard Henderson <rth@twiddle.net>
+
+ * sysdeps/arm/dl-irel.h (elf_ifunc_invoke): Pass dl_hwcap.
+ * sysdeps/arm/dl-machine.h (elf_machine_rel): Use elf_ifunc_invoke.
+ (elf_machine_rela): Likewise.
+
2012-05-23 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/arm/bits/mman.h (MADV_DONTDUMP): Define.
__attribute ((always_inline))
elf_ifunc_invoke (Elf32_Addr addr)
{
- return ((Elf32_Addr (*) (void)) (addr)) ();
+ return ((Elf32_Addr (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap));
}
static inline void
#include <sys/param.h>
#include <tls.h>
#include <dl-tlsdesc.h>
+#include <dl-irel.h>
#define CLEAR_CACHE(BEG,END) \
INTERNAL_SYSCALL_ARM (cacheflush, , 3, (BEG), (END), 0)
&& __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)
&& __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
&& __builtin_expect (!skip_ifunc, 1))
- value = ((Elf32_Addr (*) (void)) value) ();
+ value = elf_ifunc_invoke (value);
switch (r_type)
{
&& __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0)
&& __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
&& __builtin_expect (!skip_ifunc, 1))
- value = ((Elf32_Addr (*) (void)) value) ();
+ value = elf_ifunc_invoke (value);
switch (r_type)
{