> % ktrace -d ./9vx -r /n/plan9 -u glenda -g -S
>         namec #/
>         namec #e/terminal
>         namec #e/cputype
>         namec #e/rootdir
>         namec #e/service
>         namec #e/user
>         namec #e/sysname
>         namec #Zplan9/
>         namec /
>         namec #p
>         namec /proc
>         namec #~/mntloop
>         namec #Zplan9/
>         namec #s/boot
> 9vx panic: vxproc_run: Invalid argument

In src/libvx32/openbsd.c:/vxemu_map
        int s, sel;
        struct vxproc *vxp;
        union descriptor desc;

        ...
                /*if(emu->datasel == 0){
                        if ((s = i386_set_ldt(LDT_AUTO_ALLOC, &desc, 1)) < 0)
                                return -1; */
                emu->datasel = (s<<3) + 4 + 3;  // 4=LDT, 3=RPL
                if(i386_set_ldt(emu->datasel >> 3, &desc, 1) < 0)
                        return -1;
        ...

The s variable is used un-initialized because
of the commented piece of code, causing EINVAL.
And since LDT_AUTO_ALLOC is only on FreeBSD or
Darwin, you're going to have to get it another
way.

At least, that's what I think from reading the
code since I don't have access to an OpenBSD box.

  Anthony

Reply via email to