/trunk/kernel/generic/include/syscall/syscall.h |
---|
37,7 → 37,7 |
typedef enum { |
SYS_IO = 0, |
SYS_TLS_SET = 1, /* Hardcoded in AMD64, IA32 uspace - psthread.S */ |
SYS_TLS_SET = 1, /* Hardcoded in AMD64, IA32 uspace - fibril.S */ |
SYS_THREAD_CREATE, |
SYS_THREAD_EXIT, |
SYS_THREAD_GET_ID, |
73,12 → 73,13 |
#include <arch/types.h> |
typedef unative_t (*syshandler_t)(unative_t, unative_t, unative_t, unative_t); |
typedef unative_t (*syshandler_t)(unative_t, unative_t, unative_t, unative_t, |
unative_t, unative_t); |
extern syshandler_t syscall_table[SYSCALL_END]; |
extern unative_t syscall_handler(unative_t a1, unative_t a2, unative_t a3, |
unative_t a4, unative_t id); |
extern unative_t sys_tls_set(unative_t addr); |
extern unative_t syscall_handler(unative_t, unative_t, unative_t, unative_t, |
unative_t, unative_t, unative_t); |
extern unative_t sys_tls_set(unative_t); |
#endif |
/trunk/kernel/generic/src/syscall/syscall.c |
---|
92,15 → 92,15 |
} |
/** Dispatch system call */ |
unative_t syscall_handler(unative_t a1, unative_t a2, unative_t a3, unative_t a4, |
unative_t id) |
unative_t syscall_handler(unative_t a1, unative_t a2, unative_t a3, |
unative_t a4, unative_t a5, unative_t a6, unative_t id) |
{ |
unative_t rc; |
if (id < SYSCALL_END) |
rc = syscall_table[id](a1, a2, a3, a4); |
rc = syscall_table[id](a1, a2, a3, a4, a5, a6); |
else { |
klog_printf("TASK %llu: Unknown syscall id %d", TASK->taskid, |
klog_printf("TASK %llu: Unknown syscall id %llx", TASK->taskid, |
id); |
task_kill(TASK->taskid); |
thread_exit(); |
/trunk/uspace/lib/libc/include/syscall.h |
---|
31,7 → 31,8 |
*/ |
/** |
* @file |
* @brief Syscall function declaration for architectures that don't inline syscalls. |
* @brief Syscall function declaration for architectures that don't |
* inline syscalls. |
*/ |
#ifndef LIBC_SYSCALL_H_ |
40,7 → 41,9 |
#include <sys/types.h> |
#include <kernel/syscall/syscall.h> |
extern sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, const sysarg_t p4, const syscall_t id); |
extern sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, |
const sysarg_t p3, const sysarg_t p4, const sysarg_t p5, const sysarg_t p6, |
const syscall_t id); |
#endif |
/trunk/uspace/lib/libc/include/libc.h |
---|
39,11 → 39,14 |
#include <kernel/syscall/syscall.h> |
#include <libarch/syscall.h> |
#define __SYSCALL0(id) __syscall(0, 0, 0, 0, id) |
#define __SYSCALL1(id, p1) __syscall(p1, 0, 0, 0, id) |
#define __SYSCALL2(id, p1, p2) __syscall(p1, p2, 0, 0, id) |
#define __SYSCALL3(id, p1, p2, p3) __syscall(p1, p2, p3, 0, id) |
#define __SYSCALL4(id, p1, p2, p3, p4) __syscall(p1, p2, p3, p4, id) |
#define __SYSCALL0(id) __syscall(0, 0, 0, 0, 0, 0, id) |
#define __SYSCALL1(id, p1) __syscall(p1, 0, 0, 0, 0, 0, id) |
#define __SYSCALL2(id, p1, p2) __syscall(p1, p2, 0, 0, 0, 0, id) |
#define __SYSCALL3(id, p1, p2, p3) __syscall(p1, p2, p3, 0, 0, 0, id) |
#define __SYSCALL4(id, p1, p2, p3, p4) __syscall(p1, p2, p3, p4, 0, 0, id) |
#define __SYSCALL5(id, p1, p2, p3, p4, p5) __syscall(p1, p2, p3, p4, p5, 0, id) |
#define __SYSCALL6(id, p1, p2, p3, p4, p5, p6) \ |
__syscall(p1, p2, p3, p4, p5, p6,id) |
extern void __main(void); |
extern void __io_init(void); |