Merge "Fix dlclose for libraries with thread_local dtors"
diff --git a/benchmarks/bionic_benchmarks.cpp b/benchmarks/bionic_benchmarks.cpp
index d82c739..fe7a1b1 100644
--- a/benchmarks/bionic_benchmarks.cpp
+++ b/benchmarks/bionic_benchmarks.cpp
@@ -514,28 +514,12 @@
void RegisterAllBenchmarks(const bench_opts_t& opts,
std::map<std::string, args_vector_t>& args_shorthand) {
- // Add the property tests at the end since they might cause segfaults in
- // tests running afterwards (b/62197783).
- std::vector<std::string> prop_tests;
-
for (auto& entry : g_str_to_func) {
- if (android::base::StartsWith(entry.first, "BM_property_")) {
- prop_tests.push_back(entry.first);
- } else {
- auto& function_info = entry.second;
- args_vector_t arg_vector;
- args_vector_t* run_args = ResolveArgs(&arg_vector, function_info.second,
- args_shorthand);
- RegisterGoogleBenchmarks(bench_opts_t(), opts, entry.first, run_args);
- }
- }
-
- for (auto& prop_name : prop_tests) {
- auto& function_info = g_str_to_func.at(prop_name);
+ auto& function_info = entry.second;
args_vector_t arg_vector;
args_vector_t* run_args = ResolveArgs(&arg_vector, function_info.second,
args_shorthand);
- RegisterGoogleBenchmarks(bench_opts_t(), opts, prop_name, run_args);
+ RegisterGoogleBenchmarks(bench_opts_t(), opts, entry.first, run_args);
}
}
diff --git a/benchmarks/tests/interface_test.cpp b/benchmarks/tests/interface_test.cpp
index 64629e6..d34017d 100644
--- a/benchmarks/tests/interface_test.cpp
+++ b/benchmarks/tests/interface_test.cpp
@@ -176,6 +176,8 @@
"BM_atomic_seq_cst_fence/iterations:1\n"
"BM_atomic_store_release/iterations:1\n"
"BM_atomic_store_seq_cst/iterations:1\n"
+ "BM_inttypes_strtoimax/iterations:1\n"
+ "BM_inttypes_strtoumax/iterations:1\n"
"BM_math_fabs/0/iterations:1\n"
"BM_math_fabs/1/iterations:1\n"
"BM_math_fabs/2/iterations:1\n"
@@ -234,6 +236,34 @@
"BM_math_sin_fesetenv/iterations:1\n"
"BM_math_sin_feupdateenv/iterations:1\n"
"BM_math_sqrt/iterations:1\n"
+ "BM_property_find/1/iterations:1\n"
+ "BM_property_find/4/iterations:1\n"
+ "BM_property_find/16/iterations:1\n"
+ "BM_property_find/64/iterations:1\n"
+ "BM_property_find/128/iterations:1\n"
+ "BM_property_find/256/iterations:1\n"
+ "BM_property_find/512/iterations:1\n"
+ "BM_property_get/1/iterations:1\n"
+ "BM_property_get/4/iterations:1\n"
+ "BM_property_get/16/iterations:1\n"
+ "BM_property_get/64/iterations:1\n"
+ "BM_property_get/128/iterations:1\n"
+ "BM_property_get/256/iterations:1\n"
+ "BM_property_get/512/iterations:1\n"
+ "BM_property_read/1/iterations:1\n"
+ "BM_property_read/4/iterations:1\n"
+ "BM_property_read/16/iterations:1\n"
+ "BM_property_read/64/iterations:1\n"
+ "BM_property_read/128/iterations:1\n"
+ "BM_property_read/256/iterations:1\n"
+ "BM_property_read/512/iterations:1\n"
+ "BM_property_serial/1/iterations:1\n"
+ "BM_property_serial/4/iterations:1\n"
+ "BM_property_serial/16/iterations:1\n"
+ "BM_property_serial/64/iterations:1\n"
+ "BM_property_serial/128/iterations:1\n"
+ "BM_property_serial/256/iterations:1\n"
+ "BM_property_serial/512/iterations:1\n"
"BM_pthread_create/iterations:1\n"
"BM_pthread_create_and_run/iterations:1\n"
"BM_pthread_exit_and_join/iterations:1\n"
@@ -300,7 +330,10 @@
"BM_stdio_printf_s/iterations:1\n"
"BM_stdio_scanf_d/iterations:1\n"
"BM_stdio_scanf_maps/iterations:1\n"
+ "BM_stdio_scanf_maps_baseline/iterations:1\n"
"BM_stdio_scanf_s/iterations:1\n"
+ "BM_stdlib_atoi/iterations:1\n"
+ "BM_stdlib_atol/iterations:1\n"
"BM_stdlib_malloc_free/8/iterations:1\n"
"BM_stdlib_malloc_free/64/iterations:1\n"
"BM_stdlib_malloc_free/512/iterations:1\n"
@@ -312,6 +345,10 @@
"BM_stdlib_malloc_free/131072/iterations:1\n"
"BM_stdlib_mbrtowc/0/iterations:1\n"
"BM_stdlib_mbstowcs/0/0/iterations:1\n"
+ "BM_stdlib_strtol/iterations:1\n"
+ "BM_stdlib_strtoll/iterations:1\n"
+ "BM_stdlib_strtoul/iterations:1\n"
+ "BM_stdlib_strtoull/iterations:1\n"
"BM_string_memcmp/8/0/0/iterations:1\n"
"BM_string_memcmp/64/0/0/iterations:1\n"
"BM_string_memcmp/512/0/0/iterations:1\n"
@@ -460,35 +497,7 @@
"BM_unistd_getpid/iterations:1\n"
"BM_unistd_getpid_syscall/iterations:1\n"
"BM_unistd_gettid/iterations:1\n"
- "BM_unistd_gettid_syscall/iterations:1\n"
- "BM_property_find/1/iterations:1\n"
- "BM_property_find/4/iterations:1\n"
- "BM_property_find/16/iterations:1\n"
- "BM_property_find/64/iterations:1\n"
- "BM_property_find/128/iterations:1\n"
- "BM_property_find/256/iterations:1\n"
- "BM_property_find/512/iterations:1\n"
- "BM_property_get/1/iterations:1\n"
- "BM_property_get/4/iterations:1\n"
- "BM_property_get/16/iterations:1\n"
- "BM_property_get/64/iterations:1\n"
- "BM_property_get/128/iterations:1\n"
- "BM_property_get/256/iterations:1\n"
- "BM_property_get/512/iterations:1\n"
- "BM_property_read/1/iterations:1\n"
- "BM_property_read/4/iterations:1\n"
- "BM_property_read/16/iterations:1\n"
- "BM_property_read/64/iterations:1\n"
- "BM_property_read/128/iterations:1\n"
- "BM_property_read/256/iterations:1\n"
- "BM_property_read/512/iterations:1\n"
- "BM_property_serial/1/iterations:1\n"
- "BM_property_serial/4/iterations:1\n"
- "BM_property_serial/16/iterations:1\n"
- "BM_property_serial/64/iterations:1\n"
- "BM_property_serial/128/iterations:1\n"
- "BM_property_serial/256/iterations:1\n"
- "BM_property_serial/512/iterations:1\n";
+ "BM_unistd_gettid_syscall/iterations:1\n";
Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1"});
}
diff --git a/libc/Android.bp b/libc/Android.bp
index a0748a9..2bb323c 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -2125,4 +2125,11 @@
first_version: "9",
}
-subdirs = ["*"]
+// Export these headers for toolbox to process
+filegroup {
+ name: "kernel_input_headers",
+ srcs: [
+ "kernel/uapi/linux/input.h",
+ "kernel/uapi/linux/input-event-codes.h",
+ ],
+}
diff --git a/libc/include/android/legacy_stdlib_inlines.h b/libc/include/android/legacy_stdlib_inlines.h
index e26e5f2..a1cc590 100644
--- a/libc/include/android/legacy_stdlib_inlines.h
+++ b/libc/include/android/legacy_stdlib_inlines.h
@@ -34,6 +34,22 @@
#include <stdlib.h>
#include <sys/cdefs.h>
+#if __ANDROID_API__ < __ANDROID_API_K__
+
+__BEGIN_DECLS
+
+static __inline int abs(int __n) { return (__n < 0) ? -__n : __n; }
+
+static __inline long labs(long __n) { return (__n < 0L) ? -__n : __n; }
+
+static __inline long long llabs(long long __n) {
+ return (__n < 0LL) ? -__n : __n;
+}
+
+__END_DECLS
+
+#endif
+
#if __ANDROID_API__ < __ANDROID_API_L__
__BEGIN_DECLS
@@ -52,14 +68,6 @@
static __inline double atof(const char *nptr) { return (strtod(nptr, NULL)); }
-static __inline int abs(int __n) { return (__n < 0) ? -__n : __n; }
-
-static __inline long labs(long __n) { return (__n < 0L) ? -__n : __n; }
-
-static __inline long long llabs(long long __n) {
- return (__n < 0LL) ? -__n : __n;
-}
-
static __inline int rand(void) { return (int)lrand48(); }
static __inline void srand(unsigned int __s) { srand48(__s); }
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h
index 1ae3c6e..944d72b 100644
--- a/libc/include/stdlib.h
+++ b/libc/include/stdlib.h
@@ -172,12 +172,17 @@
#include <bits/fortify/stdlib.h>
#endif
+#if __ANDROID_API__ >= __ANDROID_API_K__
+int abs(int __x) __attribute_const__ __INTRODUCED_IN(19);
+long labs(long __x) __attribute_const__ __INTRODUCED_IN(19);
+long long llabs(long long __x) __attribute_const__ __INTRODUCED_IN(19);
+#else
+// Implemented as static inlines before 19.
+#endif
+
#if __ANDROID_API__ >= __ANDROID_API_L__
float strtof(const char* __s, char** __end_ptr) __INTRODUCED_IN(21);
double atof(const char* __s) __attribute_pure__ __INTRODUCED_IN(21);
-int abs(int __x) __attribute_const__ __INTRODUCED_IN(21);
-long labs(long __x) __attribute_const__ __INTRODUCED_IN(21);
-long long llabs(long long __x) __attribute_const__ __INTRODUCED_IN(21);
int rand(void) __INTRODUCED_IN(21);
void srand(unsigned int __seed) __INTRODUCED_IN(21);
long random(void) __INTRODUCED_IN(21);