]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: protect plan9 time_now function with !faketime build tag
authorRichard Miller <millerresearch@gmail.com>
Fri, 4 Apr 2025 19:48:18 +0000 (20:48 +0100)
committerDavid du Colombier <0intro@gmail.com>
Mon, 7 Apr 2025 16:53:44 +0000 (09:53 -0700)
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>

src/runtime/os_plan9.go
src/runtime/time_plan9.go [new file with mode: 0644]

index 6ddf1d21d4a385e7c5bedd2ab6ba09514014067c..59224bcfa8c74dac8024bdbd62157e8b1b0c23c5 100644 (file)
@@ -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
-}
diff --git a/src/runtime/time_plan9.go b/src/runtime/time_plan9.go
new file mode 100644 (file)
index 0000000..0bd165d
--- /dev/null
@@ -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
+}