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