signal.7: Fixes and additions to text on execution of signal handlers

After comments from Dave Martin.

Reported-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Michael Kerrisk 2020-11-17 18:04:34 +01:00
parent a3727934a0
commit 42e6553d40
1 changed files with 16 additions and 4 deletions

View File

@ -253,8 +253,8 @@ the pending signal set is preserved across an
.SS Execution of signal handlers
Whenever there is a transition from kernel-mode to user-mode execution
(e.g., on return from a system call or scheduling of a thread onto the CPU),
the kernel checks whether there is a pending signal for which the process
has established a signal handler.
the kernel checks whether there is a pending unblocked signal
for which the process has established a signal handler.
If there is such a pending signal, the following steps occur:
.IP 1. 3
The kernel performs the necessary preparatory steps for execution of
@ -322,8 +322,10 @@ When the signal handler returns, control passes to the signal trampoline code.
The signal trampoline calls
.BR sigreturn (2),
a system call that uses the information in the stack frame created in step 1
to restore the thread's signal mask and alternate stack settings
to their state before the signal handler was called.
to restore the thread to its state before the signal handler was
called.
The thread's signal mask and alternate signal stack settings
are restored as part of this procedure.
Upon completion of the call to
.BR sigreturn (2),
the kernel transfers control back to user space,
@ -347,6 +349,16 @@ may or may not restore the signal mask, depending on the
.I savesigs
value that was specified in the corresponding call to
.BR sigsetjmp (3).)
.PP
From the kernel's point of view,
execution of the signal handler code is exactly the same as the execution
of any other user-space code.
That is to say, the kernel does not record any special state information
indicating that the thread is currently excuting inside a signal handler.
All necessary state information is maintained in user-space registers
and the user-space stack.
The depth to which nested signal handlers may be invoked is thus
limited only by the user-space stack (and sensible software design!).
.\"
.SS Standard signals
Linux supports the standard signals listed below.