summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2015-05-23 23:44:44 +0200
committerMichal Idziorek <m.i@gmx.at>2015-05-23 23:44:44 +0200
commit98eb242e282650e9c6645dd2e5290e144b105bb4 (patch)
tree69963b6d1d5f51d8eaa5552f402ed34e0bd58241 /kernel/syscalls.c
parentdadd5202a3ccfd8c03fb9eb60e6a15b0fb987672 (diff)
improved params and environment passing and started snake-game :)
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c17
1 files changed, 13 insertions, 4 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!
}