Source file
src/runtime/mem_aix.go
1
2
3
4
5 package runtime
6
7 import (
8 "unsafe"
9 )
10
11
12
13
14 func sysAlloc(n uintptr, sysStat *sysMemStat) unsafe.Pointer {
15 p, err := mmap(nil, n, _PROT_READ|_PROT_WRITE, _MAP_ANON|_MAP_PRIVATE, -1, 0)
16 if err != 0 {
17 if err == _EACCES {
18 print("runtime: mmap: access denied\n")
19 exit(2)
20 }
21 if err == _EAGAIN {
22 print("runtime: mmap: too much locked memory (check 'ulimit -l').\n")
23 exit(2)
24 }
25 return nil
26 }
27 sysStat.add(int64(n))
28 return p
29 }
30
31 func sysUnused(v unsafe.Pointer, n uintptr) {
32 madvise(v, n, _MADV_DONTNEED)
33 }
34
35 func sysUsed(v unsafe.Pointer, n uintptr) {
36 }
37
38 func sysHugePage(v unsafe.Pointer, n uintptr) {
39 }
40
41
42
43
44 func sysFree(v unsafe.Pointer, n uintptr, sysStat *sysMemStat) {
45 sysStat.add(-int64(n))
46 munmap(v, n)
47
48 }
49
50 func sysFault(v unsafe.Pointer, n uintptr) {
51 mmap(v, n, _PROT_NONE, _MAP_ANON|_MAP_PRIVATE|_MAP_FIXED, -1, 0)
52 }
53
54 func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
55 p, err := mmap(v, n, _PROT_NONE, _MAP_ANON|_MAP_PRIVATE, -1, 0)
56 if err != 0 {
57 return nil
58 }
59 return p
60 }
61
62 func sysMap(v unsafe.Pointer, n uintptr, sysStat *sysMemStat) {
63 sysStat.add(int64(n))
64
65
66
67
68
69
70 _, err := mprotect(v, n, _PROT_READ|_PROT_WRITE)
71 if err == _ENOMEM {
72 throw("runtime: out of memory")
73 }
74 if err != 0 {
75 print("runtime: mprotect(", v, ", ", n, ") returned ", err, "\n")
76 throw("runtime: cannot map pages in arena address space")
77 }
78 }
79
View as plain text