github.com/reiver/go@v0.0.0-20150109200633-1d0c7792f172/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 11 var ticks struct { 12 lock mutex 13 val uint64 14 } 15 16 var tls0 [8]uintptr // available storage for m0's TLS; not necessarily used; opaque to GC 17 18 // Note: Called by runtime/pprof in addition to runtime code. 19 func tickspersecond() int64 { 20 r := int64(atomicload64(&ticks.val)) 21 if r != 0 { 22 return r 23 } 24 lock(&ticks.lock) 25 r = int64(ticks.val) 26 if r == 0 { 27 t0 := nanotime() 28 c0 := cputicks() 29 usleep(100 * 1000) 30 t1 := nanotime() 31 c1 := cputicks() 32 if t1 == t0 { 33 t1++ 34 } 35 r = (c1 - c0) * 1000 * 1000 * 1000 / (t1 - t0) 36 if r == 0 { 37 r++ 38 } 39 atomicstore64(&ticks.val, uint64(r)) 40 } 41 unlock(&ticks.lock) 42 return r 43 } 44 45 func makeStringSlice(n int) []string { 46 return make([]string, n) 47 } 48 49 // TODO: Move to parfor.go when parfor.c becomes parfor.go. 50 func parforalloc(nthrmax uint32) *parfor { 51 return &parfor{ 52 thr: &make([]parforthread, nthrmax)[0], 53 nthrmax: nthrmax, 54 } 55 } 56 57 var envs []string 58 var argslice []string 59 60 //go:linkname syscall_runtime_envs syscall.runtime_envs 61 func syscall_runtime_envs() []string { return envs } 62 63 //go:linkname os_runtime_args os.runtime_args 64 func os_runtime_args() []string { return argslice }