On Sat May 17 06:28:02 EDT 2014, puta2001-...@yahoo.com 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;
}

Reply via email to