diff options
| -rw-r--r-- | kernel/syscalls.c | 10 | ||||
| -rw-r--r-- | userspace/simple.c | 11 | ||||
| -rw-r--r-- | userspace/sys/Makefile | 3 | ||||
| -rw-r--r-- | userspace/sys/crt0.S | 7 |
4 files changed, 15 insertions, 16 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c index f85cfce..06caf2d 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -239,10 +239,14 @@ int syscall_execve(char *name, char **argv, char **env) } */ + static char arg1[]="x";; + static char arg2[]="blah"; + static char arg3[]="foo"; + static char *args[]={arg1,arg2,arg3}; + + asm("push %0" :: "r" (args)); //argv + asm("push $3");//argc - // autorun "user-space" prog - asm("push $10");//argv TODO: addresse - asm("push $20"); //argc TODO: real number of params! asm("push $0x800080"); asm("ret"); diff --git a/userspace/simple.c b/userspace/simple.c index fa809a8..01d46e8 100644 --- a/userspace/simple.c +++ b/userspace/simple.c @@ -1,15 +1,14 @@ int main(int argc, char **argv) { - int i; - for(i=0;i<5;i++) + int i; + printf("argv: 0x%08X\n",argv); + for(i=0;i<argc;i++) { - - puts("dupa"); - + printf("param %i: %08X: %s\n",i,argv[i],argv[i]); } + puts("bye"); - return 0; } diff --git a/userspace/sys/Makefile b/userspace/sys/Makefile new file mode 100644 index 0000000..7dde55a --- /dev/null +++ b/userspace/sys/Makefile @@ -0,0 +1,3 @@ +CC=i686-foolos-gcc +clean: + -rm *.o diff --git a/userspace/sys/crt0.S b/userspace/sys/crt0.S index 48eadd9..33e5d32 100644 --- a/userspace/sys/crt0.S +++ b/userspace/sys/crt0.S @@ -5,15 +5,8 @@ _start: -push $0 -call sbrk - -#push $[_BSS_END_] -#call sbrk - call main - push %eax call _exit |
