mirror of git://sourceware.org/git/glibc.git
aarch64: Fix the list of tested IFUNC variants [BZ #26818]
Some IFUNC variants are not compatible with BTI and MTE so don't set them as usable for testing and benchmarking on a BTI or MTE enabled system. As far as IFUNC selectors are concerned a system is BTI enabled if the cpu supports it and glibc was built with BTI branch protection. Most IFUNC variants are BTI compatible, but thunderx2 memcpy and memmove use a jump table with indirect jump, without a BTI j. Fixes bug 26818.
This commit is contained in:
parent
ad47748992
commit
04c6a8073d
|
@ -40,13 +40,13 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
|
||||||
/* Support sysdeps/aarch64/multiarch/memcpy.c and memmove.c. */
|
/* Support sysdeps/aarch64/multiarch/memcpy.c and memmove.c. */
|
||||||
IFUNC_IMPL (i, name, memcpy,
|
IFUNC_IMPL (i, name, memcpy,
|
||||||
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx)
|
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx)
|
||||||
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_thunderx2)
|
IFUNC_IMPL_ADD (array, i, memcpy, !bti, __memcpy_thunderx2)
|
||||||
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_falkor)
|
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_falkor)
|
||||||
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_simd)
|
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_simd)
|
||||||
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_generic))
|
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_generic))
|
||||||
IFUNC_IMPL (i, name, memmove,
|
IFUNC_IMPL (i, name, memmove,
|
||||||
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx)
|
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx)
|
||||||
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_thunderx2)
|
IFUNC_IMPL_ADD (array, i, memmove, !bti, __memmove_thunderx2)
|
||||||
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_falkor)
|
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_falkor)
|
||||||
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_simd)
|
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_simd)
|
||||||
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_generic))
|
IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_generic))
|
||||||
|
@ -58,11 +58,11 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
|
||||||
IFUNC_IMPL_ADD (array, i, memset, 1, __memset_kunpeng)
|
IFUNC_IMPL_ADD (array, i, memset, 1, __memset_kunpeng)
|
||||||
IFUNC_IMPL_ADD (array, i, memset, 1, __memset_generic))
|
IFUNC_IMPL_ADD (array, i, memset, 1, __memset_generic))
|
||||||
IFUNC_IMPL (i, name, memchr,
|
IFUNC_IMPL (i, name, memchr,
|
||||||
IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_nosimd)
|
IFUNC_IMPL_ADD (array, i, memchr, !mte, __memchr_nosimd)
|
||||||
IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_generic))
|
IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_generic))
|
||||||
|
|
||||||
IFUNC_IMPL (i, name, strlen,
|
IFUNC_IMPL (i, name, strlen,
|
||||||
IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_asimd)
|
IFUNC_IMPL_ADD (array, i, strlen, !mte, __strlen_asimd)
|
||||||
IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_mte))
|
IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_mte))
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
|
|
|
@ -30,5 +30,7 @@
|
||||||
GLRO(dl_aarch64_cpu_features).midr_el1; \
|
GLRO(dl_aarch64_cpu_features).midr_el1; \
|
||||||
unsigned __attribute__((unused)) zva_size = \
|
unsigned __attribute__((unused)) zva_size = \
|
||||||
GLRO(dl_aarch64_cpu_features).zva_size; \
|
GLRO(dl_aarch64_cpu_features).zva_size; \
|
||||||
|
bool __attribute__((unused)) bti = \
|
||||||
|
HAVE_AARCH64_BTI && GLRO(dl_aarch64_cpu_features).bti; \
|
||||||
bool __attribute__((unused)) mte = \
|
bool __attribute__((unused)) mte = \
|
||||||
MTE_ENABLED ();
|
MTE_ENABLED ();
|
||||||
|
|
Loading…
Reference in New Issue