Internal change.

PiperOrigin-RevId: 228979583
Change-Id: I69bd82def48ceb19bc8558c890622b8528d98764
This commit is contained in:
Googler
2019-01-11 18:52:36 -08:00
committed by Shentubot
parent bf65e06c5f
commit 1e1dae50ca
4 changed files with 63 additions and 28 deletions
+1 -1
View File
@@ -6,8 +6,8 @@ go_library(
name = "rawfile",
srcs = [
"blockingpoll_amd64.s",
"blockingpoll_amd64_unsafe.go",
"blockingpoll_unsafe.go",
"blockingpoll_unsafe_amd64.go",
"errors.go",
"rawfile_unsafe.go",
],
+3 -3
View File
@@ -20,7 +20,7 @@
//
// func blockingPoll(fds *pollEvent, nfds int, timeout int64) (n int, err syscall.Errno)
TEXT ·blockingPoll(SB),NOSPLIT,$0-40
CALL runtime·entersyscallblock(SB)
CALL ·callEntersyscallblock(SB)
MOVQ fds+0(FP), DI
MOVQ nfds+8(FP), SI
MOVQ timeout+16(FP), DX
@@ -31,10 +31,10 @@ TEXT ·blockingPoll(SB),NOSPLIT,$0-40
MOVQ $-1, n+24(FP)
NEGQ AX
MOVQ AX, err+32(FP)
CALL runtime·exitsyscall(SB)
CALL ·callExitsyscall(SB)
RET
ok:
MOVQ AX, n+24(FP)
MOVQ $0, err+32(FP)
CALL runtime·exitsyscall(SB)
CALL ·callExitsyscall(SB)
RET
@@ -0,0 +1,59 @@
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// +build linux,amd64
// +build !go1.13
// This must be validated with Go 1.13 and future releases.
package rawfile
import (
"syscall"
_ "unsafe" // for go:linkname
)
//go:noescape
func blockingPoll(fds *pollEvent, nfds int, timeout int64) (int, syscall.Errno)
// Use go:linkname to call into the runtime. As of Go 1.12 this has to
// be done from Go code so that we make an ABIInternal call to an
// ABIInternal function; see https://golang.org/issue/27539.
// We need to call both entersyscallblock and exitsyscall this way so
// that the runtime's check on the stack pointer lines up.
// Note that calling an unexported function in the runtime package is
// unsafe and this hack is likely to break in future Go releases.
//go:linkname entersyscallblock runtime.entersyscallblock
func entersyscallblock()
//go:linkname exitsyscall runtime.exitsyscall
func exitsyscall()
// These forwarding functions must be nosplit because 1) we must
// disallow preemption between entersyscallblock and exitsyscall, and
// 2) we have an untyped assembly frame on the stack which can not be
// grown or moved.
//go:nosplit
func callEntersyscallblock() {
entersyscallblock()
}
//go:nosplit
func callExitsyscall() {
exitsyscall()
}
@@ -1,24 +0,0 @@
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// +build linux,amd64
package rawfile
import (
"syscall"
)
//go:noescape
func blockingPoll(fds *pollEvent, nfds int, timeout int64) (int, syscall.Errno)