On Sun, 2005-11-13 at 17:58 +1100, Paul Mackerras wrote:
Or have a mark in the syscall table (e.g. set the bottom bit of the
address) for the syscalls that need the full register set. That does
mean an extra conditional branch in the syscall entry path for all
syscalls, though.
We don't need to do it on entry; we can do it on exit. If do_signal()
sees that the nvgprs weren't saved in the pt_regs it's playing with,
then it can set a new TIF_SAVENVPGRS_TO_SIG_FRAME bit. I don't think we
even need to store a pointer saying where to put them -- the signal
frame will always be at the top of the userspace stack.
As long as we handle the new bit before TIF_SIGPENDING and before
another call to do_signal(), we don't need to worry about recursive
signals and having to fill in more than one signal frame.
--
dwmw2