update name of code to labcodes
This commit is contained in:
87
labcodes/lab7/user/libs/syscall.c
Normal file
87
labcodes/lab7/user/libs/syscall.c
Normal file
@@ -0,0 +1,87 @@
|
||||
#include <defs.h>
|
||||
#include <unistd.h>
|
||||
#include <stdarg.h>
|
||||
#include <syscall.h>
|
||||
|
||||
#define MAX_ARGS 5
|
||||
|
||||
static inline int
|
||||
syscall(int num, ...) {
|
||||
va_list ap;
|
||||
va_start(ap, num);
|
||||
uint32_t a[MAX_ARGS];
|
||||
int i, ret;
|
||||
for (i = 0; i < MAX_ARGS; i ++) {
|
||||
a[i] = va_arg(ap, uint32_t);
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
asm volatile (
|
||||
"int %1;"
|
||||
: "=a" (ret)
|
||||
: "i" (T_SYSCALL),
|
||||
"a" (num),
|
||||
"d" (a[0]),
|
||||
"c" (a[1]),
|
||||
"b" (a[2]),
|
||||
"D" (a[3]),
|
||||
"S" (a[4])
|
||||
: "cc", "memory");
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
sys_exit(int error_code) {
|
||||
return syscall(SYS_exit, error_code);
|
||||
}
|
||||
|
||||
int
|
||||
sys_fork(void) {
|
||||
return syscall(SYS_fork);
|
||||
}
|
||||
|
||||
int
|
||||
sys_wait(int pid, int *store) {
|
||||
return syscall(SYS_wait, pid, store);
|
||||
}
|
||||
|
||||
int
|
||||
sys_yield(void) {
|
||||
return syscall(SYS_yield);
|
||||
}
|
||||
|
||||
int
|
||||
sys_kill(int pid) {
|
||||
return syscall(SYS_kill, pid);
|
||||
}
|
||||
|
||||
int
|
||||
sys_getpid(void) {
|
||||
return syscall(SYS_getpid);
|
||||
}
|
||||
|
||||
int
|
||||
sys_putc(int c) {
|
||||
return syscall(SYS_putc, c);
|
||||
}
|
||||
|
||||
int
|
||||
sys_pgdir(void) {
|
||||
return syscall(SYS_pgdir);
|
||||
}
|
||||
|
||||
int
|
||||
sys_gettime(void) {
|
||||
return syscall(SYS_gettime);
|
||||
}
|
||||
|
||||
void
|
||||
sys_lab6_set_priority(uint32_t priority)
|
||||
{
|
||||
syscall(SYS_lab6_set_priority, priority);
|
||||
}
|
||||
|
||||
int
|
||||
sys_sleep(unsigned int time) {
|
||||
return syscall(SYS_sleep, time);
|
||||
}
|
||||
Reference in New Issue
Block a user