system calls

This commit is contained in:
Matheus
2022-08-15 21:52:57 -03:00
parent 21e6a0ad1a
commit 432e85b837
17 changed files with 187 additions and 26 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
objects := $(patsubst %.c,%.o,$(wildcard *.c))
subdirs := mm sched
subdirs := mm sched syscalls
OBJPATH=$(OBJDIR)
export
+6 -2
View File
@@ -162,9 +162,9 @@ void sched_timerhook(arch_regs* regs){
spinlock_release(&running.lock);
memcpy(current->regs, regs, sizeof(arch_regs));
arch_regs_saveextra(&current->extraregs);
spinlock_acquire(&currentqueue->lock);
@@ -198,6 +198,8 @@ static void switch_thread(thread_t* thread){
arch_setkernelstack(thread->kernelstack);
arch_regs_setupextra(&thread->extraregs);
arch_switchcontext(thread->regs);
__builtin_unreachable();
@@ -291,6 +293,8 @@ void sched_runinit(){
printf("ELF load error: %s\n", strerror(ret));
_panic("Could not load init", 0);
}
thread->extraregs.gsbase = 0xFFFFFFFFDEADBEEF;
switch_thread(thread);
+12
View File
@@ -0,0 +1,12 @@
objects := $(patsubst %.c,%.o,$(wildcard *.c))
subdirs :=
OBJPATH=$(OBJDIR)
export
all: $(subdirs) $(objects)
for subdir in $(subdirs) ; do $(MAKE) -C $${subdir} ; done
%.o: %.c
$(CC) $(CFLAGS) -o $@ $<
mkdir -p $(OBJPATH)
cp $@ $(OBJPATH)/$@
+29
View File
@@ -0,0 +1,29 @@
#include <kernel/syscalls.h>
#include <kernel/alloc.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
syscallret syscall_libc_log(char* str){
syscallret ret;
char* buf = alloc(strlen(str) + 1);
if(!buf){
ret.errno = ENOMEM;
ret.ret = -1;
return ret;
}
strcpy(buf, str);
printf("%s", str);
ret.errno = 0;
ret.ret = 0;
free(buf);
return ret;
}