From 0e402637492f34a4d0e1302fbe34344e19bc4813 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Thu, 27 Nov 2014 00:29:45 +0100 Subject: Progs at vmem=0x8048000 and Improved Console Ouput --- kernel/syscalls.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'kernel/syscalls.c') diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 5939cff..765316b 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -106,7 +106,7 @@ int syscall_write(int file, char *buf, int len) for(int i=0;ie_ident[0]!=0x7f||elf->e_ident[1]!='E'||elf->e_ident[2]!='L'||elf->e_ident[3]!='F') panic(FOOLOS_MODULE_NAME,"ELF mismatch!?"); @@ -300,7 +304,7 @@ int syscall_execve(char *name, char **argv, char **env) // iterate over section headers for(int phidx=0;phidxe_phnum;phidx++) { - Elf32_Phdr *phdr=0x800000+elf->e_phoff+phidx*elf->e_phentsize; + Elf32_Phdr *phdr=vaddr+elf->e_phoff+phidx*elf->e_phentsize; if(phidx==0) { @@ -325,7 +329,7 @@ int syscall_execve(char *name, char **argv, char **env) log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"bss: 0x%08X-0x%08X",phdr->p_vaddr+phdr->p_filesz,phdr->p_vaddr+phdr->p_memsz); // let's copy the rw- data block - uint32_t *data=0x800000+phdr->p_offset; + uint32_t *data=vaddr+phdr->p_offset; for(uint32_t *addr=phdr->p_vaddr; addr<=phdr->p_vaddr+phdr->p_filesz; addr++) { *addr=*data; @@ -344,18 +348,24 @@ int syscall_execve(char *name, char **argv, char **env) } - + int i=0; do{ - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"envvar %d : 0x%08X : %s" ,i,environ[i],environ[i]); + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"envr %d : 0x%08X : %s" ,i,env[i],env[i]); i++; - }while(environ[i]!=NULL); - + }while(env[i]!=NULL); - asm("mov $0xf00000,%esp"); // set stack pointer - asm("push %0" :: "r" (argvcopy)); + int argc=0; + do{ + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"arg %d : 0x%08X : %s" ,argc,argv[argc],argv[argc]); + argc++; + }while(argv[argc]!=NULL); + + asm("mov $0x08248000,%esp"); // set stack pointer // 2 mb over start. + + asm("push %0" :: "r" (argv)); asm("push %0" :: "r" (argc)); - asm("push %0" :: "r" (environ)); + asm("push %0" :: "r" (env)); // push addr and return to it asm("push %0"::"r"(elf->e_entry)); -- cgit v1.2.3