Re: State of debug register emulation

Avi Kivity
2008-05-02T09:54:57Z

Jan Kiszka wrote:
> Avi Kivity wrote:
>
>> Jan Kiszka wrote:
>>
>>> 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?
>>>
>>>
>> There's no way this can work. There are still only four debug
>> registers, and the guest and host together can ask for eight different
>> addresses. It is theoretically doable by hiding all mappings to pages
>> that are debug targets, but it would probably double the kvm code size.
>>
>> A good short-term compomise is to abort if the guest starts using
>> enabling a debug address register. A better solution might be to place
>> host debug addresses into unused guest debug registers, so that as long
>> as nr_guest_debug + nr_host_debug <= 4, we can still proceed.
>>
>
> I tried the latter, but we cannot cleanly share DR7 between both users.
>

I actually think we can, but...

> Thus I'm now going for a prioritized approach: debug register will stop
> to have any effect for the guest as soon as the host starts to use them.
> That's far simpler the implement and also easier to understand for the user.
>
>

Agreed, having a simple model is preferred here, both from the user's
point of view and from a code complexity point of view. If you're
debugging a debugger use plain qemu.

--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.