// GOMAXPROCS sets the maximum number of CPUs that can be executing // simultaneously and returns the previous setting. It defaults to // the value of [runtime.NumCPU]. If n < 1, it does not change the current setting. // This call will go away when the scheduler improves. func GOMAXPROCS(n int) int { … } // NumCPU returns the number of logical CPUs usable by the current process. // // The set of available CPUs is checked by querying the operating system // at process startup. Changes to operating system CPU allocation after // process startup are not reflected. func NumCPU() int { … } // NumCgoCall returns the number of cgo calls made by the current process. func NumCgoCall() int64 { … } func totalMutexWaitTimeNanos() int64 { … } // NumGoroutine returns the number of goroutines that currently exist. func NumGoroutine() int { … } //go:linkname debug_modinfo runtime/debug.modinfo func debug_modinfo() string { … } // mayMoreStackPreempt is a maymorestack hook that forces a preemption // at every possible cooperative preemption point. // // This is valuable to apply to the runtime, which can be sensitive to // preemption points. To apply this to all preemption points in the // runtime and runtime-like code, use the following in bash or zsh: // // X=(-{gc,asm}flags={runtime/...,reflect,sync}=-d=maymorestack=runtime.mayMoreStackPreempt) GOFLAGS=${X[@]} // // This must be deeply nosplit because it is called from a function // prologue before the stack is set up and because the compiler will // call it from any splittable prologue (leading to infinite // recursion). // // Ideally it should also use very little stack because the linker // doesn't currently account for this in nosplit stack depth checking. // // Ensure mayMoreStackPreempt can be called for all ABIs. // //go:nosplit //go:linkname mayMoreStackPreempt func mayMoreStackPreempt() { … } // mayMoreStackMove is a maymorestack hook that forces stack movement // at every possible point. // // See mayMoreStackPreempt. // //go:nosplit //go:linkname mayMoreStackMove func mayMoreStackMove() { … } var debugPinnerKeepUnpin … // debugPinnerV1 returns a new Pinner that pins itself. This function can be // used by debuggers to easily obtain a Pinner that will not be garbage // collected (or moved in memory) even if no references to it exist in the // target program. This pinner in turn can be used to extend this property // to other objects, which debuggers can use to simplify the evaluation of // expressions involving multiple call injections. func debugPinnerV1() *Pinner { … }