Commit 7ed0b017 authored by bourbaki0404's avatar bourbaki0404
Browse files

error repaired by adding page fault handler to kerneltrap

Showing with 10 additions and 4 deletions
+10 -4
......@@ -113,7 +113,7 @@ exec(char *path, char **argv)
goto bad;
if(copyout(pagetable, sp, (char *)ustack, (argc+1)*sizeof(uint64)) < 0)
goto bad;
copyPgtblToKernel(p->kpagetable, pagetable, sz, 0);
// arguments to user main(argc, argv)
// argc is returned via the system call return
// value, which goes in a0.
......
#include "types.h"
#include "defs.h"
#include "proc.h"
void*
memset(void *dst, int c, uint n)
{
......@@ -30,6 +31,7 @@ memcmp(const void *v1, const void *v2, uint n)
void*
memmove(void *dst, const void *src, uint n)
{
// printf("addr:%p, n:%d\n", dst, n);
const char *s;
char *d;
......
......@@ -169,8 +169,12 @@ kerneltrap()
panic("kerneltrap: not from supervisor mode");
if(intr_get() != 0)
panic("kerneltrap: interrupts enabled");
if((which_dev = devintr()) == 0){
else if((r_scause() == 13 || r_scause() == 15) && checkcowpage(r_stval())) {
struct proc *p = myproc();
if(uvmcowcopy(r_stval()) == -1){ // 如果内存不足,则杀死进程
p->killed = 1;
}
}else if((which_dev = devintr()) == 0){
// interrupt or trap from an unknown source
printf("scause=0x%lx sepc=0x%lx stval=0x%lx\n", scause, r_sepc(), r_stval());
panic("kerneltrap");
......
No preview for this file type
File added
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment