• Masami Hiramatsu's avatar
    perf probe: Filter out redundant inline-instances · 3f4460a2
    Masami Hiramatsu authored
    With gcc4.6, some instances of concrete inlined function looks redundant
    and broken, because it appears inside of a concrete instance and its
    call_file and call_line are same as the original abstruct's decl_file
    and decl_line respectively.
    
    e.g.
     [  d1aa]    subprogram
                 external             (flag) Yes
                 name                 (strp) "add_timer"
                 decl_file            (data1) 2		;here is original
                 decl_line            (data2) 847		;line and file
                 prototyped           (flag) Yes
                 inline               (data1) inlined (1)
                 sibling              (ref4) [  d1c6]
    ...
     [ 11d84]    subprogram
                 abstract_origin      (ref4) [  d1aa]	; concrete instance
                 low_pc               (addr) .text+0x000000000000246f <add_timer>
                 high_pc              (addr) .text+0x000000000000248b <mod_timer_pending>
                 frame_base           (block1)               [   0] call_frame_cfa
                 sibling              (ref4) [ 11dd9]
     [ 11d9f]      formal_parameter
                   abstract_origin      (ref4) [  d1b9]
                   location             (data4) location list [  701b]
     [ 11da8]      inlined_subroutine
                   abstract_origin      (ref4) [  d1aa]	; redundant instance
                   low_pc               (addr) .text+0x000000000000247e <add_timer+0xf>
                   high_pc              (addr) .text+0x0000000000002480 <add_timer+0x11>
                   call_file            (data1) 2		; call line and file
                   call_line            (data2) 847		; are same as above
    
    Those redundant instances leads unwilling results;
    
    e.g. find probe points inside of functions even if we specify
    a function entry as below;
    
    $ perf probe -V add_timer
    Available variables at add_timer
            @<add_timer+0>
                    struct timer_list*      timer
            @<add_timer+15>
                    (No matched variables)
    
    So, this filters out those redundant instances based on call-site and
    decl-site information.
    
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20110811110317.19900.59525.stgit@fedora15Signed-off-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    3f4460a2
dwarf-aux.c 21.8 KB