mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
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 <https://gcc.gnu.org/ml/gcc-patches/2017-09/msg01779.html>, 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.
This commit is contained in:
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user