// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build !faketime package runtime import "unsafe" // faketime is the simulated time in nanoseconds since 1970 for the // playground. // // Zero means not to use faketime. var faketime int64 // Exported via linkname for use by time and internal/poll. // // Many external packages also linkname nanotime for a fast monotonic time. // Such code should be updated to use: // // var start = time.Now() // at init time // // and then replace nanotime() with time.Since(start), which is equally fast. // // However, all the code linknaming nanotime is never going to go away. // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname nanotime //go:nosplit func nanotime() int64 { return nanotime1() } // overrideWrite allows write to be redirected externally, by // linkname'ing this and set it to a write function. // // overrideWrite should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - golang.zx2c4.com/wireguard/windows // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname overrideWrite var overrideWrite func(fd uintptr, p unsafe.Pointer, n int32) int32 // write must be nosplit on Windows (see write1) // //go:nosplit func write(fd uintptr, p unsafe.Pointer, n int32) int32 { if overrideWrite != nil { return overrideWrite(fd, noescape(p), n) } return write1(fd, p, n) }