diff options
| author | Tobias Klauser <tklauser@distanz.ch> | 2018-03-27 13:33:32 +0000 |
|---|---|---|
| committer | Tobias Klauser <tobias.klauser@gmail.com> | 2018-03-27 15:21:51 +0000 |
| commit | 4ff4e5072590ca885f807d1619106d4d8a52217c (patch) | |
| tree | dbfaf92d310c184568389e0f1783085e57b0d6c0 /src | |
| parent | a44c72823ca4a0abd595a5ab15225811e979b353 (diff) | |
| download | go-4ff4e5072590ca885f807d1619106d4d8a52217c.tar.xz | |
runtime: parse auxv for page size on netbsd
Decode AT_PAGESZ to determine physPageSize on netbsd.
Also rename vdso_none.go to auxv_none.go which matches its purpose more
closely.
Akin to CL 99780 which did the same for freebsd.
Change-Id: Iea4322f861ff0f3515e9051585dbb442f024326b
Reviewed-on: https://go-review.googlesource.com/102677
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime/auxv_none.go (renamed from src/runtime/vdso_none.go) | 1 | ||||
| -rw-r--r-- | src/runtime/os_netbsd.go | 36 |
2 files changed, 36 insertions, 1 deletions
diff --git a/src/runtime/vdso_none.go b/src/runtime/auxv_none.go index a709758f64..96fcbdc2fe 100644 --- a/src/runtime/vdso_none.go +++ b/src/runtime/auxv_none.go @@ -5,6 +5,7 @@ // +build !linux // +build !darwin // +build !freebsd +// +build !netbsd package runtime diff --git a/src/runtime/os_netbsd.go b/src/runtime/os_netbsd.go index abd6512dc3..4a4dfa56bf 100644 --- a/src/runtime/os_netbsd.go +++ b/src/runtime/os_netbsd.go @@ -6,6 +6,7 @@ package runtime import ( "runtime/internal/atomic" + "runtime/internal/sys" "unsafe" ) @@ -223,7 +224,9 @@ func netbsdMstart() { func osinit() { ncpu = getncpu() - physPageSize = getPageSize() + if physPageSize == 0 { + physPageSize = getPageSize() + } } var urandom_dev = []byte("/dev/urandom\x00") @@ -325,3 +328,34 @@ 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++ + + // now argv+n is auxv + auxv := (*[1 << 28]uintptr)(add(unsafe.Pointer(argv), uintptr(n)*sys.PtrSize)) + sysauxv(auxv[:]) +} + +const ( + _AT_NULL = 0 // Terminates the vector + _AT_PAGESZ = 6 // Page size in bytes +) + +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 + } + } +} |
