diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2018-03-29 07:38:14 +0000 |
---|---|---|
committer | Tobias Klauser <tobias.klauser@gmail.com> | 2018-03-29 14:19:13 +0000 |
commit | 9364c13d09fb0df5a2f8cb4c86af9d37af857f20 (patch) | |
tree | b738be931358f4ab940c593833c4bed66b92e529 /src/runtime/os_dragonfly.go | |
parent | 04e993f953060851adb604c6ccc7c96ef89b8c8d (diff) | |
download | go-9364c13d09fb0df5a2f8cb4c86af9d37af857f20.tar.gz go-9364c13d09fb0df5a2f8cb4c86af9d37af857f20.zip |
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>
Diffstat (limited to 'src/runtime/os_dragonfly.go')
-rw-r--r-- | src/runtime/os_dragonfly.go | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/runtime/os_dragonfly.go b/src/runtime/os_dragonfly.go index 681057f3d5..85927b4026 100644 --- a/src/runtime/os_dragonfly.go +++ b/src/runtime/os_dragonfly.go @@ -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 + } + } +} |