diff options
author | Richard Henderson <rth@twiddle.net> | 2012-05-25 10:30:42 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2012-05-25 10:30:42 -0700 |
commit | a386f1cc229e7de02740bef18bdd5d272d1e7537 (patch) | |
tree | c3ae8cdeed360682a0806dc0c0d4d5fa600aa229 | |
parent | db5013c65440b3fa87d7849c4d45d707807670de (diff) | |
download | glibc-a386f1cc229e7de02740bef18bdd5d272d1e7537.tar.gz glibc-a386f1cc229e7de02740bef18bdd5d272d1e7537.tar.xz glibc-a386f1cc229e7de02740bef18bdd5d272d1e7537.zip |
ppc: Pass hwcap to ifuncs.
* sysdeps/powerpc/powerpc32/dl-irel.h (elf_ifunc_invoke): Pass dl_hwcap to ifunc resolver. * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Use elf_ifunc_invoke. * sysdeps/powerpc/powerpc64/dl-irel.h (elf_ifunc_invoke): Pass dl_hwcap to ifunc resolver. * sysdeps/powerpc/powerpc64/dl-machine.h (resolve_ifunc): Likewise.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/dl-irel.h | 4 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc32/dl-machine.h | 5 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/dl-irel.h | 4 | ||||
-rw-r--r-- | sysdeps/powerpc/powerpc64/dl-machine.h | 2 |
5 files changed, 18 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index ceb3f5af77..2f6a533a7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-05-25 Richard Henderson <rth@twiddle.net> + + * sysdeps/powerpc/powerpc32/dl-irel.h (elf_ifunc_invoke): Pass + dl_hwcap to ifunc resolver. + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Use + elf_ifunc_invoke. + * sysdeps/powerpc/powerpc64/dl-irel.h (elf_ifunc_invoke): Pass + dl_hwcap to ifunc resolver. + * sysdeps/powerpc/powerpc64/dl-machine.h (resolve_ifunc): Likewise. + 2012-05-24 Joseph Myers <joseph@codesourcery.com> [BZ #14153] diff --git a/sysdeps/powerpc/powerpc32/dl-irel.h b/sysdeps/powerpc/powerpc32/dl-irel.h index c8e50ee10e..ebaf44a1e2 100644 --- a/sysdeps/powerpc/powerpc32/dl-irel.h +++ b/sysdeps/powerpc/powerpc32/dl-irel.h @@ -1,6 +1,6 @@ /* Machine-dependent ELF indirect relocation inline functions. PowerPC version. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2012 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 @@ -29,7 +29,7 @@ static inline Elf32_Addr __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 diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h index 45868f5de9..3ae27a4924 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ b/sysdeps/powerpc/powerpc32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. PowerPC version. - Copyright (C) 1995-2003, 2005, 2006, 2011 Free Software Foundation, Inc. + Copyright (C) 1995-2012 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 @@ -23,6 +23,7 @@ #include <assert.h> #include <dl-tls.h> +#include <dl-irel.h> /* Translate a processor specific dynamic tag to the index in l_info array. */ @@ -308,7 +309,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, && __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); /* A small amount of code is duplicated here for speed. In libc, more than 90% of the relocs are R_PPC_RELATIVE; in the X11 shared diff --git a/sysdeps/powerpc/powerpc64/dl-irel.h b/sysdeps/powerpc/powerpc64/dl-irel.h index 7270275945..ced0f3f6d8 100644 --- a/sysdeps/powerpc/powerpc64/dl-irel.h +++ b/sysdeps/powerpc/powerpc64/dl-irel.h @@ -1,6 +1,6 @@ /* Machine-dependent ELF indirect relocation inline functions. PowerPC64 version. - Copyright (C) 2009, 2011 Free Software Foundation, Inc. + Copyright (C) 2009-2012 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 @@ -31,7 +31,7 @@ static inline Elf64_Addr __attribute ((always_inline)) elf_ifunc_invoke (Elf64_Addr addr) { - return ((Elf64_Addr (*) (void)) (addr)) (); + return ((Elf64_Addr (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); } static inline void diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index a964a29e38..7c7d768998 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -545,7 +545,7 @@ resolve_ifunc (Elf64_Addr value, value = (Elf64_Addr) &opd; } #endif - return ((Elf64_Addr (*) (void)) value) (); + return ((Elf64_Addr (*) (unsigned long int)) value) (GLRO(dl_hwcap)); } /* Perform the relocation specified by RELOC and SYM (which is fully |