|
From: | 鏇硅幑 |
Subject: | [Qemu-devel] How does env_to_regs and regs_to_env works? |
Date: | Mon, 31 May 2010 16:41:42 +0800 (CST) |
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.
[Prev in Thread] | Current Thread | [Next in Thread] |