about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--conform/data/signal.h-data4
-rw-r--r--signal/signal.h21
3 files changed, 26 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 85722c8f86..865c7e9960 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2017-05-23  Joseph Myers  <joseph@codesourcery.com>
 
+	[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].
+
 	[BZ #21457]
 	* sysdeps/arm/sys/ucontext.h: Do not include <signal.h>,
 	<bits/sigstack.h>, <bits/types/struct_sigstack.h> or
diff --git a/conform/data/signal.h-data b/conform/data/signal.h-data
index 3651e86ae1..8fbe3ac55d 100644
--- a/conform/data/signal.h-data
+++ b/conform/data/signal.h-data
@@ -141,10 +141,12 @@ element stack_t {void*} ss_sp
 element stack_t size_t ss_size
 element stack_t int ss_flags
 
+#  if !defined XOPEN2K8 && !defined POSIX2008
 type {struct sigstack}
 
 element {struct sigstack} int ss_onstack
 element {struct sigstack} {void*} ss_sp
+#  endif
 # endif
 
 # ifndef XPG4
@@ -249,7 +251,7 @@ function int sigqueue (pid_t, int, const union sigval)
 function int sigrelse (int)
 function void (*sigset (int, void(*)(int)))(int)
 # endif
-# if !defined POSIX
+# if defined XPG42 || defined UNIX98
 function int sigstack (struct sigstack*, struct sigstack*)
 # endif
 function int sigsuspend (const sigset_t*)
diff --git a/signal/signal.h b/signal/signal.h
index a51e912d08..947873ea8e 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -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>
 # endif
 
-/* 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>
+#endif
+
+#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__;
+#endif
+
 #ifdef __USE_XOPEN_EXTENDED
 /* Simplified interface for signal management.  */