* Debugging a 64-bit kernel in qemu
@ 2011-01-03 10:27 Markus Duft
2011-01-03 11:15 ` Jan Kiszka
0 siblings, 1 reply; 3+ messages in thread
From: Markus Duft @ 2011-01-03 10:27 UTC (permalink / raw)
To: qemu-devel, gdb
Hi!
I have been playing a little with this: I'm writing a kernel for both x86 and x86-64. While doing so, i'd like to debug the kernel using qemu (and it's gdb stub) and gdb. This worked very well until qemu-0.11.1 (gdb version does not seem to play any role...). From there on, debugging the 64 bit version no longer works. My sessions look like this with qemu-0.13.50 (and any version above 0.11.1, actually...):
mduft@s01en22 /big/Privat/osdev/tachyon2 $ x86_64-pc-linux-gnu-gdb .build/x86_64/x86_64-tachyon
GNU gdb (GDB) 7.2.50.20110103-cvs
[snip]
Reading symbols from /big/Privat/osdev/tachyon2/.build/x86_64/x86_64-tachyon...done.
(gdb) target remote:1234
Remote debugging using :1234
0x0000000000000000 in ?? ()
(gdb) b boot
Breakpoint 1 at 0xffffffff80119000: file /big/Privat/osdev/tachyon2/core/tachyon.boot/Entry.cc, line 25.
(gdb) c
Continuing.
Remote 'g' packet reply is too long: 09ea1180ffffffff00950000000000000000000000000000000010000000000002b0ad2b009500000095000000000000d6101180ffffffffce101180ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000901180ffffffff4600000018000000100000001000000010000000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000
(gdb) quit
actuallly, i _can_ debug the kernel, nut only until the long mode switch occurs. after this point: no luck... :[
now for the questions:
1) is this a problem with qemu or was qemu "fixed" and gdb has a problem?
(that's why i CCd the gdb list ;)).
2) is there any plan to fix this issue?
3) is there some kind of workaround i can use (i'd be happy with an ugly/unsupported patch too, since i build all my stuff myself ;)).
Thanks in advance!
Regards, Markus
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Debugging a 64-bit kernel in qemu
2011-01-03 10:27 Debugging a 64-bit kernel in qemu Markus Duft
@ 2011-01-03 11:15 ` Jan Kiszka
[not found] ` <4D21BDFA.1050105@salomon.at>
0 siblings, 1 reply; 3+ messages in thread
From: Jan Kiszka @ 2011-01-03 11:15 UTC (permalink / raw)
To: Markus Duft; +Cc: qemu-devel, gdb
[-- Attachment #1: Type: text/plain, Size: 2742 bytes --]
Am 03.01.2011 11:27, Markus Duft wrote:
> Hi!
>
> I have been playing a little with this: I'm writing a kernel for both x86 and x86-64. While doing so, i'd like to debug the kernel using qemu (and it's gdb stub) and gdb. This worked very well until qemu-0.11.1 (gdb version does not seem to play any role...). From there on, debugging the 64 bit version no longer works. My sessions look like this with qemu-0.13.50 (and any version above 0.11.1, actually...):
>
> mduft@s01en22 /big/Privat/osdev/tachyon2 $ x86_64-pc-linux-gnu-gdb .build/x86_64/x86_64-tachyon
> GNU gdb (GDB) 7.2.50.20110103-cvs
> [snip]
> Reading symbols from /big/Privat/osdev/tachyon2/.build/x86_64/x86_64-tachyon...done.
> (gdb) target remote:1234
> Remote debugging using :1234
> 0x0000000000000000 in ?? ()
> (gdb) b boot
> Breakpoint 1 at 0xffffffff80119000: file /big/Privat/osdev/tachyon2/core/tachyon.boot/Entry.cc, line 25.
> (gdb) c
> Continuing.
> Remote 'g' packet reply is too long: 09ea1180ffffffff00950000000000000000000000000000000010000000000002b0ad2b009500000095000000000000d6101180ffffffffce101180ffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000901180ffffffff4600000018000000100000001000000010000000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000
> (gdb) quit
>
> actuallly, i _can_ debug the kernel, nut only until the long mode switch occurs. after this point: no luck... :[
>
> now for the questions:
>
> 1) is this a problem with qemu or was qemu "fixed" and gdb has a problem?
> (that's why i CCd the gdb list ;)).
> 2) is there any plan to fix this issue?
> 3) is there some kind of workaround i can use (i'd be happy with an ugly/unsupported patch too, since i build all my stuff myself ;)).
You see the effects of a workaround in qemu for gdb shortcomings on x86.
See e.g. http://thread.gmane.org/gmane.comp.emulators.qemu/80327, there
should be some threads on the gdb list as well.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Debugging a 64-bit kernel in qemu
[not found] ` <4D21C0AA.8010907@salomon.at>
@ 2011-01-03 13:00 ` Jan Kiszka
0 siblings, 0 replies; 3+ messages in thread
From: Jan Kiszka @ 2011-01-03 13:00 UTC (permalink / raw)
To: Markus Duft; +Cc: qemu-devel, gdb
[-- Attachment #1: Type: text/plain, Size: 1720 bytes --]
[ please keep CCs ]
Am 03.01.2011 13:27, Markus Duft wrote:
> On 01/03/2011 01:15 PM, Markus Duft wrote:
>> On 01/03/2011 12:15 PM, Jan Kiszka wrote:
>> [snip]
> [snip]
>> actually, i find that Ted Harkington was right: in 0.11.1 i can debug 32 bit code with qemu-system-x86_64 well enough (which means i debugged all the 32 bit part of my kernel without ever seen _any_ problem/non-working feature/whatever). wouldn't it be better to have 64 bit debugging working in the 64 bit version, with 32 bit mode working mostly (with whatever small issues), rather than just completely dooming 64 bit debugging...?
>>
>
> owh - spoke too soon. there must be more to it: i tried reverting 5f30fa18ad043a841fe9f0c3917ac60f2519ebd1, which restores ability to debug my 64 bit kernel just fine, but now i get the packet too long when trying to debug 32 bit code....
Hmm, that's new. You definitely loose stack unwinding when using the
wrong mode, thus source-level debugging.
I thought that thread suggested to set the arch explicitly, maybe I
misremembered that:
set arch i386:x86_64
tar rem :1234
If that is required, you probably load a 32-bit binary into gdb that
also contains 64-bit code in some section. I guess this is even more
confusing for gdb.
>
> wouldn't it be possible to implement some kind of explicit switch with qemu in the meantime, so i can choose what bitness i want to debug? I know, it's a problem with gdb under the hood, but still - it's really uncool debugging doesn't work in either of the two cases.
Wasn't required so far. If you debug in either mode, "set arch" should
do the job. If you have to debug across mode switches, that knob won't
help anyway.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-01-03 13:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-03 10:27 Debugging a 64-bit kernel in qemu Markus Duft
2011-01-03 11:15 ` Jan Kiszka
[not found] ` <4D21BDFA.1050105@salomon.at>
[not found] ` <4D21C0AA.8010907@salomon.at>
2011-01-03 13:00 ` Jan Kiszka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox