On Thu, Aug 16, 2012 at 9:29 PM, Steven <wangwangk...@gmail.com> wrote: > On Thu, Aug 16, 2012 at 1:00 PM, Max Filippov <jcmvb...@gmail.com> wrote: >> On Thu, Aug 16, 2012 at 8:36 PM, Steven <wangwangk...@gmail.com> wrote: >>> On Thu, Aug 16, 2012 at 4:02 AM, 陳韋任 (Wei-Ren Chen) >>> <che...@iis.sinica.edu.tw> wrote: >>>>> I would like to is there any function that could log the register >>>>> content of the guest machine, like "info registers" in the qemu >>>>> monitor mode. >>>> >>>> Why not check how "info registes" be implemented in QEMU? ;) >>>> I guess you just have to log env->regs or something like that. >>> Thanks for pointing this out. >>> I would like to get a trace of guest memory access. So I can not use >>> "info registers". >>> What I want to do is that when tcg fetches a load instruction at >>> disas_insns(), the guest memory address should be calculated. For >> >> No, you don't want this, because the same translated code may be >> invoked multiple times with different values in registers. >> >>> example, the tb has an instruction of mov 0x4(%ebx) %eax. >>> To calculate the address of 0x4(%ebx), I need to know the value of %ebx. >>> Is this correct? Thanks. >> >> Why don't you just instrument actual memory access functions in >> softmmu_template.h ? > But this code only touches the s->pc. For registers in the load > instruction, it won't generate the memory access code. So I need to > add code to some function to get the guest memory address access.
Take a close look at DATA_TYPE glue(glue(glue(HELPER_PREFIX, ld), SUFFIX), MMUSUFFIX)(ENV_PARAM target_ulong addr, int mmu_idx) and void glue(glue(glue(HELPER_PREFIX, st), SUFFIX), MMUSUFFIX)(ENV_PARAM target_ulong addr, DATA_TYPE val, int mmu_idx) At runtime they get addr, this is the virtual address of the memory access. This file is included several times to instantiate these functions for different memory access types. A set of macros manipulates access size and whether it is code or data access. -- Thanks. -- Max