2011/1/21 Raphaël Lefèvre <taylor.lefe...@gmail.com>: > On Wed, Jan 19, 2011 at 2:13 AM, Stefano Bonifazi > <stefboombas...@gmail.com> wrote: >> On 01/18/2011 06:17 PM, Blue Swirl wrote: >>> >>> On Tue, Jan 18, 2011 at 9:29 AM, Stefano Bonifazi >>> <stefboombas...@gmail.com> wrote: >>>> >>>> Hi all! >>>> I am working on qemu-user (qemu-ppc). >>>> I'd like to edit the values of target registers during the execution. Can >>>> I >>>> do that by simply changing the content of env->gpr[] or do these only >>>> contain a copy of the values of the registers? >>>> In this last case, where are the real values of the target registers >>>> stored >>>> so that by modifying them I can alter the behavior of the target code >>>> execution? >>> >>> env->gpr is the canonical location, but the translator assigns TCG >>> variables to them (cpu_gpr[] in translate.c), so GPR contents may be >>> cached to these. But when helpers are called or the TB finishes, >>> env->gpr should be valid again. >> >> Hi! >> Thank you for your answer! >> So if I understand well if I set env->gpr in a code section where there is >> no TCG translation on progress, I can edit directly the target CPU register >> right? >> Best Regards! >> Stefano B. >> >> > > In fact, I need to apologize for my poor comprehension to your > questions even after digesting the explinations from Blue Swirl. By > tracing code of qemu, "env->gpr" should be able to be modified any > place directly(or indirectly) whether the TCG involved or not.
Not exactly: you can't mix TCGv cpu_gpr[x] variable use with env->gpr[x] access using tcg_gen_{ld,st}_tl(foo, cpu_env, offsetof(CPUState, gpr[x])). The loads/stores would use env->gpr[x] directly, bypassing possibly cached values in registers assigned by TCG. This may be visible by tracing the generated code, not code in cpu-exec.c or op_helper.c.