github.com/alash3al/go@v0.0.0-20150827002835-d497eeb00540/src/runtime/runtime.go (about) 1 // Copyright 2009 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 package runtime 6 7 import _ "unsafe" // for go:linkname 8 9 //go:generate go run wincallback.go 10 //go:generate go run mkduff.go 11 12 var ticks struct { 13 lock mutex 14 pad uint32 // ensure 8-byte alignment of val on 386 15 val uint64 16 } 17 18 var tls0 [8]uintptr // available storage for m0's TLS; not necessarily used; opaque to GC 19 20 // Note: Called by runtime/pprof in addition to runtime code. 21 func tickspersecond() int64 { 22 r := int64(atomicload64(&ticks.val)) 23 if r != 0 { 24 return r 25 } 26 lock(&ticks.lock) 27 r = int64(ticks.val) 28 if r == 0 { 29 t0 := nanotime() 30 c0 := cputicks() 31 usleep(100 * 1000) 32 t1 := nanotime() 33 c1 := cputicks() 34 if t1 == t0 { 35 t1++ 36 } 37 r = (c1 - c0) * 1000 * 1000 * 1000 / (t1 - t0) 38 if r == 0 { 39 r++ 40 } 41 atomicstore64(&ticks.val, uint64(r)) 42 } 43 unlock(&ticks.lock) 44 return r 45 } 46 47 var envs []string 48 var argslice []string 49 50 //go:linkname syscall_runtime_envs syscall.runtime_envs 51 func syscall_runtime_envs() []string { return append([]string{}, envs...) } 52 53 //go:linkname os_runtime_args os.runtime_args 54 func os_runtime_args() []string { return append([]string{}, argslice...) }