aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime
diff options
context:
space:
mode:
authorShenghou Ma <minux@golang.org>2014-07-09 23:55:35 -0400
committerShenghou Ma <minux@golang.org>2014-07-09 23:55:35 -0400
commita1778ec1462c2f3f8865e02e5fd7e72ee25c2b64 (patch)
treecf7e81c8a0c666753e094515ccf2eb862b8b4d30 /src/pkg/runtime
parent76ce843afeb7af56fe32d6e4351799b2046f7cbb (diff)
downloadgo-a1778ec1462c2f3f8865e02e5fd7e72ee25c2b64.tar.xz
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
Diffstat (limited to 'src/pkg/runtime')
-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 dc6fc39ddb..f2c2a4128c 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 g(DX), DX
CMPL DX, $0
JNE 2(PC)
@@ -99,6 +103,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 c3db2c1f83..72b905ef79 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 g(DX), DX
CMPQ DX, $0
JNE 2(PC)
@@ -131,6 +135,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