[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