| 476 |
void cpu_loop (CPUSPARCState *env) |
void cpu_loop (CPUSPARCState *env) |
| 477 |
{ |
{ |
| 478 |
int trapnr, ret; |
int trapnr, ret; |
| 479 |
|
target_siginfo_t info; |
| 480 |
|
|
| 481 |
while (1) { |
while (1) { |
| 482 |
trapnr = cpu_sparc_exec (env); |
trapnr = cpu_sparc_exec (env); |
| 511 |
case TT_WIN_UNF: /* window underflow */ |
case TT_WIN_UNF: /* window underflow */ |
| 512 |
restore_window(env); |
restore_window(env); |
| 513 |
break; |
break; |
| 514 |
|
case TT_TFAULT: |
| 515 |
|
case TT_DFAULT: |
| 516 |
|
{ |
| 517 |
|
info.si_signo = SIGSEGV; |
| 518 |
|
info.si_errno = 0; |
| 519 |
|
/* XXX: check env->error_code */ |
| 520 |
|
info.si_code = TARGET_SEGV_MAPERR; |
| 521 |
|
info._sifields._sigfault._addr = env->mmuregs[4]; |
| 522 |
|
queue_signal(info.si_signo, &info); |
| 523 |
|
} |
| 524 |
|
break; |
| 525 |
case 0x100: // XXX, why do we get these? |
case 0x100: // XXX, why do we get these? |
| 526 |
break; |
break; |
| 527 |
default: |
default: |