...
Source file src/pkg/vendor/golang.org/x/sys/cpu/cpu_linux.go
1
2
3
4
5
6
7 package cpu
8
9 import (
10 "io/ioutil"
11 )
12
13 const (
14 _AT_HWCAP = 16
15 _AT_HWCAP2 = 26
16
17 procAuxv = "/proc/self/auxv"
18
19 uintSize = int(32 << (^uint(0) >> 63))
20 )
21
22
23
24
25 var hwCap uint
26 var hwCap2 uint
27
28 func init() {
29 buf, err := ioutil.ReadFile(procAuxv)
30 if err != nil {
31
32
33 return
34 }
35
36 bo := hostByteOrder()
37 for len(buf) >= 2*(uintSize/8) {
38 var tag, val uint
39 switch uintSize {
40 case 32:
41 tag = uint(bo.Uint32(buf[0:]))
42 val = uint(bo.Uint32(buf[4:]))
43 buf = buf[8:]
44 case 64:
45 tag = uint(bo.Uint64(buf[0:]))
46 val = uint(bo.Uint64(buf[8:]))
47 buf = buf[16:]
48 }
49 switch tag {
50 case _AT_HWCAP:
51 hwCap = val
52 case _AT_HWCAP2:
53 hwCap2 = val
54 }
55 }
56 doinit()
57
58 Initialized = true
59 }
60
View as plain text