summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/syscalls.c10
-rw-r--r--userspace/simple.c11
-rw-r--r--userspace/sys/Makefile3
-rw-r--r--userspace/sys/crt0.S7
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