• Arnaldo Carvalho de Melo's avatar
    perf annotate: Fix fallback to unparsed disassembler line · 3995614d
    Arnaldo Carvalho de Melo authored
    When annotating source/disasm lines the perf tools parse the output of
    objdump, trying to provide augmented output that allows navigating
    jumps, calls, etc.
    
    But when a line output by objdump can't be parsed the annotation code
    falls back to just presenting the unparsed line.
    
    When fixing a leak in the 0fb9f2aa commit ("perf annotate: Fix
    memory leaks in LOCK handling") we failed to take that into account and
    instead tried to free one of the data structures that should be freed
    only when successfully allocated, oops, segfault.
    
    There was a change in the way the objdump output for lock prefixed
    instructions is formatted that lead the relevant parser to fail to grok
    it.
    
    At least RHEL7 works ok, but Fedora 20 segfaults.
    
    Fix it by making the ins__delete() destructor work like the most basic
    destructor: free().
    
    Namely make it accept a NULL pointer and when handling it just do
    nothing.
    
    Further investigation is needed to figure out the nature of the objdump
    output change so as to make the parser grok it.
    Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Rabin Vincent <rabin@rab.in>
    Link: http://lkml.kernel.org/n/tip-7wsy0zo292pif0yjoqpfryrz@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    3995614d
annotate.c 33.9 KB