Assuming that you have an AMD CPU (I'm sure you can figure out how to
achieve the same thing with an Intel CPU) make sure that you have
TRAP_no_device bit set in v->arch.hvm_svm.vmcb->exception_intercepts
(as per svm_do_resume with a debugger attached).
After that, you should get VMEXIT_EXCEPTION_DB in svm_vmexit_handler.
Cheers
Gr(z)egor(z)
On Tue, Jun 24, 2008 at 6:42 PM, Abhinav Srivastava
<abhinavs_iitkgp@xxxxxxxxxxx> wrote:
>
> Hi Grzegorz,
>
> I am working with HVM domain. Also, I forgot to mention in my previous email
> that I am setting debug register DR0 using set_debugreg with the value of
> next instruction so that I could trap on that. The way I am setting debug
> register with the next instruction value is
>
> next-eip = regs->eip + __get_instruction_length().
>
> Still, I am not seeing it working.
>
> Thanks,
> Abhinav
>
> --- On Tue, 24/6/08, Grzegorz Miłoś <gm281@xxxxxxxxx> wrote:
>
>> From: Grzegorz Miłoś <gm281@xxxxxxxxx>
>> Subject: Re: [Xen-devel] Question related to Single-step execution and
>> Emulation
>> To: abhinavs_iitkgp@xxxxxxxxxxx
>> Cc: "xen-devel" <xen-devel@xxxxxxxxxxxxxxxxxxx>
>> Date: Tuesday, 24 June, 2008, 2:51 PM
>> Are you working with an HVM or PV domain?
>> Gr(z)egor(z)
>>
>> >
>> > Hi all,
>> >
>> >
>> > I am trying to perform single-stepping and instruction
>> emulation both in Xen-3.2.1. I am using the following
>> approach:
>> >
>> > First, I mark a guest page "not present"
>> inside the shadow page table so that I could intercept any
>> operation that involves this page. When the guest tries to
>> access that page, it faults and control goes to Xen
>> (sh_page_fault function). There, I emulate that operation
>> and return the control to guest to execute next
>> instruction. I could get my first part working.
>> >
>> > In the second part after emulating the instruction
>> inside Xen, I want to perform single-step execution from
>> next instruction onwards so that I could monitor further
>> execution of guest from that point.
>> >
>> > To achieve that I did following: After emulating an
>> instruction inside Xen and before sending the control back
>> to guest OS, I set the EFLAGS's trap bit set by doing
>> following operation:
>> >
>> > regs->eflag |= X86_EFLAGS_TF
>> >
>> > And return the control from sh_page_fault function by
>> saying "return EFAULT_FIXED".
>> >
>> > My understanding is that with this flag set when guest
>> completes the execution of the next instruction, it traps to
>> Xen with exit reason TRAP_debug and do_debug handler should
>> be invoked inside x86/traps.c. From there, again I set
>> X86_EFLAGS_TF flag to get guest trapped for next
>> instruction and so on. When i want it to be end I will set
>> X86_EFLAGS_RF flag.
>> >
>> > However, when I perform above-mentioned procedure I
>> get to see a message "Trace/breakpoint trap" in
>> my guest OS only once and my do_debug or
>> (debugger_trap_entry method with vector = Trap_debug) does
>> not get invoked at all inside Xen. Since trap is not coming
>> into Xen, I am not able to get the control after execution
>> of instructions.
>> >
>> > It seems like with my above-described method, I am
>> injecting TRAP_debug exception for the instruction that I
>> emulate inside the Xen. And, eflag is not set in the
>> context of next instruction that will be executed inside
>> the guest, which should trap with debug exception.
>>
>> >
>> >
>> > It would be great if someone could explain me what i
>> am doing wrong here and if yes what would be the right
>> approach to perform single-step execution in Xen.
>> >
>> >
>> > Thanks in advance.
>> >
>> > Regards,
>> > Abhinav
>> >
>> >
>> >
>> > Explore your hobbies and interests. Go to
>> http://in.promos.yahoo.com/groups/
>> >
>> > _______________________________________________
>> > Xen-devel mailing list
>> > Xen-devel@xxxxxxxxxxxxxxxxxxx
>> > http://lists.xensource.com/xen-devel
>> >
>
>
> Unlimited freedom, unlimited storage. Get it now, on
> http://help.yahoo.com/l/in/yahoo/mail/yahoomail/tools/tools-08.html/
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|