[runtime] Mark channel_call as blocking
Change-Id: If4124393f709734b8f2c50967a71a89d65a43fb1
diff --git a/src/runtime/mkfuchsiavdso.go b/src/runtime/mkfuchsiavdso.go
index 11f22e7..102095b 100644
--- a/src/runtime/mkfuchsiavdso.go
+++ b/src/runtime/mkfuchsiavdso.go
@@ -184,11 +184,12 @@
var arm64RegArgs = []string{"R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7"}
// blockingSyscalls is a map of known syscalls which may block.
-// TODO(dhobsd): Is this list accurate? Potentially add nanosleep, channel_call, and others.
+// TODO(dhobsd): Is this list accurate? Potentially add nanosleep or others.
var blockingSyscalls = map[string]bool{
- "port_wait": true,
- "object_wait_one": true,
+ "channel_call": true,
"object_wait_many": true,
+ "object_wait_one": true,
+ "port_wait": true,
}
func printAsm(buf *bytes.Buffer, def abigen.SysDef) {
diff --git a/src/runtime/vdsocalls_fuchsia_amd64.s b/src/runtime/vdsocalls_fuchsia_amd64.s
index b7e06db..aa8d615 100644
--- a/src/runtime/vdsocalls_fuchsia_amd64.s
+++ b/src/runtime/vdsocalls_fuchsia_amd64.s
@@ -784,6 +784,7 @@
MOVQ DX, m_vdsoPC(R14)
LEAQ 24(SP), DX
MOVQ DX, m_vdsoSP(R14)
+ CALL runtime·entersyscall(SB)
MOVL handle+0(FP), DI
MOVL options+4(FP), SI
MOVQ deadline+8(FP), DX
@@ -793,6 +794,7 @@
MOVQ vdso_zx_channel_call(SB), AX
CALL AX
MOVL AX, ret+40(FP)
+ CALL runtime·exitsyscall(SB)
POPQ R14
MOVQ $0, m_vdsoSP(R14)
RET
diff --git a/src/runtime/vdsocalls_fuchsia_arm64.s b/src/runtime/vdsocalls_fuchsia_arm64.s
index 4662c21..7a76bbd 100644
--- a/src/runtime/vdsocalls_fuchsia_arm64.s
+++ b/src/runtime/vdsocalls_fuchsia_arm64.s
@@ -596,6 +596,7 @@
MOVD LR, m_vdsoPC(R21)
MOVD RSP, R20
MOVD R20, m_vdsoSP(R21)
+ CALL runtime·entersyscall(SB)
MOVW handle+0(FP), R0
MOVW options+4(FP), R1
MOVD deadline+8(FP), R2
@@ -604,6 +605,7 @@
MOVD actual_handles+32(FP), R5
BL vdso_zx_channel_call(SB)
MOVW R0, ret+40(FP)
+ BL runtime·exitsyscall(SB)
MOVD g_m(g), R21
MOVD $0, m_vdsoSP(R21)
RET