diff options
author | qmuntal <quimmuntal@gmail.com> | 2024-04-24 09:36:22 +0200 |
---|---|---|
committer | Quim Muntal <quimmuntal@gmail.com> | 2024-04-25 18:50:21 +0000 |
commit | a8ba163695f605c72156c90de97a06b3e40566ff (patch) | |
tree | c0f8f4f861b7fdae3dd25ab3f25e3f12d73c9cff | |
parent | fd99157f9d9c22eb35ea9c70f32908f0980d47ed (diff) | |
download | go-a8ba163695f605c72156c90de97a06b3e40566ff.tar.gz go-a8ba163695f605c72156c90de97a06b3e40566ff.zip |
runtime: fix mcall unwinding on Windows
The Windows native stack unwinder incorrectly classifies the next
instruction after the mcall callback call as being part of the function
epilogue, producing a wrong call stack.
Add a NOP after the callback call to work around this issue.
Fixes #67007.
Change-Id: I6017635da895b272b1852391db9a255ca69e335d
Reviewed-on: https://go-review.googlesource.com/c/go/+/581335
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
-rw-r--r-- | src/runtime/asm_amd64.s | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s index 1071d270c1..cb21629a84 100644 --- a/src/runtime/asm_amd64.s +++ b/src/runtime/asm_amd64.s @@ -456,6 +456,10 @@ goodm: PUSHQ AX // open up space for fn's arg spill slot MOVQ 0(DX), R12 CALL R12 // fn(g) + // The Windows native stack unwinder incorrectly classifies the next instruction + // as part of the function epilogue, producing a wrong call stack. + // Add a NOP to work around this issue. See go.dev/issue/67007. + BYTE $0x90 POPQ AX JMP runtime·badmcall2(SB) RET |