aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHui Zhu <hui.zhu@windriver.com>2010-01-28 01:58:02 -0500
committerMichal Marek <mmarek@suse.cz>2010-02-02 08:33:56 -0500
commit0139f1d9539395ca341e17060ae26f44f5f31434 (patch)
tree7e09135e69126119f50a50f3dfcf961fc38790af
parent94a47083522ec4bcfc03134ebe908f1bfb393057 (diff)
markup_oops.pl: fix for faulting instruction in the first line of a range
I got a "No matching code found" when I use markup_oops.pl parse a error in a x86_64 module. cat e.c int init_module(void) { char *buf = 0; buf[0] = 3; return 0; } void cleanup_module(void) { //char *buf = 0; //buf[0] = 3; } MODULE_AUTHOR("Hui Zhu"); MODULE_LICENSE("GPL"); 0000000000000000 <init_module>: init_module(): /home/teawater/study/kernel/stack2core/example/e.c:10 0: c6 04 25 00 00 00 00 movb $0x3,0x0 7: 03 /home/teawater/study/kernel/stack2core/example/e.c:13 8: 31 c0 xor %eax,%eax a: c3 retq b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0000000000000010 <cleanup_module>: cleanup_module(): /home/teawater/study/kernel/stack2core/example/e.c:20 10: f3 c3 repz retq 12: 90 nop 13: 90 nop Disassembly of section .modinfo: This is because the faulting instruction "movb $0x3,0x0" is the first line of the range. In the markup_oops.pl: main::(./scripts/markup_oops.pl:245): 245: if (InRange($1, $target)) { DB<2> p $line ffffffffa001b000: c6 04 25 00 00 00 00 movb $0x3,0x0 DB<3> p $counter 0 It just set $center in next loop. So it cannot get the $center. And even if $center is set to the right value 0. if ($center == 0) { print "No matching code found \n"; exit; } The first line $center will be 0, so I change the default value to -1. Signed-off-by: Hui Zhu <teawater@gmail.com> Signed-off-by: Michal Marek <mmarek@suse.cz>
-rw-r--r--scripts/markup_oops.pl7
1 files changed, 4 insertions, 3 deletions
diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl
index ce3e40b01e48..4a95539c807a 100644
--- a/scripts/markup_oops.pl
+++ b/scripts/markup_oops.pl
@@ -204,7 +204,7 @@ if ($module ne "") {
204 204
205my $counter = 0; 205my $counter = 0;
206my $state = 0; 206my $state = 0;
207my $center = 0; 207my $center = -1;
208my @lines; 208my @lines;
209my @reglines; 209my @reglines;
210 210
@@ -236,7 +236,8 @@ while (<FILE>) {
236 $state = 1; 236 $state = 1;
237 } 237 }
238 } 238 }
239 } else { 239 }
240 if ($state == 1) {
240 if ($line =~ /^([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]+)\:/) { 241 if ($line =~ /^([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]+)\:/) {
241 my $val = $1; 242 my $val = $1;
242 if (!InRange($val, $target)) { 243 if (!InRange($val, $target)) {
@@ -259,7 +260,7 @@ if ($counter == 0) {
259 exit; 260 exit;
260} 261}
261 262
262if ($center == 0) { 263if ($center == -1) {
263 print "No matching code found \n"; 264 print "No matching code found \n";
264 exit; 265 exit;
265} 266}