* [Qemu-devel] address translation
@ 2007-07-13 0:29 Shashidhar Mysore
2007-07-13 19:59 ` andrzej zaborowski
0 siblings, 1 reply; 5+ messages in thread
From: Shashidhar Mysore @ 2007-07-13 0:29 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 1402 bytes --]
Hello group,
I have two questions, both regarding the virtual-physical translation of
addresses (all in the virtual machine context).
1>
Can somebody tell me if the program counter value available in the following
snippet from target-i386/translate.c
is virtual or physical? I learnt it may be virtual, in which case is there a
way to extract the physical address corresponding to the
virtual address, or if it is physical, then is there a way to translate to
its virtual address (within the virtual machine context)?
************************************************
/* convert one instruction. s->is_jmp is set if the translation must
be stopped. Return the next pc value */
static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
{
int b, prefixes, aflag, dflag;
int shift, ot;
int modrm, reg, rm, mod, reg_addr, op, opreg, offset_addr, val;
target_ulong next_eip, tval;
int rex_w, rex_r;
s->pc = pc_start; // This s->pc is what I am using to extract all
executed PC values
************************************************
2>
Second question I have is - Within the functions from target-i386/ops_mem.h
for example,
void OPPROTO glue(glue(op_ldub, MEMSUFFIX), _T0_A0)(void)
{
T0 = glue(ldub, MEMSUFFIX)(A0);
}
Is A0 the physical address? or is it virtual?
And how to I translate from one to another in either case?
Thanks in advance.
-Shashi.
[-- Attachment #2: Type: text/html, Size: 1673 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] address translation
2007-07-13 0:29 [Qemu-devel] address translation Shashidhar Mysore
@ 2007-07-13 19:59 ` andrzej zaborowski
2007-07-13 22:17 ` Shashidhar Mysore
0 siblings, 1 reply; 5+ messages in thread
From: andrzej zaborowski @ 2007-07-13 19:59 UTC (permalink / raw)
To: qemu-devel
On 13/07/07, Shashidhar Mysore <shashimc@gmail.com> wrote:
> Hello group,
>
> I have two questions, both regarding the virtual-physical translation of
> addresses (all in the virtual machine context).
>
> 1>
> Can somebody tell me if the program counter value available in the following
> snippet from target-i386/translate.c
> is virtual or physical? I learnt it may be virtual, in which case is there a
> way to extract the physical address corresponding to the
> virtual address, or if it is physical, then is there a way to translate to
> its virtual address (within the virtual machine context)?
It is virtual, I think cpu_get_phys_page_debug() + the offset should
give you physical.
>
> ************************************************
> /* convert one instruction. s->is_jmp is set if the translation must
> be stopped. Return the next pc value */
> static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
> {
> int b, prefixes, aflag, dflag;
> int shift, ot;
> int modrm, reg, rm, mod, reg_addr, op, opreg, offset_addr, val;
> target_ulong next_eip, tval;
> int rex_w, rex_r;
>
> s->pc = pc_start; // This s->pc is what I am using to extract all
> executed PC values
This s->pc doesn't correspond to executed PC values, qemu is a translator.
> ************************************************
>
>
> 2>
> Second question I have is - Within the functions from target-i386/ops_mem.h
> for example,
>
> void OPPROTO glue(glue(op_ldub, MEMSUFFIX), _T0_A0)(void)
> {
> T0 = glue(ldub, MEMSUFFIX)(A0);
> }
>
> Is A0 the physical address? or is it virtual?
> And how to I translate from one to another in either case?
Also virtual.
Regards
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] address translation
2007-07-13 19:59 ` andrzej zaborowski
@ 2007-07-13 22:17 ` Shashidhar Mysore
2007-07-13 22:23 ` andrzej zaborowski
0 siblings, 1 reply; 5+ messages in thread
From: Shashidhar Mysore @ 2007-07-13 22:17 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 973 bytes --]
Thanks for the reply, Andrzej!
Some clarifications below ...
On 7/13/07, andrzej zaborowski <balrogg@gmail.com> wrote:
> >
> > ************************************************
> > /* convert one instruction. s->is_jmp is set if the translation must
> > be stopped. Return the next pc value */
> > static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
> > {
> > int b, prefixes, aflag, dflag;
> > int shift, ot;
> > int modrm, reg, rm, mod, reg_addr, op, opreg, offset_addr, val;
> > target_ulong next_eip, tval;
> > int rex_w, rex_r;
> >
> > s->pc = pc_start; // This s->pc is what I am using to extract all
> > executed PC values
>
> This s->pc doesn't correspond to executed PC values, qemu is a translator.
Can you tell me what s->pc is, in this context? Is the the start PC of a
basic block that is about to be executed? Is there any way in which I could
extract the trace of executed PCs in QEMU?
Regards,
-Shashi.
[-- Attachment #2: Type: text/html, Size: 1515 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] address translation
2007-07-13 22:17 ` Shashidhar Mysore
@ 2007-07-13 22:23 ` andrzej zaborowski
2007-07-17 20:43 ` Shashidhar Mysore
0 siblings, 1 reply; 5+ messages in thread
From: andrzej zaborowski @ 2007-07-13 22:23 UTC (permalink / raw)
To: qemu-devel
On 14/07/07, Shashidhar Mysore <shashimc@gmail.com> wrote:
> Thanks for the reply, Andrzej!
>
> Some clarifications below ...
>
> On 7/13/07, andrzej zaborowski <balrogg@gmail.com > wrote:
> > >
> > > ************************************************
> > > /* convert one instruction. s->is_jmp is set if the translation must
> > > be stopped. Return the next pc value */
> > > static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
> > > {
> > > int b, prefixes, aflag, dflag;
> > > int shift, ot;
> > > int modrm, reg, rm, mod, reg_addr, op, opreg, offset_addr, val;
> > > target_ulong next_eip, tval;
> > > int rex_w, rex_r;
> > >
> > > s->pc = pc_start; // This s->pc is what I am using to extract all
> > > executed PC values
> >
> > This s->pc doesn't correspond to executed PC values, qemu is a translator.
>
> Can you tell me what s->pc is, in this context? Is the the start PC of a
It is the PC of the disassembled instruction (hence disasm_insn).
> basic block that is about to be executed? Is there any way in which I could
> extract the trace of executed PCs in QEMU?
Yes, there was a thread about this about two months ago.
Regards
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] address translation
2007-07-13 22:23 ` andrzej zaborowski
@ 2007-07-17 20:43 ` Shashidhar Mysore
0 siblings, 0 replies; 5+ messages in thread
From: Shashidhar Mysore @ 2007-07-17 20:43 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 1949 bytes --]
Hi Andrzej,
There were actually two methods described in the thread referred to in the
thread to which you were referring in your previous mail. :)
The thread was -
http://thread.gmane.org/gmane.comp.emulators.qemu/16604
I used the patch provided by Stuart Brady (in the thread referred above) -
and I believed that this is the one which helps me extract executed PC
values, until you told me in your previous email that this is _not_ the
case, and they are just the disassembled and not the executed PC trace! Can
you please let me know if you were referring to the same thread or a
different one?
Thanks,
-Shashi.
On 7/13/07, andrzej zaborowski <balrogg@gmail.com> wrote:
>
> On 14/07/07, Shashidhar Mysore <shashimc@gmail.com> wrote:
> > Thanks for the reply, Andrzej!
> >
> > Some clarifications below ...
> >
> > On 7/13/07, andrzej zaborowski <balrogg@gmail.com > wrote:
> > > >
> > > > ************************************************
> > > > /* convert one instruction. s->is_jmp is set if the translation must
> > > > be stopped. Return the next pc value */
> > > > static target_ulong disas_insn(DisasContext *s, target_ulong
> pc_start)
> > > > {
> > > > int b, prefixes, aflag, dflag;
> > > > int shift, ot;
> > > > int modrm, reg, rm, mod, reg_addr, op, opreg, offset_addr, val;
> > > > target_ulong next_eip, tval;
> > > > int rex_w, rex_r;
> > > >
> > > > s->pc = pc_start; // This s->pc is what I am using to extract
> all
> > > > executed PC values
> > >
> > > This s->pc doesn't correspond to executed PC values, qemu is a
> translator.
> >
> > Can you tell me what s->pc is, in this context? Is the the start PC of a
>
> It is the PC of the disassembled instruction (hence disasm_insn).
>
> > basic block that is about to be executed? Is there any way in which I
> could
> > extract the trace of executed PCs in QEMU?
>
> Yes, there was a thread about this about two months ago.
>
> Regards
>
>
>
[-- Attachment #2: Type: text/html, Size: 2895 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-07-17 20:43 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-13 0:29 [Qemu-devel] address translation Shashidhar Mysore
2007-07-13 19:59 ` andrzej zaborowski
2007-07-13 22:17 ` Shashidhar Mysore
2007-07-13 22:23 ` andrzej zaborowski
2007-07-17 20:43 ` Shashidhar Mysore
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).