Re: Module debugging using kgdb

From: Dave Grothe (dave@gcom.com)
Date: Fri Jun 23 2000 - 11:55:30 EST


I have incorporated Amit's e-mail into the kgdb tarball on our ftp site.
It can serve as the cookbook for the workaround until the tools get
sharper. The tarball also includes his loadmodule.sh script.

The ftp site contains a mirrored copy of Amit's modified gdb for
convenience.

Amit: If you make any further changes to gdb, drop me a note with a link
and I'll update my copy.

-- Dave

"Amit S. Kale" wrote:

> Dave Grothe wrote:
> >
> > Amit:
> >
> > There is a 2.4.0 version of kgdb on our ftp site:
> > ftp://ftp.gcom.com/pub/linux/src/kgdb. I mirrored your version of gdb
> > and loadmodule.sh there.
> >
> > Have a look at the README file and see if I go it right. If not, send
> > me some corrections and I will update it.
> >
> > Does your version of gdb solve the global variable problem?
>
> Yes.
> Thanks to Elena Zanoni, gdb (developement version) can now calculate
> correctly addresses of dynamically loaded object files. I have not been
> following gdb developement for sometime and am not sure when symbol
> address
> calculation fix is going to appear in a gdb stable version.
>
> Elena, any idea when the fix will make it to a prebuilt gdb from a
> redhat
> release?
>
> For the time being I have built a gdb developement version. It can be
> used
> for module debugging with loadmodule.sh script.
>
> The problem with calculating of module addresses with previous versions
> of gdb was as follows:
> gdb did not use base address of a section while calculating address of
> a symbol in the section in an object file loaded via 'add-symbol-file'.
> It used address of .text segment instead. Due to this addresses of
> symbols
> in .data, .bss etc. (e.g. global variables) were calculated incorrectly.
>
> Above mentioned fix allow gdb to use base address of a segment while
> calculating address of a symbol in it. It adds a parameter '-s' to
> 'add-symbol-file' command for specifying base address of a segment.
>
> loadmodule.sh script works as follows.
>
> 1. Copy a module file to target machine.
> 2. Load the module on the target machine using insmod with -m parameter.
> insmod produces a module load map which contains base addresses of all
> sections in the module and addresses of symbols in the module file.
> 3. Find all sections and their base addresses in the module from
> the module map.
> 4. Generate a script that loads the module file. The script uses
> 'add-symbol-file' and specifies address of text segment followed by
> addresses of all segments in the module.
>
> Here is an example gdb script produced by loadmodule.sh script.
>
> add-symbol-file foo 0xd082c060 -s .text.lock 0xd08cbfb5
> -s .fixup 0xd08cfbdf -s .rodata 0xd08cfde0 -s __ex_table 0xd08e3b38
> -s .data 0xd08e3d00 -s .bss 0xd08ec8c0 -s __ksymtab 0xd08ee838
>
> With this command gdb can calculate addresses of symbols in ANY segment
> in a module file.
>
> Regards.
> --
> Amit Kale
> Veritas Software ( http://www.veritas.com )

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Jun 23 2000 - 21:00:26 EST