]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: clear frame pointer in morestack
authorMichael Pratt <mpratt@google.com>
Fri, 2 May 2025 18:58:42 +0000 (14:58 -0400)
committerGopher Robot <gobot@golang.org>
Fri, 2 May 2025 20:30:27 +0000 (13:30 -0700)
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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nick Ripley <nick.ripley@datadoghq.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/runtime/asm_amd64.s
src/runtime/asm_arm64.s

index 14e2ea6686c5f4dc0ca0e429cd11bd6a24b84803..8983eeafcb8541c567b69540a75c68960ce77357 100644 (file)
@@ -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
index 5ba72d84986149322826b868f459292e8e905a9d..d2261c516091e7161a7127d46c2d2b5617c00c6e 100644 (file)
@@ -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)