Module: wine Branch: master Commit: 84760a8fb2cf9ed577c63957c5bdfc621d748a7f URL: https://source.winehq.org/git/wine.git/?a=commit;h=84760a8fb2cf9ed577c63957c...
Author: Ken Thomases ken@codeweavers.com Date: Thu Sep 12 20:52:31 2019 -0500
ntdll: On Mac, use the Mach API as preferred approach to get a thread's GS.base.
The previous technique was a gross hack peeking at the internals of the pthreads implementation.
Signed-off-by: Ken Thomases ken@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/signal_x86_64.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 5eca0432a0..e76e5be6aa 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -3204,9 +3204,18 @@ void signal_free_thread( TEB *teb ) */ static void *mac_thread_gsbase(void) { + struct thread_identifier_info tiinfo; + unsigned int info_count = THREAD_IDENTIFIER_INFO_COUNT; static int gsbase_offset = -1; void *ret;
+ kern_return_t kr = thread_info(mach_thread_self(), THREAD_IDENTIFIER_INFO, (thread_identifier_info_t) &tiinfo, &info_count); + if (kr == KERN_SUCCESS) + { + TRACE("pthread_self() %p thread ID %lx gsbase %lx\n", pthread_self(), tiinfo.thread_id, tiinfo.thread_handle); + return (void*)tiinfo.thread_handle; + } + if (gsbase_offset < 0) { /* Search for the array of TLS slots within the pthread data structure.