Module: xenomai-2.5 Branch: master Commit: 383e13b354e6bffcde8c43dae5ea3799d4055d20 URL: http://git.xenomai.org/?p=xenomai-2.5.git;a=commit;h=383e13b354e6bffcde8c43dae5ea3799d4055d20
Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org> Date: Wed Feb 24 10:55:35 2010 +0100 Add libxenomai and a new --skin option to xeno-config --- include/asm-generic/bits/sigshadow.h | 12 +----- scripts/xeno-config.in | 72 ++++++++++++++++++++++++++++++---- src/skins/common/current.c | 6 +- src/skins/common/sigshadow.c | 10 ++++- src/skins/native/task.c | 4 +- src/skins/posix/init.c | 4 -- src/skins/posix/thread.c | 6 +- src/skins/psos+/task.c | 4 +- src/skins/uitron/task.c | 4 +- src/skins/vrtx/task.c | 2 +- src/skins/vxworks/taskLib.c | 2 +- src/testsuite/sigtest/sigtest.c | 1 + src/utils/analogy/Makefile.am | 39 ++++++++++++++----- src/utils/can/Makefile.am | 19 ++++++--- 14 files changed, 130 insertions(+), 55 deletions(-) diff --git a/include/asm-generic/bits/sigshadow.h b/include/asm-generic/bits/sigshadow.h index e07ce00..3a7c48c 100644 --- a/include/asm-generic/bits/sigshadow.h +++ b/include/asm-generic/bits/sigshadow.h @@ -1,16 +1,6 @@ #ifndef _XENO_ASM_GENERIC_BITS_SIGSHADOW_H #define _XENO_ASM_GENERIC_BITS_SIGSHADOW_H -#include <pthread.h> -#include <signal.h> +void xeno_sigshadow_install_once(void); -extern pthread_once_t xeno_sigshadow_installed; -extern struct sigaction xeno_saved_sigshadow_action; - -void xeno_sigshadow_install(void); - -static inline void sigshadow_install_once(void) -{ - pthread_once(&xeno_sigshadow_installed, xeno_sigshadow_install); -} #endif /* _XENO_ASM_GENERIC_BITS_SIGSHADOW_H */ diff --git a/scripts/xeno-config.in b/scripts/xeno-config.in index 4008048..3cbdd04 100644 --- a/scripts/xeno-config.in +++ b/scripts/xeno-config.in @@ -14,9 +14,8 @@ XENO_PREFIX="${staging}${prefix}" XENO_CC="@CC@" XENO_TARGET_ARCH="@XENO_TARGET_ARCH@" XENO_BASE_CFLAGS="-I${staging}${includedir} @XENO_USER_APP_CFLAGS@ -D__XENO__" -XENO_BASE_LDFLAGS="-L${staging}${libdir} -lpthread @XENO_USER_APP_LDFLAGS@" -XENO_POSIX_CFLAGS="-I${staging}${includedir} -I${staging}${includedir}/posix @XENO_USER_APP_CFLAGS@ -D__XENO__" -XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lpthread_rt -lpthread -lrt @XENO_USER_APP_LDFLAGS@" +XENO_BASE_LDFLAGS="-L${staging}${libdir} -lxenomai -lpthread @XENO_USER_APP_LDFLAGS@" +XENO_POSIX_LDFLAGS="-L${staging}${libdir} -lpthread_rt -lxenomai -lpthread -lrt @XENO_USER_APP_LDFLAGS@" XENO_POSIX_WRAPPERS="${staging}${libdir}/posix.wrappers" XENO_POSIX_FAST_WRAPPING="@LD_FILE_OPTION@" XENO_LIBRARY_DIR="${staging}${libdir}" @@ -42,7 +41,7 @@ posix_ldflags () usage () { cat <<EOF -Usage xeno-config OPTIONS +Usage xeno-config --skin=skinname OPTIONS Options : --help --v,--verbose @@ -50,11 +49,16 @@ Options : --cc --arch --prefix + --skin native|posix|psos|rtai|rtdm|uitron|vrtx|vxworks + --cflags + --ldflags + --lib*-dir,--libdir,--user-libdir + +Deprecated options: --xeno-cflags --xeno-ldflags --posix-cflags --posix-ldflags - --lib*-dir,--libdir,--user-libdir EOF exit $1 } @@ -96,22 +100,74 @@ while test $# -gt 0; do --prefix) echo $XENO_PREFIX ;; + --lib*-dir|--libdir|--user-libdir) + echo $XENO_LIBRARY_DIR + ;; + --skin) + skin="$2" + shift + ;; + --cflags) + case "$skin" in + native|rtdm) + echo $XENO_BASE_CFLAGS + ;; + psos|psos+|posix|rtai|uitron|vrtx|vxworks) + if [ "x$skin" = "xpsos" ]; then + skin="psos+" + fi + echo $XENO_BASE_CFLAGS -I{staging}${includedir}/$skin + ;; + "") + echo skin not set, please pass --skin before --cflags 1>&2 + exit 1 + ;; + *) + echo skin $skin unknown 1>&2 + exit 1 + ;; + esac + ;; + + --ldflags) + case "$skin" in + posix) + echo $XENO_POSIX_LDFLAGS + ;; + native|psos|psos+|rtai|uitron|vrtx|vxworks) + if [ "x$skin" = "xpsos+" ]; then + skin="psos" + fi + echo -l$skin $XENO_BASE_LDFLAGS + ;; + "") + echo skin not set, please pass --skin before --cflags 1>&2 + exit 1 + ;; + *) + echo skin $skin unknown 1>&2 + exit 1 + ;; + esac + ;; + --xeno-cflags) + echo "$1" is deprecated, use --skin=name --cflags instead 1>&2 echo $XENO_BASE_CFLAGS ;; --xeno-ldflags) + echo "$1" is deprecated, use --skin=name --ldflags instead 1>&2 echo $XENO_BASE_LDFLAGS ;; --posix-cflags) + echo "$1" is deprecated, use --skin=posix --cflags instead 1>&2 echo $XENO_POSIX_CFLAGS ;; --posix-ldflags) + echo "$1" is deprecated, use --skin=posix --ldflags instead 1>&2 posix_ldflags echo ;; - --lib*-dir|--libdir|--user-libdir) - echo $XENO_LIBRARY_DIR - ;; --help) usage 0 1>&2 ;; diff --git a/src/skins/common/current.c b/src/skins/common/current.c index 89e39c8..2922d6e 100644 --- a/src/skins/common/current.c +++ b/src/skins/common/current.c @@ -18,15 +18,15 @@ static inline void __xeno_set_current(xnhandle_t current) #else /* !HAVE___THREAD */ #include <pthread.h> -static pthread_key_t xeno_current_key; -static pthread_key_t xeno_current_mode_key; +pthread_key_t xeno_current_key; +pthread_key_t xeno_current_mode_key; static inline void __xeno_set_current(xnhandle_t current) { pthread_setspecific(xeno_current_key, (void *)current); } -static unsigned long *xeno_init_current_mode(void) +unsigned long *xeno_init_current_mode(void) { unsigned long *mode = malloc(sizeof(unsigned long)); pthread_setspecific(xeno_current_mode_key, mode); diff --git a/src/skins/common/sigshadow.c b/src/skins/common/sigshadow.c index c078f09..ddb4a52 100644 --- a/src/skins/common/sigshadow.c +++ b/src/skins/common/sigshadow.c @@ -1,7 +1,9 @@ +#include <pthread.h> +#include <signal.h> + #include <asm/xenomai/syscall.h> #include <asm-generic/xenomai/bits/sigshadow.h> -pthread_once_t xeno_sigshadow_installed = PTHREAD_ONCE_INIT; static struct sigaction xeno_saved_sigshadow_action; int xeno_sigwinch_handler(int sig, siginfo_t *si, void *ctxt) @@ -70,3 +72,9 @@ void xeno_sigshadow_install(void) if (!(xeno_saved_sigshadow_action.sa_flags & SA_NODEFER)) sigaddset(&xeno_saved_sigshadow_action.sa_mask, SIGSHADOW); } + +void xeno_sigshadow_install_once(void) +{ + static pthread_once_t sigshadow_installed = PTHREAD_ONCE_INIT; + pthread_once(&sigshadow_installed, xeno_sigshadow_install); +} diff --git a/src/skins/native/task.c b/src/skins/native/task.c index ba04a27..1dde653 100644 --- a/src/skins/native/task.c +++ b/src/skins/native/task.c @@ -71,7 +71,7 @@ static void *rt_task_trampoline(void *cookie) /* rt_task_delete requires asynchronous cancellation */ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); task = iargs->task; bulk.a1 = (u_long)task; @@ -208,7 +208,7 @@ int rt_task_shadow(RT_TASK *task, const char *name, int prio, int mode) /* rt_task_delete requires asynchronous cancellation */ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); bulk.a1 = (u_long)task; bulk.a2 = (u_long)name; diff --git a/src/skins/posix/init.c b/src/skins/posix/init.c index 14f9837..c86ab6e 100644 --- a/src/skins/posix/init.c +++ b/src/skins/posix/init.c @@ -116,8 +116,4 @@ void __init_posix_interface(void) (int) sizeof(struct __shadow_mutex)); exit(EXIT_FAILURE); } - - /* Restore default state. */ - sigaction(SIGSHADOW, &xeno_saved_sigshadow_action, NULL); - xeno_sigshadow_installed = PTHREAD_ONCE_INIT; } diff --git a/src/skins/posix/thread.c b/src/skins/posix/thread.c index d565d52..86a6c5d 100644 --- a/src/skins/posix/thread.c +++ b/src/skins/posix/thread.c @@ -68,7 +68,7 @@ int __wrap_pthread_setschedparam(pthread_t thread, return __real_pthread_setschedparam(thread, policy, param); if (!err && promoted) { - sigshadow_install_once(); + xeno_sigshadow_install_once(); xeno_set_current(); if (policy != SCHED_OTHER) XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_XENO_DOMAIN); @@ -111,7 +111,7 @@ int pthread_setschedparam_ex(pthread_t thread, } if (!err && promoted) { - sigshadow_install_once(); + xeno_sigshadow_install_once(); xeno_set_current(); if (policy != SCHED_OTHER) XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_XENO_DOMAIN); @@ -193,7 +193,7 @@ static void *__pthread_trampoline(void *arg) unsigned long *mode_buf; long err; - sigshadow_install_once(); + xeno_sigshadow_install_once(); param.sched_priority = iargs->prio; policy = iargs->policy; diff --git a/src/skins/psos+/task.c b/src/skins/psos+/task.c index 7fcdd54..89b22ed 100644 --- a/src/skins/psos+/task.c +++ b/src/skins/psos+/task.c @@ -67,7 +67,7 @@ static void *psos_task_trampoline(void *cookie) long err; pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); bulk.a1 = (u_long)iargs->name; bulk.a2 = (u_long)iargs->prio; @@ -175,7 +175,7 @@ u_long t_shadow(const char *name, /* Xenomai extension. */ xeno_fault_stack(); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); bulk.a1 = (u_long)name; bulk.a2 = (u_long)prio; diff --git a/src/skins/uitron/task.c b/src/skins/uitron/task.c index 3beff89..05f5c18 100644 --- a/src/skins/uitron/task.c +++ b/src/skins/uitron/task.c @@ -75,7 +75,7 @@ static void *uitron_task_trampoline(void *cookie) pthread_setschedparam(pthread_self(), policy, ¶m); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); mode = xeno_init_current_mode(); if (!mode) { @@ -159,7 +159,7 @@ ER shd_tsk(ID tskid, T_CTSK *pk_ctsk) /* Xenomai extension. */ pthread_setschedparam(pthread_self(), policy, ¶m); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); err = XENOMAI_SKINCALL3(__uitron_muxid, __uitron_cre_tsk, diff --git a/src/skins/vrtx/task.c b/src/skins/vrtx/task.c index dc6ff39..3ce49dc 100644 --- a/src/skins/vrtx/task.c +++ b/src/skins/vrtx/task.c @@ -94,7 +94,7 @@ static void *vrtx_task_trampoline(void *cookie) pthread_setspecific(__vrtx_tskey, tcb); #endif /* !HAVE___THREAD */ - sigshadow_install_once(); + xeno_sigshadow_install_once(); bulk.a1 = (u_long)iargs->tid; bulk.a2 = (u_long)iargs->prio; diff --git a/src/skins/vxworks/taskLib.c b/src/skins/vxworks/taskLib.c index 2c65a0d..65ab674 100644 --- a/src/skins/vxworks/taskLib.c +++ b/src/skins/vxworks/taskLib.c @@ -95,7 +95,7 @@ static void *wind_task_trampoline(void *cookie) /* wind_task_delete requires asynchronous cancellation */ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - sigshadow_install_once(); + xeno_sigshadow_install_once(); bulk.a1 = (u_long)iargs->name; bulk.a2 = (u_long)iargs->prio; diff --git a/src/testsuite/sigtest/sigtest.c b/src/testsuite/sigtest/sigtest.c index 156f736..1e80317 100644 --- a/src/testsuite/sigtest/sigtest.c +++ b/src/testsuite/sigtest/sigtest.c @@ -3,6 +3,7 @@ #include <string.h> #include <unistd.h> +#include <pthread.h> #include <sys/mman.h> #ifndef __UCLIBC__ #include <execinfo.h> diff --git a/src/utils/analogy/Makefile.am b/src/utils/analogy/Makefile.am index 3bc5d47..d695eae 100644 --- a/src/utils/analogy/Makefile.am +++ b/src/utils/analogy/Makefile.am @@ -7,25 +7,44 @@ CPPFLAGS = \ -I$(top_srcdir)/include LDFLAGS = \ - @XENO_USER_LDFLAGS@ \ - -L../../drvlib/analogy \ - -L../../skins/native \ - -L../../skins/rtdm + @XENO_USER_LDFLAGS@ analogy_config_SOURCES = analogy_config.c -analogy_config_LDADD = -lanalogy -lrtdm +analogy_config_LDADD = \ + ../../drvlib/analogy/libanalogy.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la cmd_read_SOURCES = cmd_read.c -cmd_read_LDADD = -lanalogy -lnative -lrtdm +cmd_read_LDADD = \ + ../../drvlib/analogy/libanalogy.la \ + ../../skins/native/libnative.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la cmd_write_SOURCES = cmd_write.c -cmd_write_LDADD = -lanalogy -lnative -lrtdm +cmd_write_LDADD = \ + ../../drvlib/analogy/libanalogy.la \ + ../../skins/native/libnative.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la insn_read_SOURCES = insn_read.c -insn_read_LDADD = -lanalogy -lnative -lrtdm +insn_read_LDADD = \ + ../../drvlib/analogy/libanalogy.la \ + ../../skins/native/libnative.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la insn_write_SOURCES = insn_write.c -insn_write_LDADD = -lanalogy -lnative -lrtdm +insn_write_LDADD = \ + ../../drvlib/analogy/libanalogy.la \ + ../../skins/native/libnative.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la insn_bits_SOURCES = insn_bits.c -insn_bits_LDADD = -lanalogy -lrtdm +insn_bits_LDADD = \ + ../../drvlib/analogy/libanalogy.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la diff --git a/src/utils/can/Makefile.am b/src/utils/can/Makefile.am index f7394d7..84ce563 100644 --- a/src/utils/can/Makefile.am +++ b/src/utils/can/Makefile.am @@ -8,21 +8,26 @@ CPPFLAGS = \ -I$(top_srcdir)/include LDFLAGS = \ - @XENO_USER_LDFLAGS@ \ - -L../../skins/native \ - -L../../skins/rtdm + @XENO_USER_LDFLAGS@ rtcanconfig_SOURCES = rtcanconfig.c -rtcanconfig_LDADD = -lrtdm - +rtcanconfig_LDADD = \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la rtcanrecv_SOURCES = rtcanrecv.c -rtcanrecv_LDADD = -lnative -lrtdm +rtcanrecv_LDADD = \ + ../../skins/native/libnative.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la rtcansend_SOURCES = rtcansend.c -rtcansend_LDADD = -lnative -lrtdm +rtcansend_LDADD = \ + ../../skins/native/libnative.la \ + ../../skins/rtdm/librtdm.la \ + ../../skins/common/libxenomai.la _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git