Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/newlib
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2014-08-18 18:03:35 +0400
committerJoel Sherrill <joel.sherrill@oarcorp.com>2014-08-18 18:03:35 +0400
commit6042d39486815f8592f0efc2b72c8782835cd063 (patch)
tree7a9b3d35447ea1a27063d8bbdc953c75d7b567d7 /newlib
parent697c710dc305dca3f3674769a735cb62cf7eba92 (diff)
2014-08-18 Joel Sherrill <joel.sherrill@oarcorp.com>
* libc/include/sys/signal.h: Add sigaltstack() support.
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog4
-rw-r--r--newlib/libc/include/sys/signal.h42
2 files changed, 43 insertions, 3 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 54edfae6c..2fbd48010 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,7 @@
+2014-08-18 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * libc/include/sys/signal.h: Add sigaltstack() support.
+
2014-08-14 Bin Cheng <bin.cheng@arm.com>
* libc/stdio/findfp.c (std): Don't inline when optimizing for code size.
diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h
index 3d6ba0831..bbc2cd988 100644
--- a/newlib/libc/include/sys/signal.h
+++ b/newlib/libc/include/sys/signal.h
@@ -71,9 +71,12 @@ typedef struct {
/* 3.3.8 Synchronously Accept a Signal, P1003.1b-1993, p. 76 */
-#define SA_NOCLDSTOP 1 /* Do not generate SIGCHLD when children stop */
-#define SA_SIGINFO 2 /* Invoke the signal catching function with */
- /* three arguments instead of one. */
+#define SA_NOCLDSTOP 0x1 /* Do not generate SIGCHLD when children stop */
+#define SA_SIGINFO 0x2 /* Invoke the signal catching function with */
+ /* three arguments instead of one. */
+#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
+#define SA_ONSTACK 0x4 /* Signal delivery will be on a separate stack. */
+#endif
/* struct sigaction notes from POSIX:
*
@@ -104,6 +107,34 @@ struct sigaction {
#define sa_sigaction _signal_handlers._sigaction
#endif
+#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
+/*
+ * Minimum and default signal stack constants. Allow for target overrides
+ * from <sys/features.h>.
+ */
+#ifndef MINSIGSTKSZ
+#define MINSIGSTKSZ 2048
+#endif
+#ifndef SIGSTKSZ
+#define SIGSTKSZ 8192
+#endif
+
+/*
+ * Possible values for ss_flags in stack_t below.
+ */
+#define SS_ONSTACK 0x1
+#define SS_DISABLE 0x2
+
+/*
+ * Structure used in sigaltstack call.
+ */
+typedef struct sigaltstack {
+ void *ss_sp; /* Stack base or pointer. */
+ int ss_flags; /* Flags. */
+ size_t ss_size; /* Stack size. */
+} stack_t;
+#endif
+
#elif defined(__CYGWIN__)
#include <cygwin/signal.h>
#else
@@ -161,6 +192,11 @@ int _EXFUN(sigpending, (sigset_t *));
int _EXFUN(sigsuspend, (const sigset_t *));
int _EXFUN(sigpause, (int));
+
+#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
+int _EXFUN(sigaltstack, (const stack_t *__restrict, stack_t *__restrict));
+#endif
+
#if defined(_POSIX_THREADS)
#ifdef __CYGWIN__
# ifndef _CYGWIN_TYPES_H