提交 d65e9815 编写于 作者: I Igor Mammedov

target-i386: move tcg initialization into x86_cpu_initfn()

In order to make cpu object not depended on external ad-hoc
initialization routines, move tcg initialization from cpu_x86_init
inside cpu object "x86_cpu_initfn()".
Signed-off-by: NIgor Mammedov <imammedo@redhat.com>
Reviewed-by: NAndreas Färber <afaerber@suse.de>
上级 84e3b602
...@@ -1716,6 +1716,7 @@ static void x86_cpu_initfn(Object *obj) ...@@ -1716,6 +1716,7 @@ static void x86_cpu_initfn(Object *obj)
{ {
X86CPU *cpu = X86_CPU(obj); X86CPU *cpu = X86_CPU(obj);
CPUX86State *env = &cpu->env; CPUX86State *env = &cpu->env;
static int inited;
cpu_exec_init(env); cpu_exec_init(env);
...@@ -1745,6 +1746,15 @@ static void x86_cpu_initfn(Object *obj) ...@@ -1745,6 +1746,15 @@ static void x86_cpu_initfn(Object *obj)
x86_cpuid_set_tsc_freq, NULL, NULL, NULL); x86_cpuid_set_tsc_freq, NULL, NULL, NULL);
env->cpuid_apic_id = env->cpu_index; env->cpuid_apic_id = env->cpu_index;
/* init various static tables used in TCG mode */
if (tcg_enabled() && !inited) {
inited = 1;
optimize_flags_init();
#ifndef CONFIG_USER_ONLY
cpu_set_debug_excp_handler(breakpoint_handler);
#endif
}
} }
static void x86_cpu_common_class_init(ObjectClass *oc, void *data) static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
......
...@@ -933,6 +933,7 @@ static inline int hw_breakpoint_len(unsigned long dr7, int index) ...@@ -933,6 +933,7 @@ static inline int hw_breakpoint_len(unsigned long dr7, int index)
void hw_breakpoint_insert(CPUX86State *env, int index); void hw_breakpoint_insert(CPUX86State *env, int index);
void hw_breakpoint_remove(CPUX86State *env, int index); void hw_breakpoint_remove(CPUX86State *env, int index);
int check_hw_breakpoints(CPUX86State *env, int force_dr6_update); int check_hw_breakpoints(CPUX86State *env, int force_dr6_update);
void breakpoint_handler(CPUX86State *env);
/* will be suppressed */ /* will be suppressed */
void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0); void cpu_x86_update_cr0(CPUX86State *env, uint32_t new_cr0);
......
...@@ -941,7 +941,7 @@ int check_hw_breakpoints(CPUX86State *env, int force_dr6_update) ...@@ -941,7 +941,7 @@ int check_hw_breakpoints(CPUX86State *env, int force_dr6_update)
return hit_enabled; return hit_enabled;
} }
static void breakpoint_handler(CPUX86State *env) void breakpoint_handler(CPUX86State *env)
{ {
CPUBreakpoint *bp; CPUBreakpoint *bp;
...@@ -1151,20 +1151,11 @@ X86CPU *cpu_x86_init(const char *cpu_model) ...@@ -1151,20 +1151,11 @@ X86CPU *cpu_x86_init(const char *cpu_model)
{ {
X86CPU *cpu; X86CPU *cpu;
CPUX86State *env; CPUX86State *env;
static int inited;
cpu = X86_CPU(object_new(TYPE_X86_CPU)); cpu = X86_CPU(object_new(TYPE_X86_CPU));
env = &cpu->env; env = &cpu->env;
env->cpu_model_str = cpu_model; env->cpu_model_str = cpu_model;
/* init various static tables used in TCG mode */
if (tcg_enabled() && !inited) {
inited = 1;
optimize_flags_init();
#ifndef CONFIG_USER_ONLY
cpu_set_debug_excp_handler(breakpoint_handler);
#endif
}
if (cpu_x86_register(cpu, cpu_model) < 0) { if (cpu_x86_register(cpu, cpu_model) < 0) {
object_delete(OBJECT(cpu)); object_delete(OBJECT(cpu));
return NULL; return NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册