From: <ag...@us...> - 2012-12-14 09:45:10
|
Revision: 2533 http://nagios.svn.sourceforge.net/nagios/?rev=2533&view=rev Author: ageric Date: 2012-12-14 09:45:03 +0000 (Fri, 14 Dec 2012) Log Message: ----------- core: Make debugging coredumps infinitely more pleasant The fact that gdb can never find the files we demandload is pretty damn annoying. With this patch we make no great architectural changes, but we do make a double copy of the module, so that a file with its exact contents exist at the place where we loaded it from, but with a different inode. Signed-off-by: Andreas Ericsson <ae...@op...> Modified Paths: -------------- nagioscore/trunk/base/nebmods.c nagioscore/trunk/include/nebmodules.h Modified: nagioscore/trunk/base/nebmods.c =================================================================== --- nagioscore/trunk/base/nebmods.c 2012-12-14 09:44:40 UTC (rev 2532) +++ nagioscore/trunk/base/nebmods.c 2012-12-14 09:45:03 UTC (rev 2533) @@ -228,6 +228,17 @@ return ERROR; } + /* + * now that it's loaded and removed, we create a new file in + * its place so debuggers can find the correct symbols properly, + * but only if we're supposed to dump core + */ + if(daemon_dumps_core == TRUE) { + dest_fd = open(output_file, O_CREAT | O_WRONLY); + result = my_fdcopy(mod->filename, output_file, dest_fd); + mod->dl_file = strdup(output_file); + } + /* find module API version */ module_version_ptr = (int *)dlsym(mod->module_handle, "__neb_api_version"); @@ -314,6 +325,12 @@ log_debug_info(DEBUGL_EVENTBROKER, 0, "Attempting to unload module '%s': flags=%d, reason=%d\n", mod->filename, flags, reason); + /* remove the module's demand-loaded file */ + if(daemon_dumps_core == TRUE && mod->dl_file) { + (void)unlink(mod->dl_file); + free(mod->dl_file); + } + /* call the de-initialization function if available (and the module was initialized) */ if(mod->deinit_func && reason != NEBMODULE_ERROR_BAD_INIT) { Modified: nagioscore/trunk/include/nebmodules.h =================================================================== --- nagioscore/trunk/include/nebmodules.h 2012-12-14 09:44:40 UTC (rev 2532) +++ nagioscore/trunk/include/nebmodules.h 2012-12-14 09:45:03 UTC (rev 2533) @@ -68,6 +68,7 @@ /* NEB module structure */ typedef struct nebmodule_struct { char *filename; + char *dl_file; /* the file we actually loaded */ char *args; char *info[NEBMODULE_MODINFO_NUMITEMS]; int should_be_loaded; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |