On Sat May 17 06:28:02 EDT 2014, [email protected] wrote:
> Hello, help please, after recent (15 May) "pull":
>
> mntgen 31: bad sys call number 53 pc 813f
> ipconfig, keyfs, webfs webcookies, faces = the same.
> ls -l for example shows
> ls 222: bad sys call number 53 pc bb8f
> ls 222: suicide: sys: bad sys call pc=0x0000bb8f
> acid leads to /sys/src/libc/386/main9.s:16
looks like nsec() in the c library was replaced with a syscall, and
this was put into libc, and many things were recompiled. unfortunately
pull does not update your kernel, and your kernel doesn't support nsec.
if you have a dump file system, i would recommend copying /386/bin
executables back from before the may 15 update.
if you don't, the next best option is to copy mk from my contrib, then
r=/n/sources/contrib/quanstro/rescue
9fs sources &&
cp $r/mk /386/bin/mk
cd /sys/src/libc/9sys
cp $r/mkfile $r/nsec.c .
mk
now you can rebuild /sys/src/cmd as needed to build a kernel with nsec.
by the way, i'm currenttly using this version of nsec and i prefer it, though
it requires 3 syscalls and not two, and takes about 2x as long. it's still
just around 1µs on most of my machines. if nsec() is causing issues, i would
think that cycles(2) would be a good option, and much faster than a syscall.
; cat nsec.c
#include <u.h>
#include <libc.h>
vlong
nsec(void)
{
uchar b[8];
int fd;
fd = open("/dev/bintime", OREAD);
if(fd != -1)
if(pread(fd, b, sizeof b, 0) == sizeof b){
close(fd);
return getbe(b, sizeof b);
}
close(fd);
return 0;
}