Revision 9e0e2f96
b/linux-user/main.c | ||
---|---|---|
1341 | 1341 |
{ |
1342 | 1342 |
target_siginfo_t info; |
1343 | 1343 |
int trapnr; |
1344 |
uint32_t ret;
|
|
1344 |
target_ulong ret;
|
|
1345 | 1345 |
|
1346 | 1346 |
for(;;) { |
1347 | 1347 |
cpu_exec_start(env); |
... | ... | |
1704 | 1704 |
* PPC ABI uses overflow flag in cr0 to signal an error |
1705 | 1705 |
* in syscalls. |
1706 | 1706 |
*/ |
1707 |
#if 0 |
|
1708 |
printf("syscall %d 0x%08x 0x%08x 0x%08x 0x%08x\n", env->gpr[0], |
|
1709 |
env->gpr[3], env->gpr[4], env->gpr[5], env->gpr[6]); |
|
1710 |
#endif |
|
1711 | 1707 |
env->crf[0] &= ~0x1; |
1712 | 1708 |
ret = do_syscall(env, env->gpr[0], env->gpr[3], env->gpr[4], |
1713 | 1709 |
env->gpr[5], env->gpr[6], env->gpr[7], |
1714 | 1710 |
env->gpr[8], 0, 0); |
1715 |
if (ret == (uint32_t)(-TARGET_QEMU_ESIGRETURN)) {
|
|
1711 |
if (ret == (target_ulong)(-TARGET_QEMU_ESIGRETURN)) {
|
|
1716 | 1712 |
/* Returning from a successful sigreturn syscall. |
1717 | 1713 |
Avoid corrupting register state. */ |
1718 | 1714 |
break; |
1719 | 1715 |
} |
1720 |
if (ret > (uint32_t)(-515)) {
|
|
1716 |
if (ret > (target_ulong)(-515)) {
|
|
1721 | 1717 |
env->crf[0] |= 0x1; |
1722 | 1718 |
ret = -ret; |
1723 | 1719 |
} |
1724 | 1720 |
env->gpr[3] = ret; |
1725 |
#if 0 |
|
1726 |
printf("syscall returned 0x%08x (%d)\n", ret, ret); |
|
1727 |
#endif |
|
1728 | 1721 |
break; |
1729 | 1722 |
case POWERPC_EXCP_STCX: |
1730 | 1723 |
if (do_store_exclusive(env)) { |
Also available in: Unified diff