mirror of
https://github.com/golang/go
synced 2024-11-19 15:05:00 -07:00
438c8f6b53
syscall.Exit and runtime.exit do the same thing. Why duplicate code? CL 45115 fixed bug where windows runtime.exit was correct, but syscall.Exit was broken. So CL 45115 fixed windows syscall.Exit by calling runtime.exit. Austin suggested that all OSes should do the same, and this CL implements his idea. While making changes, I discovered that nacl syscall.Exit returned error func Exit(code int) (err error) and I changed it into func Exit(code int) like all other OSes. I assumed it was a mistake and it is OK to do because cmd/api does not complain about it. Also I changed plan9 runtime.exit to accept int32 just like all other OSes do. Change-Id: I12f6022ad81406566cf9befcc6edc382eebd413b Reviewed-on: https://go-review.googlesource.com/66170 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: David du Colombier <0intro@gmail.com>
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
// Copyright 2009 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.
|
|
|
|
package runtime
|
|
|
|
import (
|
|
"runtime/internal/atomic"
|
|
_ "unsafe" // for go:linkname
|
|
)
|
|
|
|
//go:generate go run wincallback.go
|
|
//go:generate go run mkduff.go
|
|
//go:generate go run mkfastlog2table.go
|
|
|
|
var ticks struct {
|
|
lock mutex
|
|
pad uint32 // ensure 8-byte alignment of val on 386
|
|
val uint64
|
|
}
|
|
|
|
// Note: Called by runtime/pprof in addition to runtime code.
|
|
func tickspersecond() int64 {
|
|
r := int64(atomic.Load64(&ticks.val))
|
|
if r != 0 {
|
|
return r
|
|
}
|
|
lock(&ticks.lock)
|
|
r = int64(ticks.val)
|
|
if r == 0 {
|
|
t0 := nanotime()
|
|
c0 := cputicks()
|
|
usleep(100 * 1000)
|
|
t1 := nanotime()
|
|
c1 := cputicks()
|
|
if t1 == t0 {
|
|
t1++
|
|
}
|
|
r = (c1 - c0) * 1000 * 1000 * 1000 / (t1 - t0)
|
|
if r == 0 {
|
|
r++
|
|
}
|
|
atomic.Store64(&ticks.val, uint64(r))
|
|
}
|
|
unlock(&ticks.lock)
|
|
return r
|
|
}
|
|
|
|
var envs []string
|
|
var argslice []string
|
|
|
|
//go:linkname syscall_runtime_envs syscall.runtime_envs
|
|
func syscall_runtime_envs() []string { return append([]string{}, envs...) }
|
|
|
|
//go:linkname syscall_Getpagesize syscall.Getpagesize
|
|
func syscall_Getpagesize() int { return int(physPageSize) }
|
|
|
|
//go:linkname os_runtime_args os.runtime_args
|
|
func os_runtime_args() []string { return append([]string{}, argslice...) }
|
|
|
|
//go:linkname syscall_Exit syscall.Exit
|
|
//go:nosplit
|
|
func syscall_Exit(code int) {
|
|
exit(int32(code))
|
|
}
|