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,7 +620,20 @@ void cpu_loop (CPUSPARCState *env) | ||
| 620 | case TT_FILL: /* window underflow */ | 620 | case TT_FILL: /* window underflow */ |
| 621 | restore_window(env); | 621 | restore_window(env); |
| 622 | break; | 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 | #endif | 637 | #endif |
| 625 | case EXCP_INTERRUPT: | 638 | case EXCP_INTERRUPT: |
| 626 | /* just indicate that signals should be handled asap */ | 639 | /* just indicate that signals should be handled asap */ |