I'm writing a userland emulator - basically, a hardware emulator, except that it just runs userland; instructions that would trap to privileged mode are instead handled by the emulator.
While doing this, I ran into a problem: vfork. Most syscalls are fairly straightforward, but vfork is a problem. Most of the problems I've dealt with easily enough, but there is one that I feel a need for a new syscall for. I had a look at the modern vfork(2) manpage via the web interface, and the SEE ALSO section gives me no reason to think such a thing exists even in modern NetBSD. (I could just implement vfork as fork, but I'd prefer to be a faithful emulation if I can.) Basically, what I want is a syscall that a vfork()ed child can call to have the unsharing effects of execve(2) or _exit(2) (return the vmspace to the parent and let the it continue), while the child carries on with a clone of the vmspace without actually doing an exec or exit. This is because the emulator does not exec in the hosting-OS sense when the emulated process execs; I have found no other way to get the vfork semantics right without forking-and-exiting, and that gets process parenting wrong. (This would be fixable by adding a manager process, with everything for which parenting is relevant going via it, or by having a single emulator process timeshare among all simulated processes. A new syscall seems cleaner to me, especially as it fills a gap in the OS semantics.) It looks to me as though there is uvm support for the concept, in the form of vmspace_unshare(), in the version I'm working with; a little searching makes it appear it's been diked out of uvm_map.c more recently. The syscall wrapper around it is only a few lines, basically just uvmspace_unshare() plus, if PPWAIT is set, kicking the parent. I offer for consideration the thought that something of the sort might be worth adding. I have code written, but I don't yet know whether what I have works right - a test build is running as I type this - and it's for a version years behind -current. Thoughts? (Not restricted to just the above details; thoughts on the general idea would also be interesting to me.) /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTML mo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B