void kthread_set_syscall_retval ( kthread_t *kthread, int ret_val ) { if ( !kthread ) kthread = active_thread; ASSERT ( kthread ); arch_syscall_set_retval ( kthread_get_context(kthread), ret_val ); }
/*! * Process syscalls * (syscall is forwarded from arch interrupt subsystem to k_syscall) */ void k_syscall ( uint irqn ) { int id, retval; void *act_thr, *context, *params; ASSERT ( irqn == SOFTWARE_INTERRUPT ); act_thr = k_get_active_thread (); context = k_get_thread_context ( act_thr ); id = arch_syscall_get_id ( context ); ASSERT ( id >= 0 && id < SYSFUNCS ); params = arch_syscall_get_params ( context ); retval = k_sysfunc[id] ( params ); if ( id != THREAD_EXIT ) arch_syscall_set_retval ( context, retval ); }