Add sigaltstack() prototype - Round 2
Joel Sherrill
joel.sherrill@oarcorp.com
Fri Aug 15 16:04:00 GMT 2014
On 8/15/2014 9:32 AM, Corinna Vinschen wrote:
> On Aug 15 09:20, Joel Sherrill wrote:
>> On 8/15/2014 8:46 AM, Corinna Vinschen wrote:
>>> On Aug 15 08:26, Joel Sherrill wrote:
>>>> 2014-08-15 Joel Sherrill <...>
>>>>
>>>> * libc/include/sys/signal.h: Add sigaltstack() support.
>>> Shouldn't this patch define the available flags, too?
>> You are correct. It should. Obviously the code we were compiling didn't
>> use them. :)
>>
>> Attached is v3. Values follow those in glibc. Same ChangeLog.
> Uhm, I'm sorry, but...
No reason to be sorry. It is a review. :)
>> Index: newlib/libc/include/sys/signal.h
>> ===================================================================
>> RCS file: /cvs/src/src/newlib/libc/include/sys/signal.h,v
>> retrieving revision 1.22
>> diff -u -r1.22 signal.h
>> --- newlib/libc/include/sys/signal.h 26 Oct 2012 09:23:46 -0000 1.22
>> +++ newlib/libc/include/sys/signal.h 15 Aug 2014 14:20:10 -0000
>> @@ -104,6 +104,23 @@
>> #define sa_sigaction _signal_handlers._sigaction
>> #endif
>>
>> +#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
>> +/*
>> + * Possible values for ss_flags in stack_t below.
>> + */
>> +#define SS_ONSTACK 0x1
>> +#define SS_ONSTACK 0x2
> ...that's SS_DISABLE 0x2, right?
Right.
I need to slow down on a Friday morning. I am ready to get out in the
pretty weather. :(
And FWIW the use of tabs vs spaces in defining constants in this file
is very inconsistent.
> POSIX also defines SIGSTKSZ and MINSIGSTKSZ.
And checking the signal.h Open Group page, there is also SA_ONSTACK. The
SA_xxx constants are in OS specific sections so I added this only to the
RTEMS section with the same guards.
> I'm wondering if we
> shouldn't add default values here if the variables aren't already
> defined. Or would that rather be something for the target specific
> config?
They should be target specific but we could default them if not defined
in <sys/features.h>. <sys/features.h> is already included so that is already
a dependency.
My CentOS 6.x defines them in <asm/signal.h> to this:
#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192
Those seem reasonable enough as defaults the target can override.
Attached is another revision. Don't fret over catching my mistakes. It
is part of the process.
>
> Corinna
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill@OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
-------------- next part --------------
Index: newlib/libc/include/sys/signal.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/sys/signal.h,v
retrieving revision 1.22
diff -u -r1.22 signal.h
--- newlib/libc/include/sys/signal.h 26 Oct 2012 09:23:46 -0000 1.22
+++ newlib/libc/include/sys/signal.h 15 Aug 2014 16:03:12 -0000
@@ -71,9 +71,12 @@
/* 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 @@
#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(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
More information about the Newlib
mailing list