Commit 068abdc8a57023eeafe1025b964a50f8a39929b4

Authored by j_mayer
1 parent 8a84de23

Fix inconsistent end conditions in ppc_find_xxx functions.

(crash reported by Andreas Farber when using default CPU).


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3293 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 9 additions and 8 deletions
target-ppc/translate_init.c
@@ -5872,11 +5872,12 @@ int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def) @@ -5872,11 +5872,12 @@ int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def)
5872 5872
5873 int ppc_find_by_name (const unsigned char *name, ppc_def_t **def) 5873 int ppc_find_by_name (const unsigned char *name, ppc_def_t **def)
5874 { 5874 {
5875 - int i, ret; 5875 + int i, max, ret;
5876 5876
5877 ret = -1; 5877 ret = -1;
5878 *def = NULL; 5878 *def = NULL;
5879 - for (i = 0; strcmp(ppc_defs[i].name, "default") != 0; i++) { 5879 + max = sizeof(ppc_defs) / sizeof(ppc_def_t);
  5880 + for (i = 0; i < max; i++) {
5880 if (strcasecmp(name, ppc_defs[i].name) == 0) { 5881 if (strcasecmp(name, ppc_defs[i].name) == 0) {
5881 *def = &ppc_defs[i]; 5882 *def = &ppc_defs[i];
5882 ret = 0; 5883 ret = 0;
@@ -5889,11 +5890,12 @@ int ppc_find_by_name (const unsigned char *name, ppc_def_t **def) @@ -5889,11 +5890,12 @@ int ppc_find_by_name (const unsigned char *name, ppc_def_t **def)
5889 5890
5890 int ppc_find_by_pvr (uint32_t pvr, ppc_def_t **def) 5891 int ppc_find_by_pvr (uint32_t pvr, ppc_def_t **def)
5891 { 5892 {
5892 - int i, ret; 5893 + int i, max, ret;
5893 5894
5894 ret = -1; 5895 ret = -1;
5895 *def = NULL; 5896 *def = NULL;
5896 - for (i = 0; ppc_defs[i].name != NULL; i++) { 5897 + max = sizeof(ppc_defs) / sizeof(ppc_def_t);
  5898 + for (i = 0; i < max; i++) {
5897 if ((pvr & ppc_defs[i].pvr_mask) == 5899 if ((pvr & ppc_defs[i].pvr_mask) ==
5898 (ppc_defs[i].pvr & ppc_defs[i].pvr_mask)) { 5900 (ppc_defs[i].pvr & ppc_defs[i].pvr_mask)) {
5899 *def = &ppc_defs[i]; 5901 *def = &ppc_defs[i];
@@ -5907,12 +5909,11 @@ int ppc_find_by_pvr (uint32_t pvr, ppc_def_t **def) @@ -5907,12 +5909,11 @@ int ppc_find_by_pvr (uint32_t pvr, ppc_def_t **def)
5907 5909
5908 void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...)) 5910 void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
5909 { 5911 {
5910 - int i; 5912 + int i, max;
5911 5913
5912 - for (i = 0; ; i++) { 5914 + max = sizeof(ppc_defs) / sizeof(ppc_def_t);
  5915 + for (i = 0; i < max; i++) {
5913 (*cpu_fprintf)(f, "PowerPC %-16s PVR %08x\n", 5916 (*cpu_fprintf)(f, "PowerPC %-16s PVR %08x\n",
5914 ppc_defs[i].name, ppc_defs[i].pvr); 5917 ppc_defs[i].name, ppc_defs[i].pvr);
5915 - if (strcmp(ppc_defs[i].name, "default") == 0)  
5916 - break;  
5917 } 5918 }
5918 } 5919 }