> % 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