diff options
author | Ian Rogers <[email protected]> | 2019-10-10 11:36:47 -0700 |
---|---|---|
committer | Arnaldo Carvalho de Melo <[email protected]> | 2019-10-15 08:39:42 -0300 |
commit | 7a675de428364a16038a8e6ed557daf0a009ce9c (patch) | |
tree | 9a1d7d56c30e7b4ee3e0b55a1b59b793d601e0d6 | |
parent | 4235949944d1bb244c85fd184cdc2f78e9df848b (diff) |
perf annotate: Don't pipe objdump output through 'grep' command
Simplify the objdump command by not piping the output of objdump through
grep. Instead, drop lines that match the grep pattern during the reading
loop.
Signed-off-by: Ian Rogers <[email protected]>
Tested-by: Arnaldo Carvalho de Melo <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Jin Yao <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Song Liu <[email protected]>
Cc: Stephane Eranian <[email protected]>
Cc: [email protected]
Link: http://lore.kernel.org/lkml/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
-rw-r--r-- | tools/perf/util/annotate.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 9835666db5a7..0e052e253835 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c @@ -1916,7 +1916,7 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args) err = asprintf(&command, "%s %s%s --start-address=0x%016" PRIx64 " --stop-address=0x%016" PRIx64 - " -l -d %s %s -C \"$1\" 2>/dev/null|grep -v \"$1:\"|expand", + " -l -d %s %s -C \"$1\" 2>/dev/null|expand", opts->objdump_path ?: "objdump", opts->disassembler_style ? "-M " : "", opts->disassembler_style ?: "", @@ -1962,9 +1962,16 @@ static int symbol__disassemble(struct symbol *sym, struct annotate_args *args) nline = 0; while (!feof(file)) { + const char *match; + if (getline(&line, &line_len, file) < 0 || !line) break; + /* Skip lines containing "filename:" */ + match = strstr(line, symfs_filename); + if (match && match[strlen(symfs_filename)] == ':') + continue; + /* * The source code line number (lineno) needs to be kept in * across calls to symbol__parse_objdump_line(), so that it |