[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 3/5] x86/emul: Add a pending_dbg field to x86_emulate_ctxt.retire
On 13.09.2023 01:21, Andrew Cooper wrote: > --- a/xen/arch/x86/x86_emulate/x86_emulate.c > +++ b/xen/arch/x86/x86_emulate/x86_emulate.c > @@ -8379,7 +8379,10 @@ x86_emulate( > if ( !mode_64bit() ) > _regs.r(ip) = (uint32_t)_regs.r(ip); > > - /* Should a singlestep #DB be raised? */ > + if ( singlestep ) > + ctxt->retire.pending_dbg |= X86_DR6_BS; We set "singlestep" about first thing in the function. Is it really correct to latch that into pending_dbg without regard to rc? (Perhaps yes, seeing the comment next to the field declaration.) > --- a/xen/arch/x86/x86_emulate/x86_emulate.h > +++ b/xen/arch/x86/x86_emulate/x86_emulate.h > @@ -588,15 +588,26 @@ struct x86_emulate_ctxt > /* Canonical opcode (see below) (valid only on X86EMUL_OKAY). */ > unsigned int opcode; > > - /* Retirement state, set by the emulator (valid only on X86EMUL_OKAY). */ > + /* > + * Retirement state, set by the emulator (valid only on > X86EMUL_OKAY/DONE). > + * > + * TODO: all this state should be input/output from the VMCS PENDING_DBG, > + * INTERRUPTIBILITY and ACTIVITIY fields. > + */ > union { > - uint8_t raw; > + unsigned long raw; > struct { > + /* > + * Accumulated %dr6 trap bits, positive polarity. Should only be > + * interpreted in the case of X86EMUL_OKAY/DONE. > + */ > + unsigned int pending_dbg; > + > bool hlt:1; /* Instruction HLTed. */ > bool mov_ss:1; /* Instruction sets MOV-SS irq shadow. */ > bool sti:1; /* Instruction sets STI irq shadow. */ > bool unblock_nmi:1; /* Instruction clears NMI blocking. */ > - bool singlestep:1; /* Singlestepping was active. */ > + bool singlestep:1; /* Singlestepping was active. (TODO, merge > into pending_dbg) */ > }; > } retire; > DONE has wrongly made it into here, as pointed out for patch 1. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |