grub-devel
[Top][All Lists]
Advanced

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

Re: Debugging GRUB2 with GDB and QEMU


From: devShadow
Subject: Re: Debugging GRUB2 with GDB and QEMU
Date: Sat, 13 May 2006 14:45:37 -0400
User-agent: Mozilla Thunderbird 1.0.7 (Windows/20050923)

Hi, thanks for the help with debugging modules. I have a module that I created and still need a little assistance in getting gdb to break in my module's grub_cmd_*. I am able to connect to QEMU with gdb and when I load the module, gdb loads the symbol table for my module.

But, when I set a breakpoint at the address of the first operation in my module, gdb doesn't break when I execute the command in GRUB. If it has something to do with the aliases you mention at the bottom of your message, could you elaborate a little more or direct me in the right direction?

Thanks

David Johnson

Lubomir Kundrak wrote:
I wrote some GDB macros that might be helpful for people
that want to debug GRUB 2 modules with QEMU. [1]

[1] http://NetBSD.sk/~lkundrak/misc/grub2-gdb/

The file genmk.rb.diff is a patch to makefile-generator
script, that makes the build system leave output files with
debugging information. Of course, one has have ruby interpreter
to regenerate the makefiles and compile GRUB with -g
afterwards.

Second file is .gdbinit, the GDB initialization file.  It is
commented, so there is no need to describe it here. It basically
passes the information extracted from list headed by grub_dl_head to
the perl script, gmodule.pl, and loads its output. It also
sets a breakpoint whose command list contains macro for loading
proper symbol file each time a module is loaded. (I know the work
could be done without the help of a Perl script, but it would
be far more complicated, I guess)

Another note worth mentioning is that you'll probably want
to add aliases for some functions, so that all gdb facilities
will work correctly. You will at least want to define the symbol
'main' for backtraces to stop at the right place. Some facilities
also want the function 'malloc' to be defined. So, you'll
probably have to add something like

.globl main
main = codestart

to assembly language sources or

malloc() __attribute__ ((alias("grub_malloc")));

to C files.

I hope this will be useful to at least some of you. Best regards!
Lubo.





reply via email to

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