131 |
d->sig[0] = target_sigmask; |
d->sig[0] = target_sigmask; |
132 |
d->sig[1] = sigmask >> 32; |
d->sig[1] = sigmask >> 32; |
133 |
#else |
#else |
134 |
#error host_to_target_sigset |
#warning host_to_target_sigset |
135 |
#endif |
#endif |
136 |
} |
} |
137 |
|
|
165 |
#elif TARGET_LONG_BITS == 32 && HOST_LONG_BITS == 64 && TARGET_NSIG_WORDS == 2 |
#elif TARGET_LONG_BITS == 32 && HOST_LONG_BITS == 64 && TARGET_NSIG_WORDS == 2 |
166 |
((unsigned long *)d)[0] = sigmask | ((unsigned long)(s->sig[1]) << 32); |
((unsigned long *)d)[0] = sigmask | ((unsigned long)(s->sig[1]) << 32); |
167 |
#else |
#else |
168 |
#error target_to_host_sigset |
#warning target_to_host_sigset |
169 |
#endif /* TARGET_LONG_BITS */ |
#endif /* TARGET_LONG_BITS */ |
170 |
} |
} |
171 |
|
|
1391 |
err |= __put_user(env->pc, &si->si_regs.pc); |
err |= __put_user(env->pc, &si->si_regs.pc); |
1392 |
err |= __put_user(env->npc, &si->si_regs.npc); |
err |= __put_user(env->npc, &si->si_regs.npc); |
1393 |
err |= __put_user(env->y, &si->si_regs.y); |
err |= __put_user(env->y, &si->si_regs.y); |
1394 |
for (i=0; i < 7; i++) { |
for (i=0; i < 8; i++) { |
1395 |
err |= __put_user(env->gregs[i], &si->si_regs.u_regs[i]); |
err |= __put_user(env->gregs[i], &si->si_regs.u_regs[i]); |
1396 |
} |
} |
1397 |
for (i=0; i < 7; i++) { |
for (i=0; i < 8; i++) { |
1398 |
err |= __put_user(env->regwptr[UREG_I0 + i], &si->si_regs.u_regs[i+8]); |
err |= __put_user(env->regwptr[UREG_I0 + i], &si->si_regs.u_regs[i+8]); |
1399 |
} |
} |
1400 |
err |= __put_user(mask, &si->si_mask); |
err |= __put_user(mask, &si->si_mask); |
1452 |
err |= __put_user(set->sig[i + 1], &sf->extramask[i]); |
err |= __put_user(set->sig[i + 1], &sf->extramask[i]); |
1453 |
} |
} |
1454 |
|
|
1455 |
for (i = 0; i < 7; i++) { |
for (i = 0; i < 8; i++) { |
1456 |
err |= __put_user(env->regwptr[i + UREG_L0], &sf->ss.locals[i]); |
err |= __put_user(env->regwptr[i + UREG_L0], &sf->ss.locals[i]); |
1457 |
} |
} |
1458 |
for (i = 0; i < 7; i++) { |
for (i = 0; i < 8; i++) { |
1459 |
err |= __put_user(env->regwptr[i + UREG_I0], &sf->ss.ins[i]); |
err |= __put_user(env->regwptr[i + UREG_I0], &sf->ss.ins[i]); |
1460 |
} |
} |
1461 |
if (err) |
if (err) |
1488 |
//flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0])); |
//flush_sig_insns(current->mm, (unsigned long) &(sf->insns[0])); |
1489 |
// tb_flush(env); |
// tb_flush(env); |
1490 |
} |
} |
|
//cpu_dump_state(env, stderr, fprintf, 0); |
|
1491 |
return; |
return; |
1492 |
|
|
1493 |
//sigill_and_return: |
//sigill_and_return: |
1568 |
err = __get_user(pc, &sf->info.si_regs.pc); |
err = __get_user(pc, &sf->info.si_regs.pc); |
1569 |
err |= __get_user(npc, &sf->info.si_regs.npc); |
err |= __get_user(npc, &sf->info.si_regs.npc); |
1570 |
|
|
|
// fprintf(stderr, "pc: %lx npc %lx\n", pc, npc); |
|
1571 |
if ((pc | npc) & 3) |
if ((pc | npc) & 3) |
1572 |
goto segv_and_exit; |
goto segv_and_exit; |
1573 |
|
|
1575 |
err |= __get_user(up_psr, &sf->info.si_regs.psr); |
err |= __get_user(up_psr, &sf->info.si_regs.psr); |
1576 |
|
|
1577 |
/* User can only change condition codes and FPU enabling in %psr. */ |
/* User can only change condition codes and FPU enabling in %psr. */ |
1578 |
env->psr = (up_psr & ~(PSR_ICC /* | PSR_EF */)) |
env->psr = (up_psr & (PSR_ICC /* | PSR_EF */)) |
1579 |
| (env->psr & (PSR_ICC /* | PSR_EF */)); |
| (env->psr & ~(PSR_ICC /* | PSR_EF */)); |
1580 |
fprintf(stderr, "psr: %x\n", env->psr); |
|
1581 |
env->pc = pc-4; |
env->pc = pc; |
1582 |
env->npc = pc; |
env->npc = npc; |
1583 |
err |= __get_user(env->y, &sf->info.si_regs.y); |
err |= __get_user(env->y, &sf->info.si_regs.y); |
1584 |
for (i=0; i < 7; i++) { |
for (i=0; i < 8; i++) { |
1585 |
err |= __get_user(env->gregs[i], &sf->info.si_regs.u_regs[i]); |
err |= __get_user(env->gregs[i], &sf->info.si_regs.u_regs[i]); |
1586 |
} |
} |
1587 |
for (i=0; i < 7; i++) { |
for (i=0; i < 8; i++) { |
1588 |
err |= __get_user(env->regwptr[i + UREG_I0], &sf->info.si_regs.u_regs[i+8]); |
err |= __get_user(env->regwptr[i + UREG_I0], &sf->info.si_regs.u_regs[i+8]); |
1589 |
} |
} |
1590 |
|
|
1607 |
if (err) |
if (err) |
1608 |
goto segv_and_exit; |
goto segv_and_exit; |
1609 |
|
|
|
// fprintf(stderr, "returning %lx\n", env->regwptr[0]); |
|
1610 |
return env->regwptr[0]; |
return env->regwptr[0]; |
1611 |
|
|
1612 |
segv_and_exit: |
segv_and_exit: |