1
0
mirror of https://github.com/golang/go synced 2024-11-18 14:54:40 -07:00

runtime: parse auxv for page size on dragonfly

Decode AT_PAGESZ to determine physPageSize on dragonfly.

Change-Id: I7236d7cbe43433f16dffddad19c1655bc0c7f31d
Reviewed-on: https://go-review.googlesource.com/103257
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Tobias Klauser 2018-03-29 07:38:14 +00:00 committed by Tobias Klauser
parent 04e993f953
commit 9364c13d09
2 changed files with 38 additions and 2 deletions

View File

@ -4,6 +4,7 @@
// +build !linux
// +build !darwin
// +build !dragonfly
// +build !freebsd
// +build !netbsd

View File

@ -4,7 +4,10 @@
package runtime
import "unsafe"
import (
"runtime/internal/sys"
"unsafe"
)
const (
_NSIG = 33
@ -149,7 +152,9 @@ func newosproc(mp *m, stk unsafe.Pointer) {
func osinit() {
ncpu = getncpu()
physPageSize = getPageSize()
if physPageSize == 0 {
physPageSize = getPageSize()
}
}
var urandom_dev = []byte("/dev/urandom\x00")
@ -242,3 +247,33 @@ func sigdelset(mask *sigset, i int) {
func (c *sigctxt) fixsigcode(sig uint32) {
}
func sysargs(argc int32, argv **byte) {
n := argc + 1
// skip over argv, envp to get to auxv
for argv_index(argv, n) != nil {
n++
}
// skip NULL separator
n++
auxv := (*[1 << 28]uintptr)(add(unsafe.Pointer(argv), uintptr(n)*sys.PtrSize))
sysauxv(auxv[:])
}
const (
_AT_NULL = 0
_AT_PAGESZ = 6
)
func sysauxv(auxv []uintptr) {
for i := 0; auxv[i] != _AT_NULL; i += 2 {
tag, val := auxv[i], auxv[i+1]
switch tag {
case _AT_PAGESZ:
physPageSize = val
}
}
}