From 3207e8b6a4339f39e2261d1f1878e8049b65c23c Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 20 May 2014 05:06:31 +0200 Subject: add _nsec() syscall 53 for binary compatibility with labs distribution the new syscall is added under the symbol _nsec() for binary compatibility. nsec() is still a library function reading /dev/bintime. --- sys/lib/acid/syscall | 1 + sys/lib/acid/truss | 1 + sys/src/9/port/syscallfmt.c | 4 ++ sys/src/9/port/sysfile.c | 1 + sys/src/9/port/sysproc.c | 13 ++++ sys/src/9/port/systab.h | 166 ------------------------------------------- sys/src/libc/9syscall/mkfile | 21 +++--- sys/src/libc/9syscall/sys.h | 1 + 8 files changed, 31 insertions(+), 177 deletions(-) delete mode 100644 sys/src/9/port/systab.h (limited to 'sys') diff --git a/sys/lib/acid/syscall b/sys/lib/acid/syscall index 0f36c9c7c..1939ab323 100644 --- a/sys/lib/acid/syscall +++ b/sys/lib/acid/syscall @@ -130,6 +130,7 @@ syscalls = { {50, {"pread", "DADZ", code(*syspread:list)}}, {51, {"pwrite", "DTDZ", code(*syspwrite:list)}}, {52, {"tsemacquire", "AD", code(*systsemacquire:list)}}, + {53, {"_nsec", "A", code(*sys_nsec:list)}}, }; defn syscall() { diff --git a/sys/lib/acid/truss b/sys/lib/acid/truss index b2f16fa77..df1c9acdd 100644 --- a/sys/lib/acid/truss +++ b/sys/lib/acid/truss @@ -98,6 +98,7 @@ trusscalls = { "pread", "pwrite", "tsemacquire", + "_nsec", }; trussapecalls = { diff --git a/sys/src/9/port/syscallfmt.c b/sys/src/9/port/syscallfmt.c index 3d1753b02..803481835 100644 --- a/sys/src/9/port/syscallfmt.c +++ b/sys/src/9/port/syscallfmt.c @@ -297,6 +297,10 @@ syscallfmt(ulong syscallno, uintptr pc, va_list list) fmtprint(&fmt, " %lld", vl); } break; + case _NSEC: + v = va_arg(list, vlong*); + fmtprint(&fmt, "%#p", v); + break; } a = fmtstrflush(&fmt); diff --git a/sys/src/9/port/sysfile.c b/sys/src/9/port/sysfile.c index 260b324ad..9dfeb5371 100644 --- a/sys/src/9/port/sysfile.c +++ b/sys/src/9/port/sysfile.c @@ -879,6 +879,7 @@ sysseek(va_list list) vlong n, *v; v = va_arg(list, vlong*); + evenaddr((uintptr)v); validaddr((uintptr)v, sizeof(vlong), 1); fd = va_arg(list, int); diff --git a/sys/src/9/port/sysproc.c b/sys/src/9/port/sysproc.c index 5a602112a..fbe4f2fbc 100644 --- a/sys/src/9/port/sysproc.c +++ b/sys/src/9/port/sysproc.c @@ -1182,3 +1182,16 @@ syssemrelease(va_list list) error(Ebadarg); return (uintptr)semrelease(s, addr, delta); } + +/* For binary compatibility */ +uintptr +sys_nsec(va_list list) +{ + vlong *v; + + v = va_arg(list, vlong*); + evenaddr((uintptr)v); + validaddr((uintptr)v, sizeof(vlong), 1); + *v = todget(nil); + return 0; +} diff --git a/sys/src/9/port/systab.h b/sys/src/9/port/systab.h deleted file mode 100644 index 3ac2e960a..000000000 --- a/sys/src/9/port/systab.h +++ /dev/null @@ -1,166 +0,0 @@ -#include "/sys/src/libc/9syscall/sys.h" - -typedef uintptr Syscall(va_list); - -Syscall sysr1; -Syscall sys_errstr; -Syscall sysbind; -Syscall syschdir; -Syscall sysclose; -Syscall sysdup; -Syscall sysalarm; -Syscall sysexec; -Syscall sysexits; -Syscall sys_fsession; -Syscall sysfauth; -Syscall sys_fstat; -Syscall syssegbrk; -Syscall sys_mount; -Syscall sysopen; -Syscall sys_read; -Syscall sysoseek; -Syscall syssleep; -Syscall sys_stat; -Syscall sysrfork; -Syscall sys_write; -Syscall syspipe; -Syscall syscreate; -Syscall sysfd2path; -Syscall sysbrk_; -Syscall sysremove; -Syscall sys_wstat; -Syscall sys_fwstat; -Syscall sysnotify; -Syscall sysnoted; -Syscall syssegattach; -Syscall syssegdetach; -Syscall syssegfree; -Syscall syssegflush; -Syscall sysrendezvous; -Syscall sysunmount; -Syscall sys_wait; -Syscall syssemacquire; -Syscall syssemrelease; -Syscall sysseek; -Syscall sysfversion; -Syscall syserrstr; -Syscall sysstat; -Syscall sysfstat; -Syscall syswstat; -Syscall sysfwstat; -Syscall sysmount; -Syscall sysawait; -Syscall syspread; -Syscall syspwrite; -Syscall systsemacquire; -Syscall sysdeath; - -Syscall *systab[]={ - [SYSR1] sysr1, - [_ERRSTR] sys_errstr, - [BIND] sysbind, - [CHDIR] syschdir, - [CLOSE] sysclose, - [DUP] sysdup, - [ALARM] sysalarm, - [EXEC] sysexec, - [EXITS] sysexits, - [_FSESSION] sys_fsession, - [FAUTH] sysfauth, - [_FSTAT] sys_fstat, - [SEGBRK] syssegbrk, - [_MOUNT] sys_mount, - [OPEN] sysopen, - [_READ] sys_read, - [OSEEK] sysoseek, - [SLEEP] syssleep, - [_STAT] sys_stat, - [RFORK] sysrfork, - [_WRITE] sys_write, - [PIPE] syspipe, - [CREATE] syscreate, - [FD2PATH] sysfd2path, - [BRK_] sysbrk_, - [REMOVE] sysremove, - [_WSTAT] sys_wstat, - [_FWSTAT] sys_fwstat, - [NOTIFY] sysnotify, - [NOTED] sysnoted, - [SEGATTACH] syssegattach, - [SEGDETACH] syssegdetach, - [SEGFREE] syssegfree, - [SEGFLUSH] syssegflush, - [RENDEZVOUS] sysrendezvous, - [UNMOUNT] sysunmount, - [_WAIT] sys_wait, - [SEMACQUIRE] syssemacquire, - [SEMRELEASE] syssemrelease, - [SEEK] sysseek, - [FVERSION] sysfversion, - [ERRSTR] syserrstr, - [STAT] sysstat, - [FSTAT] sysfstat, - [WSTAT] syswstat, - [FWSTAT] sysfwstat, - [MOUNT] sysmount, - [AWAIT] sysawait, - [PREAD] syspread, - [PWRITE] syspwrite, - [TSEMACQUIRE] systsemacquire, -}; - -char *sysctab[]={ - [SYSR1] "Running", - [_ERRSTR] "_errstr", - [BIND] "Bind", - [CHDIR] "Chdir", - [CLOSE] "Close", - [DUP] "Dup", - [ALARM] "Alarm", - [EXEC] "Exec", - [EXITS] "Exits", - [_FSESSION] "_fsession", - [FAUTH] "Fauth", - [_FSTAT] "_fstat", - [SEGBRK] "Segbrk", - [_MOUNT] "_mount", - [OPEN] "Open", - [_READ] "_read", - [OSEEK] "Oseek", - [SLEEP] "Sleep", - [_STAT] "_stat", - [RFORK] "Rfork", - [_WRITE] "_write", - [PIPE] "Pipe", - [CREATE] "Create", - [FD2PATH] "Fd2path", - [BRK_] "Brk", - [REMOVE] "Remove", - [_WSTAT] "_wstat", - [_FWSTAT] "_fwstat", - [NOTIFY] "Notify", - [NOTED] "Noted", - [SEGATTACH] "Segattach", - [SEGDETACH] "Segdetach", - [SEGFREE] "Segfree", - [SEGFLUSH] "Segflush", - [RENDEZVOUS] "Rendez", - [UNMOUNT] "Unmount", - [_WAIT] "_wait", - [SEMACQUIRE] "Semacquire", - [SEMRELEASE] "Semrelease", - [SEEK] "Seek", - [FVERSION] "Fversion", - [ERRSTR] "Errstr", - [STAT] "Stat", - [FSTAT] "Fstat", - [WSTAT] "Wstat", - [FWSTAT] "Fwstat", - [MOUNT] "Mount", - [AWAIT] "Await", - [PREAD] "Pread", - [PWRITE] "Pwrite", - [TSEMACQUIRE] "Tsemacquire", -}; - -int nsyscall = (sizeof systab/sizeof systab[0]); diff --git a/sys/src/libc/9syscall/mkfile b/sys/src/libc/9syscall/mkfile index 081310e34..f8df482bc 100644 --- a/sys/src/libc/9syscall/mkfile +++ b/sys/src/libc/9syscall/mkfile @@ -6,7 +6,7 @@ install:V: for(I in $SYS) { i=`{echo $I|tr A-Z a-z} n=`{sed -n '/[ ]'$I'[ ]/s/.* //p' sys.h} - if(~ $i exits) i=_exits + if(~ $i (exits nsec)) i=_$i {switch($objtype){ case 68000 68020 echo TEXT $i'(SB)', 1, '$0' @@ -18,7 +18,7 @@ install:V: echo MOVW R1, '0(FP)' echo MOVW '$'$n, R1 echo SYSCALL - if(~ $i seek) { + if(~ $i (seek _nsec)) { echo 'MOVW $-1,R5 BNE R1,R5,4(PC) MOVW a+0(FP),R5 @@ -41,7 +41,7 @@ install:V: echo ADD '$4',R29 echo SYSCALL echo ADD '$-4',R29 - if(~ $i seek) { # untested so far - geoff + if(~ $i (seek _nsec)) { # untested so far - geoff echo 'MOVW $-1,R5 BNE R1,R5,4(PC) MOVW a+0(FP),R5 @@ -53,7 +53,7 @@ install:V: echo TEXT $i'(SB)', 1, '$0' echo MOVL '$'$n, AX echo INT '$'64 - if(~ $i seek) { + if(~ $i (seek _nsec)) { echo 'CMPL AX,$-1 JNE 4(PC) MOVL a+0(FP),CX @@ -62,10 +62,9 @@ install:V: } echo RET case amd64 - if(~ $i seek) - echo TEXT _seek'(SB)', 1, '$0' - if not - echo TEXT $i'(SB)', 1, '$0' + j=$i + if(~ $i seek) j=_seek + echo TEXT $j'(SB)', 1, '$0' echo MOVQ RARG, 'a0+0(FP)' echo MOVQ '$'$n, RARG echo SYSCALL @@ -75,7 +74,7 @@ install:V: echo MOVW R7, '0(FP)' echo MOVW '$'$n, R7 echo TA R0 - if(~ $i seek) { + if(~ $i (seek _nsec)) { echo 'CMP R7,$-1 BNE 4(PC) MOVW a+0(FP),R8 @@ -100,7 +99,7 @@ install:V: echo MOVW R0, '0(FP)' echo MOVW '$'$n, R0 echo SWI 0 - if(~ $i seek) { + if(~ $i (seek _nsec)) { echo 'CMP $-1,R0 BNE 4(PC) MOVW a+0(FP),R1 @@ -113,7 +112,7 @@ install:V: echo MOVW R3, '0(FP)' echo MOVW '$'$n, R3 echo SYSCALL - if(~ $i seek) { + if(~ $i (seek _nsec)) { echo 'CMP R3,$-1 BNE 4(PC) MOVW a+0(FP),R8 diff --git a/sys/src/libc/9syscall/sys.h b/sys/src/libc/9syscall/sys.h index fcc274799..8b7f97d34 100644 --- a/sys/src/libc/9syscall/sys.h +++ b/sys/src/libc/9syscall/sys.h @@ -49,3 +49,4 @@ #define PREAD 50 #define PWRITE 51 #define TSEMACQUIRE 52 +#define _NSEC 53 -- cgit v1.2.3