With the recent addition of a prototype for sigaltstack() and
associated data structures to newlib, the declaration in
rtems_bsdnet_internal.h is no longer needed. But to ease the
transition, I added an autoconf probe to determine if it
was needed or not.

After 4.11, I would like to rip this and and <sys/cpuset.h>
checks out.

---
 cpukit/configure.ac                                | 12 ++++++++++++
 cpukit/libnetworking/rtems/rtems_bsdnet_internal.h | 10 ++++++----
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/cpukit/configure.ac b/cpukit/configure.ac
index 56815e2..fcf3437 100644
--- a/cpukit/configure.ac
+++ b/cpukit/configure.ac
@@ -116,6 +116,12 @@ RTEMS_CHECK_FUNC([pthread_getattr_np],[
   #include <pthread.h>])
 AC_CHECK_HEADERS([sys/cpuset.h])
 
+# This was added to newlib in August 2014 to improve conformance.
+# Disable use of internal definition if it is present.
+RTEMS_CHECK_FUNC([sigaltstack],[
+  #define _GNU_SOURCE
+  #include <signal.h>])
+
 # Mandated by POSIX, not declared in some versions of newlib.
 AC_CHECK_DECLS([getrusage],,,[#include sys/resource.h])
 
@@ -236,6 +242,12 @@ RTEMS_CPUOPT([__RTEMS_HAVE_SYS_CPUSET_H__],
   [1],
   [indicate if <sys/cpuset.h> is present in toolset])
 
+## Header file differences that need to be known in .h after install
+RTEMS_CPUOPT([__RTEMS_HAVE_DECL_SIGALTSTACK__],
+  [test x"${ac_cv_have_decl_sigaltstack}" = x"yes"],
+  [1],
+  [indicate if <signal.h> in toolset has sigaltstack()])
+
 ## This improves both the size and coverage analysis.
 RTEMS_CPUOPT([__RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH__],
   [test x"${RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH}" = x"1"],
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h 
b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
index 05e54b2..567cc8a 100644
--- a/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
+++ b/cpukit/libnetworking/rtems/rtems_bsdnet_internal.h
@@ -83,11 +83,13 @@ typedef     quad_t *        qaddr_t;
 typedef void __sighandler_t(int);
 typedef        __sighandler_t  *sig_t; /* type of pointer to a signal function 
*/
 #define NSIG    32
-struct sigaltstack {
-       char    *ss_sp;                 /* signal stack base */
-       int     ss_size;                /* signal stack length */
-       int     ss_flags;               /* SS_DISABLE and/or SS_ONSTACK */
+#if (__RTEMS_HAVE_DECL_SIGALTSTACK__ == 0)
+struct sigaltstack {
+       char    *ss_sp;                 /* signal stack base */
+       int     ss_size;                /* signal stack length */
+       int     ss_flags;               /* SS_DISABLE and/or SS_ONSTACK */
 };
+#endif
 
 #ifdef _KERNEL
 typedef        int             boolean_t;
-- 
1.9.3

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to