[PATCH v2 2/8] makedumpfile: Apply relocation while loading module debuginfo.

Ken'ichi Ohmichi oomichi at mxs.nes.nec.co.jp
Thu Jul 28 05:11:46 EDT 2011


Hi Mahesh,

This feature's patches are very large, and I created a devel branch
on sourceforge git tree for sharing the code with you.

http://makedumpfile.git.sourceforge.net/git/gitweb.cgi?p=makedumpfile/makedumpfile;a=shortlog;h=refs/heads/filter-out-devel

I commited all of your patches and my cleanup patches.
If you notice some problems or cleate some patches, please let me know them.

On Wed, 27 Jul 2011 11:39:44 +0530
Mahesh Jagannath Salgaonkar <mahesh at linux.vnet.ibm.com> wrote:
> >> + *
> >> + * This function uses dwfl API's to apply relocation before reading the
> >> + * dwarf information from module debuginfo.
> >> + * On success, this function sets the dwarf_info.elfd and dwarf_info.dwarfd
> >> + * after applying relocation to module debuginfo.
> >> + */
> >> +static int
> >> +init_dwarf_info(void)
> > 
> > Is the searching method of debuginfo file only for kernel module ?
> > Or also for vmlinux ?
> 
> Yes, the searching method is only for module debuginfo. For vmlinux we
> set the dwarf_info.name_debuginfo before call to init_dwarf_info() and
> we never call search routine dwfl_linux_kernel_report_offline() for
> vmlinux. The routine dwfl_report_offline() applies the relocation on
> specified debuginfo module. In case vmlinux it basically does nothing.
>
> > I feel this function is a little complex, and I'd like to make it simple.
> > If only for kernel module, we can do it by separating the searching method
> > from this function and calling it in case of kernel module.
> 
> The init_dwarf_info() function gets called everytime when
> get_debug_info() is called. The get_debug_info() is called multiple
> times for same debuginfo file. This function tries to avoid the repeated
> search for same debuginfo, hence the function is little complex.
> 	- In case of kernel module the very first invocation of
> init_dwarf_info() would call dwfl_linux_kernel_report_offline() which
> will iterate over the available kernel modules and process the debuginfo
> only for the module for which we are interested in.
> 	- We set the dwarf_info.name_debuginfo with the debuginfo file name
> found during the first invocation.
> 	- The second invocation of init_dwarf_info() for same kernel module,
> will find dwarf_info.name_debuginfo is already set and will avoid the
> debuginfo search. In this case it will just apply relocation using
> routine dwfl_report_offline().
> 
> This function does not have any special handling code for vmlinux. The
> function is independent of whether it is called for vmlinux or kernel
> module. In case of vmlinux this function has absolutely no side effects.

If adding the searching method to the blow position and removing the code
from init_dwarf_info(), I guess it makes the code simple.

@ process_config_file()
 9402                         if (!set_dwarf_debuginfo(config->module_name,
 9403                                                                 NULL, -1)) {
 9404                                 ERRMSG("Skipping to next Module section\n");
 9405                                 skip_section = 1;
 9406                                 free_config(config);
 9407                                 continue;
 9408                         }
 9409                         << HERE >> 

Anyway, I need to investigate the code more.


Thanks
Ken'ichi Ohmichi



More information about the kexec mailing list