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