markup_oops.pl: fix for faulting instruction in the first line of a range
authorHui Zhu <hui.zhu@windriver.com>
Thu, 28 Jan 2010 06:58:02 +0000 (06:58 +0000)
committerMichal Marek <mmarek@suse.cz>
Tue, 2 Feb 2010 13:33:56 +0000 (14:33 +0100)
commit0139f1d9539395ca341e17060ae26f44f5f31434
tree7e09135e69126119f50a50f3dfcf961fc38790af
parent94a47083522ec4bcfc03134ebe908f1bfb393057
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>
scripts/markup_oops.pl