diff options
Diffstat (limited to 'libc/arch-arm/dynamic_function_dispatch.cpp')
-rw-r--r-- | libc/arch-arm/dynamic_function_dispatch.cpp | 12 |
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); |