summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-13 02:14:46 +0200
committerMiguel <m.i@gmx.at>2018-09-13 02:14:46 +0200
commit6a886cb2a4af303fae01b61a2e6590ca22bb4a3e (patch)
treeaff66570735d0869dcdf7b98ebd5aa595213c81d /kernel/syscalls.c
parentb669230cae92f061bc36f25cd01dd84d276d226b (diff)
reentrenacy for newilb
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c19
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;