diff options
author | Ori Bernstein <ori@eigenstate.org> | 2017-09-09 16:14:13 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2017-09-09 16:14:13 -0700 |
commit | 4008733e9bc1a9285b70d055f6aeaa4b0a39483b (patch) | |
tree | 7005dc6e73385c71b205cf3db5bcfd091a4511f7 | |
parent | 7ef923fc9dfde99b672009f84340f5f398b96a80 (diff) | |
download | mc-4008733e9bc1a9285b70d055f6aeaa4b0a39483b.tar.gz |
Add missing files.
-rw-r--r-- | lib/sys/ifreq+netbsd.myr | 2 | ||||
-rw-r--r-- | lib/sys/syscall+netbsd-x64.s | 62 | ||||
-rw-r--r-- | lib/sys/syserrno+netbsd.myr | 123 |
3 files changed, 187 insertions, 0 deletions
diff --git a/lib/sys/ifreq+netbsd.myr b/lib/sys/ifreq+netbsd.myr new file mode 100644 index 0000000..e7d6400 --- /dev/null +++ b/lib/sys/ifreq+netbsd.myr @@ -0,0 +1,2 @@ +pkg sys = +;; diff --git a/lib/sys/syscall+netbsd-x64.s b/lib/sys/syscall+netbsd-x64.s new file mode 100644 index 0000000..d716798 --- /dev/null +++ b/lib/sys/syscall+netbsd-x64.s @@ -0,0 +1,62 @@ +.globl sys$syscall +sys$syscall: + /* + hack: We load 6 args regardless of + how many we actually have. This may + load junk values, but if the syscall + doesn't use them, it's going to be + harmless. + */ + movq %rdi,%rax + /* 8(%rsp): hidden type arg */ + movq 16(%rsp),%rdi + movq 24(%rsp),%rsi + movq 32(%rsp),%rdx + movq 40(%rsp),%r10 + movq 48(%rsp),%r8 + movq 56(%rsp),%r9 + /* + if there syscalls are more than 6 + args (eg, mmap), the remaining args + are on the stack, with 8 dummy bytes + for a return address. + */ + movq 64(%rsp),%rbx + pushq %rbx + pushq %rbx + + syscall + jae .success + negq %rax + +.success: + addq $16,%rsp + ret + +/* __tfork_thread(tfp : tforkparams#, sz : size, fn : void#, arg : void#-> tid) */ +.globl sys$__tfork_thread +sys$__tfork_thread: + /* syscall */ + movq %rdx, %r8 + movq %rcx, %r9 + movq $8, %rax + syscall + jb .failparent + + /* are we in the parent? */ + cmpq $0,%rax + jnz .doneparent + + /* call the function and __threxit */ + movq %r9, %rdi + callq *%r8 + + movq $302,%rax + xorq %rdi,%rdi + syscall + +.failparent: + negq %rax + +.doneparent: + ret diff --git a/lib/sys/syserrno+netbsd.myr b/lib/sys/syserrno+netbsd.myr new file mode 100644 index 0000000..e48f893 --- /dev/null +++ b/lib/sys/syserrno+netbsd.myr @@ -0,0 +1,123 @@ +pkg sys = + type errno = int + + const Eperm : errno = -1 /* Operation not permitted */ + const Enoent : errno = -2 /* No such file or directory */ + const Esrch : errno = -3 /* No such process */ + const Eintr : errno = -4 /* Interrupted system call */ + const Eio : errno = -5 /* Input/output error */ + const Enxio : errno = -6 /* Device not configured */ + const E2big : errno = -7 /* Argument list too long */ + const Enoexec : errno = -8 /* Exec format error */ + const Ebadf : errno = -9 /* Bad file descriptor */ + const Echild : errno = -10 /* No child processes */ + const Edeadlk : errno = -11 /* Resource deadlock avoided */ + /* 11 was EAGAIN */ + const Enomem : errno = -12 /* Cannot allocate memory */ + const Eacces : errno = -13 /* Permission denied */ + const Efault : errno = -14 /* Bad address */ + const Enotblk : errno = -15 /* Block device required */ + const Ebusy : errno = -16 /* Device busy */ + const Eexist : errno = -17 /* File exists */ + const Exdev : errno = -18 /* Cross-device link */ + const Enodev : errno = -19 /* Operation not supported by device */ + const Enotdir : errno = -20 /* Not a directory */ + const Eisdir : errno = -21 /* Is a directory */ + const Einval : errno = -22 /* Invalid argument */ + const Enfile : errno = -23 /* Too many open files in system */ + const Emfile : errno = -24 /* Too many open files */ + const Enotty : errno = -25 /* Inappropriate ioctl for device */ + const Etxtbsy : errno = -26 /* Text file busy */ + const Efbig : errno = -27 /* File too large */ + const Enospc : errno = -28 /* No space left on device */ + const Espipe : errno = -29 /* Illegal seek */ + const Erofs : errno = -30 /* Read-only filesystem */ + const Emlink : errno = -31 /* Too many links */ + const Epipe : errno = -32 /* Broken pipe */ + + /* math software */ + const Edom : errno = -33 /* Numerical argument out of domain */ + const Erange : errno = -34 /* Result too large */ + + /* non-blocking and interrupt i/o */ + const Eagain : errno = -35 /* Resource temporarily unavailable */ + const Einprogress : errno = -36 /* Operation now in progress */ + const Ealready : errno = -37 /* Operation already in progress */ + + /* ipc/network software -- argument errors */ + const Enotsock : errno = -38 /* Socket operation on non-socket */ + const Edestaddrreq : errno = -39 /* Destination address required */ + const Emsgsize : errno = -40 /* Message too long */ + const Eprototype : errno = -41 /* Protocol wrong type for socket */ + const Enoprotoopt : errno = -42 /* Protocol not available */ + const Eprotonosupport : errno = -43 /* Protocol not supported */ + const Esocktnosupport : errno = -44 /* Socket type not supported */ + const Eopnotsupp : errno = -45 /* Operation not supported */ + const Epfnosupport : errno = -46 /* Protocol family not supported */ + const Eafnosupport : errno = -47 /* Address family not supported by protocol family */ + const Eaddrinuse : errno = -48 /* Address already in use */ + const Eaddrnotavail : errno = -49 /* Can't assign requested address */ + + /* ipc/network software -- operational errors */ + const Enetdown : errno = -50 /* Network is down */ + const Enetunreach : errno = -51 /* Network is unreachable */ + const Enetreset : errno = -52 /* Network dropped connection on reset */ + const Econnaborted : errno = -53 /* Software caused connection abort */ + const Econnreset : errno = -54 /* Connection reset by peer */ + const Enobufs : errno = -55 /* No buffer space available */ + const Eisconn : errno = -56 /* Socket is already connected */ + const Enotconn : errno = -57 /* Socket is not connected */ + const Eshutdown : errno = -58 /* Can't send after socket shutdown */ + const Etoomanyrefs : errno = -59 /* Too many references: can't splice */ + const Etimedout : errno = -60 /* Operation timed out */ + const Econnrefused : errno = -61 /* Connection refused */ + + const Eloop : errno = -62 /* Too many levels of symbolic links */ + const Enametoolong : errno = -63 /* File name too long */ + + /* should be rearranged */ + const Ehostdown : errno = -64 /* Host is down */ + const Ehostunreach : errno = -65 /* No route to host */ + const Enotempty : errno = -66 /* Directory not empty */ + + /* quotas & mush */ + const Eproclim : errno = -67 /* Too many processes */ + const Eusers : errno = -68 /* Too many users */ + const Edquot : errno = -69 /* Disc quota exceeded */ + + /* Network File System */ + const Estale : errno = -70 /* Stale NFS file handle */ + const Eremote : errno = -71 /* Too many levels of remote in path */ + const Ebadrpc : errno = -72 /* RPC struct is bad */ + const Erpcmismatch : errno = -73 /* RPC version wrong */ + const Eprogunavail : errno = -74 /* RPC prog. not avail */ + const Eprogmismatch : errno = -75 /* Program version wrong */ + const Eprocunavail : errno = -76 /* Bad procedure for program */ + + const Enolck : errno = -77 /* No locks available */ + const Enosys : errno = -78 /* Function not implemented */ + + const Eftype : errno = -79 /* Inappropriate file type or format */ + const Eauth : errno = -80 /* Authentication error */ + const Eneedauth : errno = -81 /* Need authenticator */ + const Eidrm : errno = -82 /* Identifier removed */ + const Enomsg : errno = -83 /* No message of desired type */ + const Eoverflow : errno = -84 /* Value too large to be stored in data type */ + const Ecanceled : errno = -85 /* Operation canceled */ + const Eilseq : errno = -86 /* Illegal byte sequence */ + const Enoattr : errno = -87 /* Attribute not found */ + + const Edoofus : errno = -88 /* Programming error */ + + const Ebadmsg : errno = -89 /* Bad message */ + const Emultihop : errno = -90 /* Multihop attempted */ + const Enolink : errno = -91 /* Link has been severed */ + const Eproto : errno = -92 /* Protocol error */ + + const Enotcapable : errno = -93 /* Capabilities insufficient */ + const Ecapmode : errno = -94 /* Not permitted in capability mode */ + const Enotrecoverable : errno = -95 /* State not recoverable */ + const Eownerdead : errno = -96 /* Previous owner died */ + + const Elast : errno = -96 /* Must be equal largest errno */ +;; |