Russ Cox | e785e3a | 2014-11-11 17:08:54 -0500 | [diff] [blame] | 1 | // Copyright 2009 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
| 5 | package runtime |
| 6 | |
| 7 | import "unsafe" |
| 8 | |
| 9 | const ( |
| 10 | _AT_NULL = 0 |
| 11 | _AT_RANDOM = 25 |
| 12 | _AT_SYSINFO = 32 |
| 13 | ) |
| 14 | |
| 15 | var _vdso uint32 |
| 16 | |
Russ Cox | 0fcf54b | 2014-11-15 08:00:38 -0500 | [diff] [blame] | 17 | func sysargs(argc int32, argv **byte) { |
Russ Cox | e785e3a | 2014-11-11 17:08:54 -0500 | [diff] [blame] | 18 | // skip over argv, envv to get to auxv |
| 19 | n := argc + 1 |
| 20 | for argv_index(argv, n) != nil { |
| 21 | n++ |
| 22 | } |
| 23 | n++ |
| 24 | auxv := (*[1 << 28]uint32)(add(unsafe.Pointer(argv), uintptr(n)*ptrSize)) |
| 25 | |
| 26 | for i := 0; auxv[i] != _AT_NULL; i += 2 { |
| 27 | switch auxv[i] { |
| 28 | case _AT_SYSINFO: |
| 29 | _vdso = auxv[i+1] |
| 30 | |
| 31 | case _AT_RANDOM: |
Keith Randall | 6820be2 | 2014-12-09 14:40:40 -0800 | [diff] [blame] | 32 | startupRandomData = (*[16]byte)(unsafe.Pointer(uintptr(auxv[i+1])))[:] |
Russ Cox | e785e3a | 2014-11-11 17:08:54 -0500 | [diff] [blame] | 33 | } |
| 34 | } |
| 35 | } |