Commit 0139f1d9539395ca341e17060ae26f44f5f31434

Authored by Hui Zhu
Committed by Michal Marek
1 parent 94a4708352

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>

Showing 1 changed file with 4 additions and 3 deletions Side-by-side Diff

scripts/markup_oops.pl
... ... @@ -204,7 +204,7 @@
204 204  
205 205 my $counter = 0;
206 206 my $state = 0;
207   -my $center = 0;
  207 +my $center = -1;
208 208 my @lines;
209 209 my @reglines;
210 210  
... ... @@ -236,7 +236,8 @@
236 236 $state = 1;
237 237 }
238 238 }
239   - } else {
  239 + }
  240 + if ($state == 1) {
240 241 if ($line =~ /^([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]+)\:/) {
241 242 my $val = $1;
242 243 if (!InRange($val, $target)) {
... ... @@ -259,7 +260,7 @@
259 260 exit;
260 261 }
261 262  
262   -if ($center == 0) {
  263 +if ($center == -1) {
263 264 print "No matching code found \n";
264 265 exit;
265 266 }