Subversion Repositories HelenOS

Rev

Rev 1474 | Rev 1597 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1474 Rev 1579
Line 88... Line 88...
88
 
88
 
89
/** Dispatch system call */
89
/** Dispatch system call */
90
__native syscall_handler(__native a1, __native a2, __native a3,
90
__native syscall_handler(__native a1, __native a2, __native a3,
91
             __native a4, __native id)
91
             __native a4, __native id)
92
{
92
{
-
 
93
    __native rc;
-
 
94
    ipl_t ipl;
-
 
95
    bool exit = false;
-
 
96
 
93
    if (id < SYSCALL_END)
97
    if (id < SYSCALL_END)
94
        return syscall_table[id](a1,a2,a3,a4);
98
        rc = syscall_table[id](a1,a2,a3,a4);
95
    else
99
    else
96
        panic("Undefined syscall %d", id);
100
        panic("Undefined syscall %d", id);
-
 
101
       
-
 
102
    ipl = interrupts_disable();
-
 
103
    spinlock_lock(&THREAD->lock);
-
 
104
    if (THREAD->interrupted)
-
 
105
        exit = true;
-
 
106
    spinlock_unlock(&THREAD->lock);
-
 
107
    interrupts_restore(ipl);
-
 
108
   
-
 
109
    if (exit)
-
 
110
        thread_exit();
-
 
111
   
-
 
112
    return rc;
97
}
113
}
98
 
114
 
99
syshandler_t syscall_table[SYSCALL_END] = {
115
syshandler_t syscall_table[SYSCALL_END] = {
100
    sys_io,
116
    sys_io,
101
    sys_tls_set,
117
    sys_tls_set,