diff -Nur ksymoops-2.4.5/Changelog ksymoops-2.4.6/Changelog --- ksymoops-2.4.5/Changelog Mon Mar 18 20:56:29 2002 +++ ksymoops-2.4.6/Changelog Sun Jul 21 22:47:01 2002 @@ -1,3 +1,13 @@ +2002-07-20 Keith Owens + + ksymoops 2.4.6 + + * m68k call trace does not have trailing ' '. Reported by + Richard Zidlicky. + * MIPS has a hole in the register dump, skip $26 and $27 (k0, k1). + Maciej W. Rozycki. + * Only print decoded registers if they resolve to kernel symbols. + 2002-03-18 Keith Owens ksymoops 2.4.5 diff -Nur ksymoops-2.4.5/ksymoops.8 ksymoops-2.4.6/ksymoops.8 --- ksymoops-2.4.5/ksymoops.8 Mon Mar 18 20:35:33 2002 +++ ksymoops-2.4.6/ksymoops.8 Sun Jul 21 22:47:01 2002 @@ -1,4 +1,4 @@ -.TH KSYMOOPS 8 "March 18, 2002" +.TH KSYMOOPS 8 "July 20, 2002" .hy 0 .UC 4 .SH NAME @@ -521,8 +521,8 @@ \':'. See Oops_regs for the current list of recognised register names. Besides the Oops_regs list, i370, mips, ppc and s390 have special register dump formats, typically one register name is printed followed -by multiple values. ksymoops extracts all register contents and -decodes those values above an arbitrary cutoff of 1024. +by multiple values. ksymoops extracts all register contents, but it only +decodes and prints register values that can be resolved to a kernel symbol. A set of call trace lines starts with 'Trace:' or 'Call\ Trace:' or \'Call\ Backtrace:' (ppc only) or 'Function\ entered\ at' (arm only) or diff -Nur ksymoops-2.4.5/ksymoops.c ksymoops-2.4.6/ksymoops.c --- ksymoops-2.4.5/ksymoops.c Fri Mar 1 18:19:32 2002 +++ ksymoops-2.4.6/ksymoops.c Sun Jul 21 22:47:01 2002 @@ -9,7 +9,7 @@ Released under the GNU Public Licence, Version 2. */ -#define VERSION "2.4.5" +#define VERSION "2.4.6" #include "ksymoops.h" #include diff -Nur ksymoops-2.4.5/ksymoops.spec ksymoops-2.4.6/ksymoops.spec --- ksymoops-2.4.5/ksymoops.spec Fri Mar 1 18:19:32 2002 +++ ksymoops-2.4.6/ksymoops.spec Sun Jul 21 22:47:01 2002 @@ -1,6 +1,6 @@ Summary: Kernel oops and error message decoder Name: ksymoops -Version: 2.4.5 +Version: 2.4.6 Release: 1 Copyright: GPL Group: Utilities/System diff -Nur ksymoops-2.4.5/map.c ksymoops-2.4.6/map.c --- ksymoops-2.4.5/map.c Tue Jul 31 01:58:35 2001 +++ ksymoops-2.4.6/map.c Sun Jul 21 22:47:01 2002 @@ -41,7 +41,7 @@ /* If the input is a merged system map then it can contain module * data, add these as if they came from ksyms. The system map is * read last so we can check if there is any other module data, - * reading from both a merged map and module data doe snot make + * reading from both a merged map and module data does not make * sense. */ if (string[5]) { diff -Nur ksymoops-2.4.5/oops.c ksymoops-2.4.6/oops.c --- ksymoops-2.4.5/oops.c Mon Mar 18 19:22:11 2002 +++ ksymoops-2.4.6/oops.c Sun Jul 21 22:47:01 2002 @@ -615,13 +615,11 @@ reg = 0; } reg = Oops_truncate_address(reg, options); - if (reg > 1024) { - strcpy(regname, ">>"); - strncpy(regname+2, string[1], sizeof(regname)-2); - if (strlen(regname) < sizeof(regname)-1) - strcat(regname, ";"); - add_symbol_n(ss, reg, 'R', 1, regname); - } + strcpy(regname, ">>"); + strncpy(regname+2, string[1], sizeof(regname)-2); + if (strlen(regname) < sizeof(regname)-1) + strcat(regname, ";"); + add_symbol_n(ss, reg, 'R', 1, regname); p += re_Oops_regs_pmatch[0].rm_eo; } else @@ -1128,12 +1126,12 @@ break; } reg = Oops_truncate_address(reg, options); - if (reg > 1024) { - snprintf(regname, sizeof(regname), ">>$%d;", reg_num); - add_symbol_n(ss, reg, 'R', 1, regname); - } + snprintf(regname, sizeof(regname), ">>$%d;", reg_num); + add_symbol_n(ss, reg, 'R', 1, regname); p += re_unbracketed_address_pmatch[0].rm_eo; ++reg_num; + if (reg_num == 26) + reg_num += 2; /* skip k0, k1 */ } else break; @@ -1335,10 +1333,8 @@ break; } reg = Oops_truncate_address(reg, options); - if (reg > 1024) { - snprintf(regname, sizeof(regname), ">>GPR%d;", reg_num); - add_symbol_n(ss, reg, 'R', 1, regname); - } + snprintf(regname, sizeof(regname), ">>GPR%d;", reg_num); + add_symbol_n(ss, reg, 'R', 1, regname); p += re_unbracketed_address_pmatch[0].rm_eo; ++reg_num; } @@ -1374,7 +1370,7 @@ */ RE_COMPILE(&re_Oops_trace, "^(" /* 1 */ - "(Call Trace: )" /* 2 */ + "(Call Trace: *)" /* 2 */ /* alpha */ "|(Trace:)" /* 3 */ /* various */ "|(" BRACKETED_ADDRESS ")" /* 4,5 */ /* ppc */ "|(Call backtrace:)" /* 6 */ @@ -1625,11 +1621,9 @@ reg = 0; } reg = Oops_truncate_address(reg, options); - if (reg > 1024) { - strcpy(regname, ">>"); - snprintf(regname, sizeof(regname), "r%-2d; ", s390_reg_num); - add_symbol_n(ss, reg, 'R', 1, regname); - } + strcpy(regname, ">>"); + snprintf(regname, sizeof(regname), "r%-2d; ", s390_reg_num); + add_symbol_n(ss, reg, 'R', 1, regname); p += re_unbracketed_address_pmatch[0].rm_eo; ++s390_reg_num; } @@ -1749,7 +1743,7 @@ * string 2 is defined if the text is 'Stack from '. * string 3 is defined if the text is 'Stack: '. * string 4 is defined if the text might be a stack continuation. - * string 5 is defined if the text is 'Call Trace: '. + * string 5 is defined if the text is 'Call Trace: *'. * string 6 is defined if the text might be a trace continuation. * string 7 is the address part of the BRACKETED_ADDRESS. * @@ -1794,7 +1788,7 @@ /* i386 */ "(Stack: )" /* 2 S */ /* m68k */ "|(Stack from )" /* 3 S */ /* various */ "|([0-9a-fA-F]{4,})" /* 4 S,T */ - /* various */ "|(Call Trace: )" /* 5 T */ + /* various */ "|(Call Trace: *)" /* 5 T */ /* various */ "|(" BRACKETED_ADDRESS ")" /* 6,7 T */ /* various */ "|(Version_[0-9]+)" /* 8 */ /* alpha */ "|(Trace:)" /* 9 T */ @@ -2223,12 +2217,17 @@ printf("%s\n", s->name); } else { + /* Suppress registers that do not resolve to symbols */ + char *map = map_address(&ss_merged, s->address, options); + if (s->type == 'R') { + if (index(map, '+') == NULL || strncmp(map, "type) printf("\n"); printf("%s %s %s", - s->name, - format_address(s->address, options), - map_address(&ss_merged, s->address, options)); + s->name, format_address(s->address, options), map); if (s->type == 'E') { eip = s->address; if (eip) diff -Nur ksymoops-2.4.5/symbol.c ksymoops-2.4.6/symbol.c --- ksymoops-2.4.5/symbol.c Sat Sep 22 18:49:11 2001 +++ ksymoops-2.4.6/symbol.c Sun Jul 21 22:47:01 2002 @@ -182,7 +182,7 @@ SYMBOL *s; static char *map = NULL; static int size = 0; - static const char procname[] = "map_address_n"; + static const char procname[] = "map_address"; address &= truncate_mask; DEBUG(3, "%s %s", ss->source, format_address(address, options));