summaryrefslogtreecommitdiff
path: root/kernel/src/sys/syscall.c
blob: debd70f7688b9f9be50c58189ea8bdd5b46d79ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <libk/stdio.h>
#include <syscall.h>
#include <libk/string.h>
#include <heap.h>

void syscall_handler()
{
	uint64_t rax;
	uint64_t rdi;
	uint64_t rsi;
	__asm__ __volatile__ ("mov %%rax, %0;" : "=r"(rax) : :);
	__asm__ __volatile__ ("mov %%rdi, %0;" : "=r"(rdi) : :);
	__asm__ __volatile__ ("mov %%rsi, %0;" : "=r"(rsi) : :);
	switch(rax) {
		case SYSCALL_READ:
			syscall_read();
			break;
		case SYSCALL_WRITE:
			syscall_write((char*)rdi, rsi);
			break;
		default:
			printf("invalid syscall (%d)\n", rax);
	}
}

void syscall_read()
{
	printf("syscall_read()\n");
}

void syscall_write(char* buff, size_t count)
{
	printf("syscall_write()\n");
	printf("buff = 0x%x, count = %d\n", buff, count);
}