summaryrefslogtreecommitdiff
path: root/libc/arch-arm/dynamic_function_dispatch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/arch-arm/dynamic_function_dispatch.cpp')
-rw-r--r--libc/arch-arm/dynamic_function_dispatch.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/libc/arch-arm/dynamic_function_dispatch.cpp b/libc/arch-arm/dynamic_function_dispatch.cpp
index 640f3306a..09fd8f30e 100644
--- a/libc/arch-arm/dynamic_function_dispatch.cpp
+++ b/libc/arch-arm/dynamic_function_dispatch.cpp
@@ -89,11 +89,15 @@ static int ifunc_close(int fd) {
return r0;
}
-#define DEFINE_IFUNC(name) \
- name##_func name __attribute__((ifunc(#name "_resolver"))); \
+#define DEFINE_IFUNC_WITH_SUFFIX(name, suffix) \
+ name##_func name##suffix __attribute__((ifunc(#name "_resolver"))); \
__attribute__((visibility("hidden"))) \
name##_func* name##_resolver()
+#define DEFINE_IFUNC(name) DEFINE_IFUNC_WITH_SUFFIX(name, )
+
+#define DEFINE_INTERNAL_IFUNC(name) DEFINE_IFUNC_WITH_SUFFIX(name, _internal)
+
#define DECLARE_FUNC(type, name) \
__attribute__((visibility("hidden"))) \
type name
@@ -287,7 +291,7 @@ DEFINE_IFUNC(__strcat_chk) {
}
typedef int strcmp_func(const char* __lhs, const char* __rhs);
-DEFINE_IFUNC(strcmp) {
+DEFINE_INTERNAL_IFUNC(strcmp) {
switch(get_cpu_variant()) {
case kCortexA9:
RETURN_FUNC(strcmp_func, strcmp_a9);
@@ -301,7 +305,7 @@ DEFINE_IFUNC(strcmp) {
}
typedef size_t strlen_func(const char* __s);
-DEFINE_IFUNC(strlen) {
+DEFINE_INTERNAL_IFUNC(strlen) {
switch(get_cpu_variant()) {
case kCortexA9:
RETURN_FUNC(strlen_func, strlen_a9);