mirror of
https://github.com/golang/go
synced 2024-11-22 17:44:46 -07:00
beginnings of a low-level syscall library
R=ken OCL=13483 CL=13496
This commit is contained in:
parent
120827284e
commit
20a02661d9
@ -663,7 +663,7 @@ scanpkg(Biobuf *b, long size)
|
||||
continue;
|
||||
goto foundstart;
|
||||
}
|
||||
fprint(2, "ar: no package import section in %s\n", file);
|
||||
fprint(2, "ar: warning: no package import section in %s\n", file);
|
||||
return;
|
||||
|
||||
foundstart:
|
||||
|
41
src/syscall/Makefile
Normal file
41
src/syscall/Makefile
Normal file
@ -0,0 +1,41 @@
|
||||
# Copyright 2009 The Go Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file.
|
||||
|
||||
CFLAGS=
|
||||
O=6
|
||||
CC=$(O)c
|
||||
AS=$(O)a
|
||||
GC=$(O)g
|
||||
|
||||
PKG=syscall.a
|
||||
|
||||
OFILES=\
|
||||
syscall.$O \
|
||||
errstr_$(GOOS).$O \
|
||||
syscall_$(GOARCH)_$(GOOS).$O \
|
||||
|
||||
|
||||
install: $(PKG)
|
||||
cp $(PKG) $(GOROOT)/pkg
|
||||
|
||||
$(PKG): $(OFILES)
|
||||
$(O)ar grc $(PKG) $(OFILES)
|
||||
|
||||
nuke:
|
||||
rm -f *.$(O) *.a $(GOROOT)/lib/$(PKG)
|
||||
|
||||
clean:
|
||||
rm -f *.$(O) *.a
|
||||
|
||||
%.$O: %.c
|
||||
$(CC) $<
|
||||
|
||||
sys_file.$O: sys_file.c sys_types.h $(OS_H)
|
||||
$(CC) -D$(GOARCH)_$(GOOS) $<
|
||||
|
||||
%.$O: %.s
|
||||
$(AS) $<
|
||||
|
||||
%.$O: %.go
|
||||
$(GC) $<
|
354
src/syscall/errstr_darwin.go
Normal file
354
src/syscall/errstr_darwin.go
Normal file
@ -0,0 +1,354 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package syscall
|
||||
|
||||
export errstr
|
||||
|
||||
const (
|
||||
ENONE=0;
|
||||
EPERM=1;
|
||||
ENOENT=2;
|
||||
ESRCH=3;
|
||||
EINTR=4;
|
||||
EIO=5;
|
||||
ENXIO=6;
|
||||
E2BIG=7;
|
||||
ENOEXEC=8;
|
||||
EBADF=9;
|
||||
ECHILD=10;
|
||||
EDEADLK=11;
|
||||
ENOMEM=12;
|
||||
EACCES=13;
|
||||
EFAULT=14;
|
||||
ENOTBLK=15;
|
||||
EBUSY=16;
|
||||
EEXIST=17;
|
||||
EXDEV=18;
|
||||
ENODEV=19;
|
||||
ENOTDIR=20;
|
||||
EISDIR=21;
|
||||
EINVAL=22;
|
||||
ENFILE=23;
|
||||
EMFILE=24;
|
||||
ENOTTY=25;
|
||||
ETXTBSY=26;
|
||||
EFBIG=27;
|
||||
ENOSPC=28;
|
||||
ESPIPE=29;
|
||||
EROFS=30;
|
||||
EMLINK=31;
|
||||
EPIPE=32;
|
||||
EDOM=33;
|
||||
ERANGE=34;
|
||||
EAGAIN=35;
|
||||
EINPROGRESS=36;
|
||||
EALREADY=37;
|
||||
ENOTSOCK=38;
|
||||
EDESTADDRREQ=39;
|
||||
EMSGSIZE=40;
|
||||
EPROTOTYPE=41;
|
||||
ENOPROTOOPT=42;
|
||||
EPROTONOSUPPORT=43;
|
||||
ESOCKTNOSUPPORT=44;
|
||||
ENOTSUP=45;
|
||||
EPFNOSUPPORT=46;
|
||||
EAFNOSUPPORT=47;
|
||||
EADDRINUSE=48;
|
||||
EADDRNOTAVAIL=49;
|
||||
ENETDOWN=50;
|
||||
ENETUNREACH=51;
|
||||
ENETRESET=52;
|
||||
ECONNABORTED=53;
|
||||
ECONNRESET=54;
|
||||
ENOBUFS=55;
|
||||
EISCONN=56;
|
||||
ENOTCONN=57;
|
||||
ESHUTDOWN=58;
|
||||
ETOOMANYREFS=59;
|
||||
ETIMEDOUT=60;
|
||||
ECONNREFUSED=61;
|
||||
ELOOP=62;
|
||||
ENAMETOOLONG=63;
|
||||
EHOSTDOWN=64;
|
||||
EHOSTUNREACH=65;
|
||||
ENOTEMPTY=66;
|
||||
EPROCLIM=67;
|
||||
EUSERS=68;
|
||||
EDQUOT=69;
|
||||
ESTALE=70;
|
||||
EREMOTE=71;
|
||||
EBADRPC=72;
|
||||
ERPCMISMATCH=73;
|
||||
EPROGUNAVAIL=74;
|
||||
EPROGMISMATCH=75;
|
||||
EPROCUNAVAIL=76;
|
||||
ENOLCK=77;
|
||||
ENOSYS=78;
|
||||
EFTYPE=79;
|
||||
EAUTH=80;
|
||||
ENEEDAUTH=81;
|
||||
EPWROFF=82;
|
||||
EDEVERR=83;
|
||||
EOVERFLOW=84;
|
||||
EBADEXEC=85;
|
||||
EBADARCH=86;
|
||||
ESHLIBVERS=87;
|
||||
EBADMACHO=88;
|
||||
ECANCELED=89;
|
||||
EIDRM=90;
|
||||
ENOMSG=91 ;
|
||||
EILSEQ=92;
|
||||
ENOATTR=93;
|
||||
EBADMSG=94;
|
||||
EMULTIHOP=95;
|
||||
ENODATA=96;
|
||||
ENOLINK=97;
|
||||
ENOSR=98;
|
||||
ENOSTR=99;
|
||||
EPROTO=100;
|
||||
ETIME=101;
|
||||
EOPNOTSUPP=102;
|
||||
ELAST=103;
|
||||
)
|
||||
|
||||
export (
|
||||
ENONE,
|
||||
EPERM,
|
||||
ENOENT,
|
||||
ESRCH,
|
||||
EINTR,
|
||||
EIO,
|
||||
ENXIO,
|
||||
E2BIG,
|
||||
ENOEXEC,
|
||||
EBADF,
|
||||
ECHILD,
|
||||
EDEADLK,
|
||||
ENOMEM,
|
||||
EACCES,
|
||||
EFAULT,
|
||||
ENOTBLK,
|
||||
EBUSY,
|
||||
EEXIST,
|
||||
EXDEV,
|
||||
ENODEV,
|
||||
ENOTDIR,
|
||||
EISDIR,
|
||||
EINVAL,
|
||||
ENFILE,
|
||||
EMFILE,
|
||||
ENOTTY,
|
||||
ETXTBSY,
|
||||
EFBIG,
|
||||
ENOSPC,
|
||||
ESPIPE,
|
||||
EROFS,
|
||||
EMLINK,
|
||||
EPIPE,
|
||||
EDOM,
|
||||
ERANGE,
|
||||
EAGAIN,
|
||||
EINPROGRESS,
|
||||
EALREADY,
|
||||
ENOTSOCK,
|
||||
EDESTADDRREQ,
|
||||
EMSGSIZE,
|
||||
EPROTOTYPE,
|
||||
ENOPROTOOPT,
|
||||
EPROTONOSUPPORT,
|
||||
ESOCKTNOSUPPORT,
|
||||
ENOTSUP,
|
||||
EPFNOSUPPORT,
|
||||
EAFNOSUPPORT,
|
||||
EADDRINUSE,
|
||||
EADDRNOTAVAIL,
|
||||
ENETDOWN,
|
||||
ENETUNREACH,
|
||||
ENETRESET,
|
||||
ECONNABORTED,
|
||||
ECONNRESET,
|
||||
ENOBUFS,
|
||||
EISCONN,
|
||||
ENOTCONN,
|
||||
ESHUTDOWN,
|
||||
ETOOMANYREFS,
|
||||
ETIMEDOUT,
|
||||
ECONNREFUSED,
|
||||
ELOOP,
|
||||
ENAMETOOLONG,
|
||||
EHOSTDOWN,
|
||||
EHOSTUNREACH,
|
||||
ENOTEMPTY,
|
||||
EPROCLIM,
|
||||
EUSERS,
|
||||
EDQUOT,
|
||||
ESTALE,
|
||||
EREMOTE,
|
||||
EBADRPC,
|
||||
ERPCMISMATCH,
|
||||
EPROGUNAVAIL,
|
||||
EPROGMISMATCH,
|
||||
EPROCUNAVAIL,
|
||||
ENOLCK,
|
||||
ENOSYS,
|
||||
EFTYPE,
|
||||
EAUTH,
|
||||
ENEEDAUTH,
|
||||
EPWROFF,
|
||||
EDEVERR,
|
||||
EOVERFLOW,
|
||||
EBADEXEC,
|
||||
EBADARCH,
|
||||
ESHLIBVERS,
|
||||
EBADMACHO,
|
||||
ECANCELED,
|
||||
EIDRM,
|
||||
ENOMSG,
|
||||
EILSEQ,
|
||||
ENOATTR,
|
||||
EBADMSG,
|
||||
EMULTIHOP,
|
||||
ENODATA,
|
||||
ENOLINK,
|
||||
ENOSR,
|
||||
ENOSTR,
|
||||
EPROTO,
|
||||
ETIME,
|
||||
EOPNOTSUPP,
|
||||
ELAST
|
||||
)
|
||||
|
||||
var error [ELAST]string;
|
||||
|
||||
func init(){
|
||||
error[ENONE] = "No error";
|
||||
error[EPERM] = "Operation not permitted";
|
||||
error[ENOENT] = "No such file or directory";
|
||||
error[ESRCH] = "No such process";
|
||||
error[EINTR] = "Interrupted system call";
|
||||
error[EIO] = "Input/output error";
|
||||
error[ENXIO] = "Device not configured";
|
||||
error[E2BIG] = "Argument list too long";
|
||||
error[ENOEXEC] = "Exec format error";
|
||||
error[EBADF] = "Bad file descriptor";
|
||||
error[ECHILD] = "No child processes";
|
||||
error[EDEADLK] = "Resource deadlock avoided";
|
||||
error[ENOMEM] = "Cannot allocate memory";
|
||||
error[EACCES] = "Permission denied";
|
||||
error[EFAULT] = "Bad address";
|
||||
error[ENOTBLK] = "Block device required";
|
||||
error[EBUSY] = "Device / Resource busy";
|
||||
error[EEXIST] = "File exists";
|
||||
error[EXDEV] = "Cross-device link";
|
||||
error[ENODEV] = "Operation not supported by device";
|
||||
error[ENOTDIR] = "Not a directory";
|
||||
error[EISDIR] = "Is a directory";
|
||||
error[EINVAL] = "Invalid argument";
|
||||
error[ENFILE] = "Too many open files in system";
|
||||
error[EMFILE] = "Too many open files";
|
||||
error[ENOTTY] = "Inappropriate ioctl for device";
|
||||
error[ETXTBSY] = "Text file busy";
|
||||
error[EFBIG] = "File too large";
|
||||
error[ENOSPC] = "No space left on device";
|
||||
error[ESPIPE] = "Illegal seek";
|
||||
error[EROFS] = "Read-only file system";
|
||||
error[EMLINK] = "Too many links";
|
||||
error[EPIPE] = "Broken pipe";
|
||||
error[EDOM] = "Numerical argument out of domain";
|
||||
error[ERANGE] = "Result too large";
|
||||
error[EAGAIN] = "Resource temporarily unavailable";
|
||||
error[EINPROGRESS] = "Operation now in progress";
|
||||
error[EALREADY] = "Operation already in progress";
|
||||
error[ENOTSOCK] = "Socket operation on non-socket";
|
||||
error[EDESTADDRREQ] = "Destination address required";
|
||||
error[EMSGSIZE] = "Message too long";
|
||||
error[EPROTOTYPE] = "Protocol wrong type for socket";
|
||||
error[ENOPROTOOPT] = "Protocol not available";
|
||||
error[EPROTONOSUPPORT] = "Protocol not supported";
|
||||
error[ESOCKTNOSUPPORT] = "Socket type not supported";
|
||||
error[ENOTSUP] = "Operation not supported";
|
||||
error[EPFNOSUPPORT] = "Protocol family not supported";
|
||||
error[EAFNOSUPPORT] = "Address family not supported by protocol family";
|
||||
error[EADDRINUSE] = "Address already in use";
|
||||
error[EADDRNOTAVAIL] = "Can't assign requested address";
|
||||
error[ENETDOWN] = "Network is down";
|
||||
error[ENETUNREACH] = "Network is unreachable";
|
||||
error[ENETRESET] = "Network dropped connection on reset";
|
||||
error[ECONNABORTED] = "Software caused connection abort";
|
||||
error[ECONNRESET] = "Connection reset by peer";
|
||||
error[ENOBUFS] = "No buffer space available";
|
||||
error[EISCONN] = "Socket is already connected";
|
||||
error[ENOTCONN] = "Socket is not connected";
|
||||
error[ESHUTDOWN] = "Can't send after socket shutdown";
|
||||
error[ETOOMANYREFS] = "Too many references: can't splice";
|
||||
error[ETIMEDOUT] = "Operation timed out";
|
||||
error[ECONNREFUSED] = "Connection refused";
|
||||
error[ELOOP] = "Too many levels of symbolic links";
|
||||
error[ENAMETOOLONG] = "File name too long";
|
||||
error[EHOSTDOWN] = "Host is down";
|
||||
error[EHOSTUNREACH] = "No route to host";
|
||||
error[ENOTEMPTY] = "Directory not empty";
|
||||
error[EPROCLIM] = "Too many processes";
|
||||
error[EUSERS] = "Too many users";
|
||||
error[EDQUOT] = "Disc quota exceeded";
|
||||
error[ESTALE] = "Stale NFS file handle";
|
||||
error[EREMOTE] = "Too many levels of remote in path";
|
||||
error[EBADRPC] = "RPC struct is bad";
|
||||
error[ERPCMISMATCH] = "RPC version wrong";
|
||||
error[EPROGUNAVAIL] = "RPC prog. not avail";
|
||||
error[EPROGMISMATCH] = "Program version wrong";
|
||||
error[EPROCUNAVAIL] = "Bad procedure for program";
|
||||
error[ENOLCK] = "No locks available";
|
||||
error[ENOSYS] = "Function not implemented";
|
||||
error[EFTYPE] = "Inappropriate file type or format";
|
||||
error[EAUTH] = "Authentication error";
|
||||
error[ENEEDAUTH] = "Need authenticator";
|
||||
error[EPWROFF] = "Device power is off";
|
||||
error[EDEVERR] = "Device error, e.g. paper out";
|
||||
error[EOVERFLOW] = "Value too large to be stored in data type";
|
||||
error[EBADEXEC] = "Bad executable";
|
||||
error[EBADARCH] = "Bad CPU type in executable";
|
||||
error[ESHLIBVERS] = "Shared library version mismatch";
|
||||
error[EBADMACHO] = "Malformed Macho file";
|
||||
error[ECANCELED] = "Operation canceled";
|
||||
error[EIDRM] = "Identifier removed";
|
||||
error[ENOMSG] = "No message of desired type";
|
||||
error[EILSEQ] = "Illegal byte sequence";
|
||||
error[ENOATTR] = "Attribute not found";
|
||||
error[EBADMSG] = "Bad message";
|
||||
error[EMULTIHOP] = "Reserved";
|
||||
error[ENODATA] = "No message available on STREAM";
|
||||
error[ENOLINK] = "Reserved";
|
||||
error[ENOSR] = "No STREAM resources";
|
||||
error[ENOSTR] = "Not a STREAM";
|
||||
error[EPROTO] = "Protocol error";
|
||||
error[ETIME] = "STREAM ioctl timeout";
|
||||
error[EOPNOTSUPP] = "Operation not supported on socket";
|
||||
error[ELAST] = "Must be equal largest errno";
|
||||
}
|
||||
|
||||
var digits string = "0123456789"
|
||||
|
||||
func str(val int64) string { // do it here rather than with fmt to avoid dependency
|
||||
if val < 0 {
|
||||
return "-" + str(-val);
|
||||
}
|
||||
var buf [32]byte; // big enough for int64
|
||||
i := len(buf)-1;
|
||||
for val >= 10 {
|
||||
buf[i] = digits[val%10];
|
||||
i--;
|
||||
val /= 10;
|
||||
}
|
||||
buf[i] = digits[val];
|
||||
return string(buf)[i:len(buf)];
|
||||
}
|
||||
|
||||
func errstr(errno int64) string {
|
||||
if errno < 0 || errno >= len(error) {
|
||||
return "Error " + str(errno)
|
||||
}
|
||||
return error[errno]
|
||||
}
|
428
src/syscall/errstr_linux.go
Normal file
428
src/syscall/errstr_linux.go
Normal file
@ -0,0 +1,428 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package syscall
|
||||
|
||||
export errstr
|
||||
|
||||
const (
|
||||
ENONE=0;
|
||||
EPERM=1;
|
||||
ENOENT=2;
|
||||
ESRCH=3;
|
||||
EINTR=4;
|
||||
EIO=5;
|
||||
ENXIO=6;
|
||||
E2BIG=7;
|
||||
ENOEXEC=8;
|
||||
EBADF=9;
|
||||
ECHILD=10;
|
||||
EAGAIN=11;
|
||||
ENOMEM=12;
|
||||
EACCES=13;
|
||||
EFAULT=14;
|
||||
ENOTBLK=15;
|
||||
EBUSY=16;
|
||||
EEXIST=17;
|
||||
EXDEV=18;
|
||||
ENODEV=19;
|
||||
ENOTDIR=20;
|
||||
EISDIR=21;
|
||||
EINVAL=22;
|
||||
ENFILE=23;
|
||||
EMFILE=24;
|
||||
ENOTTY=25;
|
||||
ETXTBSY=26;
|
||||
EFBIG=27;
|
||||
ENOSPC=28;
|
||||
ESPIPE=29;
|
||||
EROFS=30;
|
||||
EMLINK=31;
|
||||
EPIPE=32;
|
||||
EDOM=33;
|
||||
ERANGE=34;
|
||||
EDEADLK=35;
|
||||
ENAMETOOLONG=36;
|
||||
ENOLCK=37;
|
||||
ENOSYS=38;
|
||||
ENOTEMPTY=39;
|
||||
ELOOP=40;
|
||||
ENOMSG=42;
|
||||
EIDRM=43;
|
||||
ECHRNG=44;
|
||||
EL2NSYNC=45;
|
||||
EL3HLT=46;
|
||||
EL3RST=47;
|
||||
ELNRNG=48;
|
||||
EUNATCH=49;
|
||||
ENOCSI=50;
|
||||
EL2HLT=51;
|
||||
EBADE=52;
|
||||
EBADR=53;
|
||||
EXFULL=54;
|
||||
ENOANO=55;
|
||||
EBADRQC=56;
|
||||
EBADSLT=57;
|
||||
EBFONT=59;
|
||||
ENOSTR=60;
|
||||
ENODATA=61;
|
||||
ETIME=62;
|
||||
ENOSR=63;
|
||||
ENONET=64;
|
||||
ENOPKG=65;
|
||||
EREMOTE=66;
|
||||
ENOLINK=67;
|
||||
EADV=68;
|
||||
ESRMNT=69;
|
||||
ECOMM=70;
|
||||
EPROTO=71;
|
||||
EMULTIHOP=72;
|
||||
EDOTDOT=73;
|
||||
EBADMSG=74;
|
||||
EOVERFLOW=75;
|
||||
ENOTUNIQ=76;
|
||||
EBADFD=77;
|
||||
EREMCHG=78;
|
||||
ELIBACC=79;
|
||||
ELIBBAD=80;
|
||||
ELIBSCN=81;
|
||||
ELIBMAX=82;
|
||||
ELIBEXEC=83;
|
||||
EILSEQ=84;
|
||||
ERESTART=85;
|
||||
ESTRPIPE=86;
|
||||
EUSERS=87;
|
||||
ENOTSOCK=88;
|
||||
EDESTADDRREQ=89;
|
||||
EMSGSIZE=90;
|
||||
EPROTOTYPE=91;
|
||||
ENOPROTOOPT=92;
|
||||
EPROTONOSUPPORT=93;
|
||||
ESOCKTNOSUPPORT=94;
|
||||
EOPNOTSUPP=95;
|
||||
EPFNOSUPPORT=96;
|
||||
EAFNOSUPPORT=97;
|
||||
EADDRINUSE=98;
|
||||
EADDRNOTAVAIL=99;
|
||||
ENETDOWN=100;
|
||||
ENETUNREACH=101;
|
||||
ENETRESET=102;
|
||||
ECONNABORTED=103;
|
||||
ECONNRESET=104;
|
||||
ENOBUFS=105;
|
||||
EISCONN=106;
|
||||
ENOTCONN=107;
|
||||
ESHUTDOWN=108;
|
||||
ETOOMANYREFS=109;
|
||||
ETIMEDOUT=110;
|
||||
ECONNREFUSED=111;
|
||||
EHOSTDOWN=112;
|
||||
EHOSTUNREACH=113;
|
||||
EALREADY=114;
|
||||
EINPROGRESS=115;
|
||||
ESTALE=116;
|
||||
EUCLEAN=117;
|
||||
ENOTNAM=118;
|
||||
ENAVAIL=119;
|
||||
EISNAM=120;
|
||||
EREMOTEIO=121;
|
||||
EDQUOT=122;
|
||||
ENOMEDIUM=123;
|
||||
EMEDIUMTYPE=124;
|
||||
ECANCELED=125;
|
||||
ENOKEY=126;
|
||||
EKEYEXPIRED=127;
|
||||
EKEYREVOKED=128;
|
||||
EKEYREJECTED=129;
|
||||
ELAST=130;
|
||||
)
|
||||
|
||||
export (
|
||||
ENONE,
|
||||
EPERM,
|
||||
ENOENT,
|
||||
ESRCH,
|
||||
EINTR,
|
||||
EIO,
|
||||
ENXIO,
|
||||
E2BIG,
|
||||
ENOEXEC,
|
||||
EBADF,
|
||||
ECHILD,
|
||||
EAGAIN,
|
||||
ENOMEM,
|
||||
EACCES,
|
||||
EFAULT,
|
||||
ENOTBLK,
|
||||
EBUSY,
|
||||
EEXIST,
|
||||
EXDEV,
|
||||
ENODEV,
|
||||
ENOTDIR,
|
||||
EISDIR,
|
||||
EINVAL,
|
||||
ENFILE,
|
||||
EMFILE,
|
||||
ENOTTY,
|
||||
ETXTBSY,
|
||||
EFBIG,
|
||||
ENOSPC,
|
||||
ESPIPE,
|
||||
EROFS,
|
||||
EMLINK,
|
||||
EPIPE,
|
||||
EDOM,
|
||||
ERANGE,
|
||||
EDEADLK,
|
||||
ENAMETOOLONG,
|
||||
ENOLCK,
|
||||
ENOSYS,
|
||||
ENOTEMPTY,
|
||||
ELOOP,
|
||||
ENOMSG,
|
||||
EIDRM,
|
||||
ECHRNG,
|
||||
EL2NSYNC,
|
||||
EL3HLT,
|
||||
EL3RST,
|
||||
ELNRNG,
|
||||
EUNATCH,
|
||||
ENOCSI,
|
||||
EL2HLT,
|
||||
EBADE,
|
||||
EBADR,
|
||||
EXFULL,
|
||||
ENOANO,
|
||||
EBADRQC,
|
||||
EBADSLT,
|
||||
EBFONT,
|
||||
ENOSTR,
|
||||
ENODATA,
|
||||
ETIME,
|
||||
ENOSR,
|
||||
ENONET,
|
||||
ENOPKG,
|
||||
EREMOTE,
|
||||
ENOLINK,
|
||||
EADV,
|
||||
ESRMNT,
|
||||
ECOMM,
|
||||
EPROTO,
|
||||
EMULTIHOP,
|
||||
EDOTDOT,
|
||||
EBADMSG,
|
||||
EOVERFLOW,
|
||||
ENOTUNIQ,
|
||||
EBADFD,
|
||||
EREMCHG,
|
||||
ELIBACC,
|
||||
ELIBBAD,
|
||||
ELIBSCN,
|
||||
ELIBMAX,
|
||||
ELIBEXEC,
|
||||
EILSEQ,
|
||||
ERESTART,
|
||||
ESTRPIPE,
|
||||
EUSERS,
|
||||
ENOTSOCK,
|
||||
EDESTADDRREQ,
|
||||
EMSGSIZE,
|
||||
EPROTOTYPE,
|
||||
ENOPROTOOPT,
|
||||
EPROTONOSUPPORT,
|
||||
ESOCKTNOSUPPORT,
|
||||
EOPNOTSUPP,
|
||||
EPFNOSUPPORT,
|
||||
EAFNOSUPPORT,
|
||||
EADDRINUSE,
|
||||
EADDRNOTAVAIL,
|
||||
ENETDOWN,
|
||||
ENETUNREACH,
|
||||
ENETRESET,
|
||||
ECONNABORTED,
|
||||
ECONNRESET,
|
||||
ENOBUFS,
|
||||
EISCONN,
|
||||
ENOTCONN,
|
||||
ESHUTDOWN,
|
||||
ETOOMANYREFS,
|
||||
ETIMEDOUT,
|
||||
ECONNREFUSED,
|
||||
EHOSTDOWN,
|
||||
EHOSTUNREACH,
|
||||
EALREADY,
|
||||
EINPROGRESS,
|
||||
ESTALE,
|
||||
EUCLEAN,
|
||||
ENOTNAM,
|
||||
ENAVAIL,
|
||||
EISNAM,
|
||||
EREMOTEIO,
|
||||
EDQUOT,
|
||||
ENOMEDIUM,
|
||||
EMEDIUMTYPE,
|
||||
ECANCELED,
|
||||
ENOKEY,
|
||||
EKEYEXPIRED,
|
||||
EKEYREVOKED,
|
||||
EKEYREJECTED,
|
||||
ELAST
|
||||
)
|
||||
|
||||
var error [ELAST]string;
|
||||
|
||||
func init(){
|
||||
error[ENONE] = "No error";
|
||||
error[EPERM] = "Operation not permitted";
|
||||
error[ENOENT] = "No such file or directory";
|
||||
error[ESRCH] = "No such process";
|
||||
error[EINTR] = "Interrupted system call";
|
||||
error[EIO] = "I/O error";
|
||||
error[ENXIO] = "No such device or address";
|
||||
error[E2BIG] = "Argument list too long";
|
||||
error[ENOEXEC] = "Exec format error";
|
||||
error[EBADF] = "Bad file number";
|
||||
error[ECHILD] = "No child processes";
|
||||
error[EAGAIN] = "Try again";
|
||||
error[ENOMEM] = "Out of memory";
|
||||
error[EACCES] = "Permission denied";
|
||||
error[EFAULT] = "Bad address";
|
||||
error[ENOTBLK] = "Block device required";
|
||||
error[EBUSY] = "Device or resource busy";
|
||||
error[EEXIST] = "File exists";
|
||||
error[EXDEV] = "Cross-device link";
|
||||
error[ENODEV] = "No such device";
|
||||
error[ENOTDIR] = "Not a directory";
|
||||
error[EISDIR] = "Is a directory";
|
||||
error[EINVAL] = "Invalid argument";
|
||||
error[ENFILE] = "File table overflow";
|
||||
error[EMFILE] = "Too many open files";
|
||||
error[ENOTTY] = "Not a typewriter";
|
||||
error[ETXTBSY] = "Text file busy";
|
||||
error[EFBIG] = "File too large";
|
||||
error[ENOSPC] = "No space left on device";
|
||||
error[ESPIPE] = "Illegal seek";
|
||||
error[EROFS] = "Read-only file system";
|
||||
error[EMLINK] = "Too many links";
|
||||
error[EPIPE] = "Broken pipe";
|
||||
error[EDOM] = "Math argument out of domain of func";
|
||||
error[ERANGE] = "Math result not representable";
|
||||
error[EDEADLK] = "Resource deadlock would occur";
|
||||
error[ENAMETOOLONG] = "File name too long";
|
||||
error[ENOLCK] = "No record locks available";
|
||||
error[ENOSYS] = "Function not implemented";
|
||||
error[ENOTEMPTY] = "Directory not empty";
|
||||
error[ELOOP] = "Too many symbolic links encountered";
|
||||
error[ENOMSG] = "No message of desired type";
|
||||
error[EIDRM] = "Identifier removed";
|
||||
error[ECHRNG] = "Channel number out of range";
|
||||
error[EL2NSYNC] = "Level 2 not synchronized";
|
||||
error[EL3HLT] = "Level 3 halted";
|
||||
error[EL3RST] = "Level 3 reset";
|
||||
error[ELNRNG] = "Link number out of range";
|
||||
error[EUNATCH] = "Protocol driver not attached";
|
||||
error[ENOCSI] = "No CSI structure available";
|
||||
error[EL2HLT] = "Level 2 halted";
|
||||
error[EBADE] = "Invalid exchange";
|
||||
error[EBADR] = "Invalid request descriptor";
|
||||
error[EXFULL] = "Exchange full";
|
||||
error[ENOANO] = "No anode";
|
||||
error[EBADRQC] = "Invalid request code";
|
||||
error[EBADSLT] = "Invalid slot";
|
||||
error[EBFONT] = "Bad font file format";
|
||||
error[ENOSTR] = "Device not a stream";
|
||||
error[ENODATA] = "No data available";
|
||||
error[ETIME] = "Timer expired";
|
||||
error[ENOSR] = "Out of streams resources";
|
||||
error[ENONET] = "Machine is not on the network";
|
||||
error[ENOPKG] = "Package not installed";
|
||||
error[EREMOTE] = "Object is remote";
|
||||
error[ENOLINK] = "Link has been severed";
|
||||
error[EADV] = "Advertise error";
|
||||
error[ESRMNT] = "Srmount error";
|
||||
error[ECOMM] = "Communication error on send";
|
||||
error[EPROTO] = "Protocol error";
|
||||
error[EMULTIHOP] = "Multihop attempted";
|
||||
error[EDOTDOT] = "RFS specific error";
|
||||
error[EBADMSG] = "Not a data message";
|
||||
error[EOVERFLOW] = "Value too large for defined data type";
|
||||
error[ENOTUNIQ] = "Name not unique on network";
|
||||
error[EBADFD] = "File descriptor in bad state";
|
||||
error[EREMCHG] = "Remote address changed";
|
||||
error[ELIBACC] = "Can not access a needed shared library";
|
||||
error[ELIBBAD] = "Accessing a corrupted shared library";
|
||||
error[ELIBSCN] = ".lib section in a.out corrupted";
|
||||
error[ELIBMAX] = "Attempting to link in too many shared libraries";
|
||||
error[ELIBEXEC] = "Cannot exec a shared library directly";
|
||||
error[EILSEQ] = "Illegal byte sequence";
|
||||
error[ERESTART] = "Interrupted system call should be restarted";
|
||||
error[ESTRPIPE] = "Streams pipe error";
|
||||
error[EUSERS] = "Too many users";
|
||||
error[ENOTSOCK] = "Socket operation on non-socket";
|
||||
error[EDESTADDRREQ] = "Destination address required";
|
||||
error[EMSGSIZE] = "Message too long";
|
||||
error[EPROTOTYPE] = "Protocol wrong type for socket";
|
||||
error[ENOPROTOOPT] = "Protocol not available";
|
||||
error[EPROTONOSUPPORT] = "Protocol not supported";
|
||||
error[ESOCKTNOSUPPORT] = "Socket type not supported";
|
||||
error[EOPNOTSUPP] = "Operation not supported on transport endpoint";
|
||||
error[EPFNOSUPPORT] = "Protocol family not supported";
|
||||
error[EAFNOSUPPORT] = "Address family not supported by protocol";
|
||||
error[EADDRINUSE] = "Address already in use";
|
||||
error[EADDRNOTAVAIL] = "Cannot assign requested address";
|
||||
error[ENETDOWN] = "Network is down";
|
||||
error[ENETUNREACH] = "Network is unreachable";
|
||||
error[ENETRESET] = "Network dropped connection because of reset";
|
||||
error[ECONNABORTED] = "Software caused connection abort";
|
||||
error[ECONNRESET] = "Connection reset by peer";
|
||||
error[ENOBUFS] = "No buffer space available";
|
||||
error[EISCONN] = "Transport endpoint is already connected";
|
||||
error[ENOTCONN] = "Transport endpoint is not connected";
|
||||
error[ESHUTDOWN] = "Cannot send after transport endpoint shutdown";
|
||||
error[ETOOMANYREFS] = "Too many references: cannot splice";
|
||||
error[ETIMEDOUT] = "Connection timed out";
|
||||
error[ECONNREFUSED] = "Connection refused";
|
||||
error[EHOSTDOWN] = "Host is down";
|
||||
error[EHOSTUNREACH] = "No route to host";
|
||||
error[EALREADY] = "Operation already in progress";
|
||||
error[EINPROGRESS] = "Operation now in progress";
|
||||
error[ESTALE] = "Stale NFS file handle";
|
||||
error[EUCLEAN] = "Structure needs cleaning";
|
||||
error[ENOTNAM] = "Not a XENIX named type file";
|
||||
error[ENAVAIL] = "No XENIX semaphores available";
|
||||
error[EISNAM] = "Is a named type file";
|
||||
error[EREMOTEIO] = "Remote I/O error";
|
||||
error[EDQUOT] = "Quota exceeded";
|
||||
error[ENOMEDIUM] = "No medium found";
|
||||
error[EMEDIUMTYPE] = "Wrong medium type";
|
||||
error[ECANCELED] = "Operation Canceled";
|
||||
error[ENOKEY] = "Required key not available";
|
||||
error[EKEYEXPIRED] = "Key has expired";
|
||||
error[EKEYREVOKED] = "Key has been revoked";
|
||||
error[EKEYREJECTED] = "Key was rejected by service";
|
||||
}
|
||||
|
||||
var digits string = "0123456789"
|
||||
|
||||
func str(val int64) string { // do it here rather than with fmt to avoid dependency
|
||||
if val < 0 {
|
||||
return "-" + str(-val);
|
||||
}
|
||||
var buf [32]byte; // big enough for int64
|
||||
i := len(buf)-1;
|
||||
for val >= 10 {
|
||||
buf[i] = digits[val%10];
|
||||
i--;
|
||||
val /= 10;
|
||||
}
|
||||
buf[i] = digits[val];
|
||||
return string(buf)[i:len(buf)];
|
||||
}
|
||||
|
||||
func errstr(errno int64) string {
|
||||
if errno < 0 || errno >= len(error) {
|
||||
return "Error " + str(errno)
|
||||
}
|
||||
return error[errno]
|
||||
}
|
15
src/syscall/syscall.go
Normal file
15
src/syscall/syscall.go
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package syscall
|
||||
|
||||
// for simplicity of addressing in assembler, all integers are 64 bits
|
||||
// in these calling sequences.
|
||||
|
||||
func open(*byte, int64) (ret int64, errno int64);
|
||||
func close(int64) (ret int64, errno int64);
|
||||
func read(int64, *byte, int64) (ret int64, errno int64);
|
||||
func write(int64, *byte, int64) (ret int64, errno int64);
|
||||
|
||||
export open, close, read, write
|
107
src/syscall/syscall_amd64_darwin.s
Normal file
107
src/syscall/syscall_amd64_darwin.s
Normal file
@ -0,0 +1,107 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//
|
||||
// System calls for AMD64, Darwin
|
||||
//
|
||||
|
||||
//TEXT syscall·exit(SB),1,$-8
|
||||
// MOVL 8(SP), DI // arg 1 exit status
|
||||
// MOVL $(0x2000000+1), AX // syscall entry
|
||||
// SYSCALL
|
||||
// CALL notok(SB)
|
||||
// RET
|
||||
|
||||
TEXT syscall·open(SB),1,$-8
|
||||
MOVQ 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVQ $0, R10
|
||||
MOVL $(0x2000000+5), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC 4(PC)
|
||||
MOVQ $-1, 24(SP)
|
||||
MOVQ AX, 32(SP)
|
||||
RET
|
||||
MOVQ AX, 24(SP)
|
||||
MOVQ $0, 32(SP)
|
||||
RET
|
||||
|
||||
TEXT syscall·close(SB),1,$-8
|
||||
MOVL 8(SP), DI
|
||||
MOVL $(0x2000000+6), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC 4(PC)
|
||||
MOVQ $-1, 16(SP)
|
||||
MOVQ AX, 24(SP)
|
||||
RET
|
||||
MOVQ AX, 16(SP)
|
||||
MOVQ $0, 24(SP)
|
||||
RET
|
||||
|
||||
TEXT syscall·read(SB),1,$-8
|
||||
MOVQ 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVQ 24(SP), DX
|
||||
MOVL $(0x2000000+3), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC 4(PC)
|
||||
MOVQ $-1, 32(SP)
|
||||
MOVQ AX, 40(SP)
|
||||
RET
|
||||
MOVQ AX, 32(SP)
|
||||
MOVQ $0, 40(SP)
|
||||
RET
|
||||
|
||||
TEXT syscall·write(SB),1,$-8
|
||||
MOVQ 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVQ 24(SP), DX
|
||||
MOVL $(0x2000000+4), AX // syscall entry
|
||||
SYSCALL
|
||||
JCC 4(PC)
|
||||
MOVQ $-1, 32(SP)
|
||||
MOVQ AX, 40(SP)
|
||||
RET
|
||||
MOVQ AX, 32(SP)
|
||||
MOVQ $0, 40(SP)
|
||||
RET
|
||||
|
||||
//TEXT fstat(SB),1,$-8
|
||||
// MOVL 8(SP), DI
|
||||
// MOVQ 16(SP), SI
|
||||
// MOVL $(0x2000000+339), AX // syscall entry; really fstat64
|
||||
// SYSCALL
|
||||
// RET
|
||||
//
|
||||
//TEXT syscall·sigaction(SB),1,$-8
|
||||
// MOVL 8(SP), DI // arg 1 sig
|
||||
// MOVQ 16(SP), SI // arg 2 act
|
||||
// MOVQ 24(SP), DX // arg 3 oact
|
||||
// MOVQ 24(SP), CX // arg 3 oact
|
||||
// MOVQ 24(SP), R10 // arg 3 oact
|
||||
// MOVL $(0x2000000+46), AX // syscall entry
|
||||
// SYSCALL
|
||||
// JCC 2(PC)
|
||||
// CALL notok(SB)
|
||||
// RET
|
||||
//
|
||||
//TEXT sigtramp(SB),1,$24
|
||||
// MOVL DX,0(SP)
|
||||
// MOVQ CX,8(SP)
|
||||
// MOVQ R8,16(SP)
|
||||
// CALL sighandler(SB)
|
||||
// RET
|
||||
//
|
||||
//TEXT syscall·mmap(SB),1,$-8
|
||||
// MOVQ 8(SP), DI // arg 1 addr
|
||||
// MOVL 16(SP), SI // arg 2 len
|
||||
// MOVL 20(SP), DX // arg 3 prot
|
||||
// MOVL 24(SP), R10 // arg 4 flags
|
||||
// MOVL 28(SP), R8 // arg 5 fid
|
||||
// MOVL 32(SP), R9 // arg 6 offset
|
||||
// MOVL $(0x2000000+197), AX // syscall entry
|
||||
// SYSCALL
|
||||
// JCC 2(PC)
|
||||
// CALL notok(SB)
|
||||
// RET
|
123
src/syscall/syscall_amd64_linux.s
Normal file
123
src/syscall/syscall_amd64_linux.s
Normal file
@ -0,0 +1,123 @@
|
||||
// Copyright 2009 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//
|
||||
// System calls for AMD64, Linux
|
||||
//
|
||||
|
||||
//TEXT sys·exit(SB),1,$0-8
|
||||
// MOVL 8(SP), DI
|
||||
// MOVL $60, AX
|
||||
// SYSCALL
|
||||
// RET
|
||||
|
||||
TEXT syscall·open(SB),1,$0-16
|
||||
MOVQ 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVQ $0, DX
|
||||
MOVQ $2, AX // syscall entry
|
||||
SYSCALL
|
||||
CMPQ AX, $0xfffffffffffff001
|
||||
JLS 5(PC)
|
||||
MOVQ $-1, 24(SP)
|
||||
NEGQ AX
|
||||
MOVQ AX, 32(SP)
|
||||
RET
|
||||
MOVQ AX, 24(SP)
|
||||
MOVQ $0, 32(SP)
|
||||
RET
|
||||
|
||||
TEXT syscall·close(SB),1,$0-16
|
||||
MOVQ 8(SP), DI
|
||||
MOVL $3, AX // syscall entry
|
||||
SYSCALL
|
||||
CMPQ AX, $0xfffffffffffff001
|
||||
JLS 5(PC)
|
||||
MOVQ $-1, 16(SP)
|
||||
NEGQ AX
|
||||
MOVQ AX, 24(SP)
|
||||
RET
|
||||
MOVQ AX, 16(SP)
|
||||
MOVQ $0, 24(SP)
|
||||
RET
|
||||
|
||||
//TEXT fstat(SB),1,$0-16
|
||||
// MOVL 8(SP), DI
|
||||
// MOVQ 16(SP), SI
|
||||
// MOVL $5, AX // syscall entry
|
||||
// SYSCALL
|
||||
// RET
|
||||
|
||||
TEXT syscall·read(SB),1,$0-16
|
||||
MOVL 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVL 24(SP), DX
|
||||
MOVL $0, AX // syscall entry
|
||||
SYSCALL
|
||||
CMPQ AX, $0xfffffffffffff001
|
||||
JLS 5(PC)
|
||||
MOVQ $-1, 32(SP)
|
||||
NEGQ AX
|
||||
MOVQ AX, 40(SP)
|
||||
RET
|
||||
MOVQ AX, 32(SP)
|
||||
MOVQ $0, 40(SP)
|
||||
RET
|
||||
|
||||
TEXT syscall·write(SB),1,$0-16
|
||||
MOVL 8(SP), DI
|
||||
MOVQ 16(SP), SI
|
||||
MOVL 24(SP), DX
|
||||
MOVL $1, AX // syscall entry
|
||||
SYSCALL
|
||||
CMPQ AX, $0xfffffffffffff001
|
||||
JLS 5(PC)
|
||||
MOVQ $-1, 32(SP)
|
||||
NEGQ AX
|
||||
MOVQ AX, 40(SP)
|
||||
RET
|
||||
MOVQ AX, 32(SP)
|
||||
MOVQ $0, 40(SP)
|
||||
RET
|
||||
|
||||
//TEXT sys·rt_sigaction(SB),1,$0-32
|
||||
// MOVL 8(SP), DI
|
||||
// MOVQ 16(SP), SI
|
||||
// MOVQ 24(SP), DX
|
||||
// MOVQ 32(SP), CX
|
||||
// MOVL CX, R10
|
||||
// MOVL $13, AX // syscall entry
|
||||
// SYSCALL
|
||||
// RET
|
||||
//
|
||||
//TEXT sigtramp(SB),1,$24-16
|
||||
// MOVQ DI,0(SP)
|
||||
// MOVQ SI,8(SP)
|
||||
// MOVQ DX,16(SP)
|
||||
// CALL sighandler(SB)
|
||||
// RET
|
||||
//
|
||||
//TEXT sys·mmap(SB),1,$0-32
|
||||
// MOVQ 8(SP), DI
|
||||
// MOVL 16(SP), SI
|
||||
// MOVL 20(SP), DX
|
||||
// MOVL 24(SP), CX
|
||||
// MOVL 28(SP), R8
|
||||
// MOVL 32(SP), R9
|
||||
//
|
||||
///* flags arg for ANON is 1000 but sb 20 */
|
||||
// MOVL CX, AX
|
||||
// ANDL $~0x1000, CX
|
||||
// ANDL $0x1000, AX
|
||||
// SHRL $7, AX
|
||||
// ORL AX, CX
|
||||
//
|
||||
// MOVL CX, R10
|
||||
// MOVL $9, AX // syscall entry
|
||||
// SYSCALL
|
||||
// CMPQ AX, $0xfffffffffffff001
|
||||
// JLS 2(PC)
|
||||
// CALL notok(SB)
|
||||
// RET
|
||||
//
|
Loading…
Reference in New Issue
Block a user