diff --git a/ext/opcache/jit/zend_jit_ir.c b/ext/opcache/jit/zend_jit_ir.c index 25ed46a5e83..f291b87a177 100644 --- a/ext/opcache/jit/zend_jit_ir.c +++ b/ext/opcache/jit/zend_jit_ir.c @@ -3260,6 +3260,15 @@ static void zend_jit_setup(void) : "=a" (ti)); tsrm_tls_offset = ti[1]; tsrm_tls_index = ti[0] * 8; +#elif defined(__FreeBSD__) + size_t *ti; + + __asm__( + "leaq _tsrm_ls_cache@tlsgd(%%rip), %0\n" + : "=a" (ti)); + tsrm_tls_offset = ti[1]; + /* Index is offset by 1 on FreeBSD (https://github.com/freebsd/freebsd-src/blob/bf56e8b9c8639ac4447d223b83cdc128107cc3cd/libexec/rtld-elf/rtld.c#L5260) */ + tsrm_tls_index = (ti[0] + 1) * 8; #else size_t *ti;