Subversion Repositories HelenOS-historic

Rev

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

Rev 1579 Rev 1597
Line 45... Line 45...
45
#include <ddi/ddi.h>
45
#include <ddi/ddi.h>
46
#include <security/cap.h>
46
#include <security/cap.h>
47
#include <syscall/copy.h>
47
#include <syscall/copy.h>
48
#include <sysinfo/sysinfo.h>
48
#include <sysinfo/sysinfo.h>
49
#include <console/console.h>
49
#include <console/console.h>
-
 
50
#include <console/klog.h>
50
 
51
 
51
/** Print using kernel facility
52
/** Print using kernel facility
52
 *
53
 *
53
 * Some simulators can print only through kernel. Userspace can use
54
 * Some simulators can print only through kernel. Userspace can use
54
 * this syscall to facilitate it.
55
 * this syscall to facilitate it.
Line 89... Line 90...
89
/** Dispatch system call */
90
/** Dispatch system call */
90
__native syscall_handler(__native a1, __native a2, __native a3,
91
__native syscall_handler(__native a1, __native a2, __native a3,
91
             __native a4, __native id)
92
             __native a4, __native id)
92
{
93
{
93
    __native rc;
94
    __native rc;
94
    ipl_t ipl;
-
 
95
    bool exit = false;
-
 
96
 
95
 
97
    if (id < SYSCALL_END)
96
    if (id < SYSCALL_END)
98
        rc = syscall_table[id](a1,a2,a3,a4);
97
        rc = syscall_table[id](a1,a2,a3,a4);
99
    else
98
    else {
100
        panic("Undefined syscall %d", id);
99
        klog_printf("TASK %lld: Unknown syscall id %d",TASK->taskid,id);
-
 
100
        task_kill(TASK->taskid);
-
 
101
        thread_exit();
-
 
102
    }
101
       
103
       
102
    ipl = interrupts_disable();
-
 
103
    spinlock_lock(&THREAD->lock);
-
 
104
    if (THREAD->interrupted)
104
    if (THREAD->interrupted)
105
        exit = true;
-
 
106
    spinlock_unlock(&THREAD->lock);
-
 
107
    interrupts_restore(ipl);
-
 
108
   
-
 
109
    if (exit)
-
 
110
        thread_exit();
105
        thread_exit();
111
   
106
   
112
    return rc;
107
    return rc;
113
}
108
}
114
 
109