aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2019-01-31 22:29:22 +0000
committerElliott Hughes <enh@google.com>2019-04-22 16:33:38 -0700
commit84cb324786ed7db7a13349106f0f626ed54807ee (patch)
tree810d01dd8f2f289a58668f358468d8f84b191e13
parent5bab966ca807b95ca8be32a71cc7cecc36b62106 (diff)
downloadandroid_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.bp7
-rw-r--r--libc/arch-arm/dynamic_function_dispatch.cpp12
-rw-r--r--libc/arch-arm/dynamic_function_wrapper.S37
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)