Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/syscall/syscall.c

    r5bcf1f9 r057d21a  
    4545#include <debug.h>
    4646#include <ddi/device.h>
    47 #include <interrupt.h>
    4847#include <ipc/sysipc.h>
    4948#include <synch/futex.h>
     
    5756
    5857/** Dispatch system call */
    59 sysarg_t syscall_handler(sysarg_t a1, sysarg_t a2, sysarg_t a3,
    60     sysarg_t a4, sysarg_t a5, sysarg_t a6, sysarg_t id)
     58unative_t syscall_handler(unative_t a1, unative_t a2, unative_t a3,
     59    unative_t a4, unative_t a5, unative_t a6, unative_t id)
    6160{
    62         /* Do userpace accounting */
    63         irq_spinlock_lock(&THREAD->lock, true);
    64         thread_update_accounting(true);
    65         irq_spinlock_unlock(&THREAD->lock, true);
    66        
     61        unative_t rc;
     62
    6763#ifdef CONFIG_UDEBUG
    68         /*
    69          * An istate_t-compatible record was created on the stack by the
    70          * low-level syscall handler. This is the userspace space state
    71          * structure.
    72          */
    73         THREAD->udebug.uspace_state = istate_get(THREAD);
     64        bool debug;
    7465
    7566        /*
    7667         * Early check for undebugged tasks. We do not lock anything as this
    77          * test need not be precise in either direction.
     68         * test need not be precise in either way.
    7869         */
    79         if (THREAD->udebug.active)
     70        debug = THREAD->udebug.active;
     71       
     72        if (debug) {
    8073                udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, 0, false);
     74        }
    8175#endif
    8276       
    83         sysarg_t rc;
    8477        if (id < SYSCALL_END) {
    8578                rc = syscall_table[id](a1, a2, a3, a4, a5, a6);
    8679        } else {
    8780                printf("Task %" PRIu64": Unknown syscall %#" PRIxn, TASK->taskid, id);
    88                 task_kill_self(true);
     81                task_kill(TASK->taskid);
     82                thread_exit();
    8983        }
    9084       
     
    9387       
    9488#ifdef CONFIG_UDEBUG
    95         if (THREAD->udebug.active) {
     89        if (debug) {
    9690                udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, rc, true);
    97                
     91       
    9892                /*
    9993                 * Stopping point needed for tasks that only invoke
     
    10498                udebug_stoppable_end();
    10599        }
    106 
    107         /* Clear userspace state pointer */
    108         THREAD->udebug.uspace_state = NULL;
    109100#endif
    110        
    111         /* Do kernel accounting */
    112         irq_spinlock_lock(&THREAD->lock, true);
    113         thread_update_accounting(false);
    114         irq_spinlock_unlock(&THREAD->lock, true);
    115101       
    116102        return rc;
     
    125111        (syshandler_t) sys_thread_exit,
    126112        (syshandler_t) sys_thread_get_id,
    127         (syshandler_t) sys_thread_usleep,
    128113       
    129114        (syshandler_t) sys_task_get_id,
    130115        (syshandler_t) sys_task_set_name,
    131         (syshandler_t) sys_task_kill,
    132         (syshandler_t) sys_task_exit,
    133116        (syshandler_t) sys_program_spawn_loader,
    134117       
    135118        /* Synchronization related syscalls. */
    136         (syshandler_t) sys_futex_sleep,
     119        (syshandler_t) sys_futex_sleep_timeout,
    137120        (syshandler_t) sys_futex_wakeup,
    138121        (syshandler_t) sys_smc_coherence,
     
    156139        (syshandler_t) sys_ipc_poke,
    157140        (syshandler_t) sys_ipc_hangup,
    158         (syshandler_t) sys_ipc_connect_kbox,
    159        
     141        (syshandler_t) sys_ipc_register_irq,
     142        (syshandler_t) sys_ipc_unregister_irq,
     143
    160144        /* Event notification syscalls. */
    161145        (syshandler_t) sys_event_subscribe,
     
    169153        (syshandler_t) sys_physmem_map,
    170154        (syshandler_t) sys_iospace_enable,
    171         (syshandler_t) sys_register_irq,
    172         (syshandler_t) sys_unregister_irq,
     155        (syshandler_t) sys_preempt_control,
    173156       
    174157        /* Sysinfo syscalls */
    175         (syshandler_t) sys_sysinfo_get_tag,
    176         (syshandler_t) sys_sysinfo_get_value,
    177         (syshandler_t) sys_sysinfo_get_data_size,
    178         (syshandler_t) sys_sysinfo_get_data,
     158        (syshandler_t) sys_sysinfo_valid,
     159        (syshandler_t) sys_sysinfo_value,
    179160       
    180161        /* Debug calls */
    181162        (syshandler_t) sys_debug_enable_console,
    182         (syshandler_t) sys_debug_disable_console
     163        (syshandler_t) sys_debug_disable_console,
     164       
     165        (syshandler_t) sys_ipc_connect_kbox
    183166};
    184167
Note: See TracChangeset for help on using the changeset viewer.