Now, I’m working with Qemu source study, but I have some difficulties. Could 
someday give me some help or advice.

 

At the beginning of cpu_exec, there is a function call env_to_regs, but I 
cannot understand the behavior of env_to_regs. In my understanding, env_to_regs 
stores environment context pointer(pointer that points to X86CPUState)  and 
other critical Qemu defined variable to real host register, that is to say 
function env_to_regs accomplishes the task register mapping for translating 
optimization. That is my understanding, but I really understand the codes in 
env_to_regs and regs_to_env. Codes in env_to_regs are like this:

#ifdef reg_EAX

EAX = env->regs[R_EAX];

…………

I cannot find where the micro reg_EAX is defined, actually, I insert one line: 
printf(“reg_EAX is defined!\n”) after #ifdef reg_EAX into Qemu source, compile 
it and run Qemu, there is no output information, so I think, env_to_regs is 
actually a void function (For other micro define, situations are the same). But 
if this is true, how did Qemu’s register mapping accomplished? 

 

If I suppose that reg_EAX has already defined somewhere in Qemu source, but how 
does EAX = env->regs[R_EAX] works? EAX is also a micro definition like this 
#define EAX (env->regs[R_EAX]). Then the code becomes like this: 
env->regs[R_EAX]= env->regs[R_EAX]. Left side and right side of “=” is the same 
. So how does regs_to_env and regs_to_env work? How to understand the 
functionality of the two functions, Could anyone give me some advice. I will 
own my thankfulness for all of you. Thank you very much.

 

Reply via email to