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 <jan.kis...@siemens.com> escribió:

> On 2011-08-26 20:02, Blue Swirl wrote:
> > 2011/8/26 Jan Kiszka <jan.kis...@siemens.com>:
> >> On 2011-08-26 19:34, Blue Swirl wrote:
> >>> 2011/8/26 Jan Kiszka <jan.kis...@siemens.com>:
> >>>> 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