[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] Allow setting the vendor and model_id strings with
From: |
Dan Kenigsberg |
Subject: |
[Qemu-devel] [PATCH] Allow setting the vendor and model_id strings with x86's -cpu option |
Date: |
Thu, 20 Dec 2007 18:40:33 +0200 |
User-agent: |
Mutt/1.5.17 (2007-11-01) |
Having AuthenticAMD hard-coded is nice, but allowing the user to impersonate
whatever CPU she wants is even nicer.
Hopefully it would now work on big endian host and with non-ASCII
characters.
Dan.
diff --git a/target-i386/helper2.c b/target-i386/helper2.c
index 6d40c64..b9b3093 100644
--- a/target-i386/helper2.c
+++ b/target-i386/helper2.c
@@ -120,6 +120,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
typedef struct x86_def_t {
const char *name;
uint32_t vendor1, vendor2, vendor3;
+ char model_id[48];
int family;
int model;
int stepping;
@@ -255,7 +256,21 @@ 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 {
+ } 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 = x86_cpu_def->vendor2 =
x86_cpu_def->vendor3 = 0;
+ for(i = 0; i < 4; i++) {
+ x86_cpu_def->vendor1 |= ((unsigned char)val[i ]) << (8
* i);
+ x86_cpu_def->vendor2 |= ((unsigned char)val[i + 4]) << (8
* i);
+ x86_cpu_def->vendor3 |= ((unsigned char)val[i + 8]) << (8
* i);
+ }
+ } else if (!strcmp(featurestr, "model_id"))
+ strncpy(x86_cpu_def->model_id, val, 48);
+ else {
fprintf(stderr, "unrecognized feature %s\n", featurestr);
x86_cpu_def = 0;
goto error;
@@ -316,13 +331,14 @@ static int cpu_x86_register (CPUX86State *env, const char
*cpu_model)
env->cpuid_ext3_features = def->ext3_features;
{
const char *model_id = "QEMU Virtual CPU version " QEMU_VERSION;
- int c, len, i;
- len = strlen(model_id);
+ int c = -1, i;
+
+ if (def->model_id[0] != '\0')
+ model_id = def->model_id;
+
for(i = 0; i < 48; i++) {
- if (i >= len)
- c = '\0';
- else
- c = model_id[i];
+ if (c != '\0')
+ c = (unsigned char)model_id[i];
env->cpuid_model[i >> 2] |= c << (8 * (i & 3));
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] Allow setting the vendor and model_id strings with x86's -cpu option,
Dan Kenigsberg <=