diff --git a/internal/engine/wazevo/call_engine.go b/internal/engine/wazevo/call_engine.go index efd362e101..85515de47f 100644 --- a/internal/engine/wazevo/call_engine.go +++ b/internal/engine/wazevo/call_engine.go @@ -400,7 +400,6 @@ const callStackCeiling = uintptr(5000000) // in uint64 (8 bytes) == 40000000 byt func (c *callEngine) growStackWithGuarded() (newSP uintptr, err error) { if wazevoapi.StackGuardCheckEnabled { wazevoapi.CheckStackGuardPage(c.stack) - c.execCtx.stackGrowRequiredSize += wazevoapi.StackGuardCheckGuardPageSize } newSP, err = c.growStack() if err != nil { @@ -420,7 +419,7 @@ func (c *callEngine) growStack() (newSP uintptr, err error) { return } - newLen := 2*currentLen + c.execCtx.stackGrowRequiredSize + newLen := 2*currentLen + c.execCtx.stackGrowRequiredSize + 16 // Stack might be aligned to 16 bytes, so add 16 bytes just in case. newStack := make([]byte, newLen) relSp := c.stackTop - uintptr(unsafe.Pointer(c.execCtx.stackPointerBeforeGoCall)) diff --git a/internal/engine/wazevo/call_engine_test.go b/internal/engine/wazevo/call_engine_test.go index b751f0fede..b1fd19b775 100644 --- a/internal/engine/wazevo/call_engine_test.go +++ b/internal/engine/wazevo/call_engine_test.go @@ -37,7 +37,7 @@ func TestCallEngine_growStack(t *testing.T) { } newSP, err := c.growStack() require.NoError(t, err) - require.Equal(t, 160+32*2, len(c.stack)) + require.Equal(t, 160+32*2+16, len(c.stack)) require.True(t, c.stackTop%16 == 0) require.Equal(t, &c.stack[0], c.execCtx.stackBottomPtr)