aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2014-08-12 14:07:22 +1000
committerAndrew Gerrand <adg@golang.org>2014-08-12 14:07:22 +1000
commitc6f639cdf6e3739e25896447f8902899568b5402 (patch)
treebc56f18574c24918e7952f9b710bc6d3581ca319
parent3fa4a7849c51eaad5a5c67f80489e0e12ff10005 (diff)
downloadgo-c6f639cdf6e3739e25896447f8902899568b5402.tar.gz
go-c6f639cdf6e3739e25896447f8902899568b5402.zip
[release-branch.go1.3] runtime: ignore exceptions from foreign threads.
««« CL 104200046 / 14683b1cf2cc runtime: ignore exceptions from foreign threads. Fixes #8224. LGTM=alex.brainman, rsc R=alex.brainman, rsc, dave CC=golang-codereviews https://golang.org/cl/104200046 »»» LGTM=alex.brainman, minux R=rsc, alex.brainman, minux CC=golang-codereviews https://golang.org/cl/126010043
-rw-r--r--src/pkg/runtime/sys_windows_386.s5
-rw-r--r--src/pkg/runtime/sys_windows_amd64.s5
2 files changed, 10 insertions, 0 deletions
diff --git a/src/pkg/runtime/sys_windows_386.s b/src/pkg/runtime/sys_windows_386.s
index e0c0631cfc..576831d2cc 100644
--- a/src/pkg/runtime/sys_windows_386.s
+++ b/src/pkg/runtime/sys_windows_386.s
@@ -88,6 +88,10 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$0-0
// fetch g
get_tls(DX)
+ CMPL DX, $0
+ JNE 3(PC)
+ MOVL $0, AX // continue
+ JMP done
MOVL m(DX), AX
CMPL AX, $0
JNE 2(PC)
@@ -100,6 +104,7 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$0-0
CALL runtime·sighandler(SB)
// AX is set to report result back to Windows
+done:
// restore callee-saved registers
MOVL 24(SP), DI
MOVL 20(SP), SI
diff --git a/src/pkg/runtime/sys_windows_amd64.s b/src/pkg/runtime/sys_windows_amd64.s
index 94845903ed..d161be6a50 100644
--- a/src/pkg/runtime/sys_windows_amd64.s
+++ b/src/pkg/runtime/sys_windows_amd64.s
@@ -120,6 +120,10 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$0-0
// fetch g
get_tls(DX)
+ CMPQ DX, $0
+ JNE 3(PC)
+ MOVQ $0, AX // continue
+ JMP done
MOVQ m(DX), AX
CMPQ AX, $0
JNE 2(PC)
@@ -132,6 +136,7 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$0-0
CALL runtime·sighandler(SB)
// AX is set to report result back to Windows
+done:
// restore registers as required for windows callback
MOVQ 24(SP), R15
MOVQ 32(SP), R14