Commit 7f84a7291b19aa5679ef58fdad0a81df4b8a6af0
1 parent
4c1de73d
Deliver page faults to program
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3049 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
14 additions
and
1 deletions
linux-user/main.c
... | ... | @@ -620,7 +620,20 @@ void cpu_loop (CPUSPARCState *env) |
620 | 620 | case TT_FILL: /* window underflow */ |
621 | 621 | restore_window(env); |
622 | 622 | break; |
623 | - // XXX | |
623 | + case TT_TFAULT: | |
624 | + case TT_DFAULT: | |
625 | + { | |
626 | + info.si_signo = SIGSEGV; | |
627 | + info.si_errno = 0; | |
628 | + /* XXX: check env->error_code */ | |
629 | + info.si_code = TARGET_SEGV_MAPERR; | |
630 | + if (trapnr == TT_DFAULT) | |
631 | + info._sifields._sigfault._addr = env->dmmuregs[4]; | |
632 | + else | |
633 | + info._sifields._sigfault._addr = env->tpc[env->tl]; | |
634 | + queue_signal(info.si_signo, &info); | |
635 | + } | |
636 | + break; | |
624 | 637 | #endif |
625 | 638 | case EXCP_INTERRUPT: |
626 | 639 | /* just indicate that signals should be handled asap */ | ... | ... |