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: |