Re: KVM: Book3S PR: unbreaking software breakpoints

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13/05/2019 19:22, Fabiano Rosas wrote:

> Mark Cave-Ayland <mark.cave-ayland@xxxxxxxxxxxx> writes:
> 
>> On 13/05/2019 07:01, Alexey Kardashevskiy wrote:
>>
>>> On 12/05/2019 00:08, Mark Cave-Ayland wrote:
>>>> Hi all,
>>>>
>>>> Whilst trying to investigate some issues with MacOS under KVM PR I noticed that when
>>>> setting software breakpoints the KVM VCPU would stop as requested, but QEMU's gdbstub
>>>> would hang indefinitely.
>>>
>>> What are you trying to do exactly? Just breakpoints or single stepping?
>>> Anyway, I am cc-ing Fabiano who is fixing single stepping and knows this
>>> code well.
>>
>> I'm currently investigating why MacOS 9 fails to start up on KVM using a G4 Mac Mini,
>> and my starting point is to do a side-by-side comparison with TCG which can boot MacOS 9.
>>
>> I discovered this issue setting a software breakpoint using QEMU's gdbstub and
>> finding that whilst execution of the vCPU paused as expected, QEMU would hang because
>> with run->debug.arch.status != 0 the gdbstub tries to handle it as a hardware
>> breakpoint instead of a software breakpoint causing confusion.
>>
>> I've also tried using single-stepping which mostly works, however during OS startup
>> as soon as I step over a mtsrr1 instruction, I lose the single-stepping and vCPU runs
>> as normal. My suspicion here is that something in the emulation code is losing the
>> MSR_SE bit, but I need to dig a bit deeper here.
> 
> I would expect that a mtsrr1 followed by rfid would cause this sort of
> behavior since MSR_SE is set/cleared at each guest entry/exit
> (kvmppc_setup_debug and kvmppc_clear_debug functions) and whatever was
> copied into SRR1 might not have MSR_SE set.

Yes indeed, I can confirm that's the sequence which is causing the issue with
single-stepping here:

0x0020f0a4:  8203001c  lwz      r16, 0x1c(r3)
0x0020f0a8:  7cba03a6  mtspr    0x1a, r5
0x0020f0ac:  38003000  li       r0, 0x3000
0x0020f0b0:  7c1b03a6  mtspr    0x1b, r0
0x0020f0b4:  4c000064  rfi

What would be the right way to handle this? Is it necessary to emulate rfi if
single-step mode is enabled to ensure MSR_SE is still set?


ATB,

Mark.



[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux