mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
runtime: protect plan9 time_now function with !faketime build tag
The introduction of monotonic time support for Plan 9 in CL 656755 causes a build error with multiple declaration of time_now when built with tag faketime. Correct this by moving function time_now into its own source file with !faketime build tag. Fixes #73169 Change-Id: Id7a9a1c77e286511e25546089681f2f88a9538bb Reviewed-on: https://go-review.googlesource.com/c/go/+/662856 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: David du Colombier <0intro@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
20a924fe87
commit
adb29670fc
@ -222,6 +222,7 @@ func unminit() {
|
||||
// resources in minit, semacreate, or elsewhere. Do not take locks after calling this.
|
||||
//
|
||||
// This always runs without a P, so //go:nowritebarrierrec is required.
|
||||
//
|
||||
//go:nowritebarrierrec
|
||||
func mdestroy(mp *m) {
|
||||
}
|
||||
@ -595,18 +596,3 @@ func walltime() (sec int64, nsec int32) {
|
||||
readtime(&t[0], 1, 1)
|
||||
return timesplit(frombe(t[0]))
|
||||
}
|
||||
|
||||
// Do not remove or change the type signature.
|
||||
// See comment in timestub.go.
|
||||
//
|
||||
//go:linkname time_now time.now
|
||||
func time_now() (sec int64, nsec int32, mono int64) {
|
||||
var t [4]uint64
|
||||
if readtime(&t[0], 1, 4) == 4 {
|
||||
mono = int64(frombe(t[3])) // new kernel, use monotonic time
|
||||
} else {
|
||||
mono = int64(frombe(t[0])) // old kernel, fall back to unix time
|
||||
}
|
||||
sec, nsec = timesplit(frombe(t[0]))
|
||||
return
|
||||
}
|
||||
|
24
src/runtime/time_plan9.go
Normal file
24
src/runtime/time_plan9.go
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright 2025 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" // for go:linkname
|
||||
|
||||
// Do not remove or change the type signature.
|
||||
// See comment in timestub.go.
|
||||
//
|
||||
//go:linkname time_now time.now
|
||||
func time_now() (sec int64, nsec int32, mono int64) {
|
||||
var t [4]uint64
|
||||
if readtime(&t[0], 1, 4) == 4 {
|
||||
mono = int64(frombe(t[3])) // new kernel, use monotonic time
|
||||
} else {
|
||||
mono = int64(frombe(t[0])) // old kernel, fall back to unix time
|
||||
}
|
||||
sec, nsec = timesplit(frombe(t[0]))
|
||||
return
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user