Hmm. As far as I can tell, its actually using the vm86old system call?
Typically, when the kernel reflects an error in VM86 mode it will update the structure in memory (in your case, the vm86plus_struct) to reflect the context. Would it be possible for you to read it out?
That's at least what the comment in libx86 states.
However the contents of struct vm86_struct after the segfault is:
(gdb) print context.vm
$2 = {regs = {ebx = 0, ecx = 0, edx = 0, esi = 0, edi = 0, ebp = 0, eax = 20227, __null_ds = 0, __null_es = 0, __null_fs = -1071579136, __null_gs = 0, orig_eax = -1, eip = 6326, cs = 49152, __csh = 0, eflags = 209410, esp = 4090, ss = 256, __ssh = 0, es = 0, __esh = 0, ds = 64, __dsh = 0, fs = 0, __fsh = 0, gs = 0, __gsh = 0}, flags = 0, screen_bitmap = 0, cpu_type = 0, int_revectored = {__map = {0, 0, 0,0, 0, 0, 0, 2147483648}}, int21_revectored = {__map = {0, 0, 0, 0, 0, 0, 0, 0}}}
My version of glibc does not seem to have vm86old declared, so I haven't
tried to remove the assembly code.
Should I try to change it to use vm86, instead of vm86old?