Commit 31fca6ab60f8ee8062bf59d54ba4d88832064ff1

Authored by j_mayer
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,6 +834,15 @@ int main(int argc, char **argv)
834 } else 834 } else
835 if (!strcmp(r, "g")) { 835 if (!strcmp(r, "g")) {
836 use_gdbstub = 1; 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 } else 846 } else
838 { 847 {
839 usage(); 848 usage();
@@ -846,16 +855,26 @@ int main(int argc, char **argv) @@ -846,16 +855,26 @@ int main(int argc, char **argv)
846 /* Zero out regs */ 855 /* Zero out regs */
847 memset(regs, 0, sizeof(struct target_pt_regs)); 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 #if defined(TARGET_I386) 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 #elif defined(TARGET_PPC) 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 #else 871 #else
856 #error unsupported CPU 872 #error unsupported CPU
857 #endif 873 #endif
  874 + }
858 875
  876 + /* NOTE: we need to init the CPU at this stage to get
  877 + qemu_host_page_size */
859 env = cpu_init(cpu_model); 878 env = cpu_init(cpu_model);
860 879
861 printf("Starting %s with qemu\n----------------\n", filename); 880 printf("Starting %s with qemu\n----------------\n", filename);
@@ -997,6 +1016,14 @@ int main(int argc, char **argv) @@ -997,6 +1016,14 @@ int main(int argc, char **argv)
997 #elif defined(TARGET_PPC) 1016 #elif defined(TARGET_PPC)
998 { 1017 {
999 int i; 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 env->nip = regs->nip; 1027 env->nip = regs->nip;
1001 for(i = 0; i < 32; i++) { 1028 for(i = 0; i < 32; i++) {
1002 env->gpr[i] = regs->gpr[i]; 1029 env->gpr[i] = regs->gpr[i];