diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/syscalls.c | 17 | ||||
| -rw-r--r-- | kernel/task.c | 3 | ||||
| -rw-r--r-- | kernel/usermode.c | 23 |
3 files changed, 15 insertions, 28 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 642f04a..c025b06 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -151,12 +151,23 @@ int copy_args(char **in, char **out) } -int syscall_execve(char *name, char **argv1, char **env1) +int syscall_execve(char *name, char **argv, char **env) { + #ifdef LOG_SYSCALLS - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"execve (name=0x%08X(%s), argvs=0x%08X, env=0x%08X)", name,name,argv1,env1); + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"execve (name=0x%08X(%s), argvs=0x%08X, env=0x%08X)", name,name,argv,env); #endif + int arg_count=0; + while(argv[arg_count]!=NULL)arg_count++; + + char **argv1=kballoc(1); + char **env1=kballoc(1); + + copy_args(argv,argv1); + copy_args(env,env1); + + uint32_t alloc; uint32_t entry_global=load_elf(name,&alloc); task_set_brk(alloc); @@ -172,7 +183,6 @@ int syscall_execve(char *name, char **argv1, char **env1) /* try to move this to asm */ //asm volatile("jmp ."); asm volatile("mov $0x8fff000,%esp"); // set stack at high end of process image - int arg_count=0; asm volatile ("push %0" :: "r" (argv1)); asm volatile ("push %0" :: "r" (arg_count)); @@ -184,7 +194,6 @@ int syscall_execve(char *name, char **argv1, char **env1) asm volatile ("sti"); asm volatile ("ret"); - // this is never reached! } diff --git a/kernel/task.c b/kernel/task.c index 91a2c83..5373133 100644 --- a/kernel/task.c +++ b/kernel/task.c @@ -159,9 +159,6 @@ volatile void task_init(pdirectory *dir) current_task=0; switch_to_user_mode(); - - //syscall_execve("/bin/foolshell",argv_init,env_init); - //syscall_execve("/bin/tput",argv,env); } diff --git a/kernel/usermode.c b/kernel/usermode.c index 745cef1..1c7a726 100644 --- a/kernel/usermode.c +++ b/kernel/usermode.c @@ -56,34 +56,15 @@ void install_tss(int cpu_no){ void switch_to_user_mode() { -// char text[]="[internal] "; - asm_usermode(); -// write(1,text,11); - - while(1); // will not be reached? -// write(1,text,11); } char *argv_init[]={"/bin/init",NULL}; -char *env_init[]={NULL}; +char *env_init[]={"var1=dupa","var2=mundl",NULL}; // THIS WILL BE RUN IN RING 3! void userfunc() { - execve("/bin/init",argv_init,env_init); - - for(int i=0;i<3;i++) - { - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"we are usermode!"); - } - - - char text[]="syscalling!"; - write(1,text,10); - - while(1) - { - } + while(1); // we should never get here. } |
