aboutsummaryrefslogtreecommitdiff
path: root/kernel/features/syscall.c
diff options
context:
space:
mode:
authorMarvin Borner2021-03-20 19:55:51 +0100
committerGitHub2021-03-20 19:55:51 +0100
commit5132bac014d63331acf61bb60b9254023f76b869 (patch)
tree8e2946b7a6630da13ee403c787f77270aeb6185d /kernel/features/syscall.c
parent435231378798819304eef427bad8e77dffea85df (diff)
parentb96c27bba0b242fc860fc9a2fcb63f121312fa7e (diff)
Merged ELF loading
Diffstat (limited to 'kernel/features/syscall.c')
-rw-r--r--kernel/features/syscall.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/features/syscall.c b/kernel/features/syscall.c
index b0b37ac..7d68d93 100644
--- a/kernel/features/syscall.c
+++ b/kernel/features/syscall.c
@@ -72,16 +72,19 @@ static void syscall_handler(struct regs *r)
case SYS_EXEC: {
char *path = (char *)r->ebx;
struct proc *proc = proc_make(PROC_PRIV_NONE);
- r->eax = (u32)bin_load(path, proc);
- if (r->eax != 0)
+ r->eax = (u32)elf_load(path, proc);
+ if (r->eax != 0) {
proc_exit(proc, -r->eax);
- // TODO: Reimplement argc,argv
- proc_stack_push(proc, 0);
- proc_yield(r);
+ } else {
+ // TODO: Reimplement argc,argv
+ proc_stack_push(proc, 0);
+ proc_yield(r);
+ }
break;
}
case SYS_EXIT: {
proc_exit(proc_current(), (int)r->ebx);
+ proc_yield(r);
break;
}
case SYS_BOOT: { // TODO: Move