All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Orgis <thomas@orgis.org>
To: Alejandro Colomar <alx@kernel.org>
Cc: <linux-man@vger.kernel.org>
Subject: SA_RESTART and friends as XSI extensions to POSIX.1-2001 <  XOPEN_SOURCE >= 600
Date: Wed, 14 Feb 2024 09:57:07 +0100	[thread overview]
Message-ID: <20240214095707.1824c25c@plasteblaster> (raw)

[-- Attachment #1: Type: text/plain, Size: 3585 bytes --]

Hi,

I had trouble compiling code with -std=c99 and needed some time to
figure out why the use of SA_RESTART did not work with

#define _POSIX_C_SOURCE 200112L

despite the man page of sigaction suggesting that this would be the
correct feature test macro. Searching around the net reveals that this
is a known discrepancy between man pages and glibc since at least 11
years. People stumble over this, learn, forget. Please let's document
it this time;-)

sigaction(2) claims this:

POSIX.1-2001 added
.BR SA_NOCLDSTOP ,
.BR SA_NOCLDWAIT ,
.BR SA_NODEFER ,
.BR SA_ONSTACK ,
.BR SA_RESETHAND ,
.BR SA_RESTART ,
and
.BR SA_SIGINFO .

All of these are extensions (XSI) to POSIX and need _XOPEN_SOURCE 600.

Quoting https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html
(thanks to https://unix.stackexchange.com/questions/613139/sigaction-sa-flags-and-posix-1-2001-base-spec):

The following shall be declared as constants:

SA_NOCLDSTOP
    [CX] [Option Start] Do not generate SIGCHLD when children stop [Option End]
    [XSI] [Option Start] or stopped children continue. [Option End]
[...]
SA_ONSTACK
    [XSI] [Option Start] Causes signal delivery to occur on an alternate stack. [Option End]
SA_RESETHAND
    [XSI] [Option Start] Causes signal dispositions to be set to SIG_DFL on entry to signal handlers. [Option End]
SA_RESTART
    [XSI] [Option Start] Causes certain functions to become restartable. [Option End]
SA_SIGINFO
    [XSI] [Option Start] Causes extra information to be passed to signal handlers at the time of receipt of a signal. [Option End]
SA_NOCLDWAIT
    [XSI] [Option Start] Causes implementations not to create zombie processes on child death. [Option End]
SA_NODEFER
    [XSI] [Option Start] Causes signal not to be automatically blocked on entry to signal handler. [Option End]

[and not mentioned in the man page, not relevant?]

SS_ONSTACK
    [XSI] [Option Start] Process is executing on an alternate signal stack. [Option End]
SS_DISABLE
    [XSI] [Option Start] Alternate signal stack is disabled. [Option End]
MINSIGSTKSZ
    [XSI] [Option Start] Minimum stack size for a signal handler. [Option End]
SIGSTKSZ
    [XSI] [Option Start] Default size in bytes for the alternate signal stack. [Option End] 


As a related bit, I noticed that feature_test_macros(7) is a bit
misleading here:

.IP \[bu]
Defining
.B _XOPEN_SOURCE
with a value of 600 or greater produces the same effects as defining
.B _POSIX_C_SOURCE
with a value of 200112L or greater.

As written later on the same page, X_OPEN_SOURCE 600 triggers a superset
of POSIX, not the same effects.


I hope these rather small changes can be made by a committer without
lengthy discussion of patches. I suggest  something along this, without
formatting details that I'd get wrong:

sigaction(2):

POSIX.1-2001 added
.BR SA_NOCLDSTOP ,
.BR SA_NOCLDWAIT ,
.BR SA_NODEFER ,
.BR SA_ONSTACK ,
.BR SA_RESETHAND ,
.BR SA_RESTART ,
and
.BR SA_SIGINFO ,
as XSI extensions (define _XOPEN_SOURCE to at least 600 to use).

feature_test_macros(7):

.IP \[bu]
Defining
.B _XOPEN_SOURCE
with a value of 600 or greater includes the effects of defining
.B _POSIX_C_SOURCE
with a value of 200112L or greater, adding the X/Open System Interfaces Extension (XSI).



Alrighty then,

Thomas

-- 
GPG public key 60D5CAFE: https://thomas.orgis.org/public_key
Fingerprint: D021 FF8E CF4B E097 19D6  1A27 231C 4CBC 60D5 CAFE
And despite all of you, I'm still doing it. Yes, I do write Perl code.

[-- Attachment #2: Firma digital OpenPGP --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

             reply	other threads:[~2024-02-14  8:57 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-14  8:57 Thomas Orgis [this message]
2024-02-25 11:41 ` Status of SA_NOCLDWAIT in POSIX.1 (was: SA_RESTART and friends as XSI extensions to POSIX.1-2001 < XOPEN_SOURCE >= 600) Alejandro Colomar
2024-02-25 11:53 ` [PATCH 0/2] sigaction.2: HISTORY: Document history of POSIX constants more accurately Alejandro Colomar
2024-02-25 11:53   ` [PATCH 1/2] sigaction.2: HISTORY: SA_NOCLDSTOP wasn't added in POSIX.1-2001 Alejandro Colomar
2024-02-27 18:12     ` Thomas Orgis
2024-02-27 21:15       ` Alejandro Colomar
2024-02-25 11:53   ` [PATCH 2/2] sigaction.2: HISTORY: Some constants are or were XSI extensions Alejandro Colomar
2024-02-27 18:14     ` Thomas Orgis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240214095707.1824c25c@plasteblaster \
    --to=thomas@orgis.org \
    --cc=alx@kernel.org \
    --cc=linux-man@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.