Source file src/runtime/time_nofake.go

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build !faketime
     6  
     7  package runtime
     8  
     9  import "unsafe"
    10  
    11  // faketime is the simulated time in nanoseconds since 1970 for the
    12  // playground.
    13  //
    14  // Zero means not to use faketime.
    15  var faketime int64
    16  
    17  // Exported via linkname for use by time and internal/poll.
    18  //
    19  // Many external packages also linkname nanotime for a fast monotonic time.
    20  // Such code should be updated to use:
    21  //
    22  //	var start = time.Now() // at init time
    23  //
    24  // and then replace nanotime() with time.Since(start), which is equally fast.
    25  //
    26  // However, all the code linknaming nanotime is never going to go away.
    27  // Do not remove or change the type signature.
    28  // See go.dev/issue/67401.
    29  //
    30  //go:linkname nanotime
    31  //go:nosplit
    32  func nanotime() int64 {
    33  	return nanotime1()
    34  }
    35  
    36  // overrideWrite allows write to be redirected externally, by
    37  // linkname'ing this and set it to a write function.
    38  //
    39  // overrideWrite should be an internal detail,
    40  // but widely used packages access it using linkname.
    41  // Notable members of the hall of shame include:
    42  //   - golang.zx2c4.com/wireguard/windows
    43  //
    44  // Do not remove or change the type signature.
    45  // See go.dev/issue/67401.
    46  //
    47  //go:linkname overrideWrite
    48  var overrideWrite func(fd uintptr, p unsafe.Pointer, n int32) int32
    49  
    50  // write must be nosplit on Windows (see write1)
    51  //
    52  //go:nosplit
    53  func write(fd uintptr, p unsafe.Pointer, n int32) int32 {
    54  	if overrideWrite != nil {
    55  		return overrideWrite(fd, noescape(p), n)
    56  	}
    57  	return write1(fd, p, n)
    58  }
    59  

View as plain text