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;


Reply via email to