var failthreadcreate = []byte("runtime: failed to create new OS thread\n")
const (
- _AT_NULL = 0 // End of vector
+ _AT_NULL = 0 // End of vector
+ _AT_RANDOM = 25 // introduced in 2.6.29
)
func sysargs(argc int32, argv **byte) {
auxv := (*[1 << 28]uintptr)(add(unsafe.Pointer(argv), uintptr(n)*sys.PtrSize))
for i := 0; auxv[i] != _AT_NULL; i += 2 {
tag, val := auxv[i], auxv[i+1]
+ switch tag {
+ case _AT_RANDOM:
+ // The kernel provides a pointer to 16-bytes
+ // worth of random data.
+ startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
+ }
archauxv(tag, val)
}
}
package runtime
-import "unsafe"
-
const (
- _AT_RANDOM = 25
_AT_SYSINFO = 32
)
func archauxv(tag, val uintptr) {
- switch tag {
- case _AT_RANDOM:
- startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
- }
}
const (
_AT_PLATFORM = 15 // introduced in at least 2.6.11
_AT_HWCAP = 16 // introduced in at least 2.6.11
- _AT_RANDOM = 25 // introduced in 2.6.29
_HWCAP_VFP = 1 << 6 // introduced in at least 2.6.11
_HWCAP_VFPv3 = 1 << 13 // introduced in 2.6.30
func archauxv(tag, val uintptr) {
switch tag {
- case _AT_RANDOM: // kernel provides a pointer to 16-bytes worth of random data
- startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
- // the pointer provided may not be word aligned, so we must treat it
- // as a byte array.
+ case _AT_RANDOM:
+ // sysargs filled in startupRandomData, but that
+ // pointer may not be word aligned, so we must treat
+ // it as a byte array.
randomNumber = uint32(startupRandomData[4]) | uint32(startupRandomData[5])<<8 |
uint32(startupRandomData[6])<<16 | uint32(startupRandomData[7])<<24
package runtime
-import "unsafe"
-
-const (
- _AT_RANDOM = 25 // introduced in 2.6.29
-)
-
var randomNumber uint32
func archauxv(tag, val uintptr) {
switch tag {
- case _AT_RANDOM: // kernel provides a pointer to 16-bytes worth of random data
- startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
- // the pointer provided may not be word aligned, so we must treat it
- // as a byte array.
+ case _AT_RANDOM:
+ // sysargs filled in startupRandomData, but that
+ // pointer may not be word aligned, so we must treat
+ // it as a byte array.
randomNumber = uint32(startupRandomData[4]) | uint32(startupRandomData[5])<<8 |
uint32(startupRandomData[6])<<16 | uint32(startupRandomData[7])<<24
}
// http://refspecs.linuxfoundation.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic/symversion.html
const (
- _AT_RANDOM = 25
_AT_SYSINFO_EHDR = 33
_PT_LOAD = 1 /* Loadable program segment */
info1 := (*vdso_info)(noescape(unsafe.Pointer(&info)))
vdso_init_from_sysinfo_ehdr(info1, (*elf64Ehdr)(unsafe.Pointer(val)))
vdso_parse_symbols(info1, vdso_find_version(info1, &linux26))
-
- case _AT_RANDOM:
- startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
}
}