diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index 996a9ff..87eaf92 100644 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -236,7 +236,7 @@ memset((void *)((programHeader[i].phVaddr & 0xFFFFF000) + x),0x0,0x1000); } - _current->oInfo.vmStart = 0x80000000;//((programHeader[i].phVaddr & 0xFFFFF000) + 0x1900000); + _current->oInfo.vmStart = 0x80000000; _current->td.vm_daddr = (char *)(programHeader[i].phVaddr & 0xFFFFF000); /* Now Load Section To Memory */ fseek(tmpFd,programHeader[i].phOffset,0); @@ -252,47 +252,14 @@ } /* Set Virtual Memory Start */ - _current->oInfo.vmStart = 0x80000000;//((programHeader[i].phVaddr & 0xFFFFF000) + 0x1900000); + _current->oInfo.vmStart = 0x80000000; _current->td.vm_daddr = (char *)(programHeader[i].phVaddr & 0xFFFFF000); - //0xC800000 + /* Set Up Stack Space */ for (x = 1;x < 100;x++) { - vmm_remapPage(vmmFindFreePage(_current->id),STACK_ADDR - (x * 0x1000),PAGE_DEFAULT | PAGE_STACK); + vmm_remapPage(vmmFindFreePage(_current->id),STACK_ADDR - (x * 0x1000),PAGE_DEFAULT | PAGE_STACK); } - /* Task Stack 0xD000 bytes long */ - /* - vmm_remapPage(vmmFindFreePage(_current->id),0x5DC000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5DB000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5DA000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D9000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D8000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D7000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D6000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D5000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D4000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D3000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D2000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D1000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5D0000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5CF000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5CE000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5CD000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5CC000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5CB000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5CA000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C9000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C8000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C7000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C6000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C5000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C4000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C3000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C2000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C1000,PAGE_DEFAULT | PAGE_STACK); - vmm_remapPage(vmmFindFreePage(_current->id),0x5C0000,PAGE_DEFAULT | PAGE_STACK); - */ - /* Kernel Stack 0x2000 bytes long */ vmm_remapPage(vmmFindFreePage(_current->id),0x5BC000,KERNEL_PAGE_DEFAULT | PAGE_STACK); vmm_remapPage(vmmFindFreePage(_current->id),0x5BB000,KERNEL_PAGE_DEFAULT | PAGE_STACK); @@ -307,8 +274,8 @@ _current->tss.ss2 = 0x0; _current->tss.eip = (long)binaryHeader->eEntry; _current->tss.eflags = 0x206; - _current->tss.esp = STACK_ADDR - 12;//0xCBE8000-12;//0x5DD000-12; - _current->tss.ebp = STACK_ADDR;//0xCBE8000;//0x5DD000; + _current->tss.esp = STACK_ADDR - 12; + _current->tss.ebp = STACK_ADDR; _current->tss.esi = 0x0; _current->tss.edi = 0x0; @@ -323,7 +290,7 @@ _current->tss.ldt = 0x18; _current->tss.trace_bitmap = 0x0000; _current->tss.io_map = 0x8000; - + sched_setStatus(_current->id,READY); kfree(binaryHeader); @@ -332,11 +299,10 @@ tmp = (uInt32 *)_current->tss.esp0 - 5; tmp[0] = binaryHeader->eEntry; - tmp[3] = STACK_ADDR - 12;//0xCBE8000-12;//0x5DD000-12; - // - 2 - tmp = (uInt32 *)STACK_ADDR - 2;//0xCBE8000 - 2;//0x5DD000 - 2; - //tmp[0] = argc; - //1 + tmp[3] = STACK_ADDR - 12; + + tmp = (uInt32 *)STACK_ADDR - 2; + if (_current->id > 4) kprintf("argv[0]: [%s]\n",argv[0]); kprintf("argv: [0x%X]\n",argv); @@ -422,14 +388,14 @@ /* Load The Program Header(s) */ if ((programHeader = (elfProgramHeader *)kmalloc(sizeof(elfProgramHeader)*binaryHeader->ePhnum)) == 0x0) endTask(_current->id); - + assert(programHeader); fseek(tmpFd,binaryHeader->ePhoff,0); fread(programHeader,(sizeof(elfProgramHeader)*binaryHeader->ePhnum),1,tmpFd); if ((sectionHeader = (elfSectionHeader *)kmalloc(sizeof(elfSectionHeader)*binaryHeader->eShnum)) == 0x0) endTask(_current->id); - + assert(sectionHeader); fseek(tmpFd,binaryHeader->eShoff,0); fread(sectionHeader,sizeof(elfSectionHeader)*binaryHeader->eShnum,1,tmpFd); @@ -445,7 +411,7 @@ Allocate Memory Im Going To Have To Make This Load Memory With Correct Settings so it helps us in the future */ - for (x=0;x<(programHeader[i].phMemsz);x += 0x1000) { + for (x = 0x0;x < (programHeader[i].phMemsz);x += 0x1000) { /* Make readonly and read/write !!! */ if (vmm_remapPage(vmmFindFreePage(_current->id),((programHeader[i].phVaddr & 0xFFFFF000) + x),PAGE_DEFAULT) == 0x0) K_PANIC("Error: Remap Page Failed"); @@ -463,25 +429,13 @@ } kprintf("setting daddr\n"); if (binaryHeader->eEntry >= programHeader[i].phVaddr && binaryHeader->eEntry < (programHeader[i].phVaddr + programHeader[i].phMemsz)) { - /* - text_size = seg_size; - text_addr = seg_addr; - entry = (u_long)hdr->e_entry; - */ - // kprintf("A[0x%X:0x%X:0x%X]",seg_size,seg_addr,seg_addr + seg_size); + /* We're suposed to do something here? */ } else { - /* - data_size = seg_size; - data_addr = seg_addr; - */ - // kprintf("B[0x%X:0x%X:0x%X]",seg_size,seg_addr,seg_addr + seg_size); - //_current->td.vm_daddr = (programHeader[i].phVaddr & 0xFFFFF000); _current->td.vm_dsize = seg_size >> PAGE_SHIFT; _current->td.vm_daddr = (char *)seg_addr; } - //_current->oInfo.vmStart = 0x80000000;//((programHeader[i].phVaddr & 0xFFFFF000) + 0x1900000); _current->oInfo.vmStart = ((programHeader[i].phVaddr & 0xFFFFF000) + 0xA900000); break; case PT_DYNAMIC: @@ -523,19 +477,13 @@ /* Adjust iframe */ tmp = (uInt32 *)_current->tss.esp0 - 5; tmp[0] = binaryHeader->eEntry; - tmp[3] = STACK_ADDR - 12; //0xCBE8000-12;//0x5DD000-12; - // - 2 - tmp = (uInt32 *)STACK_ADDR - 2;//0xCBE8000 - 2;//0x5DD000 - 2; - //tmp[0] = argc; - //1 - /* - if (_current->id > 4) - kprintf("argv[0]: [%s]\n",argv[0]); - */ + tmp[3] = STACK_ADDR - 12; + + tmp = (uInt32 *)STACK_ADDR - 2; kprintf("argv: [0x%X]\n",argv); tmp[0] = (u_int32_t)argv; tmp[1] = (u_int32_t)argv; - + /* Now That We Relocated The Binary We Can Unmap And Free Header Info */ kfree(binaryHeader); kfree(programHeader); @@ -546,4 +494,3 @@ /*** END ***/ -