From 93fb2c90740aef00553c9ce6a7cd4578c2469675 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 2 May 2025 14:58:42 -0400 Subject: [PATCH] runtime: clear frame pointer in morestack Corollary to CL 669615. morestack uses the frame pointer from g0.sched.bp. This doesn't really make any sense. morestack wasn't called by whatever used g0 last, so at best unwinding will get misleading results. For #63630. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-linux-arm64-longtest Change-Id: I6a6a636c3a2994eb88f890c506c96fd899e993a1 Reviewed-on: https://go-review.googlesource.com/c/go/+/669616 LUCI-TryBot-Result: Go LUCI Reviewed-by: Nick Ripley Reviewed-by: Michael Knyszek Auto-Submit: Michael Pratt Reviewed-by: Cherry Mui --- src/runtime/asm_amd64.s | 2 +- src/runtime/asm_arm64.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s index 14e2ea6686..8983eeafcb 100644 --- a/src/runtime/asm_amd64.s +++ b/src/runtime/asm_amd64.s @@ -616,7 +616,7 @@ TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0 MOVQ m_g0(BX), BX MOVQ BX, g(CX) MOVQ (g_sched+gobuf_sp)(BX), SP - MOVQ (g_sched+gobuf_bp)(BX), BP + MOVQ $0, BP // clear frame pointer, as caller may execute on another M CALL runtime·newstack(SB) CALL runtime·abort(SB) // crash if newstack returns RET diff --git a/src/runtime/asm_arm64.s b/src/runtime/asm_arm64.s index 5ba72d8498..d2261c5160 100644 --- a/src/runtime/asm_arm64.s +++ b/src/runtime/asm_arm64.s @@ -387,7 +387,7 @@ TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0 BL runtime·save_g(SB) MOVD (g_sched+gobuf_sp)(g), R0 MOVD R0, RSP - MOVD (g_sched+gobuf_bp)(g), R29 + MOVD $0, R29 // clear frame pointer, as caller may execute on another M MOVD.W $0, -16(RSP) // create a call frame on g0 (saved LR; keep 16-aligned) BL runtime·newstack(SB)