diff options
Diffstat (limited to 'kernel/syscalls.c')
| -rw-r--r-- | kernel/syscalls.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 71feeb7..f092a75 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -219,24 +219,25 @@ int copy_args(char **in, char **out) int syscall_execve(char *name, char **argv, char **env,int pid) { - + + //TODO copy environment to target pages somehow// int arg_count=0; while(argv[arg_count]!=NULL)arg_count++; - char **argv1=0x08000000; + char **argv1=VMEM_USER_ENV; if(argv!=NULL) { - copy_args(argv,argv1); +// copy_args(argv,argv1); } else{ argv1=NULL; } - char **env1=0x08020000; + char **env1=VMEM_USER_ENV+1024; if(env!=NULL) { - copy_args(env,env1); +// copy_args(env,env1); } else{ @@ -246,14 +247,13 @@ int syscall_execve(char *name, char **argv, char **env,int pid) uint32_t alloc; uint32_t entry_global=load_elf(name,&alloc); task_set_brk(alloc); - fixme("fix brk!"); if(!entry_global) { return -1; // errror loading } - uint32_t *stack=0x08fff000; + uint32_t *stack=VMEM_USER_STACK_TOP-3*32; *++stack=argv1; *++stack=arg_count; *++stack=env1; @@ -263,7 +263,7 @@ int syscall_execve(char *name, char **argv, char **env,int pid) /* try to move this to asm */ // asm volatile("jmp ."); // loop forever //klog("returning to jump addy (0x%08X)", entry_global); -/* + /* asm volatile("mov $0x08fff000,%esp"); // set stack at high end of process image asm volatile ("push %0" :: "r" (argv1)); @@ -352,8 +352,9 @@ int syscall_isatty(int file,int none1,int none2) uint32_t fuckalloc=0x8500000; // TODO: per process basis! -uint32_t syscall_sbrk(int incr, int none1, int none2) +uint32_t syscall_sbrk(uint32_t incr, int none1, int none2) { + fixme("fake syscall_sbrk! 0x%08X",incr); uint32_t alloc=task_get_brk(); uint32_t oldalloc=fuckalloc; |
