/* * The following handler is part of the inner user-interface: should * remain extern. */ int cobalt_sigshadow_handler(int sig, siginfo_t *si, void *ctxt) { void *frames[SIGSHADOW_BACKTRACE_DEPTH]; int action, arg, nr, skip; if (si->si_code != SI_QUEUE) return 0; action = sigshadow_action(si->si_int); switch (action) { case SIGSHADOW_ACTION_HARDEN: XENOMAI_SYSCALL1(sc_cobalt_migrate, COBALT_PRIMARY); break; case SIGSHADOW_ACTION_BACKTRACE: arg = sigshadow_arg(si->si_int); nr = backtrace(frames, sizeof(frames) / sizeof(frames[0])); /* Skip the sighandler context. */ skip = nr > 3 ? 3 : 0; XENOMAI_SYSCALL3(sc_cobalt_backtrace, nr - skip, frames + skip, arg); break; default: return 0; } return 1; }
/* * The following handler is part of the inner user-interface: should * remain extern. */ int xeno_sigwinch_handler(int sig, siginfo_t *si, void *ctxt) { void *frames[SIGSHADOW_BACKTRACE_DEPTH]; int action, arg, nr, skip; if (si->si_code != SI_QUEUE) return 0; action = sigshadow_action(si->si_int); switch(action) { case SIGSHADOW_ACTION_HARDEN: XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_XENO_DOMAIN); break; case SIGSHADOW_ACTION_RENICE: { struct sched_param param; int policy; arg = sigshadow_arg(si->si_int); param.sched_priority = arg; policy = param.sched_priority > 0 ? SCHED_FIFO: SCHED_OTHER; pthread_setschedparam(pthread_self(), policy, ¶m); break; } case SIGSHADOW_ACTION_BACKTRACE: arg = sigshadow_arg(si->si_int); nr = backtrace(frames, sizeof(frames) / sizeof(frames[0])); /* Skip the sighandler context. */ skip = nr > 3 ? 3 : 0; XENOMAI_SYSCALL3(__xn_sys_backtrace, nr - skip, frames + skip, arg); break; default: return 0; } return 1; }
int xntrace_special(unsigned char id, unsigned long v) { return XENOMAI_SYSCALL3(__xn_sys_trace, __xntrace_op_special, id, v); }
int xntrace_user_freeze(unsigned long v, int once) { return XENOMAI_SYSCALL3(__xn_sys_trace, __xntrace_op_user_freeze, v, once); }
* - EINVAL, the member @a sigev_signo of the @b sigevent structure is an * invalid signal number; * - EAGAIN, the maximum number of timers was exceeded, recompile with a larger * value. * * @see * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/timer_create.html"> * Specification.</a> */ COBALT_IMPL(int, timer_create, (clockid_t clockid, const struct sigevent *__restrict__ evp, timer_t * __restrict__ timerid)) { int ret; ret = -XENOMAI_SYSCALL3(sc_cobalt_timer_create, clockid, evp, timerid); if (ret == 0) return 0; errno = ret; return -1; } /** * Delete a timer object. * * This service deletes the timer @a timerid. * * @param timerid identifier of the timer to be removed; *