diff options
| -rw-r--r-- | man2/sigaction.2 | 8 | ||||
| -rw-r--r-- | man7/signal.7 | 40 |
2 files changed, 38 insertions, 10 deletions
diff --git a/man2/sigaction.2 b/man2/sigaction.2 index bb7b7c9286..8a04703b0e 100644 --- a/man2/sigaction.2 +++ b/man2/sigaction.2 @@ -1019,6 +1019,14 @@ handler. See the relevant Linux kernel sources for details. This use is obsolete now. .SH BUGS +When delivering a signal with a +.B SA_SIGINFO +handler, +the kernel does not always provide meaningful values +for all of the fields of the +.I siginfo_t +that are relevant for that signal. +.PP In kernels up to and including 2.6.13, specifying .B SA_NODEFER in diff --git a/man7/signal.7 b/man7/signal.7 index a0406d6493..2bcec4ad5b 100644 --- a/man7/signal.7 +++ b/man7/signal.7 @@ -796,16 +796,36 @@ Linux 2.4 and earlier: .BR nanosleep (2). .SH CONFORMING TO POSIX.1, except as noted. -.\" It must be a *very* long time since this was true: -.\" .SH BUGS -.\" .B SIGIO -.\" and -.\" .B SIGLOST -.\" have the same value. -.\" The latter is commented out in the kernel source, but -.\" the build process of some software still thinks that -.\" signal 29 is -.\" .BR SIGLOST . +.SH BUGS +There are six signals that can be delivered +as a consequence of a hardware exception: +.BR SIGBUS , +.BR SIGEMT , +.BR SIGFPE , +.BR SIGILL , +.BR SIGSEGV , +and +.BR SIGTRAP . +Which of these signals is delivered, +for any given hardware exception, +is not documented and does not always make sense. +.PP +For example, an invalid memory access that causes delivery of +.B SIGSEGV +on one CPU architecture may cause delivery of +.B SIGBUS +on another architecture, or vice versa. +.PP +For another example, using the x86 +.I int +instruction with a forbidden argument +(any number other than 3 or 128) +causes delivery of +.BR SIGSEGV , +even though +.B SIGILL +would make more sense, +because of how the CPU reports the forbidden operation to the kernel. .SH NOTES For a discussion of async-signal-safe functions, see .BR signal-safety (7). |
