On Sun, Dec 09, 2007 at 03:02:44AM +0000, Thiemo Seufer wrote: > Dan Kenigsberg wrote: > > Having AuthenticAMD hard-coded is nice, but allowing the user to impersonate > > whatever CPU she wants is even nicer. > > > > Also, an English typo (due to me) is corrected. > > > > Dan. > > > > --- a/target-i386/helper2.c > > +++ b/target-i386/helper2.c > > @@ -254,8 +254,17 @@ static int cpu_x86_find_by_name(x86_def_t > > *x86_cpu_def, const char *cpu_model) > > goto error; > > } > > x86_cpu_def->stepping = stepping; > > + } else if (!strcmp(featurestr, "vendor")) { > > + if (strlen(val) != 12) { > > + fprintf(stderr, "vendor string must be 12 chars > > long\n"); > > + x86_cpu_def = 0; > > + goto error; > > + } > > + x86_cpu_def->vendor1 = *(uint32_t *)val; > > + x86_cpu_def->vendor2 = *(uint32_t *)(val + 4); > > + x86_cpu_def->vendor3 = *(uint32_t *)(val + 8); > > Endianness bug. >
Indeed. Please consider the following: diff --git a/target-i386/helper2.c b/target-i386/helper2.c index 67658e2..6109283 100644 --- a/target-i386/helper2.c +++ b/target-i386/helper2.c @@ -254,6 +254,15 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def, const char *cpu_model) goto error; } x86_cpu_def->stepping = stepping; + } else if (!strcmp(featurestr, "vendor")) { + if (strlen(val) != 12) { + fprintf(stderr, "vendor string must be 12 chars long\n"); + x86_cpu_def = 0; + goto error; + } + x86_cpu_def->vendor1 = cpu_to_le32(*(uint32_t *)val); + x86_cpu_def->vendor2 = cpu_to_le32(*(uint32_t *)(val + 4)); + x86_cpu_def->vendor3 = cpu_to_le32(*(uint32_t *)(val + 8)); } else { fprintf(stderr, "unrecognized feature %s\n", featurestr); x86_cpu_def = 0;