aboutsummaryrefslogtreecommitdiff
path: root/src/utils/syscall.c
blob: f3b14c4dc9842fbaa8aacc3496a956f92d70c46e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "syscall.h"
#include "gdt.h"
#include "libc/stdio.h"

void syscall(){
    int call_number;
    asm("movl %%eax, %0":"=m"(call_number));
    int user_ds=gdt_user_ds_base();
    if(call_number==1){
        int msg_addr;
        asm("movl %%ebx, %0":"=m"(msg_addr));
        char *msg=(char*)user_ds+msg_addr;
        print(msg);
    }
    else{
        print("Syscall ");
        printi(call_number);
        print(" unknown");
    }
}