Commit 0139f1d9 authored by Hui Zhu's avatar Hui Zhu Committed by Michal Marek

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: default avatarHui Zhu <teawater@gmail.com>
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent 94a47083
...@@ -204,7 +204,7 @@ if ($module ne "") { ...@@ -204,7 +204,7 @@ if ($module ne "") {
my $counter = 0; my $counter = 0;
my $state = 0; my $state = 0;
my $center = 0; my $center = -1;
my @lines; my @lines;
my @reglines; my @reglines;
...@@ -236,7 +236,8 @@ while (<FILE>) { ...@@ -236,7 +236,8 @@ while (<FILE>) {
$state = 1; $state = 1;
} }
} }
} else { }
if ($state == 1) {
if ($line =~ /^([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]+)\:/) { if ($line =~ /^([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]+)\:/) {
my $val = $1; my $val = $1;
if (!InRange($val, $target)) { if (!InRange($val, $target)) {
...@@ -259,7 +260,7 @@ if ($counter == 0) { ...@@ -259,7 +260,7 @@ if ($counter == 0) {
exit; exit;
} }
if ($center == 0) { if ($center == -1) {
print "No matching code found \n"; print "No matching code found \n";
exit; exit;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment