Commit f9fd505
Fix TAILCALL delayed helper interrupt via call_interrupt_op sentinel
In TAILCALL delayed helpers (EX-signature helpers that can't musttail),
ZEND_VM_INTERRUPT() was routing through zend_interrupt_helper_SPEC, which
can return a tagged pointer (ZEND_VM_ENTER_BIT set) via ZEND_VM_ENTER().
That tagged pointer propagated back to ZEND_VM_DISPATCH_TO_HELPER, which
blindly dispatched to it, causing a misaligned access crash.
The fix: TAILCALL delayed helpers use SAVE_OPLINE() + return &call_interrupt_op,
the sentinel pattern already used by TAILCALL VM. ZEND_VM_DISPATCH_TO_HELPER
then dispatches to call_interrupt_op->handler (zend_interrupt_helper_SPEC_TAILCALL),
which loads the real opline from EX(opline) and handles the interrupt cleanly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 0c31be1 commit f9fd505
2 files changed
Lines changed: 10 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1867 | 1867 | | |
1868 | 1868 | | |
1869 | 1869 | | |
1870 | | - | |
1871 | | - | |
1872 | | - | |
| 1870 | + | |
| 1871 | + | |
| 1872 | + | |
1873 | 1873 | | |
| 1874 | + | |
| 1875 | + | |
1874 | 1876 | | |
1875 | 1877 | | |
1876 | 1878 | | |
| |||
0 commit comments