perf tools: Fix branch report segfaults
Jiri Olsa
reviewerv2 cover perf tools: Fix branch report segfaults
hi,
adding some branch_info checks to prevent segfaults on data without branch info.
v2: using cmp_null as suggested by Namhyung
jirka
available at:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/abort_fix_2
--- tools/perf/util/sort.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 26 deletions(-)
Jiri Olsa
reviewerPATCH v2 1/7 perf tools: Fix report -F abort for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F abort perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
tools/perf/util/sort.c +11 -3
@@ -989,6 +989,9 @@ struct sort_entry sort_mem_dcacheline = {static int64_t sort__abort_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return left->branch_info->flags.abort != right->branch_info->flags.abort; }
@@ -996,10 +999,15 @@ sort__abort_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__abort_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -static const char *out ="." ; +static const char *out ="N/A" ; + +if (he->branch_info) { +if (he->branch_info->flags.abort) + out ="A" ; +else + out ="." ; + } -if (he->branch_info->flags.abort) - out ="A" ;return repsep_snprintf (bf, size,"%-*s" , width, out); }
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F abort for data without branch info
perf tools: Fix report -F abort for data without branch info
Commit-ID: 49f4744307f9718d8e100755110b3b7b40ec4237 Gitweb: http://git.kernel.org/tip/49f4744307f9718d8e100755110b3b7b40ec4237 Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:01 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:27:56 -0200
perf tools: Fix report -F abort for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F abort perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
tools/perf/util/sort.c +11 -3
@@ -989,6 +989,9 @@ struct sort_entry sort_mem_dcacheline = {static int64_t sort__abort_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return left->branch_info->flags.abort != right->branch_info->flags.abort; }
@@ -996,10 +999,15 @@ sort__abort_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__abort_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -static const char *out ="." ; +static const char *out ="N/A" ; + +if (he->branch_info) { +if (he->branch_info->flags.abort) + out ="A" ; +else + out ="." ; + } -if (he->branch_info->flags.abort) - out ="A" ;return repsep_snprintf (bf, size,"%-*s" , width, out); }
Jiri Olsa
reviewerPATCH v2 2/7 perf tools: Fix report -F in_tx for data without branch info
In reply to Jiri OlsaThe branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F in_tx perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
tools/perf/util/sort.c +10 -3
@@ -1021,6 +1021,9 @@ struct sort_entry sort_abort = {static int64_t sort__in_tx_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return left->branch_info->flags.in_tx != right->branch_info->flags.in_tx; }
@@ -1028,10 +1031,14 @@ sort__in_tx_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__in_tx_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -static const char *out ="." ; +static const char *out ="N/A" ; -if (he->branch_info->flags.in_tx) - out ="T" ; +if (he->branch_info) { +if (he->branch_info->flags.in_tx) + out ="T" ; +else + out ="." ; + }return repsep_snprintf (bf, size,"%-*s" , width, out); }
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F in_tx for data without branch info
perf tools: Fix report -F in_tx for data without branch info
Commit-ID: 0199d244d6ed6bc1fcab38a8732fdba1ddf04080 Gitweb: http://git.kernel.org/tip/0199d244d6ed6bc1fcab38a8732fdba1ddf04080 Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:02 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:28:10 -0200
perf tools: Fix report -F in_tx for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F in_tx perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
tools/perf/util/sort.c +10 -3
@@ -1021,6 +1021,9 @@ struct sort_entry sort_abort = {static int64_t sort__in_tx_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return left->branch_info->flags.in_tx != right->branch_info->flags.in_tx; }
@@ -1028,10 +1031,14 @@ sort__in_tx_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__in_tx_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -static const char *out ="." ; +static const char *out ="N/A" ; -if (he->branch_info->flags.in_tx) - out ="T" ; +if (he->branch_info) { +if (he->branch_info->flags.in_tx) + out ="T" ; +else + out ="." ; + }return repsep_snprintf (bf, size,"%-*s" , width, out); }
Jiri Olsa
reviewerPATCH v2 3/7 perf tools: Fix report -F mispredict for data without branch info
In reply to Jiri OlsaThe branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F mispredict perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
tools/perf/util/sort.c +12 -8
@@ -471,11 +471,13 @@ struct sort_entry sort_sym_to = {static int64_t sort__mispredict_cmp (struct hist_entry *left,struct hist_entry *right) { -const unsigned char mp = left->branch_info->flags.mispred != - right->branch_info->flags.mispred; -const unsigned char p = left->branch_info->flags.predicted != - right->branch_info->flags.predicted; +unsigned char mp, p; +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); + + mp = left->branch_info->flags.mispred != right->branch_info->flags.mispred; + p = left->branch_info->flags.predicted != right->branch_info->flags.predicted;return mp || p; }
@@ -483,10 +485,12 @@ static int hist_entry__mispredict_snprintf(struct hist_entry *he, char *bf, size_t size, unsigned int width){static const char *out ="N/A" ; -if (he->branch_info->flags.predicted) - out ="N" ; -else if (he->branch_info->flags.mispred) - out ="Y" ; +if (he->branch_info) { +if (he->branch_info->flags.predicted) + out ="N" ; +else if (he->branch_info->flags.mispred) + out ="Y" ; + }return repsep_snprintf (bf, size,"%-*.*s" , width, width, out); }
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F mispredict for data without branch info
perf tools: Fix report -F mispredict for data without branch info
Commit-ID: 428560e762601d1248359052361322b71561c093 Gitweb: http://git.kernel.org/tip/428560e762601d1248359052361322b71561c093 Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:03 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:28:20 -0200
perf tools: Fix report -F mispredict for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F mispredict perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
tools/perf/util/sort.c +12 -8
@@ -471,11 +471,13 @@ struct sort_entry sort_sym_to = {static int64_t sort__mispredict_cmp (struct hist_entry *left,struct hist_entry *right) { -const unsigned char mp = left->branch_info->flags.mispred != - right->branch_info->flags.mispred; -const unsigned char p = left->branch_info->flags.predicted != - right->branch_info->flags.predicted; +unsigned char mp, p; +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); + + mp = left->branch_info->flags.mispred != right->branch_info->flags.mispred; + p = left->branch_info->flags.predicted != right->branch_info->flags.predicted;return mp || p; }
@@ -483,10 +485,12 @@ static int hist_entry__mispredict_snprintf(struct hist_entry *he, char *bf, size_t size, unsigned int width){static const char *out ="N/A" ; -if (he->branch_info->flags.predicted) - out ="N" ; -else if (he->branch_info->flags.mispred) - out ="Y" ; +if (he->branch_info) { +if (he->branch_info->flags.predicted) + out ="N" ; +else if (he->branch_info->flags.mispred) + out ="Y" ; + }return repsep_snprintf (bf, size,"%-*.*s" , width, width, out); }
Jiri Olsa
reviewerPATCH v2 4/7 perf tools: Fix report -F symbol_to for data without branch info
In reply to Jiri OlsaThe branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F symbol_to perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
tools/perf/util/sort.c +14 -5
@@ -413,8 +413,13 @@ sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right)static int64_t sort__sym_to_cmp (struct hist_entry *left,struct hist_entry *right) { -struct addr_map_symbol *to_l = &left->branch_info->to; -struct addr_map_symbol *to_r = &right->branch_info->to; +struct addr_map_symbol *to_l, *to_r; + +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); + + to_l = &left->branch_info->to; + to_r = &right->branch_info->to;if (!to_l->sym && !to_r->sym)return _sort__addr_cmp (to_l->addr, to_r->addr);
@@ -434,10 +439,14 @@ static int hist_entry__sym_from_snprintf(struct hist_entry *he, char *bf,static int hist_entry__sym_to_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -struct addr_map_symbol *to = &he->branch_info->to; -return _hist_entry__sym_snprintf (to->map, to->sym, to->addr, - he->level, bf, size, width); +if (he->branch_info) { +struct addr_map_symbol *to = &he->branch_info->to; + +return _hist_entry__sym_snprintf (to->map, to->sym, to->addr, + he->level, bf, size, width); + } +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); }struct sort_entry sort_dso_from = {
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F symbol_to for data without branch info
perf tools: Fix report -F symbol_to for data without branch info
Commit-ID: 38cdbd39ddf39c1284d54c4b7fe04db80ce97d04 Gitweb: http://git.kernel.org/tip/38cdbd39ddf39c1284d54c4b7fe04db80ce97d04 Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:04 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:28:30 -0200
perf tools: Fix report -F symbol_to for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F symbol_to perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
tools/perf/util/sort.c +14 -5
@@ -413,8 +413,13 @@ sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right)static int64_t sort__sym_to_cmp (struct hist_entry *left,struct hist_entry *right) { -struct addr_map_symbol *to_l = &left->branch_info->to; -struct addr_map_symbol *to_r = &right->branch_info->to; +struct addr_map_symbol *to_l, *to_r; + +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); + + to_l = &left->branch_info->to; + to_r = &right->branch_info->to;if (!to_l->sym && !to_r->sym)return _sort__addr_cmp (to_l->addr, to_r->addr);
@@ -434,10 +439,14 @@ static int hist_entry__sym_from_snprintf(struct hist_entry *he, char *bf,static int hist_entry__sym_to_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -struct addr_map_symbol *to = &he->branch_info->to; -return _hist_entry__sym_snprintf (to->map, to->sym, to->addr, - he->level, bf, size, width); +if (he->branch_info) { +struct addr_map_symbol *to = &he->branch_info->to; + +return _hist_entry__sym_snprintf (to->map, to->sym, to->addr, + he->level, bf, size, width); + } +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); }struct sort_entry sort_dso_from = {
Jiri Olsa
reviewerPATCH v2 5/7 perf tools: Fix report -F symbol_from for data without branch info
In reply to Jiri OlsaThe branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F symbol_from perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
tools/perf/util/sort.c +13 -3
@@ -404,6 +404,12 @@ sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right)struct addr_map_symbol *from_l = &left->branch_info->from;struct addr_map_symbol *from_r = &right->branch_info->from; +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); + + from_l = &left->branch_info->from; + from_r = &right->branch_info->from; +if (!from_l->sym && !from_r->sym)return _sort__addr_cmp (from_l->addr, from_r->addr);
@@ -430,10 +436,14 @@ sort__sym_to_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__sym_from_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -struct addr_map_symbol *from = &he->branch_info->from; -return _hist_entry__sym_snprintf (from->map, from->sym, from->addr, - he->level, bf, size, width); +if (he->branch_info) { +struct addr_map_symbol *from = &he->branch_info->from; +return _hist_entry__sym_snprintf (from->map, from->sym, from->addr, + he->level, bf, size, width); + } + +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); } static int hist_entry__sym_to_snprintf(struct hist_entry *he, char *bf,
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F symbol_from for data without branch info
perf tools: Fix report -F symbol_from for data without branch info
Commit-ID: 1b9e97a2a95e4941dcfa968c4b2e04022e9a343e Gitweb: http://git.kernel.org/tip/1b9e97a2a95e4941dcfa968c4b2e04022e9a343e Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:05 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:28:39 -0200
perf tools: Fix report -F symbol_from for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F symbol_from perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
tools/perf/util/sort.c +13 -3
@@ -404,6 +404,12 @@ sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right)struct addr_map_symbol *from_l = &left->branch_info->from;struct addr_map_symbol *from_r = &right->branch_info->from; +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); + + from_l = &left->branch_info->from; + from_r = &right->branch_info->from; +if (!from_l->sym && !from_r->sym)return _sort__addr_cmp (from_l->addr, from_r->addr);
@@ -430,10 +436,14 @@ sort__sym_to_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__sym_from_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -struct addr_map_symbol *from = &he->branch_info->from; -return _hist_entry__sym_snprintf (from->map, from->sym, from->addr, - he->level, bf, size, width); +if (he->branch_info) { +struct addr_map_symbol *from = &he->branch_info->from; +return _hist_entry__sym_snprintf (from->map, from->sym, from->addr, + he->level, bf, size, width); + } + +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); } static int hist_entry__sym_to_snprintf(struct hist_entry *he, char *bf,
Jiri Olsa
reviewerPATCH v2 6/7 perf tools: Fix report -F dso_to for data without branch info
In reply to Jiri OlsaThe branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F dso_to perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
tools/perf/util/sort.c +8 -2
@@ -387,6 +387,9 @@ static int hist_entry__dso_from_snprintf(struct hist_entry *he, char *bf,static int64_t sort__dso_to_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return _sort__dso_cmp (left->branch_info->to.map, right->branch_info->to.map); }
@@ -394,8 +397,11 @@ sort__dso_to_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__dso_to_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -return _hist_entry__dso_snprintf (he->branch_info->to.map, - bf, size, width); +if (he->branch_info) +return _hist_entry__dso_snprintf (he->branch_info->to.map, + bf, size, width); +else +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); } static int64_t
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F dso_to for data without branch info
perf tools: Fix report -F dso_to for data without branch info
Commit-ID: 8b62fa59ed62bf1f42d35360fae8592c6b816a06 Gitweb: http://git.kernel.org/tip/8b62fa59ed62bf1f42d35360fae8592c6b816a06 Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:06 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:28:48 -0200
perf tools: Fix report -F dso_to for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F dso_to perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
tools/perf/util/sort.c +8 -2
@@ -387,6 +387,9 @@ static int hist_entry__dso_from_snprintf(struct hist_entry *he, char *bf,static int64_t sort__dso_to_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return _sort__dso_cmp (left->branch_info->to.map, right->branch_info->to.map); }
@@ -394,8 +397,11 @@ sort__dso_to_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__dso_to_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -return _hist_entry__dso_snprintf (he->branch_info->to.map, - bf, size, width); +if (he->branch_info) +return _hist_entry__dso_snprintf (he->branch_info->to.map, + bf, size, width); +else +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); } static int64_t
Jiri Olsa
reviewerPATCH v2 7/7 perf tools: Fix report -F dso_from for data without branch info
In reply to Jiri OlsaThe branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F dso_from perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
tools/perf/util/sort.c +8 -2
@@ -373,6 +373,9 @@ struct sort_entry sort_cpu = {static int64_t sort__dso_from_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return _sort__dso_cmp (left->branch_info->from.map, right->branch_info->from.map); }
@@ -380,8 +383,11 @@ sort__dso_from_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__dso_from_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -return _hist_entry__dso_snprintf (he->branch_info->from.map, - bf, size, width); +if (he->branch_info) +return _hist_entry__dso_snprintf (he->branch_info->from.map, + bf, size, width); +else +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); } static int64_t
Signature · 1 line
1.9.3
tip-bot for Jiri Olsa
merge bot[tip:perf/core] perf tools: Fix report -F dso_from for data without branch info
perf tools: Fix report -F dso_from for data without branch info
Commit-ID: 288a4b91fc0dc7c0ce3509339e8dec7b590a4d73 Gitweb: http://git.kernel.org/tip/288a4b91fc0dc7c0ce3509339e8dec7b590a4d73 Author: Jiri Olsa <[email protected]> AuthorDate: Thu, 16 Oct 2014 16:07:07 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 29 Oct 2014 10:29:05 -0200
perf tools: Fix report -F dso_from for data without branch info
The branch field sorting code assumes hist_entry::branch_info is allocated, which is wrong and following perf session ends up with report segfault.
$ perf record ls $ perf report -F dso_from perf: Segmentation fault
Checking that hist_entry::branch_info is valid and display "N/A" string in snprint callback if it's not.
--- tools/perf/util/sort.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
tools/perf/util/sort.c +8 -2
@@ -373,6 +373,9 @@ struct sort_entry sort_cpu = {static int64_t sort__dso_from_cmp (struct hist_entry *left,struct hist_entry *right) { +if (!left->branch_info || !right->branch_info) +return cmp_null (left->branch_info, right->branch_info); +return _sort__dso_cmp (left->branch_info->from.map, right->branch_info->from.map); }
@@ -380,8 +383,11 @@ sort__dso_from_cmp(struct hist_entry *left, struct hist_entry *right)static int hist_entry__dso_from_snprintf (struct hist_entry *he,char *bf,size_t size,unsigned int width) { -return _hist_entry__dso_snprintf (he->branch_info->from.map, - bf, size, width); +if (he->branch_info) +return _hist_entry__dso_snprintf (he->branch_info->from.map, + bf, size, width); +else +return repsep_snprintf (bf, size,"%-*.*s" , width, width,"N/A" ); } static int64_t
Em Thu, Oct 16, 2014 at 04:07:00PM +0200, Jiri Olsa escreveu:
Quoted 5 lines
hi,
adding somebranch_infochecks to prevent segfaults on data without branch info.v2: using
cmp_nullas suggested by Namhyung
Didn't notice this one, will try and put on next pull req,
- Arnaldo
Quoted 19 lines
jirka
available at:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/abort_fix_2Cc Andi Kleen <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Corey Ashford <[email protected]>Cc David Ahern <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Ingo Molnar <[email protected]>Cc Namhyung Kim <[email protected]>Cc Paul Mackerras <[email protected]>Cc Peter Zijlstra <[email protected]>Signed-off-by Jiri Olsa <[email protected]>--- tools/perf/util/sort.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 26 deletions(-)
Hi Jiri,
Quoted 5 lines · Jiri Olsa
hi,
adding somebranch_infochecks to prevent segfaults on data without branch info.v2: using
cmp_nullas suggested by Namhyung
For the series,
Thanks,
Namhyung
Quoted 18 lines
available at:
git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
perf/abort_fix_2Cc Andi Kleen <[email protected]>Cc Arnaldo Carvalho de Melo <[email protected]>Cc Corey Ashford <[email protected]>Cc David Ahern <[email protected]>Cc Frederic Weisbecker <[email protected]>Cc Ingo Molnar <[email protected]>Cc Namhyung Kim <[email protected]>Cc Paul Mackerras <[email protected]>Cc Peter Zijlstra <[email protected]>Signed-off-by Jiri Olsa <[email protected]>--- tools/perf/util/sort.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 26 deletions(-)
Arnaldo Carvalho de Melo
AppliedEm Wed, Oct 22, 2014 at 10:36:00AM +0900, Namhyung Kim escreveu:
Quoted 7 lines
Hi Jiri,
Quoted 4 lines · Jiri Olsa
hi,
adding somebranch_infochecks to prevent segfaults on data without branch info.
Quoted 5 lines
Quoted 1 line
v2: using
cmp_nullas suggested by NamhyungFor the series,
Acked-by Namhyung Kim <[email protected]>
Thanks, applied.
- Arnaldo