static __constructor__ void __init_xeno_interface(void) { T_CTSK pk_ctsk; ER err; __uitron_muxid = xeno_bind_skin(uITRON_SKIN_MAGIC, "uitron", "xeno_uitron"); __uitron_muxid = __xn_mux_shifted_id(__uitron_muxid); /* Shadow the main thread. */ pk_ctsk.stksz = 0; pk_ctsk.itskpri = 0; /* non-RT shadow. */ err = shd_tsk(1, &pk_ctsk); if (err) { fprintf(stderr, "Xenomai uITRON skin init: shd_tsk() failed, status %d", err); exit(EXIT_FAILURE); } }
void __init_xeno_interface(void) { __native_muxid = xeno_bind_skin(XENO_SKIN_MAGIC, "native", "xeno_native"); #ifdef CONFIG_XENO_HW_DIRECT_TSC native_timer_init(__native_muxid); #endif /* CONFIG_XENO_HW_DIRECT_TSC */ __native_muxid = __xn_mux_shifted_id(__native_muxid); /* Allocate a TSD key for indexing self task pointers. */ if (pthread_key_create(&__native_tskey, &__flush_tsd) != 0) { fprintf(stderr, "Xenomai: failed to allocate new TSD key?!\n"); exit(1); } }
static __constructor__ void __init_xeno_interface(void) { int err; __native_muxid = xeno_bind_skin(XENO_SKIN_MAGIC, "native", "xeno_native"); __native_muxid = __xn_mux_shifted_id(__native_muxid); if (fork_handler_registered) return; err = pthread_atfork(NULL, NULL, &__init_xeno_interface); if (err) { fprintf(stderr, "Xenomai native skin init: " "pthread_atfork: %s\n", strerror(err)); exit(EXIT_FAILURE); } fork_handler_registered = 1; }
static __constructor__ void __init_xeno_interface(void) { u_long err, tid; __psos_muxid = xeno_bind_skin(PSOS_SKIN_MAGIC, "psos", "xeno_psos"); err = XENOMAI_SYSCALL2(__xn_sys_info, __psos_muxid, &__psos_sysinfo); if (err) { fprintf(stderr, "Xenomai pSOS skin init: cannot retrieve sysinfo, status %ld", err); exit(EXIT_FAILURE); } __psos_muxid = __xn_mux_shifted_id(__psos_muxid); /* Shadow the main thread. */ err = t_shadow("MAIN", 0, 0, &tid); if (err) { fprintf(stderr, "Xenomai pSOS skin init: t_shadow() failed, status %ld", err); exit(EXIT_FAILURE); } }
void __init_xeno_interface(void) { u_long err, tid; __psos_muxid = xeno_bind_skin(PSOS_SKIN_MAGIC, "psos", "xeno_psos"); err = XENOMAI_SYSCALL2(__xn_sys_info, __psos_muxid, &__psos_sysinfo); if (err) { fprintf(stderr, "Xenomai pSOS skin init: cannot retrieve sysinfo, status %ld", err); exit(EXIT_FAILURE); } __psos_muxid = __xn_mux_shifted_id(__psos_muxid); /* Shadow the main thread. mlock the whole memory for the time of the syscall, in order to avoid the SIGXCPU signal. */ if (mlockall(MCL_CURRENT | MCL_FUTURE)) { perror("Xenomai pSOS skin init: mlockall() failed"); exit(EXIT_FAILURE); } err = t_shadow("MAIN", 0, 0, &tid); if (err) { fprintf(stderr, "Xenomai pSOS skin init: t_shadow() failed, status %ld", err); exit(EXIT_FAILURE); } #ifndef CONFIG_XENO_PSOS_AUTO_MLOCKALL if (munlockall()) { perror("Xenomai pSOS skin init: munlockall"); exit(EXIT_FAILURE); } #endif /* !CONFIG_XENO_PSOS_AUTO_MLOCKALL */ }
static __constructor__ void __init_xeno_interface(void) { __vrtx_muxid = xeno_bind_skin(VRTX_SKIN_MAGIC, "vrtx", "xeno_vrtx"); __vrtx_muxid = __xn_mux_shifted_id(__vrtx_muxid); }
static __constructor__ void __init_posix_interface(void) { struct sched_param parm; int policy; int muxid, err; const char *noshadow; rt_print_auto_init(1); muxid = xeno_bind_skin(PSE51_SKIN_MAGIC, "POSIX", "xeno_posix"); #ifdef XNARCH_HAVE_NONPRIV_TSC pse51_clock_init(muxid); #endif /* XNARCH_HAVE_NONPRIV_TSC */ __pse51_muxid = __xn_mux_shifted_id(muxid); muxid = XENOMAI_SYSBIND(RTDM_SKIN_MAGIC, XENOMAI_FEAT_DEP, XENOMAI_ABI_REV, NULL); if (muxid > 0) { __pse51_rtdm_muxid = __xn_mux_shifted_id(muxid); __pse51_rtdm_fd_start = FD_SETSIZE - XENOMAI_SKINCALL0(__pse51_rtdm_muxid, __rtdm_fdcount); } pse51_mutex_init(); noshadow = getenv("XENO_NOSHADOW"); if ((!noshadow || !*noshadow) && xeno_get_current() == XN_NO_HANDLE) { err = __real_pthread_getschedparam(pthread_self(), &policy, &parm); if (err) { fprintf(stderr, "Xenomai Posix skin init: " "pthread_getschedparam: %s\n", strerror(err)); exit(EXIT_FAILURE); } err = __wrap_pthread_setschedparam(pthread_self(), policy, &parm); if (err) { fprintf(stderr, "Xenomai Posix skin init: " "pthread_setschedparam: %s\n", strerror(err)); exit(EXIT_FAILURE); } } if (fork_handler_registered) return; err = pthread_atfork(NULL, NULL, &__init_posix_interface); if (err) { fprintf(stderr, "Xenomai Posix skin init: " "pthread_atfork: %s\n", strerror(err)); exit(EXIT_FAILURE); } fork_handler_registered = 1; if (sizeof(struct __shadow_mutex) > sizeof(pthread_mutex_t)) { fprintf(stderr, "sizeof(pthread_mutex_t): %d <" " sizeof(shadow_mutex): %d !\n", (int) sizeof(pthread_mutex_t), (int) sizeof(struct __shadow_mutex)); exit(EXIT_FAILURE); } }
void __init_posix_interface(void) { struct xnbindreq breq; #ifndef CONFIG_XENO_LIBS_DLOPEN struct sched_param parm; int policy; #endif /* !CONFIG_XENO_LIBS_DLOPEN */ int muxid, err; rt_print_auto_init(1); muxid = xeno_bind_skin(PSE51_SKIN_MAGIC, "POSIX", "xeno_posix"); pse51_clock_init(muxid); __pse51_muxid = __xn_mux_shifted_id(muxid); breq.feat_req = XENOMAI_FEAT_DEP; breq.abi_rev = XENOMAI_ABI_REV; muxid = XENOMAI_SYSBIND(RTDM_SKIN_MAGIC, &breq); if (muxid > 0) { __rtdm_muxid = __xn_mux_shifted_id(muxid); __rtdm_fd_start = FD_SETSIZE - XENOMAI_SKINCALL0(__rtdm_muxid, __rtdm_fdcount); } /* If not dlopening, we are going to shadow the main thread, so mlock the whole memory for the time of the syscall, in order to avoid the SIGXCPU signal. */ #if defined(CONFIG_XENO_POSIX_AUTO_MLOCKALL) || !defined(CONFIG_XENO_LIBS_DLOPEN) if (mlockall(MCL_CURRENT | MCL_FUTURE)) { perror("Xenomai Posix skin init: mlockall"); exit(EXIT_FAILURE); } #endif /* auto mlockall || !dlopen */ /* Don't use auto-shadowing if we are likely invoked from dlopen. */ #ifndef CONFIG_XENO_LIBS_DLOPEN err = __STD(pthread_getschedparam(pthread_self(), &policy, &parm)); if (err) { fprintf(stderr, "Xenomai Posix skin init: " "pthread_getschedparam: %s\n", strerror(err)); exit(EXIT_FAILURE); } err = __wrap_pthread_setschedparam(pthread_self(), policy, &parm); if (err) { fprintf(stderr, "Xenomai Posix skin init: " "pthread_setschedparam: %s\n", strerror(err)); exit(EXIT_FAILURE); } #ifndef CONFIG_XENO_POSIX_AUTO_MLOCKALL if (munlockall()) { perror("Xenomai Posix skin init: munlockall"); exit(EXIT_FAILURE); } #endif /* !CONFIG_XENO_POSIX_AUTO_MLOCKALL */ #endif /* !CONFIG_XENO_LIBS_DLOPEN */ if (fork_handler_registered) return; err = pthread_atfork(NULL, NULL, &__init_posix_interface); if (err) { fprintf(stderr, "Xenomai Posix skin init: " "pthread_atfork: %s\n", strerror(err)); exit(EXIT_FAILURE); } fork_handler_registered = 1; if (sizeof(struct __shadow_mutex) > sizeof(pthread_mutex_t)) { fprintf(stderr, "sizeof(pthread_mutex_t): %d <" " sizeof(shadow_mutex): %d !\n", (int) sizeof(pthread_mutex_t), (int) sizeof(struct __shadow_mutex)); exit(EXIT_FAILURE); } }