|author||Joseph Myers <email@example.com>||2017-05-23 16:47:29 +0000|
|committer||Joseph Myers <firstname.lastname@example.org>||2017-05-23 16:47:29 +0000|
Fix sigstack namespace (bug 21511).
The sigstack function was removed in the 2001 edition of POSIX, and the sigstack structure in the 2008 edition. signal.h wrongly includes those declarations even for newer POSIX versions. This patch fixes the conditions, and conform/ expectations, accordingly. This patch makes the minimum change to when these declarations are present, leaving them visible for __USE_MISC as they would previously have been visible by default. Arguably these legacy declarations should only be visible when an old standard is specifically requested, but implementing that would require arranging for the various sigstack implementations to be able to see the struct sigstack type despite it not being in _GNU_SOURCE in that case. Tested for x86_64. [BZ #21511] * signal/signal.h: Include <bits/types/struct_sigstack.h> only if [(__USE_XOPEN_EXTENDED && !__USE_XOPEN2K8) || __USE_MISC]. (sigstack): Declare only if [(__USE_XOPEN_EXTENDED && !__USE_XOPEN2K) || __USE_MISC]. * conform/data/signal.h-data (struct sigstack): Expect type only if [!XOPEN2K8 && !POSIX2008]. (sigstack): Expect function only if [XPG42 || UNIX98].
Diffstat (limited to 'signal')
1 files changed, 14 insertions, 7 deletions
diff --git a/signal/signal.h b/signal/signal.h
index a51e912d083..947873ea8ec 100644
@@ -297,7 +297,6 @@ extern int sigreturn (struct sigcontext *__scp) __THROW;
extern int siginterrupt (int __sig, int __interrupt) __THROW;
# include <bits/sigstack.h>
-# include <bits/types/struct_sigstack.h>
# include <bits/types/stack_t.h>
# include <bits/ss_flags.h>
# if defined __USE_XOPEN || defined __USE_XOPEN2K8
@@ -305,12 +304,6 @@ extern int siginterrupt (int __sig, int __interrupt) __THROW;
# include <sys/ucontext.h>
-/* Run signals handlers on the stack specified by SS (if not NULL).
- If OSS is not NULL, it is filled in with the old signal stack status.
- This interface is obsolete and on many platform not implemented. */
-extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
- __THROW __attribute_deprecated__;
/* Alternate signal handler stack interface.
This interface should always be preferred over `sigstack'. */
extern int sigaltstack (const struct sigaltstack *__restrict __ss,
@@ -318,6 +311,20 @@ extern int sigaltstack (const struct sigaltstack *__restrict __ss,
#endif /* Use POSIX.1-2008 or X/Open Unix. */
+#if ((defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+ || defined __USE_MISC)
+# include <bits/types/struct_sigstack.h>
+#if ((defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+ || defined __USE_MISC)
+/* Run signals handlers on the stack specified by SS (if not NULL).
+ If OSS is not NULL, it is filled in with the old signal stack status.
+ This interface is obsolete and on many platform not implemented. */
+extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
+ __THROW __attribute_deprecated__;
/* Simplified interface for signal management. */