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