From 2f836d4989845c0c82a1e4f99206fb0ff0d137a2 Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Wed, 18 Mar 2015 14:14:02 -0700 Subject: [PATCH] Make __get_thread inlined. Bug: 19825434 Change-Id: Ifb672a45a5776b83625a25654ed0d6f7fc368ae3 --- libc/bionic/ndk_cruft.cpp | 8 ++++++++ libc/bionic/pthread_internal.h | 6 ++++-- libc/bionic/pthread_internals.cpp | 4 ---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index 109c5239b..8b34495f8 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -346,6 +346,14 @@ extern "C" void* dlmalloc(size_t size) { return malloc(size); } +#define __get_thread __real_get_thread +#include "pthread_internal.h" +#undef __get_thread +// Various third-party apps contain a backport of our pthread_rwlock implementation that uses this. +extern "C" pthread_internal_t* __get_thread() { + return __real_get_thread(); +} + #endif // !defined(__LP64__) // This is never implemented in bionic, only needed for ABI compatibility with the NDK. diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h index 8da99dd36..99882ae98 100644 --- a/libc/bionic/pthread_internal.h +++ b/libc/bionic/pthread_internal.h @@ -113,8 +113,10 @@ __LIBC_HIDDEN__ void __init_tls(pthread_internal_t* thread); __LIBC_HIDDEN__ void __init_alternate_signal_stack(pthread_internal_t*); __LIBC_HIDDEN__ void _pthread_internal_add(pthread_internal_t* thread); -/* Various third-party apps contain a backport of our pthread_rwlock implementation that uses this. */ -extern "C" __LIBC64_HIDDEN__ pthread_internal_t* __get_thread(void); +// Make __get_thread() inlined for performance reason. See http://b/19825434. +static inline __always_inline pthread_internal_t* __get_thread() { + return reinterpret_cast(__get_tls()[TLS_SLOT_THREAD_ID]); +} __LIBC_HIDDEN__ void pthread_key_clean_all(void); __LIBC_HIDDEN__ void _pthread_internal_remove_locked(pthread_internal_t* thread, bool free_thread); diff --git a/libc/bionic/pthread_internals.cpp b/libc/bionic/pthread_internals.cpp index 14061d1e6..0dd88fe80 100644 --- a/libc/bionic/pthread_internals.cpp +++ b/libc/bionic/pthread_internals.cpp @@ -68,7 +68,3 @@ void _pthread_internal_add(pthread_internal_t* thread) { } g_thread_list = thread; } - -pthread_internal_t* __get_thread(void) { - return reinterpret_cast(__get_tls()[TLS_SLOT_THREAD_ID]); -}