Skip to content
  • Hui Zhu's avatar
    markup_oops.pl: fix for faulting instruction in the first line of a range · 0139f1d9
    Hui Zhu authored
    
    
    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>
    0139f1d9