Am 16.01.2013 16:52, schrieb Eduardo Habkost:
> On Wed, Jan 16, 2013 at 06:32:47AM +0100, Andreas Färber wrote:
> [...]
>> diff --git a/target-arm/helper.c b/target-arm/helper.c
>> index 37c34a1..f4553de 100644
>> --- a/target-arm/helper.c
>> +++ b/target-arm/helper.c
>> @@ -1270,14 +1270,12 @@ ARMCPU *cpu_arm_init(const char *cpu_model)
>>      cpu = ARM_CPU(object_new(cpu_model));
>>      env = &cpu->env;
>>      env->cpu_model_str = cpu_model;
>> -    arm_cpu_realize(cpu);
>>  
>>      if (tcg_enabled() && !inited) {
>>          inited = 1;
>>          arm_translate_init();
>>      }
>>  
>> -    cpu_reset(CPU(cpu));
>>      if (arm_feature(env, ARM_FEATURE_NEON)) {
>>          gdb_register_coprocessor(env, vfp_gdb_get_reg, vfp_gdb_set_reg,
>>                                   51, "arm-neon.xml", 0);
> 
> Some arm_feature() checks here (e.g. ARM_FEATURE_VFP3) depend on
> set_feature() calls done by arm_cpu_realize[fn]().

Ouch!

> On the other hand, I won't be surprised if gdb_register_coprocessor()
> needs to be called before qemu_init_vcpu(). I also don't know if it is
> safe to call gdb_register_coprocessor() before cpu_reset().
> 
> Why not move all the code between the "arm_cpu_realize(cpu)" and "return
> cpu" lines to the realize function as-is, instead of moving only part of
> the code? If arm requires these steps to be run after creating a CPU, I
> consider all of them part of the CPU realization process.

That was not directly possible because the helper functions registered
are here in helper.c. What I'll do is to put these into a separate
function that I can call from realizefn.

Thanks,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

Reply via email to