main.c (02a1602e62a7edc010130bc58f1be7ec1669af06) | main.c (e6e5906b6e0a81718066ca43aef57515026c6624) |
---|---|
1/* 2 * qemu user main 3 * 4 * Copyright (c) 2003 Fabrice Bellard 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or --- 1398 unchanged lines hidden (view full) --- 1407 cpu_dump_state(env, stderr, fprintf, 0); 1408 exit (1); 1409 } 1410 process_pending_signals (env); 1411 } 1412} 1413#endif 1414 | 1/* 2 * qemu user main 3 * 4 * Copyright (c) 2003 Fabrice Bellard 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or --- 1398 unchanged lines hidden (view full) --- 1407 cpu_dump_state(env, stderr, fprintf, 0); 1408 exit (1); 1409 } 1410 process_pending_signals (env); 1411 } 1412} 1413#endif 1414 |
1415#ifdef TARGET_M68K 1416 1417void cpu_loop(CPUM68KState *env) 1418{ 1419 int trapnr; 1420 unsigned int n; 1421 target_siginfo_t info; 1422 TaskState *ts = env->opaque; 1423 1424 for(;;) { 1425 trapnr = cpu_m68k_exec(env); 1426 switch(trapnr) { 1427 case EXCP_ILLEGAL: 1428 { 1429 if (ts->sim_syscalls) { 1430 uint16_t nr; 1431 nr = lduw(env->pc + 2); 1432 env->pc += 4; 1433 do_m68k_simcall(env, nr); 1434 } else { 1435 goto do_sigill; 1436 } 1437 } 1438 break; 1439 case EXCP_HALTED: 1440 /* Semihosing syscall. */ 1441 env->pc += 2; 1442 do_m68k_semihosting(env, env->dregs[0]); 1443 break; 1444 case EXCP_LINEA: 1445 case EXCP_LINEF: 1446 case EXCP_UNSUPPORTED: 1447 do_sigill: 1448 info.si_signo = SIGILL; 1449 info.si_errno = 0; 1450 info.si_code = TARGET_ILL_ILLOPN; 1451 info._sifields._sigfault._addr = env->pc; 1452 queue_signal(info.si_signo, &info); 1453 break; 1454 case EXCP_TRAP0: 1455 { 1456 ts->sim_syscalls = 0; 1457 n = env->dregs[0]; 1458 env->pc += 2; 1459 env->dregs[0] = do_syscall(env, 1460 n, 1461 env->dregs[1], 1462 env->dregs[2], 1463 env->dregs[3], 1464 env->dregs[4], 1465 env->dregs[5], 1466 env->dregs[6]); 1467 } 1468 break; 1469 case EXCP_INTERRUPT: 1470 /* just indicate that signals should be handled asap */ 1471 break; 1472 case EXCP_ACCESS: 1473 { 1474 info.si_signo = SIGSEGV; 1475 info.si_errno = 0; 1476 /* XXX: check env->error_code */ 1477 info.si_code = TARGET_SEGV_MAPERR; 1478 info._sifields._sigfault._addr = env->mmu.ar; 1479 queue_signal(info.si_signo, &info); 1480 } 1481 break; 1482 case EXCP_DEBUG: 1483 { 1484 int sig; 1485 1486 sig = gdb_handlesig (env, TARGET_SIGTRAP); 1487 if (sig) 1488 { 1489 info.si_signo = sig; 1490 info.si_errno = 0; 1491 info.si_code = TARGET_TRAP_BRKPT; 1492 queue_signal(info.si_signo, &info); 1493 } 1494 } 1495 break; 1496 default: 1497 fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", 1498 trapnr); 1499 cpu_dump_state(env, stderr, fprintf, 0); 1500 abort(); 1501 } 1502 process_pending_signals(env); 1503 } 1504} 1505#endif /* TARGET_M68K */ 1506 |
|
1415void usage(void) 1416{ 1417 printf("qemu-" TARGET_ARCH " version " QEMU_VERSION ", Copyright (c) 2003-2005 Fabrice Bellard\n" 1418 "usage: qemu-" TARGET_ARCH " [-h] [-g] [-d opts] [-L path] [-s size] program [arguments...]\n" 1419 "Linux CPU emulator (compiled for %s emulation)\n" 1420 "\n" 1421 "-h print this help\n" 1422 "-g port wait gdb connection to port\n" --- 257 unchanged lines hidden (view full) --- 1680 if (i != 12 && i != 6 && i != 13) 1681 env->msr[i] = (regs->msr >> i) & 1; 1682 } 1683 env->nip = regs->nip; 1684 for(i = 0; i < 32; i++) { 1685 env->gpr[i] = regs->gpr[i]; 1686 } 1687 } | 1507void usage(void) 1508{ 1509 printf("qemu-" TARGET_ARCH " version " QEMU_VERSION ", Copyright (c) 2003-2005 Fabrice Bellard\n" 1510 "usage: qemu-" TARGET_ARCH " [-h] [-g] [-d opts] [-L path] [-s size] program [arguments...]\n" 1511 "Linux CPU emulator (compiled for %s emulation)\n" 1512 "\n" 1513 "-h print this help\n" 1514 "-g port wait gdb connection to port\n" --- 257 unchanged lines hidden (view full) --- 1772 if (i != 12 && i != 6 && i != 13) 1773 env->msr[i] = (regs->msr >> i) & 1; 1774 } 1775 env->nip = regs->nip; 1776 for(i = 0; i < 32; i++) { 1777 env->gpr[i] = regs->gpr[i]; 1778 } 1779 } |
1780#elif defined(TARGET_M68K) 1781 { 1782 m68k_def_t *def; 1783 def = m68k_find_by_name("cfv4e"); 1784 if (def == NULL) { 1785 cpu_abort(cpu_single_env, 1786 "Unable to find m68k CPU definition\n"); 1787 } 1788 cpu_m68k_register(cpu_single_env, def); 1789 env->pc = regs->pc; 1790 env->dregs[0] = regs->d0; 1791 env->dregs[1] = regs->d1; 1792 env->dregs[2] = regs->d2; 1793 env->dregs[3] = regs->d3; 1794 env->dregs[4] = regs->d4; 1795 env->dregs[5] = regs->d5; 1796 env->dregs[6] = regs->d6; 1797 env->dregs[7] = regs->d7; 1798 env->aregs[0] = regs->a0; 1799 env->aregs[1] = regs->a1; 1800 env->aregs[2] = regs->a2; 1801 env->aregs[3] = regs->a3; 1802 env->aregs[4] = regs->a4; 1803 env->aregs[5] = regs->a5; 1804 env->aregs[6] = regs->a6; 1805 env->aregs[7] = regs->usp; 1806 env->sr = regs->sr; 1807 ts->sim_syscalls = 1; 1808 } |
|
1688#elif defined(TARGET_MIPS) 1689 { 1690 int i; 1691 1692 for(i = 0; i < 32; i++) { 1693 env->gpr[i] = regs->regs[i]; 1694 } 1695 env->PC = regs->cp0_epc; --- 25 unchanged lines hidden --- | 1809#elif defined(TARGET_MIPS) 1810 { 1811 int i; 1812 1813 for(i = 0; i < 32; i++) { 1814 env->gpr[i] = regs->regs[i]; 1815 } 1816 env->PC = regs->cp0_epc; --- 25 unchanged lines hidden --- |