package runtime
 
-import "unsafe"
+import (
+       "runtime/internal/sys"
+       "unsafe"
+)
 
 const (
        _NSIG        = 33
 
 func osinit() {
        ncpu = getncpu()
-       physPageSize = getPageSize()
+       if physPageSize == 0 {
+               physPageSize = getPageSize()
+       }
 }
 
 var urandom_dev = []byte("/dev/urandom\x00")
 
 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
+               }
+       }
+}