mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
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 <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>
This commit is contained in:
parent
739fb752e3
commit
93fb2c9074
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user