qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH] Fix to gdb - wrong translation block invalidated wh


From: Andre Pech
Subject: [Qemu-devel] [PATCH] Fix to gdb - wrong translation block invalidated when setting gdb breakpoints
Date: Fri, 23 Dec 2005 11:57:42 -0800

Hi all,
I had been running into problems using gdb to debug the virtual machine kernel. The problem I was experiencing is that I would set a breakpoint, but that gdb would only sometimes get notified that the breakpoint was hit.
I finally tracked down the problem to exec.c:breakpoint_invalidate. The problem is that breakpoint_invalidate, which is supposed to invalidate the translation block for the address you want to break at, was actualling invalidating the translation block for the base address of the page that contained your breakpoint address. The fix is actually very simple and is attached below.
Thanks
Andre Pech


diff -dc exec.c{.old,}
*** exec.c.old    2005-12-23 11:40:47.000000000 -0800
--- exec.c    2005-12-23 11:41:13.000000000 -0800
***************
*** 996,1001 ****
--- 996,1002 ----
      target_ulong phys_addr;
 
      phys_addr = cpu_get_phys_page_debug(env, pc);
+     phys_addr += pc & (~TARGET_PAGE_MASK);
      tb_invalidate_phys_page_range(phys_addr, phys_addr + 1, 0);
  }
  #endif


On 12/21/05, Mulyadi Santosa <address@hidden > wrote:
Hello Andre...

> I'm running into problems using qemu to debug a kernel module. My
> host and virtual machine are both x86 running Fedora Core 4. After
> insmoding the module in the virtual machine, starting gdbserver,
> running gdb on the host with the module sections loaded at the right
> place, and setting a breakpoint in the module code, gdb does not
> always get notified when the code is exectuted. After adding

I'm not doing module debugging, only core kernel code debugging, but
more or less I run into same situation (last time confirmed with Qemu
0.7.1)

For additional info, sometimes I also suffered the other condition.
Breakpoint is hit, but even if I delete it, the emulation still stops
whenever the code at related physical address is hit. I tried to
printf() every gdb command received by Qemu's gdbstub and it confirmed
that breakpoint deletion command is actually received, but I can't
confirm what is the real bug there.

regards

Mulyadi



reply via email to

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