Commit 31fca6ab60f8ee8062bf59d54ba4d88832064ff1
1 parent
b172c56a
Resynchronize darwin-user target with linux-user:
add CPU selection feature, choose the correct default CPU and set the 32/64 bits computation mode properly. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3657 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
31 additions
and
4 deletions
darwin-user/main.c
| ... | ... | @@ -834,6 +834,15 @@ int main(int argc, char **argv) |
| 834 | 834 | } else |
| 835 | 835 | if (!strcmp(r, "g")) { |
| 836 | 836 | use_gdbstub = 1; |
| 837 | + } else if (!strcmp(r, "cpu")) { | |
| 838 | + cpu_model = argv[optind++]; | |
| 839 | + if (strcmp(cpu_model, "?") == 0) { | |
| 840 | +/* XXX: implement xxx_cpu_list for targets that still miss it */ | |
| 841 | +#if defined(cpu_list) | |
| 842 | + cpu_list(stdout, &fprintf); | |
| 843 | +#endif | |
| 844 | + _exit(1); | |
| 845 | + } | |
| 837 | 846 | } else |
| 838 | 847 | { |
| 839 | 848 | usage(); |
| ... | ... | @@ -846,16 +855,26 @@ int main(int argc, char **argv) |
| 846 | 855 | /* Zero out regs */ |
| 847 | 856 | memset(regs, 0, sizeof(struct target_pt_regs)); |
| 848 | 857 | |
| 849 | - /* NOTE: we need to init the CPU at this stage to get | |
| 850 | - qemu_host_page_size */ | |
| 858 | + if (cpu_model == NULL) { | |
| 851 | 859 | #if defined(TARGET_I386) |
| 852 | - cpu_model = "qemu32"; | |
| 860 | +#ifdef TARGET_X86_64 | |
| 861 | + cpu_model = "qemu64"; | |
| 862 | +#else | |
| 863 | + cpu_model = "qemu32"; | |
| 864 | +#endif | |
| 853 | 865 | #elif defined(TARGET_PPC) |
| 854 | - cpu_model = "750"; | |
| 866 | +#ifdef TARGET_PPC64 | |
| 867 | + cpu_model = "970"; | |
| 868 | +#else | |
| 869 | + cpu_model = "750"; | |
| 870 | +#endif | |
| 855 | 871 | #else |
| 856 | 872 | #error unsupported CPU |
| 857 | 873 | #endif |
| 874 | + } | |
| 858 | 875 | |
| 876 | + /* NOTE: we need to init the CPU at this stage to get | |
| 877 | + qemu_host_page_size */ | |
| 859 | 878 | env = cpu_init(cpu_model); |
| 860 | 879 | |
| 861 | 880 | printf("Starting %s with qemu\n----------------\n", filename); |
| ... | ... | @@ -997,6 +1016,14 @@ int main(int argc, char **argv) |
| 997 | 1016 | #elif defined(TARGET_PPC) |
| 998 | 1017 | { |
| 999 | 1018 | int i; |
| 1019 | + | |
| 1020 | +#if defined(TARGET_PPC64) | |
| 1021 | +#if defined(TARGET_ABI32) | |
| 1022 | + env->msr &= ~((target_ulong)1 << MSR_SF); | |
| 1023 | +#else | |
| 1024 | + env->msr |= (target_ulong)1 << MSR_SF; | |
| 1025 | +#endif | |
| 1026 | +#endif | |
| 1000 | 1027 | env->nip = regs->nip; |
| 1001 | 1028 | for(i = 0; i < 32; i++) { |
| 1002 | 1029 | env->gpr[i] = regs->gpr[i]; | ... | ... |