summaryrefslogtreecommitdiff
path: root/libc/arch-arm64/dynamic_function_dispatch.cpp
diff options
context:
space:
mode:
authorVinay Verma <vvinay@codeaurora.org>2021-08-02 19:18:27 +0530
committerVinay Verma <vvinay@codeaurora.org>2021-08-18 13:42:08 +0000
commit7a24da08feedebfc4d6b2097cef945aa714d68c5 (patch)
tree24da14f29877d7618c1ab21f17223524c8deeadc /libc/arch-arm64/dynamic_function_dispatch.cpp
parent5abf54a6770366807a5c54f66247c0eba3adab12 (diff)
Dynamic handling of memcpy based on BTI support
CRs-Fixed: 3017053 Change-Id: I80cd3a88efb175ee155c534c3548e70613df5947
Diffstat (limited to 'libc/arch-arm64/dynamic_function_dispatch.cpp')
-rw-r--r--libc/arch-arm64/dynamic_function_dispatch.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/libc/arch-arm64/dynamic_function_dispatch.cpp b/libc/arch-arm64/dynamic_function_dispatch.cpp
index 83e5ca4da..aa0767c76 100644
--- a/libc/arch-arm64/dynamic_function_dispatch.cpp
+++ b/libc/arch-arm64/dynamic_function_dispatch.cpp
@@ -41,6 +41,24 @@ DEFINE_IFUNC_FOR(memchr) {
}
}
+typedef void* memcpy_func(void*, const void*, size_t);
+DEFINE_IFUNC_FOR(memcpy) {
+ if (arg->_hwcap2 & HWCAP2_BTI) {
+ RETURN_FUNC(memcpy_func, memcpy_opt);
+ } else {
+ RETURN_FUNC(memcpy_func, memcpy_generic);
+ }
+}
+
+typedef void* memmove_func(void*, const void*, size_t);
+DEFINE_IFUNC_FOR(memmove) {
+ if (arg->_hwcap2 & HWCAP2_BTI) {
+ RETURN_FUNC(memmove_func, memmove_opt);
+ } else {
+ RETURN_FUNC(memmove_func, memmove_generic);
+ }
+}
+
typedef int stpcpy_func(char*, const char*);
DEFINE_IFUNC_FOR(stpcpy) {
if (arg->_hwcap2 & HWCAP2_MTE) {