diff --git a/man2/sigaction.2 b/man2/sigaction.2 index 4bf6f095e..18404dde1 100644 --- a/man2/sigaction.2 +++ b/man2/sigaction.2 @@ -936,39 +936,6 @@ because they were introduced before Linux 5.11. However, in general, programs may assume that these flags are supported, since they have all been supported since Linux 2.6, which was released in the year 2003. -.PP -The following example program exits with status 0 if -.B SA_EXPOSE_TAGBITS -is determined to be supported, and 1 otherwise. -.PP -.EX -#include -#include -#include - -void handler(int signo, siginfo_t *info, void *context) { - struct sigaction oldact; - if (sigaction(SIGSEGV, 0, &oldact) == 0 && - !(oldact.sa_flags & SA_UNSUPPORTED) && - (oldact.sa_flags & SA_EXPOSE_TAGBITS)) { - _exit(0); - } else { - _exit(1); - } -} - -int main(void) { - struct sigaction act = {0}; - act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS; - act.sa_sigaction = handler; - if (sigaction(SIGSEGV, &act, 0) != 0) { - perror("sigaction"); - return 1; - } - - raise(SIGSEGV); -} -.EE .SH RETURN VALUE .BR sigaction () returns 0 on success; on error, \-1 is returned, and @@ -1174,6 +1141,49 @@ This bug was fixed in kernel 2.6.14. .SH EXAMPLES See .BR mprotect (2). +.PP +The following example program exits with status +.B EXIT_SUCCESS +if +.B SA_EXPOSE_TAGBITS +is determined to be supported, and +.B EXIT_FAILURE +otherwise. +.PP +.EX +#include +#include +#include +#include + +void +handler(int signo, siginfo_t *info, void *context) +{ + struct sigaction oldact; + + if (sigaction(SIGSEGV, NULL, &oldact) != 0 || + (oldact.sa_flags & SA_UNSUPPORTED) || + !(oldact.sa_flags & SA_EXPOSE_TAGBITS)) { + _exit(EXIT_FAILURE); + } + _exit(EXIT_SUCCESS); +} + +int +main(void) +{ + struct sigaction act = {0}; + + act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS; + act.sa_sigaction = &handler; + if (sigaction(SIGSEGV, &act, NULL) != 0) { + perror("sigaction"); + exit(EXIT_FAILURE); + } + + raise(SIGSEGV); +} +.EE .SH SEE ALSO .BR kill (1), .BR kill (2),