mirror of
https://github.com/golang/go.git
synced 2026-02-07 02:09:55 +00:00
runtime: align end of systemstack_switch prologue on amd64 for consistency with gosave_systemstack_switch
gosave_systemstack_switch saves PC with fixed offset of 8 bytes from systemstack_switch to bypass prologue. This commit makes this offset consistent with actual address of UNDEF instruction intended to be at that address. Fixes #71440 Change-Id: Ibe6458c5bcb0bdaec228a2f13d6aec7ecc0e319e Reviewed-on: https://go-review.googlesource.com/c/go/+/740360 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
parent
35c5deb1d4
commit
f14d8975a2
1 changed files with 5 additions and 2 deletions
|
|
@ -510,6 +510,8 @@ goodm:
|
|||
// The frame layout needs to match systemstack
|
||||
// so that it can pretend to be systemstack_switch.
|
||||
TEXT runtime·systemstack_switch(SB), NOSPLIT, $0-0
|
||||
// Align for consistency with offset used in gosave_systemstack_switch
|
||||
PCALIGN $8
|
||||
UNDEF
|
||||
// Make sure this function is not leaf,
|
||||
// so the frame is saved.
|
||||
|
|
@ -885,8 +887,9 @@ TEXT ·publicationBarrier<ABIInternal>(SB),NOSPLIT,$0-0
|
|||
// Smashes R9.
|
||||
TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0
|
||||
// Take systemstack_switch PC and add 8 bytes to skip
|
||||
// the prologue. The final location does not matter
|
||||
// as long as we are between the prologue and the epilogue.
|
||||
// the prologue. Keep 8 bytes offset consistent with
|
||||
// PCALIGN $8 in systemstack_swtich, pointing start of
|
||||
// UNDEF instruction beyond prologue.
|
||||
MOVQ $runtime·systemstack_switch+8(SB), R9
|
||||
MOVQ R9, (g_sched+gobuf_pc)(R14)
|
||||
LEAQ 8(SP), R9
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue