From 2d9193f2f55767c71333d425e140e22c3e15dc3d Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 26 Sep 2017 19:49:33 +0000 Subject: Use generic __ifunc for SPARC. glibc fails to build with GCC mainline for SPARC because of the use of manually-created IFUNCs, which fail the tests of compatibility of function alias types. This patch changes sparc-ifunc.h to use the generic __ifunc in defining sparc_libm_ifunc. The generic __ifunc can use the GCC ifunc attribute when available, so ensuring type-correctness as well as better debug info than when setting symbol types in asm statements. Note that for this to fix the build with GCC mainline the GCC patch , or building GCC with --enable-gnu-indirect-function, is also needed. Tested (compilation only) with build-many-glibcs.py (sparc64-linux-gnu and sparcv9-linux-gnu, with GCC 8 with the above patch, and also with GCC 7). * sysdeps/sparc/sparc-ifunc.h [!__ASSEMBLER__] (sparc_libm_ifunc): Define using __ifunc. --- ChangeLog | 5 +++++ sysdeps/sparc/sparc-ifunc.h | 10 ++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87e4067b3a..f8e097e17f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-09-26 Joseph Myers + + * sysdeps/sparc/sparc-ifunc.h [!__ASSEMBLER__] (sparc_libm_ifunc): + Define using __ifunc. + 2017-09-26 Tulio Magno Quites Machado Filho * sysdeps/powerpc/fpu/libm-test-ulps: Regenerate expf() and diff --git a/sysdeps/sparc/sparc-ifunc.h b/sysdeps/sparc/sparc-ifunc.h index 8cc86ff5e1..4b1ea00bde 100644 --- a/sysdeps/sparc/sparc-ifunc.h +++ b/sysdeps/sparc/sparc-ifunc.h @@ -162,14 +162,8 @@ END (__##name) #else /* __ASSEMBLER__ */ -# define sparc_libm_ifunc(name, expr) \ - extern void *name##_ifunc (int) __asm__ (#name); \ - void *name##_ifunc (int hwcap) \ - { \ - __typeof (name) *res = expr; \ - return res; \ - } \ - __asm__ (".type " #name ", %gnu_indirect_function"); +# define sparc_libm_ifunc(name, expr) \ + __ifunc (name, name, expr, int hwcap, libm_ifunc_init) # define sparc_libc_ifunc(name, expr) sparc_libm_ifunc (name, expr) -- cgit 1.4.1