Merge "Move dlerror out of a TLS slot and into a pthread_internal_t member."
This commit is contained in:
commit
8b475e598d
3 changed files with 7 additions and 6 deletions
|
@ -139,6 +139,7 @@ class pthread_internal_t {
|
|||
* The dynamic linker implements dlerror(3), which makes it hard for us to implement this
|
||||
* per-thread buffer by simply using malloc(3) and free(3).
|
||||
*/
|
||||
char* current_dlerror;
|
||||
#define __BIONIC_DLERROR_BUFFER_SIZE 512
|
||||
char dlerror_buffer[__BIONIC_DLERROR_BUFFER_SIZE];
|
||||
|
||||
|
|
|
@ -64,14 +64,15 @@ enum {
|
|||
TLS_SLOT_OPENGL = 4,
|
||||
|
||||
TLS_SLOT_STACK_GUARD = 5, // GCC requires this specific slot for x86.
|
||||
TLS_SLOT_DLERROR,
|
||||
|
||||
// TLS slot 6 was used for dlerror but is now free.
|
||||
|
||||
// Fast storage for Thread::Current() in ART.
|
||||
TLS_SLOT_ART_THREAD_SELF,
|
||||
TLS_SLOT_ART_THREAD_SELF = 7,
|
||||
|
||||
// Lets TSAN avoid using pthread_getspecific for finding the current thread
|
||||
// state.
|
||||
TLS_SLOT_TSAN,
|
||||
TLS_SLOT_TSAN = 8,
|
||||
|
||||
BIONIC_TLS_SLOTS // Must come last!
|
||||
};
|
||||
|
|
|
@ -96,10 +96,9 @@ _Unwind_Ptr __loader_dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount) __LINKER_
|
|||
static pthread_mutex_t g_dl_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
|
||||
|
||||
static char* __bionic_set_dlerror(char* new_value) {
|
||||
char** dlerror_slot = &reinterpret_cast<char**>(__get_tls())[TLS_SLOT_DLERROR];
|
||||
char* old_value = __get_thread()->current_dlerror;
|
||||
__get_thread()->current_dlerror = new_value;
|
||||
|
||||
char* old_value = *dlerror_slot;
|
||||
*dlerror_slot = new_value;
|
||||
if (new_value != nullptr) LD_LOG(kLogErrors, "dlerror set to \"%s\"", new_value);
|
||||
return old_value;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue