From: Andrew Watts <akwatts@ymail.com>
To: linux-kernel@vger.kernel.org
Subject: [SEGFAULT: perf]
Date: Mon, 23 Jul 2012 08:52:17 -0500 [thread overview]
Message-ID: <20120723135214.GA14465@ymail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 3743 bytes --]
perf report on 3.4.6 segfaults when certain pointers are null. Attached is
a patch that applies cleanly @3.4.6 and addresses (A). I am not comfortable
suggesting fixes for (B) and (C).
~ Andy
===
(A) perf report with sort on comm/pid/parent/dso:
(gdb) run report --sort=comm
Program received signal SIGSEGV, Segmentation fault.
0x0805c00b in perf_evsel__add_hist_entry (evsel=0x81c56a8, al=0xbfffe9b0,
sample=0xbfffea84, machine=0x81c3fa8) at builtin-report.c:171
171 if (notes->src == NULL && symbol__alloc_hist(he->ms.sym) < 0)
#0 0x0805c00b in perf_evsel__add_hist_entry (evsel=0x81c56a8, al=0xbfffe9b0,
sample=0xbfffea84, machine=0x81c3fa8) at builtin-report.c:171
#1 0x0805c234 in process_sample_event (tool=0xbffff27c, event=0xb6db1f38,
sample=0xbfffea84, evsel=0x81c56a8, machine=0x81c3fa8)
at builtin-report.c:216
#2 0x080a3097 in perf_session_deliver_event (session=0x81c3f50, event=
0xb6db1f38, sample=0xbfffea84, tool=0xbffff27c, file_offset=339768)
at util/session.c:885
#3 0x080a24d1 in flush_sample_queue (s=0x81c3f50, tool=0xbffff27c)
at util/session.c:587
#4 0x080a40e3 in __perf_session__process_events (session=0x81c3f50,
data_offset=280, data_size=419640, file_size=419920, tool=0xbffff27c)
at util/session.c:1257
#5 0x080a41d3 in perf_session__process_events (self=0x81c3f50, tool=
0xbffff27c) at util/session.c:1273
(gdb) print he->ms.sym
$1 = (struct symbol *) 0x0
--
(B) perf report segfaults on sorts of symbol_from/symbol_to:
(gdb) run report --sort=symbol_from
Program received signal SIGSEGV, Segmentation fault.
0x080b8777 in sort__sym_from_cmp (left=0xbfffe878, right=0x84dfde0)
at util/sort.c:334
334 if (!from_l->sym && !from_r->sym
(gdb) bt
#0 0x080b8777 in sort__sym_from_cmp (left=0xbfffe878, right=0x84dfde0)
at util/sort.c:334
#1 0x080ba0b8 in hist_entry__cmp (left=0xbfffe878, right=0x84dfde0)
at util/hist.c:345
#2 0x080b9c31 in add_hist_entry (hists=0x81c571c, entry=0xbfffe878, al=
0xbfffe9b0, period=333940) at util/hist.c:254
#3 0x080ba04c in __hists__add_entry (self=0x81c571c, al=0xbfffe9b0,
sym_parent=0x0, period=333940) at util/hist.c:335
#4 0x0805bf50 in perf_evsel__add_hist_entry (evsel=0x81c56a8, al=0xbfffe9b0,
sample=0xbfffea84, machine=0x81c3fa8) at builtin-report.c:149
#5 0x0805c234 in process_sample_event (tool=0xbffff27c, event=0xb6db1840,
sample=0xbfffea84, evsel=0x81c56a8, machine=0x81c3fa8)
at builtin-report.c:216
(gdb) print left->branch_info
$2 = (struct branch_info *) 0x0
(gdb) print right->branch_info
$3 = (struct branch_info *) 0x0
--
(C) perf report segfaults with dso_from/dso_to:
(gdb) run report --sort=dso_to
Program received signal SIGSEGV, Segmentation fault.
sort__dso_to_cmp (left=0xbfffe878, right=0x82346f0) at util/sort.c:317
317 return _sort__dso_cmp(left->branch_info->to.map,
(gdb) bt
#0 sort__dso_to_cmp (left=0xbfffe878, right=0x82346f0) at util/sort.c:317
#1 0x080ba0c8 in hist_entry__cmp (left=0xbfffe878, right=0x82346f0)
at util/hist.c:345
#2 0x080b9c41 in add_hist_entry (hists=0x81c571c, entry=0xbfffe878, al=
0xbfffe9b0, period=333331) at util/hist.c:254
#3 0x080ba05c in __hists__add_entry (self=0x81c571c, al=0xbfffe9b0,
sym_parent=0x0, period=333331) at util/hist.c:335
#4 0x0805bf50 in perf_evsel__add_hist_entry (evsel=0x81c56a8, al=0xbfffe9b0,
sample=0xbfffea84, machine=0x81c3fa8) at builtin-report.c:149
#5 0x0805c242 in process_sample_event (tool=0xbffff27c, event=0xb6dbf800,
sample=0xbfffea84, evsel=0x81c56a8, machine=0x81c3fa8)
at builtin-report.c:216
(gdb) print left->branch_info
$4 = (struct branch_info *) 0x0
(gdb) print right->branch_info
$5 = (struct branch_info *) 0x0
===
[-- Attachment #2: perf1.diff --]
[-- Type: text/plain, Size: 434 bytes --]
--- builtin-report.c.orig 2012-07-22
+++ builtin-report.c 2012-07-22
@@ -162,7 +162,7 @@ static int perf_evsel__add_hist_entry(st
* so we don't allocated the extra space needed because the stdio
* code will not use it.
*/
- if (al->sym != NULL && use_browser > 0) {
+ if (al->sym != NULL && he->ms.sym != NULL && use_browser > 0) {
struct annotation *notes = symbol__annotation(he->ms.sym);
assert(evsel != NULL);
next reply other threads:[~2012-07-23 13:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-23 13:52 Andrew Watts [this message]
2012-07-24 0:18 ` [SEGFAULT: perf] Namhyung Kim
2012-07-24 16:18 ` Andrew Watts
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120723135214.GA14465@ymail.com \
--to=akwatts@ymail.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.