diff -crB crash-6.0.5/help.c crash-6.0.5-modified/help.c
*** crash-6.0.5/help.c	2012-03-23 15:45:06.000000000 +0000
--- crash-6.0.5-modified/help.c	2012-04-24 06:16:09.696368523 +0100
***************
*** 4035,4041 ****
  char *help_mod[] = {
  "mod",
  "module information and loading of symbols and debugging data",
! "-s module [objfile] | -d module | -S [directory] | -D | -r | -R | -o | -g",
  "  With no arguments, this command displays basic information of the currently",
  "  installed modules, consisting of the module address, name, size, the",
  "  object file name (if known), and whether the module was compiled with",
--- 4035,4041 ----
  char *help_mod[] = {
  "mod",
  "module information and loading of symbols and debugging data",
! "-s module [objfile] | -d module | -S [directory] | -D | -r | -R | -o | -g\n\t| -t",
  "  With no arguments, this command displays basic information of the currently",
  "  installed modules, consisting of the module address, name, size, the",
  "  object file name (if known), and whether the module was compiled with",
***************
*** 4092,4097 ****
--- 4092,4100 ----
  "                   -g  When used with -s or -S, add a module object's section",
  "                       start and end addresses to its symbol list.",
  "                   -o  Load module symbols with old mechanism.",
+ "                   -t  Similar to -S but modules are searched for relative",
+ "                       to the real path of the namelist instead of in",
+ "                       standard locations.",
  " ",
  "  After symbolic and debugging data have been loaded, backtraces and text",
  "  disassembly will be displayed appropriately.  Depending upon the processor",
diff -crB crash-6.0.5/kernel.c crash-6.0.5-modified/kernel.c
*** crash-6.0.5/kernel.c	2012-03-23 15:45:06.000000000 +0000
--- crash-6.0.5-modified/kernel.c	2012-04-24 05:58:24.303368253 +0100
***************
*** 3077,3088 ****
--- 3077,3090 ----
  #define DELETE_ALL_MODULE_SYMBOLS     (5)
  #define REMOTE_MODULE_SAVE_MSG        (6)
  #define REINIT_MODULES                (7)
+ #define LOAD_ALL_MODULE_SYMBOLS_RELATIVE (8)
  
  void
  cmd_mod(void)
  {
  	int c, ctmp;
  	char *p, *objfile, *modref, *tree, *symlink;
+ 	char *name=NULL, *tmpname;
  	ulong flag, address;
  	char buf[BUFSIZE];
  
***************
*** 3151,3157 ****
  	address = 0;
  	flag = LIST_MODULE_HDR;
  
!         while ((c = getopt(argcnt, args, "Rd:Ds:So")) != EOF) {
                  switch(c)
  		{
                  case 'R':
--- 3153,3159 ----
  	address = 0;
  	flag = LIST_MODULE_HDR;
  
!         while ((c = getopt(argcnt, args, "Rd:Ds:Sot")) != EOF) {
                  switch(c)
  		{
                  case 'R':
***************
*** 3221,3226 ****
--- 3223,3234 ----
  			else
  				cmd_usage(pc->curcmd, SYNOPSIS);
  			break;
+ 		case 't':
+ 			if (flag) 
+ 				cmd_usage(pc->curcmd, SYNOPSIS);
+ 			else
+ 				flag = LOAD_ALL_MODULE_SYMBOLS_RELATIVE; 
+ 			break;
  
  		default:
  			argerrs++;
***************
*** 3296,3301 ****
--- 3304,3330 ----
  
  		break;
  
+ 	case LOAD_ALL_MODULE_SYMBOLS_RELATIVE:
+ 		if ((name=realpath(pc->namelist, NULL))==NULL) {
+ 			error(FATAL, "realpath returned null\n");
+ 			cmd_usage(pc->curcmd, SYNOPSIS);
+ 		}
+ 		if (CRASHDEBUG(3)) {
+ 			fprintf(fp, "REL namelist: %s\n", pc->namelist);
+ 			fprintf(fp, "REL realpath: %s\n", name);
+ 		}
+ 		if ((tmpname=strstr(name, "/usr/lib/debug"))==NULL) {
+ 			error(INFO, "Cannot find \"/usr/lib/debug\" in real"
+ 				" path (%s) to namelist (%s)\n", name, pc->namelist);
+ 			cmd_usage(pc->curcmd, SYNOPSIS);
+ 		}
+ 		tmpname[strlen("/usr/lib/debug")+1]=0;
+ 		if (CRASHDEBUG(3)) 
+ 			fprintf(fp, "REL short path: %s\n", name);
+ 		tree=name;
+ 		flag=LOAD_ALL_MODULE_SYMBOLS;
+ 		break;
+ 
  	default:
  		break;
  	}
***************
*** 3310,3315 ****
--- 3339,3345 ----
  
  	if (symlink)
  		FREEBUF(symlink);
+ 	if (name) free(name);
  }
  
  int
