Skip to content

Commit 6b565e0

Browse files
committed
Merge branch 'PHP-8.5'
* PHP-8.5: zend_jit_resolve_tsrm_ls_cache_offsets: clobber volatile registers (#22832)
2 parents f2b6b7f + 8c96f53 commit 6b565e0

3 files changed

Lines changed: 17 additions & 1 deletion

File tree

ext/opcache/jit/tls/zend_jit_tls_aarch64.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ zend_result zend_jit_resolve_tsrm_ls_cache_offsets(
124124
"add %2, x8, x0\n"
125125
: "=r" (thread_pointer), "=r" (insn), "=r" (addr)
126126
:
127-
: "x0", "x1", "x8");
127+
/* Resolver call clobbers only a few registers: https://github.com/ARM-software/abi-aa/blob/ee4b3c12d57c8424ff60c2ae56e10690d0604ab6/sysvabi64/sysvabi64.rst#calling-convention.
128+
* We also clobber x8. */
129+
: "x0", "x1", "x8", "x30", "cc", "memory");
128130

129131
ZEND_ASSERT(addr == &_tsrm_ls_cache);
130132

ext/opcache/jit/tls/zend_jit_tls_x86.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ zend_result zend_jit_resolve_tsrm_ls_cache_offsets(
108108
/* Load thread pointer address */
109109
"movl %%gs:0, %%ebx\n"
110110
: "=a" (t_addr), "=S" (code), "=b" (thread_pointer)
111+
:
112+
/* call may clobber volatile registers */
113+
: "ecx", "edx",
114+
"st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)",
115+
"xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
116+
"cc", "memory"
111117
);
112118

113119
ZEND_ASSERT(t_addr == &_tsrm_ls_cache);

ext/opcache/jit/tls/zend_jit_tls_x86_64.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ zend_result zend_jit_resolve_tsrm_ls_cache_offsets(
104104
/* Load thread pointer address */
105105
"movq %%fs:0, %%rsi\n"
106106
: "=a" (addr), "=b" (code), "=S" (thread_pointer)
107+
:
108+
/* call may clobber volatile registers */
109+
: "rcx", "rdx", "rdi",
110+
"r8", "r9", "r10", "r11",
111+
"st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)",
112+
"xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
113+
"xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15",
114+
"cc", "memory"
107115
);
108116

109117
ZEND_ASSERT(addr == &_tsrm_ls_cache);

0 commit comments

Comments
 (0)