Source file
src/syscall/syscall_linux_arm.go
Documentation: syscall
1
2
3
4
5 package syscall
6
7 import "unsafe"
8
9
10
11
12
13 const archHonorsR2 = true
14
15 const _SYS_setgroups = SYS_SETGROUPS32
16
17 func setTimespec(sec, nsec int64) Timespec {
18 return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
19 }
20
21 func setTimeval(sec, usec int64) Timeval {
22 return Timeval{Sec: int32(sec), Usec: int32(usec)}
23 }
24
25
26
27 func Pipe(p []int) (err error) {
28 if len(p) != 2 {
29 return EINVAL
30 }
31 var pp [2]_C_int
32
33 err = pipe2(&pp, 0)
34 if err == ENOSYS {
35 err = pipe(&pp)
36 }
37 p[0] = int(pp[0])
38 p[1] = int(pp[1])
39 return
40 }
41
42
43
44 func Pipe2(p []int, flags int) (err error) {
45 if len(p) != 2 {
46 return EINVAL
47 }
48 var pp [2]_C_int
49 err = pipe2(&pp, flags)
50 p[0] = int(pp[0])
51 p[1] = int(pp[1])
52 return
53 }
54
55
56
57 func seek(fd int, offset int64, whence int) (newoffset int64, err Errno)
58
59 func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
60 newoffset, errno := seek(fd, offset, whence)
61 if errno != 0 {
62 return 0, errno
63 }
64 return newoffset, nil
65 }
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 func Stat(path string, stat *Stat_t) (err error) {
121 return fstatat(_AT_FDCWD, path, stat, 0)
122 }
123
124 func Lchown(path string, uid int, gid int) (err error) {
125 return Fchownat(_AT_FDCWD, path, uid, gid, _AT_SYMLINK_NOFOLLOW)
126 }
127
128 func Lstat(path string, stat *Stat_t) (err error) {
129 return fstatat(_AT_FDCWD, path, stat, _AT_SYMLINK_NOFOLLOW)
130 }
131
132 func Fstatfs(fd int, buf *Statfs_t) (err error) {
133 _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
134 if e != 0 {
135 err = e
136 }
137 return
138 }
139
140 func Statfs(path string, buf *Statfs_t) (err error) {
141 pathp, err := BytePtrFromString(path)
142 if err != nil {
143 return err
144 }
145 _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
146 if e != 0 {
147 err = e
148 }
149 return
150 }
151
152 func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
153 page := uintptr(offset / 4096)
154 if offset != int64(page)*4096 {
155 return 0, EINVAL
156 }
157 return mmap2(addr, length, prot, flags, fd, page)
158 }
159
160 type rlimit32 struct {
161 Cur uint32
162 Max uint32
163 }
164
165
166
167 const rlimInf32 = ^uint32(0)
168 const rlimInf64 = ^uint64(0)
169
170 func Getrlimit(resource int, rlim *Rlimit) (err error) {
171 err = prlimit(0, resource, nil, rlim)
172 if err != ENOSYS {
173 return err
174 }
175
176 rl := rlimit32{}
177 err = getrlimit(resource, &rl)
178 if err != nil {
179 return
180 }
181
182 if rl.Cur == rlimInf32 {
183 rlim.Cur = rlimInf64
184 } else {
185 rlim.Cur = uint64(rl.Cur)
186 }
187
188 if rl.Max == rlimInf32 {
189 rlim.Max = rlimInf64
190 } else {
191 rlim.Max = uint64(rl.Max)
192 }
193 return
194 }
195
196
197
198 func Setrlimit(resource int, rlim *Rlimit) (err error) {
199 err = prlimit(0, resource, rlim, nil)
200 if err != ENOSYS {
201 return err
202 }
203
204 rl := rlimit32{}
205 if rlim.Cur == rlimInf64 {
206 rl.Cur = rlimInf32
207 } else if rlim.Cur < uint64(rlimInf32) {
208 rl.Cur = uint32(rlim.Cur)
209 } else {
210 return EINVAL
211 }
212 if rlim.Max == rlimInf64 {
213 rl.Max = rlimInf32
214 } else if rlim.Max < uint64(rlimInf32) {
215 rl.Max = uint32(rlim.Max)
216 } else {
217 return EINVAL
218 }
219
220 return setrlimit(resource, &rl)
221 }
222
223 func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }
224
225 func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) }
226
227 func (iov *Iovec) SetLen(length int) {
228 iov.Len = uint32(length)
229 }
230
231 func (msghdr *Msghdr) SetControllen(length int) {
232 msghdr.Controllen = uint32(length)
233 }
234
235 func (cmsg *Cmsghdr) SetLen(length int) {
236 cmsg.Len = uint32(length)
237 }
238
239 func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno)
240
View as plain text