github.com/orangeji11/golang-sys-sw64@v0.0.0-20221228054527-b72799809e00/unix/syscall_linux_sw64.go (about) 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 // +build linux 6 // +build sw64 7 8 package unix 9 10 //This const are meaningless in sw64 11 const ( 12 SYS_COPY_FILE_RANGE = 0 13 SYS_STATX = 0 14 STATX_BASIC_STATS = 0x7ff 15 STATX_ALL = 0xfff 16 SizeofSockaddrPPPoX = 0 17 SizeofSockaddrXDP = 0 18 KEYCTL_DH_COMPUTE = 0 19 ) 20 21 const ( 22 //ALL OF THIS constants are WORKAROUND, and should be removing 23 _SYS_dup = SYS_DUP2 24 _SYS_setgroups = SYS_SETGROUPS 25 SYS_UMOUNT2 = SYS_UMOUNT 26 27 SYS_GETPID = SYS_GETXPID 28 SYS_GETPPID = SYS_GETXPID 29 ) 30 31 const ( 32 //generate by handle 33 //_snyh_TODO: this should be generate by improving build script 34 FIOCLEX = 0x20006601 35 FIONCLEX = 0x20006602 36 FIOASYNC = 0xffffffff8004667d 37 FIONBIO = 0xffffffff8004667e 38 FIONREAD = 0x4004667f 39 TIOCINQ = 0x4004667f 40 FIOQSIZE = 0x40086680 41 TIOCGETP = 0x40067408 42 TIOCSETP = 0xffffffff80067409 43 TIOCSETN = 0xffffffff8006740a 44 TIOCSETC = 0xffffffff80067411 45 TIOCGETC = 0x40067412 46 TIOCSWINSZ = 0xffffffff80087467 47 TIOCGWINSZ = 0x40087468 48 TIOCGLTC = 0x40067474 49 TIOCSLTC = 0xffffffff80067475 50 // EFD_CLOEXEC = O_CLOEXEC 51 52 // _snyh_TODO: 530 cross compile hasn't include this. 53 SYS_BPF = 170 54 ) 55 56 //replace ztypes_linux_sw64.go with this 57 type Statfs_t struct { 58 Type int64 59 Bsize int64 60 Blocks uint64 61 Bfree uint64 62 Bavail uint64 63 Files uint64 64 Ffree uint64 65 Fsid Fsid 66 Namelen int64 67 Frsize int64 68 Flags int64 69 Spare [4]int64 70 } 71 72 //sysnb getxpid() (pid int, ppid int) 73 // TODO(snyh): correct handle Getppid and Getpid 74 // currently manually remove the implements of Getpid and Getppid 75 // in zsyscall_linux_sw64.go 76 func Getpid() (pid int) { pid, _ = getxpid(); return } 77 func Getppid() (ppid int) { _, ppid = getxpid(); return } 78 79 //sys utimes(path string, times *[2]Timeval) (err error) 80 //sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) 81 82 // TODO(snyh): correct handle Utime 83 func Utime(path string, buf *Utimbuf) error { 84 tv := [2]Timeval{ 85 {Sec: buf.Actime}, 86 {Sec: buf.Modtime}, 87 } 88 return utimes(path, &tv) 89 } 90 91 //sysnb EpollCreate(size int) (fd int, err error) 92 //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) 93 //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 94 //sys Ustat(dev int, ubuf *Ustat_t) (err error) 95 96 //sys Fstat64(fd int, st *Stat_t) (err error) 97 //sys Lstat64(path string, st *Stat_t) (err error) 98 //sys Stat64(path string, st *Stat_t) (err error) 99 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 100 func Fstat(fd int, st *Stat_t) (err error) { return Fstat64(fd, st) } 101 func Lstat(path string, st *Stat_t) (err error) { return Lstat64(path, st) } 102 func Stat(path string, st *Stat_t) (err error) { return Stat64(path, st) } 103 104 //sys getxuid() (uid int, euid int) 105 func Getuid() (uid int) { uid, _ = getxuid(); return } 106 func Geteuid() (euid int) { _, euid = getxuid(); return } 107 108 //sys getxgid() (gid int, egid int) 109 func Getgid() (gid int) { gid, _ = getxgid(); return } 110 func Getegid() (egid int) { _, egid = getxgid(); return } 111 112 //sys Statfs(path string, buf *Statfs_t) (err error) 113 //sys Fstatfs(fd int, buf *Statfs_t) (err error) 114 //sys Dup2(oldfd int, newfd int) (err error) 115 //sys Fchown(fd int, uid int, gid int) (err error) 116 //sys Ftruncate(fd int, length int64) (err error) 117 //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) 118 //sysnb InotifyInit() (fd int, err error) 119 //sys Lchown(path string, uid int, gid int) (err error) 120 //sys Listen(s int, n int) (err error) 121 //sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 122 //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 123 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK 124 //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) 125 //sys Setfsgid(gid int) (err error) 126 //sys Setfsuid(uid int) (err error) 127 //sysnb Setregid(rgid int, egid int) (err error) 128 //sysnb Setresgid(rgid int, egid int, sgid int) (err error) 129 //sysnb Setresuid(ruid int, euid int, suid int) (err error) 130 //sysnb Setrlimit(resource int, rlim *Rlimit) (err error) 131 //sysnb Setreuid(ruid int, euid int) (err error) 132 //sys Shutdown(fd int, how int) (err error) 133 //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) 134 135 //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) 136 //sys Truncate(path string, length int64) (err error) 137 //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) 138 //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) 139 //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) 140 //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) 141 //sysnb getgroups(n int, list *_Gid_t) (nn int, err error) 142 //sysnb setgroups(n int, list *_Gid_t) (err error) 143 //sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) 144 //sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) 145 //sysnb socket(domain int, typ int, proto int) (fd int, err error) 146 //sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) 147 //sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) 148 //sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) 149 //sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) 150 //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) 151 //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) 152 //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) 153 //sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) 154 155 type sigset_t struct { 156 X__val [16]uint64 157 } 158 159 //sys pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_t) (n int, err error) = SYS_PSELECT6 160 161 func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { 162 ts := Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} 163 return pselect(nfd, r, w, e, &ts, nil) 164 } 165 166 //sysnb Gettimeofday(tv *Timeval) (err error) 167 168 func Time(t *Time_t) (tt Time_t, err error) { 169 var tv Timeval 170 err = Gettimeofday(&tv) 171 if err != nil { 172 return 0, err 173 } 174 if t != nil { 175 *t = Time_t(tv.Sec) 176 } 177 return Time_t(tv.Sec), nil 178 } 179 180 func setTimespec(sec, nsec int64) Timespec { 181 return Timespec{Sec: sec, Nsec: nsec} 182 } 183 184 func setTimeval(sec, usec int64) Timeval { 185 return Timeval{Sec: sec, Usec: usec} 186 } 187 188 func Pipe(p []int) (err error) { 189 if len(p) != 2 { 190 return EINVAL 191 } 192 var pp [2]_C_int 193 err = pipe2(&pp, 0) 194 p[0] = int(pp[0]) 195 p[1] = int(pp[1]) 196 return 197 } 198 199 //sysnb pipe2(p *[2]_C_int, flags int) (err error) 200 201 func Pipe2(p []int, flags int) (err error) { 202 if len(p) != 2 { 203 return EINVAL 204 } 205 var pp [2]_C_int 206 err = pipe2(&pp, flags) 207 p[0] = int(pp[0]) 208 p[1] = int(pp[1]) 209 return 210 } 211 212 func Ioperm(from int, num int, on int) (err error) { 213 return ENOSYS 214 } 215 216 func Iopl(level int) (err error) { 217 return ENOSYS 218 } 219 220 // func (r *PtraceRegs) PC() uint64 { return r.Regs[64] } 221 222 // func (r *PtraceRegs) SetPC(pc uint64) { r.Regs[64] = pc } 223 224 func (iov *Iovec) SetLen(length int) { 225 iov.Len = uint64(length) 226 } 227 228 func (msghdr *Msghdr) SetControllen(length int) { 229 msghdr.Controllen = uint64(length) 230 } 231 232 func (cmsg *Cmsghdr) SetLen(length int) { 233 cmsg.Len = uint64(length) 234 } 235 236 func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno) { 237 panic("not implemented") 238 } 239 240 //sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) 241 func Poll(fds []PollFd, timeout int) (n int, err error) { 242 if len(fds) == 0 { 243 return poll(nil, 0, timeout) 244 } 245 return poll(&fds[0], len(fds), timeout) 246 } 247 248 // ALL OF BELOW ARE NOT IMPLEMENT on sw64 249 type RawSockaddrPPPoX [0x1e]byte 250 type RawSockaddrXDP struct { 251 Family uint16 252 Flags uint16 253 Ifindex uint32 254 Queue_id uint32 255 Shared_umem_fd uint32 256 } 257 258 type StatxTimestamp struct { 259 Sec int64 260 Nsec uint32 261 _ int32 262 } 263 type Statx_t struct { 264 Mask uint32 265 Blksize uint32 266 Attributes uint64 267 Nlink uint32 268 Uid uint32 269 Gid uint32 270 Mode uint16 271 _ [1]uint16 272 Ino uint64 273 Size uint64 274 Blocks uint64 275 Attributes_mask uint64 276 Atime StatxTimestamp 277 Btime StatxTimestamp 278 Ctime StatxTimestamp 279 Mtime StatxTimestamp 280 Rdev_major uint32 281 Rdev_minor uint32 282 Dev_major uint32 283 Dev_minor uint32 284 _ [14]uint64 285 }