Re: State of debug register emulation

Jan Kiszka
2008-04-29T16:09:27Z

Joerg Roedel wrote:
> On Tue, Apr 29, 2008 at 03:07:25PM +0200, Jan Kiszka wrote:
>> Hi,
>>
>> looks like we are getting better and better here in hitting yet
>> unsupported corner-case features of KVM :). This time our guest fiddles
>> with hardware debugging registers, but quickly gets unhappy as they do
>> not yet have the expected effect.
>
> KVM is mostly tested with guests that run with paging. So a 16 bit
> protected mode guest is not tested very well :)

Yes, we know (we also had a bit fun with stock QEMU in corner cases).
But that may change now... :)

>
>> Joerg, I found you SVM-related patch series in the archive which does
>> not seem to have raised much responses. Is this general direction OK?
>> Does it allow self-debugging of guests? But how are conflicts resolved
>> if both guest and host need the physical registers (host debugging the
>> guest which is debugging itself)?
>
> I sent a patchset in the past to enable guest debugging for SVM which
> means debugging the guest from outside using gdb. But I was not able to
> test these patches because the userspace side of guest debugging is
> broken in the kvm-qemu.
> Debugging in the guest should work without problems. The debug registers
> are switched between guest and host if the guest uses them. So there
> should be no problems when the guest and the host using the debug
> registers.

I'm currently digging my way through the current VMX code, but I cannot
confirm this. Not sure what SVM does, but as far as I understood the VMX
side, only DR7 is saved/restored in hardware. The rest is KVM's job.
Unfortunately the access to the real debug registers only happens "if
(vcpu->guest_debug.enabled)". And as all DR accesses of the guest are
trapped, but the desired transfers to/from guest registers are nops,
this cannot work yet, at least on VMX.

This still leaves me with the question how to handle the case when the
host sets and arms some debug registers to debug the guest and the
latter does the same to debug itself. Guest access will be trapped, OK,
but KVM will then have to decide which value should actually be
transfered into the registers. Hmm, does SVM virtualizes all debug
registers, leaving the real ones to the host?

>
>> I would try to dig into the VMX side if the general architecture is
>> -mostly- clear. [ Sorry, Joerg, someone put the latter type of HW on my
>> desk :->. Hope I can once check our stuff against SVM as well! ]
>
> With some debug output from SVM I can better help to debug your
> problems ;-)

I'm sure :). But I guess this topic has a few common aspects to be
solved, too. So we may ideally end up with a single series of
debug-enabling patches for KVM (maybe even fixing userland - we are not
totally unfamiliar with the gdbstub here).