From 5c8c67810a9df8fdcd7ca286cb2266d5d3536309 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Sat, 22 Nov 2014 18:42:35 +0100 Subject: Passing params to main() --- kernel/syscalls.c | 10 +++++++--- userspace/simple.c | 11 +++++------ userspace/sys/Makefile | 3 +++ userspace/sys/crt0.S | 7 ------- 4 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 userspace/sys/Makefile 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