Commit b1f9be3157368392b62d5c4213413d5adddd015b
1 parent
6c041c54
Add -cpu option for linux user emulation.
Only usable for PowerPC and ARM for now. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2496 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
23 additions
and
11 deletions
linux-user/main.c
... | ... | @@ -1537,13 +1537,14 @@ void cpu_loop(CPUM68KState *env) |
1537 | 1537 | void usage(void) |
1538 | 1538 | { |
1539 | 1539 | printf("qemu-" TARGET_ARCH " version " QEMU_VERSION ", Copyright (c) 2003-2007 Fabrice Bellard\n" |
1540 | - "usage: qemu-" TARGET_ARCH " [-h] [-g] [-d opts] [-L path] [-s size] program [arguments...]\n" | |
1540 | + "usage: qemu-" TARGET_ARCH " [-h] [-g] [-d opts] [-L path] [-s size] [-cpu model] program [arguments...]\n" | |
1541 | 1541 | "Linux CPU emulator (compiled for %s emulation)\n" |
1542 | 1542 | "\n" |
1543 | 1543 | "-h print this help\n" |
1544 | 1544 | "-g port wait gdb connection to port\n" |
1545 | 1545 | "-L path set the elf interpreter prefix (default=%s)\n" |
1546 | 1546 | "-s size set the stack size in bytes (default=%ld)\n" |
1547 | + "-cpu model select CPU (-cpu ? for list)\n" | |
1547 | 1548 | "\n" |
1548 | 1549 | "debug options:\n" |
1549 | 1550 | #ifdef USE_CODE_COPY |
... | ... | @@ -1567,6 +1568,7 @@ TaskState *first_task_state; |
1567 | 1568 | int main(int argc, char **argv) |
1568 | 1569 | { |
1569 | 1570 | const char *filename; |
1571 | + const char *cpu_model; | |
1570 | 1572 | struct target_pt_regs regs1, *regs = ®s1; |
1571 | 1573 | struct image_info info1, *info = &info1; |
1572 | 1574 | TaskState ts1, *ts = &ts1; |
... | ... | @@ -1581,6 +1583,7 @@ int main(int argc, char **argv) |
1581 | 1583 | /* init debug */ |
1582 | 1584 | cpu_set_log_filename(DEBUG_LOGFILE); |
1583 | 1585 | |
1586 | + cpu_model = NULL; | |
1584 | 1587 | optind = 1; |
1585 | 1588 | for(;;) { |
1586 | 1589 | if (optind >= argc) |
... | ... | @@ -1631,6 +1634,18 @@ int main(int argc, char **argv) |
1631 | 1634 | gdbstub_port = atoi(argv[optind++]); |
1632 | 1635 | } else if (!strcmp(r, "r")) { |
1633 | 1636 | qemu_uname_release = argv[optind++]; |
1637 | + } else if (!strcmp(r, "cpu")) { | |
1638 | + cpu_model = argv[optind++]; | |
1639 | + if (strcmp(cpu_model, "?") == 0) { | |
1640 | +#if defined(TARGET_PPC) | |
1641 | + ppc_cpu_list(stdout, &fprintf); | |
1642 | +#elif defined(TARGET_ARM) | |
1643 | + arm_cpu_list(); | |
1644 | +#elif defined(TARGET_MIPS) | |
1645 | + mips_cpu_list(stdout, &fprintf); | |
1646 | +#endif | |
1647 | + exit(1); | |
1648 | + } | |
1634 | 1649 | } else |
1635 | 1650 | #ifdef USE_CODE_COPY |
1636 | 1651 | if (!strcmp(r, "no-code-copy")) { |
... | ... | @@ -1756,7 +1771,9 @@ int main(int argc, char **argv) |
1756 | 1771 | #elif defined(TARGET_ARM) |
1757 | 1772 | { |
1758 | 1773 | int i; |
1759 | - cpu_arm_set_model(env, "arm926"); | |
1774 | + if (cpu_model == NULL) | |
1775 | + cpu_model = "arm926"; | |
1776 | + cpu_arm_set_model(env, cpu_model); | |
1760 | 1777 | cpsr_write(env, regs->uregs[16], 0xffffffff); |
1761 | 1778 | for(i = 0; i < 16; i++) { |
1762 | 1779 | env->regs[i] = regs->uregs[i]; |
... | ... | @@ -1783,15 +1800,9 @@ int main(int argc, char **argv) |
1783 | 1800 | int i; |
1784 | 1801 | |
1785 | 1802 | /* Choose and initialise CPU */ |
1786 | - /* XXX: CPU model (or PVR) should be provided on command line */ | |
1787 | - // ppc_find_by_name("750gx", &def); | |
1788 | - // ppc_find_by_name("750fx", &def); | |
1789 | - // ppc_find_by_name("750p", &def); | |
1790 | - ppc_find_by_name("750", &def); | |
1791 | - // ppc_find_by_name("G3", &def); | |
1792 | - // ppc_find_by_name("604r", &def); | |
1793 | - // ppc_find_by_name("604e", &def); | |
1794 | - // ppc_find_by_name("604", &def); | |
1803 | + if (cpu_model == NULL) | |
1804 | + cpu_model = "750"; | |
1805 | + ppc_find_by_name(cpu_model, &def); | |
1795 | 1806 | if (def == NULL) { |
1796 | 1807 | cpu_abort(env, |
1797 | 1808 | "Unable to find PowerPC CPU definition\n"); |
... | ... | @@ -1840,6 +1851,7 @@ int main(int argc, char **argv) |
1840 | 1851 | { |
1841 | 1852 | int i; |
1842 | 1853 | |
1854 | + /* XXX: set CPU model */ | |
1843 | 1855 | for(i = 0; i < 32; i++) { |
1844 | 1856 | env->gpr[i] = regs->regs[i]; |
1845 | 1857 | } |
... | ... |