Module: xenomai-2.6
Branch: master
Commit: 6e89cb2287378a7dcbba987949d0168460dabbe7
URL:    
http://git.xenomai.org/?p=xenomai-2.6.git;a=commit;h=6e89cb2287378a7dcbba987949d0168460dabbe7

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Sat May 25 20:41:14 2013 +0200

nucleus: do not always use the noclone attribute

The noclone attribute causes warning with pre-4.6 compilers, and is not
needed for 4.7 and later, so, define a __constructor__ macro which only
resolves to __attribute__((constructor,noclone)) with gcc 4.6.

---

 include/asm-arm/fptest.h    |    2 +-
 include/asm-generic/bind.h  |    1 +
 include/nucleus/compiler.h  |    8 ++++++++
 src/skins/common/rt_print.c |    2 +-
 src/skins/native/init.c     |    6 ++----
 src/skins/posix/init.c      |    3 +--
 src/skins/posix/thread.c    |    2 +-
 src/skins/psos+/init.c      |    3 +--
 src/skins/rtdm/init.c       |    3 +--
 src/skins/uitron/init.c     |    3 +--
 src/skins/vrtx/init.c       |    6 ++----
 src/skins/vxworks/init.c    |    6 ++----
 12 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/include/asm-arm/fptest.h b/include/asm-arm/fptest.h
index 1541185..5665afb 100644
--- a/include/asm-arm/fptest.h
+++ b/include/asm-arm/fptest.h
@@ -32,7 +32,7 @@ static inline void fp_linux_end(void)
 
 static int have_vfp;
 
-static void __attribute__((constructor, noclone)) fp_init(void)
+static void __constructor__ fp_init(void)
 {
        char buffer[1024];
        FILE *f = fopen("/proc/cpuinfo", "r");
diff --git a/include/asm-generic/bind.h b/include/asm-generic/bind.h
index e002982..137a5cf 100644
--- a/include/asm-generic/bind.h
+++ b/include/asm-generic/bind.h
@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <signal.h>
+#include <nucleus/compiler.h>  /* For __constructor__ */
 
 int 
 xeno_bind_skin_opt(unsigned skin_magic, const char *skin, const char *module);
diff --git a/include/nucleus/compiler.h b/include/nucleus/compiler.h
index e33570f..30f32c7 100644
--- a/include/nucleus/compiler.h
+++ b/include/nucleus/compiler.h
@@ -35,6 +35,14 @@
 #define __deprecated_in_kernel__
 #endif /* __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) */
 
+#ifdef __IN_XENO__
+#if __GNUC__ == 4 && __GNUC_MINOR__ == 6
+#define __constructor__ __attribute__((constructor, noclone))
+#else /* Gcc not 4.6 */
+#define __constructor__ __attribute__((constructor))
+#endif /* Gcc not 4.6 */
+#endif /* In xenomai */
+
 #ifndef likely
 #if !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 96
 #define __builtin_expect(x, v)         (x)
diff --git a/src/skins/common/rt_print.c b/src/skins/common/rt_print.c
index 5977a17..dfa8b33 100644
--- a/src/skins/common/rt_print.c
+++ b/src/skins/common/rt_print.c
@@ -738,7 +738,7 @@ static void forked_child_init(void)
                spawn_printer_thread();
 }
 
-static __attribute__((constructor, noclone)) void __rt_print_init(void)
+static __constructor__ void __rt_print_init(void)
 {
        const char *value_str;
        unsigned long long period;
diff --git a/src/skins/native/init.c b/src/skins/native/init.c
index 9e4dbf3..c2f847c 100644
--- a/src/skins/native/init.c
+++ b/src/skins/native/init.c
@@ -38,8 +38,7 @@ static void __flush_tsd(void *tsd)
        free(tsd);
 }
 
-static __attribute__ ((constructor, noclone))
-void __init_native_tskey(void)
+static __constructor__ void __init_native_tskey(void)
 {
        /* Allocate a TSD key for indexing self task pointers. */
 
@@ -50,8 +49,7 @@ void __init_native_tskey(void)
 }
 #endif /* !HAVE___THREAD */
 
