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]; | ... | ... |