qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Physical address debugging


From: Zeus Gómez Marmolejo
Subject: Re: [Qemu-devel] Physical address debugging
Date: Sun, 28 Aug 2011 23:42:15 +0200

I don't think GDB can help us very much on that, as it's only working with virtual addresses. You can't set a physical address breakpoint because the protocol doesn't allow it. So I guess it can be only done in the monitor. 

So, for you that you know very well the QEMU code, and suppose that I want to do a quick modification to stop on an address write and print the backtrace. How I could do it?? I want a one line modification to the code (with the address hardcoded) to stop the monitor. That should be easy, right?

Many thanks!

El 26 de agosto de 2011 20:12, Jan Kiszka <address@hidden> escribió:
On 2011-08-26 20:02, Blue Swirl wrote:
> 2011/8/26 Jan Kiszka <address@hidden>:
>> On 2011-08-26 19:34, Blue Swirl wrote:
>>> 2011/8/26 Jan Kiszka <address@hidden>:
>>>> On 2011-08-26 16:21, Zeus Gómez Marmolejo wrote:
>>>>> Hi all,
>>>>>
>>>>> I just want to do a very simple task. I'm using QEMU for debugging a new OS
>>>>> and I see that there is a memory region that is being updated by an unknown
>>>>> task. I don't know if it's another process or the kernel itself.
>>>>>
>>>>> So I would like to put a physical memory watchpoint. I don't know how to do
>>>>> that. As the GDB stub is operating using virtual addressing, I cannot place
>>>>> a watchpoint on an address as it's not stopping.
>>>>>
>>>>> To make it short, I want the equivalent of the Bochs command "watch write
>>>>> addr", which inserts a write watch point at physical address 'addr'. I
>>>>> haven't seen this is possible on the QEMU monitor...
>>>>
>>>> Indeed, it isn't. It's impossible with KVM (due to lacking hardware
>>>> support) but would be feasible with TCG if you extend (or ad-hoc hack)
>>>> QEMU code accordingly.
>>>
>>> Why impossible? The existing watchpoints replace original physical
>>> memory with io_mem_watch MMIO, virtual addresses are translated to
>>> physical in exec.c:tlb_set_page(). The only missing piece is to allow
>>> setting watchpoints with physical addresses directly.
>>>
>>> Since KVM can handle MMIO, I think it should also be able to handle
>>> watchpoints.
>>
>> KVM uses x86 debug registers for watchpoints. And the SDM states:
>>
>> 16.2.1 Debug Address Registers (DR0-DR3)
>>
>> Each of the debug-address registers (DR0 through DR3) holds the 32-bit
>> linear address of a breakpoint (see Figure 16-1). Breakpoint comparisons
>> are made before physical address translation occurs. [...]
>
> KVM could be changed to use the TCG version. What's the benefit of
> using debug registers, speed? Is that important for debugging?

When debugging tiny SMP races, yes as it may change the timing.

But MMIO based watchpoints may indeed work as well and also would
overcome the "Who needs more than 4 hw breakpoints?". But configuring
watchpoints on physical address or manually switching between soft and
hard ones need some configuration interface, ideally one that gdb can
drive. We also need some interface to finally add monitor trap support
(single stepping without injecting TF into guest flags, an Intel VT-x
feature). Just takes someone to do all this... :)

Jan

--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux



--
Zeus Gómez Marmolejo
Zet - The x86 (IA-32) open implementation
http://zet.aluzina.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]