qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: Commit 5f30fa18ad043a841fe9f0c3917ac60f2519ebd1 breaks


From: Ted Harkington
Subject: [Qemu-devel] Re: Commit 5f30fa18ad043a841fe9f0c3917ac60f2519ebd1 breaks debugging 64 bit guests
Date: Sat, 18 Sep 2010 16:23:35 -0500

Without that commit, I can set breakpoints and debug 32 bit code AND 64 bit code just fine in the same debug session...

"set arch" does nothing to remedy my problems.

I cannot even set breakpoints before the system runs, let alone after I interrupt it...

Are you sure this approach is needed? I have no such problems with bochs...

On Thu, Sep 16, 2010 at 7:55 PM, Jan Kiszka <address@hidden> wrote:
Am 14.09.2010 07:48, Ted Harkington wrote:
> Hello,
>
> I have been trying to figure out why I cannot debug a 64 bit kernel of my
> own invention.
>
> I launch qemu-system-x86_64 with the -s -S flags, we also specify -cpu
> core2duo -vga std and a -hda with an ext2 FS holding our multiboot kernel
> and GRUB2.
>
> When I try to set breakpoints and "continue" in GDB (7.2) using the very
> latest HEAD (b6601141cd2a170dfe773987b06f716a190ea7e0) or 0.12.0 or 0.12.5
> or 13.0.rc0 or 13.0.rc1, I get failures of the same nature:
>
> 0x0000000000000000 in ?? ()
> (gdb) break main
> Breakpoint 1 at 0x101730: file src/kernel/init.c, line 18.
> (gdb) c
>
> Program received signal SIGTRAP, Trace/breakpoint trap.
> 0x0000000000000000 in ?? ()
> (gdb)
>
> Note that in this case, main lies in 64 bit mode. However, trying to break
> on _start yields virtually the same effect and _start is 32 bit code.
>
> By doing a git bisect, I managed to narrow the commit that introduced this
> bug to 5f30fa18ad043a841fe9f0c3917ac60f2519ebd1. Reverting this commit on
> HEAD seemingly fixed the problem for both the 32 bit and 64 bit cases.
> I might be doing something incorrectly on my end but this seemed to fix the
> problem.
>
> Perhaps the pertinent thing to do would be to
> revert 5f30fa18ad043a841fe9f0c3917ac60f2519ebd1 as it seems to do nothing
> but break things unless, of course, this would only break something that I
> am not aware of further.

Without that commit, you won't be able to debug guest code in 32- or
16-bit mode with qemu-system-x86_64. The reason is the limited remote
gdb protocol that cannot handle mode switches. The commit works around
this by switching the architecture instead - which is far from being
elegant but still the only alternative.

Do you have to debug across a mode switch or just set a proper
breakpoint in 64-bit land? In the latter case, just interrupt your guest
when it is running 64 bits, then set your breakpoints. If that was too
late, issue a system_reset and let the breakpoints trap on second run.

If you need to debug the mode switch itself, things get hairy as gdb
sometimes dislikes to follow the architecture change via "set arch i386...".

Jan



reply via email to

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