diff options
| author | Vasily Leonenko <vasiliy.leonenko@gmail.com> | 2026-01-29 21:12:49 +0300 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2026-01-30 09:55:05 -0800 |
| commit | f14d8975a21e24aa33e0b496e822fdcb285879b9 (patch) | |
| tree | 6703567bdb01f5473c77e76cf5f8f804c4847bfa /src/runtime | |
| parent | 35c5deb1d43b245c19059d1532929ee087e44a84 (diff) | |
| download | go-f14d8975a21e24aa33e0b496e822fdcb285879b9.tar.xz | |
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>
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/asm_amd64.s | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s index add69aa500..39219babcc 100644 --- a/src/runtime/asm_amd64.s +++ b/src/runtime/asm_amd64.s @@ -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 |