-static __attribute__ ((constructor, noclone))
-void __init_xeno_interface(void)
+static __constructor__ void __init_xeno_interface(void)
 {
        int err;
 
diff --git a/src/skins/posix/init.c b/src/skins/posix/init.c
index 5b1ad4e..80725c5 100644
--- a/src/skins/posix/init.c
+++ b/src/skins/posix/init.c
@@ -40,8 +40,7 @@ static int fork_handler_registered;
 int __wrap_pthread_setschedparam(pthread_t, int, const struct sched_param *);
 void pse51_clock_init(int);
 
-static __attribute__ ((constructor, noclone))
-void __init_posix_interface(void)
+static __constructor__ void __init_posix_interface(void)
 {
        struct sched_param parm;
        int policy;
diff --git a/src/skins/posix/thread.c b/src/skins/posix/thread.c
index 032181b..31055f8 100644
--- a/src/skins/posix/thread.c
+++ b/src/skins/posix/thread.c
@@ -337,7 +337,7 @@ int __wrap_pthread_kill(pthread_t thread, int sig)
        return err;
 }
 
-static __attribute__((constructor, noclone)) void pse51_thread_init(void)
+static __constructor__ void pse51_thread_init(void)
 {
        pthread_attr_init(&default_attr);
 #ifdef _CS_GNU_LIBPTHREAD_VERSION
diff --git a/src/skins/psos+/init.c b/src/skins/psos+/init.c
index c7c76a0..093058e 100644
--- a/src/skins/psos+/init.c
+++ b/src/skins/psos+/init.c
@@ -28,8 +28,7 @@ xnsysinfo_t __psos_sysinfo;
 
 unsigned psos_long_names;
 
-static __attribute__ ((constructor, noclone))
-void __init_xeno_interface(void)
+static __constructor__ void __init_xeno_interface(void)
 {
        u_long err, tid;
 
diff --git a/src/skins/rtdm/init.c b/src/skins/rtdm/init.c
index 1794ea4..52e60c8 100644
--- a/src/skins/rtdm/init.c
+++ b/src/skins/rtdm/init.c
@@ -25,8 +25,7 @@
 
 int __rtdm_muxid = -1;
 
-static __attribute__ ((constructor, noclone))
-void __init_rtdm_interface(void)
+static __constructor__ void __init_rtdm_interface(void)
 {
        /* The following call may fail; binding errors will be
           eventually caught later when the user tries to open a
diff --git a/src/skins/uitron/init.c b/src/skins/uitron/init.c
index 5b8cd45..9ef6378 100644
--- a/src/skins/uitron/init.c
+++ b/src/skins/uitron/init.c
@@ -24,8 +24,7 @@
 
 int __uitron_muxid = -1;
 
-static __attribute__ ((constructor, noclone))
-void __init_xeno_interface(void)
+static __constructor__ void __init_xeno_interface(void)
 {
        T_CTSK pk_ctsk;
        ER err;
diff --git a/src/skins/vrtx/init.c b/src/skins/vrtx/init.c
index 12ab798..c926326 100644
--- a/src/skins/vrtx/init.c
+++ b/src/skins/vrtx/init.c
@@ -36,8 +36,7 @@ static void __flush_tsd(void *tsd)
        free(tsd);
 }
 
-static __attribute__ ((constructor, noclone))
-void __init_vrtx_tskey(void)
+static __constructor__ void __init_vrtx_tskey(void)
 {
        /* Allocate a TSD key for indexing self task pointers. */
 
@@ -48,8 +47,7 @@ void __init_vrtx_tskey(void)
 }
 #endif /* !HAVE___THREAD */
 
-static __attribute__ ((constructor, noclone))
-void __init_xeno_interface(void)
+static __constructor__ void __init_xeno_interface(void)
 {
        __vrtx_muxid =
            xeno_bind_skin(VRTX_SKIN_MAGIC, "vrtx", "xeno_vrtx");
diff --git a/src/skins/vxworks/init.c b/src/skins/vxworks/init.c
index b1716e8..398adb8 100644
--- a/src/skins/vxworks/init.c
+++ b/src/skins/vxworks/init.c
@@ -36,8 +36,7 @@ static void __flush_tsd(void *tsd)
        free(tsd);
 }
 
-static __attribute__ ((constructor, noclone))
-void __init_vxworks_tskey(void)
+static __constructor__ void __init_vxworks_tskey(void)
 {
        /* Allocate a TSD key for indexing self task pointers. */
 
@@ -48,8 +47,7 @@ void __init_vxworks_tskey(void)
 }
 #endif /* !HAVE___THREAD */
 
-static __attribute__ ((constructor, noclone))
-void __init_xeno_interface(void)
+static __constructor__ void __init_xeno_interface(void)
 {
        __vxworks_muxid = xeno_bind_skin(VXWORKS_SKIN_MAGIC,
                                         "vxworks", "xeno_vxworks");


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git

Reply via email to