diff options
author | Elliott Hughes <enh@google.com> | 2019-01-31 22:29:22 +0000 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2019-04-22 16:33:38 -0700 |
commit | 84cb324786ed7db7a13349106f0f626ed54807ee (patch) | |
tree | 810d01dd8f2f289a58668f358468d8f84b191e13 | |
parent | 5bab966ca807b95ca8be32a71cc7cecc36b62106 (diff) | |
download | android_bionic-84cb324786ed7db7a13349106f0f626ed54807ee.tar.gz android_bionic-84cb324786ed7db7a13349106f0f626ed54807ee.tar.bz2 android_bionic-84cb324786ed7db7a13349106f0f626ed54807ee.zip |
Reland ifuncs for strcmp and strlen.
This reverts commit e4788d4c7e842b0ca24363ebc5544a16c9e3b185,
which undid this change during the Q betas.
Bug: http://b/120989619
(cherry picked from commit 927fe99692b1edc723e74bfc17ed718a84ddc6fd)
Change-Id: Ie8fc0fc0965055f312c2c0cc0f64adb7594ffdb4
-rw-r--r-- | libc/Android.bp | 7 | ||||
-rw-r--r-- | libc/arch-arm/dynamic_function_dispatch.cpp | 12 | ||||
-rw-r--r-- | libc/arch-arm/dynamic_function_wrapper.S | 37 |
3 files changed, 5 insertions, 51 deletions
diff --git a/libc/Android.bp b/libc/Android.bp index 23ccbe3e9..32e756043 100644 --- a/libc/Android.bp +++ b/libc/Android.bp @@ -1435,12 +1435,7 @@ cc_library_static { srcs: ["arch-x86/dynamic_function_dispatch.cpp"], }, arm: { - srcs: [ - "arch-arm/dynamic_function_dispatch.cpp", - - // Workaround for b/120254692. - "arch-arm/dynamic_function_wrapper.S", - ], + srcs: ["arch-arm/dynamic_function_dispatch.cpp"], }, }, diff --git a/libc/arch-arm/dynamic_function_dispatch.cpp b/libc/arch-arm/dynamic_function_dispatch.cpp index 09fd8f30e..640f3306a 100644 --- a/libc/arch-arm/dynamic_function_dispatch.cpp +++ b/libc/arch-arm/dynamic_function_dispatch.cpp @@ -89,15 +89,11 @@ static int ifunc_close(int fd) { return r0; } -#define DEFINE_IFUNC_WITH_SUFFIX(name, suffix) \ - name##_func name##suffix __attribute__((ifunc(#name "_resolver"))); \ +#define DEFINE_IFUNC(name) \ + name##_func name __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 @@ -291,7 +287,7 @@ DEFINE_IFUNC(__strcat_chk) { } typedef int strcmp_func(const char* __lhs, const char* __rhs); -DEFINE_INTERNAL_IFUNC(strcmp) { +DEFINE_IFUNC(strcmp) { switch(get_cpu_variant()) { case kCortexA9: RETURN_FUNC(strcmp_func, strcmp_a9); @@ -305,7 +301,7 @@ DEFINE_INTERNAL_IFUNC(strcmp) { } typedef size_t strlen_func(const char* __s); -DEFINE_INTERNAL_IFUNC(strlen) { +DEFINE_IFUNC(strlen) { switch(get_cpu_variant()) { case kCortexA9: RETURN_FUNC(strlen_func, strlen_a9); diff --git a/libc/arch-arm/dynamic_function_wrapper.S b/libc/arch-arm/dynamic_function_wrapper.S deleted file mode 100644 index 1d2842b5c..000000000 --- a/libc/arch-arm/dynamic_function_wrapper.S +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include <private/bionic_asm.h> - -#define FUNCTION_DELEGATE(name, impl) \ -ENTRY(name); \ - b impl; \ -END(name) - -FUNCTION_DELEGATE(strcmp, strcmp_internal) -FUNCTION_DELEGATE(strlen, strlen_internal) |