// 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 ( "unsafe" ) // Temporary for C code to call: //go:linkname minit runtime.minit // Called to initialize a new m (including the bootstrap m). // Called on the parent thread (main thread in case of bootstrap), can allocate memory. func mpreinit(mp *m) { mp.gsignal = malg(true, true, &mp.gsignalstack, &mp.gsignalstacksize) mp.gsignal.m = mp } // minit is called to initialize a new m (including the bootstrap m). // Called on the new thread, cannot allocate memory. func minit() { minitSignals() // FIXME: We should set _g_.m.procid here. } // Called from dropm to undo the effect of an minit. //go:nosplit func unminit() { unminitSignals() } var urandom_dev = []byte("/dev/urandom\x00") func getRandomData(r []byte) { if startupRandomData != nil { n := copy(r, startupRandomData) extendRandom(r, n) return } fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) extendRandom(r, int(n)) }