Skip to content

Commit 1106ff9

Browse files
devnexennikic
authored andcommitted
Implement fetching TLS TCB offset on MacOS
Tested with php-cgi and wordpress and 1255 for jit settings. Closes GH-6659.
1 parent 070e24d commit 1106ff9

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

TSRM/TSRM.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,10 @@ TSRM_API void *tsrm_get_ls_cache(void)
727727
TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void)
728728
{/*{{{*/
729729
#if defined(__APPLE__) && defined(__x86_64__)
730-
// TODO: Implement support for fast JIT ZTS code ???
731-
return 0;
730+
size_t ret;
731+
asm ("movq __tsrm_ls_cache(%%rip),%0"
732+
: "=r" (ret));
733+
return ret;
732734
#elif defined(__x86_64__) && defined(__GNUC__)
733735
size_t ret;
734736

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2923,12 +2923,20 @@ static int zend_jit_setup(void)
29232923
# elif defined(__APPLE__) && defined(__x86_64__)
29242924
tsrm_ls_cache_tcb_offset = tsrm_get_ls_cache_tcb_offset();
29252925
if (tsrm_ls_cache_tcb_offset == 0) {
2926+
#if defined(__has_attribute) && __has_attribute(tls_model)
2927+
size_t ret;
2928+
2929+
asm ("movq __tsrm_ls_cache(%%rip),%0"
2930+
: "=r" (ret));
2931+
tsrm_ls_cache_tcb_offset = ret;
2932+
#else
29262933
size_t *ti;
29272934
__asm__(
29282935
"leaq __tsrm_ls_cache(%%rip),%0"
29292936
: "=r" (ti));
29302937
tsrm_tls_offset = ti[2];
29312938
tsrm_tls_index = ti[1] * 8;
2939+
#endif
29322940
}
29332941
# elif defined(__GNUC__) && defined(__x86_64__)
29342942
tsrm_ls_cache_tcb_offset = tsrm_get_ls_cache_tcb_offset();

0 commit comments

Comments
 (0)