diff options
| -rwxr-xr-x | build/kernel.elf | bin | 63616 -> 63824 bytes | |||
| -rw-r--r-- | build/src/kernel/proc/proc.o | bin | 117608 -> 118560 bytes | |||
| -rw-r--r-- | build/src/kernel/syscall.o | bin | 81288 -> 81848 bytes | |||
| -rw-r--r-- | src/kernel/proc/proc.cc | 15 | ||||
| -rw-r--r-- | src/kernel/syscall.cc | 1 |
5 files changed, 11 insertions, 5 deletions
diff --git a/build/kernel.elf b/build/kernel.elf Binary files differindex 448fcfe..1ccfb25 100755 --- a/build/kernel.elf +++ b/build/kernel.elf diff --git a/build/src/kernel/proc/proc.o b/build/src/kernel/proc/proc.o Binary files differindex d22780c..ef1e81e 100644 --- a/build/src/kernel/proc/proc.o +++ b/build/src/kernel/proc/proc.o diff --git a/build/src/kernel/syscall.o b/build/src/kernel/syscall.o Binary files differindex 2029868..259a780 100644 --- a/build/src/kernel/syscall.o +++ b/build/src/kernel/syscall.o diff --git a/src/kernel/proc/proc.cc b/src/kernel/proc/proc.cc index 008f740..b0ab370 100644 --- a/src/kernel/proc/proc.cc +++ b/src/kernel/proc/proc.cc @@ -144,17 +144,22 @@ int fork() } np->pagetable = VM::uvmcreate(); + if (VM::uvmcopy(p->pagetable, np->pagetable, p->sz) < 0) { - PMM::free_page(np->kstack); - PMM::free_page(np->tf); - Spinlock::acquire(&proc_lock); - np->state = UNUSED; + freeproc(np); Spinlock::release(&proc_lock); return -1; } np->sz = p->sz; + if (VM::mappages(np->pagetable, TRAPFRAME, PGSIZE, + (uint64)np->tf, PTE_R | PTE_W) < 0) + { + freeproc(np); + return -1; + } + *(np->tf) = *(p->tf); np->tf->a0 = 0; @@ -272,7 +277,7 @@ namespace ProcManager } p->pagetable = VM::uvmcreate(); - + uint64 initcode_sz = initcode_end - initcode_start; VM::uvminit(p->pagetable, (uchar *)initcode_start, initcode_sz); p->sz = PGSIZE; diff --git a/src/kernel/syscall.cc b/src/kernel/syscall.cc index 13bdbac..92b1a1b 100644 --- a/src/kernel/syscall.cc +++ b/src/kernel/syscall.cc @@ -99,6 +99,7 @@ uint64 sys_write() if (VM::copyin(proc->pagetable, buf, p + i, len) < 0) { + Drivers::uart_puts("sys_write: copyin failed\n"); return -1; } |
