| From 99e92a69ece6aacaaf6c08be49fabfbfd5810717 Mon Sep 17 00:00:00 2001 |
| From: Andi Kleen <ak@linux.intel.com> |
| Date: Thu, 17 Jan 2019 11:48:34 -0800 |
| Subject: perf script: Fix crash with printing mixed trace point and other |
| events |
| |
| [ Upstream commit 96167167b6e17b25c0e05ecc31119b73baeab094 ] |
| |
| 'perf script' crashes currently when printing mixed trace points and |
| other events because the trace format does not handle events without |
| trace meta data. Add a simple check to avoid that. |
| |
| % cat > test.c |
| main() |
| { |
| printf("Hello world\n"); |
| } |
| ^D |
| % gcc -g -o test test.c |
| % sudo perf probe -x test 'test.c:3' |
| % perf record -e '{cpu/cpu-cycles,period=10000/,probe_test:main}:S' ./test |
| % perf script |
| <segfault> |
| |
| Committer testing: |
| |
| Before: |
| |
| # perf probe -x /lib64/libc-2.28.so malloc |
| Added new event: |
| probe_libc:malloc (on malloc in /usr/lib64/libc-2.28.so) |
| |
| You can now use it in all perf tools, such as: |
| |
| perf record -e probe_libc:malloc -aR sleep 1 |
| |
| # perf probe -l |
| probe_libc:malloc (on __libc_malloc@malloc/malloc.c in /usr/lib64/libc-2.28.so) |
| # perf record -e '{cpu/cpu-cycles,period=10000/,probe_libc:*}:S' sleep 1 |
| [ perf record: Woken up 1 times to write data ] |
| [ perf record: Captured and wrote 0.023 MB perf.data (40 samples) ] |
| # perf script |
| Segmentation fault (core dumped) |
| ^C |
| # |
| |
| After: |
| |
| # perf script | head -6 |
| sleep 2888 94796.944981: 16198 cpu/cpu-cycles,period=10000/: ffffffff925dc04f get_random_u32+0x1f (/lib/modules/5.0.0-rc2+/build/vmlinux) |
| sleep 2888 [-01] 94796.944981: probe_libc:malloc: |
| sleep 2888 94796.944983: 4713 cpu/cpu-cycles,period=10000/: ffffffff922763af change_protection+0xcf (/lib/modules/5.0.0-rc2+/build/vmlinux) |
| sleep 2888 [-01] 94796.944983: probe_libc:malloc: |
| sleep 2888 94796.944986: 9934 cpu/cpu-cycles,period=10000/: ffffffff922777e0 move_page_tables+0x0 (/lib/modules/5.0.0-rc2+/build/vmlinux) |
| sleep 2888 [-01] 94796.944986: probe_libc:malloc: |
| # |
| |
| Signed-off-by: Andi Kleen <ak@linux.intel.com> |
| Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Acked-by: Jiri Olsa <jolsa@kernel.org> |
| Link: http://lkml.kernel.org/r/20190117194834.21940-1-andi@firstfloor.org |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/perf/builtin-script.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c |
| index 6c1e7ceedcf3..ce2aee11e360 100644 |
| --- a/tools/perf/builtin-script.c |
| +++ b/tools/perf/builtin-script.c |
| @@ -1658,7 +1658,7 @@ static void process_event(struct perf_script *script, |
| return; |
| } |
| |
| - if (PRINT_FIELD(TRACE)) { |
| + if (PRINT_FIELD(TRACE) && sample->raw_data) { |
| event_format__fprintf(evsel->tp_format, sample->cpu, |
| sample->raw_data, sample->raw_size, fp); |
| } |
| -- |
| 2.19.1 |
| |