mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: make nanotime use monotonic clock in Solaris
nanotime() currently uses the REALTIME clock to get the elapsed time in Solaris. This commit changes it to use the MONOTONIC clock instead, similar to how it's done in Linux and other OSs. Also changed nanotime() and walltime() to call clock_gettime() library function directly from Go code rather than from assembly. Fixes #33674 Change-Id: Ie4a687b17d2140998ecd97af6ce048c86cf5fc02 Reviewed-on: https://go-review.googlesource.com/c/go/+/199502 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
This commit is contained in:
parent
c1ccae4d14
commit
2df5cdbadf
3 changed files with 14 additions and 42 deletions
|
|
@ -393,11 +393,16 @@ func munmap(addr unsafe.Pointer, n uintptr) {
|
|||
sysvicall2(&libc_munmap, uintptr(addr), uintptr(n))
|
||||
}
|
||||
|
||||
func nanotime2()
|
||||
const (
|
||||
_CLOCK_REALTIME = 3
|
||||
_CLOCK_MONOTONIC = 4
|
||||
)
|
||||
|
||||
//go:nosplit
|
||||
func nanotime1() int64 {
|
||||
return int64(sysvicall0((*libcFunc)(unsafe.Pointer(funcPC(nanotime2)))))
|
||||
var ts mts
|
||||
sysvicall2(&libc_clock_gettime, _CLOCK_MONOTONIC, uintptr(unsafe.Pointer(&ts)))
|
||||
return ts.tv_sec*1e9 + ts.tv_nsec
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
|
|
@ -498,6 +503,12 @@ func usleep(µs uint32) {
|
|||
usleep1(µs)
|
||||
}
|
||||
|
||||
func walltime1() (sec int64, nsec int32) {
|
||||
var ts mts
|
||||
sysvicall2(&libc_clock_gettime, _CLOCK_REALTIME, uintptr(unsafe.Pointer(&ts)))
|
||||
return ts.tv_sec, int32(ts.tv_nsec)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func write1(fd uintptr, buf unsafe.Pointer, nbyte int32) int32 {
|
||||
return int32(sysvicall3(&libc_write, uintptr(fd), uintptr(buf), uintptr(nbyte)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue