Basic idea is to set up the user stack so that the handler is called as a subroutine and so that when it returns, normal execution of the thread may continue.
Complications:
- saving and restoring registers
- signal mask
Signal handling semantics requires that the signal that caused handler to execute is masked while in the handler and unmasked when the handler returns.