Matt, > :A first cut of the libc-based implementation, using a (new) syscall to > :get/set the signal its is available, and can be found here: > :http://www.gsicomp.on.ca/~matt/dfly/ (rev3, bottom of page) > > Ok, I see a few things, all easy to fix: > > * sigpend is not swapped in and out. This is the bitmask of pending > signals. It stays as it is.
I misunderstood your earlier comment about the pending mask. > * sigmask must be adjusted by the kernel to remove unmaskable signals > using SIG_CANTMASK(sigmask); > > * There is a naming conflict between the sigmask() system call and > thethe 'sigmask' identifier, but (see next item)... > > * You shouldn't need a new system call anyway, the sigprocmask() system > call can be used to retrieve and set the signal mask. I recommend > using that. Absolutely. The only reason I invented a new syscall was because of my misunderstanding above :) > There is one more issue, and that is an atomicy issue. We want the > new signal mask to be set simultaniously with the restoration of the > context (or most of it). This means that all signals must be masked > temporarily while restoring the context. But don't worry about it, > I can handle that part as well. It does mean an extra system call > but that isn't our concern at the moment. > > I can fill in the missing code assembly, no problem. If you do one > more rev using sigprocmask() instead of creating a new system call > I can then take it from there. Code changes uploaded to website, rev4. -- Matt Emmerton
