target-i386: QOM'ify CPU

Embed CPUX86State as first member of X86CPU.
Distinguish between "x86_64-cpu" and "i386-cpu".
Drop cpu_x86_close() in favor of calling object_delete() directly.

For now let CPUClass::reset() call cpu_state_reset().

Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
Andreas Färber 2012-04-02 23:20:08 +02:00
parent 30471bc94e
commit 5fd2087a1b
4 changed files with 118 additions and 8 deletions

View file

@ -101,11 +101,6 @@ void cpu_state_reset(CPUX86State *env)
cpu_watchpoint_remove_all(env, BP_CPU);
}
void cpu_x86_close(CPUX86State *env)
{
g_free(env);
}
static void cpu_x86_version(CPUX86State *env, int *family, int *model)
{
int cpuver = env->cpuid_version;
@ -1248,10 +1243,12 @@ int cpu_x86_get_descr_debug(CPUX86State *env, unsigned int selector,
CPUX86State *cpu_x86_init(const char *cpu_model)
{
X86CPU *cpu;
CPUX86State *env;
static int inited;
env = g_malloc0(sizeof(CPUX86State));
cpu = X86_CPU(object_new(TYPE_X86_CPU));
env = &cpu->env;
cpu_exec_init(env);
env->cpu_model_str = cpu_model;
@ -1265,7 +1262,7 @@ CPUX86State *cpu_x86_init(const char *cpu_model)
#endif
}
if (cpu_x86_register(env, cpu_model) < 0) {
cpu_x86_close(env);
object_delete(OBJECT(cpu));
return NULL;
}
env->cpuid_apic_id = env->cpu_index;