mirror of
https://github.com/torvalds/linux
synced 2024-09-21 19:47:35 +00:00
perf report: Fix --no-call-chain option handling
To avoid the funny: [root@doppio ~]# perf record -a -f sleep 2s [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.334 MB perf.data (~14572 samples) ] [root@doppio ~]# perf report --no-call-graph selected -g but no callchain data. Did you call perf record without -g? And fix the bug reported by peterz when we do indeed record with callchains and then ask for a report without: [root@doppio ~]# perf record -a -g -f sleep 2s [root@doppio ~]# perf report --no-call-graph Segmentation fault [root@doppio ~]# Reported-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1262699685-27820-1-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
de1764892a
commit
b9a63b9b56
|
@ -35,6 +35,7 @@ static char const *input_name = "perf.data";
|
||||||
|
|
||||||
static int force;
|
static int force;
|
||||||
static bool hide_unresolved;
|
static bool hide_unresolved;
|
||||||
|
static bool dont_use_callchains;
|
||||||
|
|
||||||
static int show_threads;
|
static int show_threads;
|
||||||
static struct perf_read_values show_threads_values;
|
static struct perf_read_values show_threads_values;
|
||||||
|
@ -172,7 +173,8 @@ static int perf_session__setup_sample_type(struct perf_session *self)
|
||||||
" -g?\n");
|
" -g?\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else if (callchain_param.mode != CHAIN_NONE && !symbol_conf.use_callchain) {
|
} else if (!dont_use_callchains && callchain_param.mode != CHAIN_NONE &&
|
||||||
|
!symbol_conf.use_callchain) {
|
||||||
symbol_conf.use_callchain = true;
|
symbol_conf.use_callchain = true;
|
||||||
if (register_callchain_param(&callchain_param) < 0) {
|
if (register_callchain_param(&callchain_param) < 0) {
|
||||||
fprintf(stderr, "Can't register callchain"
|
fprintf(stderr, "Can't register callchain"
|
||||||
|
@ -246,11 +248,19 @@ static int __cmd_report(void)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
parse_callchain_opt(const struct option *opt __used, const char *arg,
|
parse_callchain_opt(const struct option *opt __used, const char *arg,
|
||||||
int unset __used)
|
int unset)
|
||||||
{
|
{
|
||||||
char *tok;
|
char *tok;
|
||||||
char *endptr;
|
char *endptr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* --no-call-graph
|
||||||
|
*/
|
||||||
|
if (unset) {
|
||||||
|
dont_use_callchains = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
symbol_conf.use_callchain = true;
|
symbol_conf.use_callchain = true;
|
||||||
|
|
||||||
if (!arg)
|
if (!arg)
|
||||||
|
|
Loading…
Reference in a new issue