perf annotate: Fix SEGV with assembly labels
PATCH 1/1 perf annotate: Fix SEGV with assembly labels
I'm getting a SEGV when running perf annotate on a ppc64 box. The objdump -S output causing the SEGV looks like:
b .ret_from_except_litec00000000000a508: b c00000000000a4d4 <.ret_from_except_lite>
1: bl .save_nvgprsc00000000000a50c: bl c00000000000a110 <.save_nvgprs>
symbol__parse_objdump_line makes an effort to distinguish between instruction addresses and assembly labels but the check is insufficent.
In the above case we get line_ip = 1, and (line_ip - start) is positive so our offset < 0 check does not catch it.
Fix this by adding an unsigned comparison against start.
Signed-off-by Anton Blanchard <[email protected]>
Cc <[email protected]>
---
tools/perf/util/annotate.c +1 -1
@@ -809,7 +809,7 @@ static int symbol__parse_objdump_line(struct symbol *sym, struct map *map, end =map__rip_2objdump (map, sym->end); offset = line_ip - start; -if (offset <0 || (u64 )line_ip > end) +if (offset <0 || (u64 )line_ip < start || (u64 )line_ip > end) offset =-1 ;else parsed_line = tmp2 +1 ;