[ppc] Include hwcap as ifunc argument

Richard Henderson rth@twiddle.net
Mon May 21 18:07:00 GMT 2012


Aside from the x86 port, there are only two targets that have ifunc
support in glibc mainline: ppc and arm.  It would be awesomely handy
if we switch these targets to mirror the sparc lead in passing along
the dl_hwcap contents as an argument to the resolver, *and* to do it
in the same release as adding getauxval.  There are some clever things
we can do at static link time if we know that getauxval corresponds to
the availability of the ifunc argument.

Dave, dunno if you wanna change the signature of the arg from int to
unsigned long for 64-bit?  It just seemed prudent to do that here...

I'll present a similar patch for arm shortly...

Ok?


r~
-------------- next part --------------
	* sysdeps/powerpc/powerpc32/dl-irel.h (elf_ifunc_invoke):
	Pass dl_hwcap.
	* sysdeps/powerpc/powerpc64/dl-irel.h: Likewise.



diff --git a/sysdeps/powerpc/powerpc32/dl-irel.h b/sysdeps/powerpc/powerpc32/dl-irel.h
index c8e50ee..65d9a67 100644
--- a/sysdeps/powerpc/powerpc32/dl-irel.h
+++ b/sysdeps/powerpc/powerpc32/dl-irel.h
@@ -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) (addr)) (GLRO(dl_hwcap));
 }
 
 static inline void
diff --git a/sysdeps/powerpc/powerpc64/dl-irel.h b/sysdeps/powerpc/powerpc64/dl-irel.h
index 7270275..56c84a7 100644
--- a/sysdeps/powerpc/powerpc64/dl-irel.h
+++ b/sysdeps/powerpc/powerpc64/dl-irel.h
@@ -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) (addr)) (GLRO(dl_hwcap));
 }
 
 static inline void


More information about the Libc-alpha mailing list