aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/os_dragonfly.go
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2018-03-29 07:38:14 +0000
committerTobias Klauser <tobias.klauser@gmail.com>2018-03-29 14:19:13 +0000
commit9364c13d09fb0df5a2f8cb4c86af9d37af857f20 (patch)
treeb738be931358f4ab940c593833c4bed66b92e529 /src/runtime/os_dragonfly.go
parent04e993f953060851adb604c6ccc7c96ef89b8c8d (diff)
downloadgo-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.go39
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
+ }
+ }
+}