Coming back to the subject of signal preemptors... Why do we need them at all? Why not just use the existing POSIX signal facilities?
We install a signal handler, saving the old signal handler, check the faulting memory address inside the new signal handler, and relay the signal on to the saved signal handler if it doesn't match. Also, codesearch.debian.net shows that the only place signal preemptors are used is in the hurd source tree itself (no great surprise), and the four places that it's used there (libpager, libstore, libdiskfs, and exec) don't do anything else with SIGBUS or SIGSEGV, so we don't even have to worry about nested signal handlers, really. We can just catch the signals. Signal preemptors, as a non standard addition to the already complicated POSIX signal API, raise questions like, what happens when a signal is preempted while a debugger is attached? Does the debugger get the signal before the preemptor, or does the preemptor fire without waiting for the debugger? agape brent