aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/go-patches/0004-runtime-support-non-cooperative-preemption-on-window.patch
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--go-patches/0004-runtime-support-non-cooperative-preemption-on-window.patch65
1 files changed, 0 insertions, 65 deletions
diff --git a/go-patches/0004-runtime-support-non-cooperative-preemption-on-window.patch b/go-patches/0004-runtime-support-non-cooperative-preemption-on-window.patch
deleted file mode 100644
index c99ea390..00000000
--- a/go-patches/0004-runtime-support-non-cooperative-preemption-on-window.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Jason A. Donenfeld" <Jason@zx2c4.com>
-Date: Tue, 23 Nov 2021 20:57:24 +0100
-Subject: [PATCH] runtime: support non-cooperative preemption on windows/arm64
-
-This adds support for injecting asynchronous preemption calls on
-windows/arm64. This code exactly follows sigctxt.pushCall for POSIX OSes
-on arm64.
-
-Fixes #49759.
-
-Change-Id: Id35ff6bc105c1db9d7ed2918d3ecab0e4e9a9431
-Reviewed-on: https://go-review.googlesource.com/c/go/+/366735
-Trust: Jason A. Donenfeld <Jason@zx2c4.com>
-Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
-TryBot-Result: Go Bot <gobot@golang.org>
-Reviewed-by: Cherry Mui <cherryyz@google.com>
-Reviewed-by: Austin Clements <austin@google.com>
-Reviewed-by: Patrik Nyblom <pnyb@google.com>
----
- src/runtime/os_windows.go | 18 ++++++++++++------
- 1 file changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go
-index faeb6ce552..7bf9a426d1 100644
---- a/src/runtime/os_windows.go
-+++ b/src/runtime/os_windows.go
-@@ -1303,18 +1303,13 @@ func setThreadCPUProfiler(hz int32) {
- atomic.Store((*uint32)(unsafe.Pointer(&getg().m.profilehz)), uint32(hz))
- }
-
--const preemptMSupported = GOARCH != "arm64"
-+const preemptMSupported = true
-
- // suspendLock protects simultaneous SuspendThread operations from
- // suspending each other.
- var suspendLock mutex
-
- func preemptM(mp *m) {
-- if !preemptMSupported {
-- // TODO: Implement call injection
-- return
-- }
--
- if mp == getg().m {
- throw("self-preempt")
- }
-@@ -1409,6 +1404,17 @@ func preemptM(mp *m) {
- *(*uint32)(unsafe.Pointer(sp)) = uint32(c.lr())
- c.set_lr(newpc - 1)
- c.set_ip(targetPC)
-+
-+ case "arm64":
-+ // Push LR. The injected call is responsible
-+ // for restoring LR. gentraceback is aware of
-+ // this extra slot. See sigctxt.pushCall in
-+ // signal_arm64.go.
-+ sp := c.sp() - 16 // SP needs 16-byte alignment
-+ c.set_sp(sp)
-+ *(*uint64)(unsafe.Pointer(sp)) = uint64(c.lr())
-+ c.set_lr(newpc)
-+ c.set_ip(targetPC)
- }
- stdcall2(_SetThreadContext, thread, uintptr(unsafe.Pointer(c)))
- }