So I tried it on a faster machine (a 266MHz PII) and it froze for more than
20 seconds, then finally printed the disassembled code and all normal info.
I tracked this down to the following code in Oops_read (oops.c, line 960) :
re_compile(&re_Oops_code,
"^(" /* 1 */
/* sparc */ "(Instruction DUMP)" /* 2 */
/* various */ "|(Code *)" /* 3 */
")"
":[ \t]+"
"(" /* 4 */
"(general protection.*)"
"|(<[0-9]+>)"
"|(([<(]?[0-9a-fA-F]+[>)]?[ \t]*)+)"
")"
"(.*)$" /* trailing garbage */
,
REG_NEWLINE|REG_EXTENDED|REG_ICASE,
&re_Oops_code_pmatch);
i = regexec(&re_Oops_code, line, re_Oops_code.re_nsub+1,
re_Oops_code_pmatch, 0);
The very long freeze happened in the regexec(),
when line == "Code: <hex numbers>"
Thinking a little, I suspect that the regex expression
"|(([<(]?[0-9a-fA-F]+[>)]?[ \t]*)+)" is the guilty one, in particular the part
saying "((<other stuff>[ \t]*)+)" as regexec probably has to recursively check
all the line and choose wether to match or not the "[ \t]*" after each character.
I tried replacing that line with
"|(([0-9a-fA-F]+[ \t]+)+[0-9a-fA-F]+)"
which looked more sane to me, but even though the regexec seemed to return
correctly, I just got a SIGSEGV below in the code.
Can anyone shed some light on this? I hope I will be able to use ksymoops on my
modest 100MHz 486 (which compiles 2.2.1 in 23mins, btw), especially because
this just looks like a stupid typo in the regexp pattern.
Bye,
Massimiliano Ghilardi
----------------------------------------------------------------
| I have yet to meet a person who had a bad experience of Linux. |
| Most have never had an experience. |
----------------------------------------------------------------
-
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/