Re: SIGSTKSZ is now a run-time variable
Eric Blake via Libc-alpha <[email protected]>
| Newsgroups | gmane.comp.lib.glibc.alpha,gmane.comp.gnu.m4.bugs,gmane.comp.standards.posix.austin.general |
|---|---|
| Organization | Red Hat, Inc. |
| Message-ID | <[email protected]> |
On 3/9/21 10:14 AM, shwaresyst wrote:
>
> To me that looks like a conformance violation and should be reverted. There is no _SC_SIGSTKSZ defined in <unistd.h> by the standard, to begin with, so that use of sysconf() is a non-portable extension on its own.
Portable apps can't use _SC_SIGSTKSZ, but the standard generally permits
implementations to define further constants. Then again, re-reading XSH
2.2.2:
" Implementations may add symbols to the headers shown in the following
table, provided the identifiers for those symbols either:
Begin with the corresponding reserved prefixes in the table, or
..."
but the table lacks a row for <unistd.h> with _CS_* and _SC_* constants.
Looks like you found an independent defect.
>
> I could see the definition of SIGSTKSZ being changed to the static minimum a particular processor requires, or is initially allocated as a 'safe' amount, rather than static "default size", and moving SIGSTKSZ to <limits.h>. This would contrast to MINSIGSTKSZ as the lowest value for a platform for all supported processors. Then an application could use sysconf() to query for the maximum size the configuration supports if it wants to use more than that, as a runtime increasable limit.
As I understand it, the concern in glibc is less about runtime
increasability, so much as ABI compatibility with applications compiled
against older headers at a time when the kernel had less state
information to store during a context switch.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org