YJIT: Save PC and SP before calling leaf builtins (#7090)
Previously, we did not update cfp->sp before calling the C function of ISEQs marked with Primitive.attr! "inline" (leaf builtins). This caused the GC to miss temporary values on the stack in case the function allocates and triggers a GC run. Right now, there is only a few leaf builtins in numeric.rb on Integer methods such as Integer#~. Since these methods only allocate when operating on big numbers, we missed this issue.
Fix by saving PC and SP before calling the functions -- our usual protocol for calling C functions that may allocate on the GC heap.
YJIT: Save PC and SP before calling leaf builtins (#7090)
Previously, we did not update
cfp->spbefore calling the C function ofISEQs marked with
Primitive.attr! "inline"(leaf builtins). Thiscaused the GC to miss temporary values on the stack in case the function
allocates and triggers a GC run. Right now, there is only a few leaf
builtins in numeric.rb on Integer methods such as
Integer#~. Sincethese methods only allocate when operating on big numbers, we missed
this issue.
Fix by saving PC and SP before calling the functions -- our usual
protocol for calling C functions that may allocate on the GC heap.
[Bug #19316]