diff options
Diffstat (limited to 'libgo/go/runtime/os_gccgo.go')
-rw-r--r-- | libgo/go/runtime/os_gccgo.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/libgo/go/runtime/os_gccgo.go b/libgo/go/runtime/os_gccgo.go new file mode 100644 index 0000000000..a8f05a4b3d --- /dev/null +++ b/libgo/go/runtime/os_gccgo.go @@ -0,0 +1,47 @@ +// 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)) +} |