--- /sys/src/9k/k10/syscall.c +++ /sys/src/9k/k10/syscall.c @@ -286,7 +286,7 @@ syscall(int scallnr, Ureg* ureg) noted(ureg, *(uintptr*)(sp+BY2SE)); splhi(); - if(scallnr != RFORK && (up->procctl || up->nnote)) + if(scallnr != RFORK && scallnr != NSEC && (up->procctl || up->nnote)) notify(ureg); /* if we delayed sched because we held a lock, sched now */ --- /sys/src/9k/mk/parse +++ /sys/src/9k/mk/parse @@ -241,6 +241,8 @@ function mksystab( a, i, f, n, s, t){ t = t "{ .v = (void*)-1 } },\n"; else if($2 ~ "^(ALARM|_READ|_WRITE|PREAD|PWRITE)$") t = t "{ .l = -1 } },\n"; + else if($2 ~ "(NSEC)") + t = t "{ .vl = -1LL } },\n"; else t = t "{ .i = -1 } },\n"; } --- /sys/src/9k/port/sysproc.c +++ /sys/src/9k/port/sysproc.c @@ -1183,3 +1183,9 @@ syssemrelease(Ar0* ar0, va_list list) ar0->i = semrelease(s, addr, delta); } + +void +sysnsec(Ar0* ar0, va_list) +{ + ar0->vl = todget(nil); +} --- a/sys/src/9k/port/syscallfmt.c +++ b/sys/src/9k/port/syscallfmt.c @@ -293,6 +293,11 @@ syscallfmt(int syscallno, va_list list) fmtprint(&fmt, " %lld", vl); } break; + case NSEC: + /* compilers on 32-bit systems insert &ret as only argument */ + if (sizeof(void *) < sizeof(vlong)) + fmtprint(&fmt, "%#p", va_arg(list, vlong*)); + break; } up->syscalltrace = fmtstrflush(&fmt); } @@ -326,6 +331,9 @@ sysretfmt(int syscallno, va_list list, Ar0* ar0, uvlong start, uvlong stop) errstr = up->errstr; fmtprint(&fmt, " = %ld", (long)ar0->l); break; + case NSEC: + fmtprint(&fmt, " = %lld", ar0->vl); + break; case EXEC: case SEGBRK: case SEGATTACH: