Re: [PATCH v5 0/5] perf report: Show inline stack

From: Jin, Yao
Date: Fri Mar 24 2017 - 20:20:53 EST


Hi Arnaldo,

I checked it needed to add dso__dmangle_sym() in symbol-minimal.c.

make -C tools/perf build-test

..........

iqhvUMsN DESTDIR=/tmp/tmp.9zqX9FtV0p
Makefile:203: Please install asciidoc xmlto to have the man pages installed
make_no_slang_O: cd . && make NO_SLANG=1 FEATURES_DUMP=/home/jinyao/skl-ws/perf-dev/tmp/acme/tools/perf/BUILD_TEST_FEATURE_DUMP -j8 O=/tmp/tmp.eDBcxsrMuA DESTDIR=/tmp/tmp.0wwJYGzYTr
OK

I will send a patch "perf report: Fix build-test error for make_minimal_O target" to fix that.

Thanks so much for your help!

Thanks

Jin Yao

On 3/25/2017 3:24 AM, Arnaldo Carvalho de Melo wrote:
Em Fri, Mar 24, 2017 at 04:01:19PM -0300, Arnaldo Carvalho de Melo escreveu:
Em Sat, Mar 18, 2017 at 05:41:09PM +0100, Milian Wolff escreveu:
On Donnerstag, 16. März 2017 22:42:22 CET Jin Yao wrote:
v5: Update according to Milian Wolff's comments. It groups by address
(then display file/ line), or by function (then display function name).
Thank you Jin, that is really good. I tested it and it works really well for
me.

Arnaldo, could you please consider merging this? It's an extremely useful
feature and direly missing from perf so far.
Thanks, applied.
But it fails testing in some cases, see below, will try to fix later, if nobody
beats me to it, what I have is in acme/perf/core, git.kernel.org


make -C tools/perf build-test

<SNIP>
make_minimal_O: cd . && make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 FEATURES_DUMP=/home/acme/git/linux/tools/perf/BUILD_TEST_FEATURE_DUMP -j4 O=/tmp/tmp.dQoIXBCebw DESTDIR=/tmp/tmp.zgrFKdJikV
cd . && make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 FEATURES_DUMP=/home/acme/git/linux/tools/perf/BUILD_TEST_FEATURE_DUMP -j4 O=/tmp/tmp.dQoIXBCebw DESTDIR=/tmp/tmp.zgrFKdJikV
BUILD: Doing 'make -j4' parallel build
HOSTCC /tmp/tmp.dQoIXBCebw/fixdep.o
HOSTLD /tmp/tmp.dQoIXBCebw/fixdep-in.o
LINK /tmp/tmp.dQoIXBCebw/fixdep
Makefile.config:458: Disabling post unwind, no support found.
Makefile.config:594: Python support disabled by user
GEN /tmp/tmp.dQoIXBCebw/common-cmds.h
Warning: x86_64's syscall_64.tbl differs from kernel
MKDIR /tmp/tmp.dQoIXBCebw/fd/
CC /tmp/tmp.dQoIXBCebw/fd/array.o
CC /tmp/tmp.dQoIXBCebw/event-parse.o
MKDIR /tmp/tmp.dQoIXBCebw/fs/
CC /tmp/tmp.dQoIXBCebw/fs/fs.o
LD /tmp/tmp.dQoIXBCebw/fd/libapi-in.o
CC /tmp/tmp.dQoIXBCebw/cpu.o
CC /tmp/tmp.dQoIXBCebw/debug.o
PERF_VERSION = 4.11.rc2.g8bc82f
CC /tmp/tmp.dQoIXBCebw/exec-cmd.o
CC /tmp/tmp.dQoIXBCebw/str_error_r.o
MKDIR /tmp/tmp.dQoIXBCebw/pmu-events/
MKDIR /tmp/tmp.dQoIXBCebw/fs/
HOSTCC /tmp/tmp.dQoIXBCebw/pmu-events/json.o
CC /tmp/tmp.dQoIXBCebw/fs/tracing_path.o
MKDIR /tmp/tmp.dQoIXBCebw/pmu-events/
HOSTCC /tmp/tmp.dQoIXBCebw/pmu-events/jsmn.o
CC /tmp/tmp.dQoIXBCebw/help.o
LD /tmp/tmp.dQoIXBCebw/fs/libapi-in.o
HOSTCC /tmp/tmp.dQoIXBCebw/pmu-events/jevents.o
LD /tmp/tmp.dQoIXBCebw/libapi-in.o
AR /tmp/tmp.dQoIXBCebw/libapi.a
CC /tmp/tmp.dQoIXBCebw/plugin_jbd2.o
CC /tmp/tmp.dQoIXBCebw/event-plugin.o
LD /tmp/tmp.dQoIXBCebw/plugin_jbd2-in.o
CC /tmp/tmp.dQoIXBCebw/plugin_hrtimer.o
HOSTLD /tmp/tmp.dQoIXBCebw/pmu-events/jevents-in.o
CC /tmp/tmp.dQoIXBCebw/perf-read-vdso32
LD /tmp/tmp.dQoIXBCebw/plugin_hrtimer-in.o
GEN perf-archive
CC /tmp/tmp.dQoIXBCebw/plugin_kmem.o
GEN perf-with-kcore
CC /tmp/tmp.dQoIXBCebw/trace-seq.o
MKDIR /tmp/tmp.dQoIXBCebw/util/
CC /tmp/tmp.dQoIXBCebw/util/alias.o
CC /tmp/tmp.dQoIXBCebw/pager.o
LD /tmp/tmp.dQoIXBCebw/plugin_kmem-in.o
CC /tmp/tmp.dQoIXBCebw/plugin_kvm.o
CC /tmp/tmp.dQoIXBCebw/parse-filter.o
LD /tmp/tmp.dQoIXBCebw/plugin_kvm-in.o
CC /tmp/tmp.dQoIXBCebw/parse-options.o
CC /tmp/tmp.dQoIXBCebw/plugin_mac80211.o
MKDIR /tmp/tmp.dQoIXBCebw/util/
CC /tmp/tmp.dQoIXBCebw/util/annotate.o
LD /tmp/tmp.dQoIXBCebw/plugin_mac80211-in.o
CC /tmp/tmp.dQoIXBCebw/plugin_sched_switch.o
CC /tmp/tmp.dQoIXBCebw/parse-utils.o
LD /tmp/tmp.dQoIXBCebw/plugin_sched_switch-in.o
CC /tmp/tmp.dQoIXBCebw/plugin_function.o
CC /tmp/tmp.dQoIXBCebw/kbuffer-parse.o
LD /tmp/tmp.dQoIXBCebw/plugin_function-in.o
CC /tmp/tmp.dQoIXBCebw/plugin_xen.o
LD /tmp/tmp.dQoIXBCebw/libtraceevent-in.o
LD /tmp/tmp.dQoIXBCebw/plugin_xen-in.o
LINK /tmp/tmp.dQoIXBCebw/libtraceevent.a
CC /tmp/tmp.dQoIXBCebw/plugin_scsi.o
CC /tmp/tmp.dQoIXBCebw/builtin-bench.o
LD /tmp/tmp.dQoIXBCebw/plugin_scsi-in.o
CC /tmp/tmp.dQoIXBCebw/plugin_cfg80211.o
LD /tmp/tmp.dQoIXBCebw/plugin_cfg80211-in.o
LINK /tmp/tmp.dQoIXBCebw/plugin_jbd2.so
LINK /tmp/tmp.dQoIXBCebw/plugin_hrtimer.so
LINK /tmp/tmp.dQoIXBCebw/plugin_kmem.so
LINK /tmp/tmp.dQoIXBCebw/plugin_kvm.so
LINK /tmp/tmp.dQoIXBCebw/plugin_mac80211.so
CC /tmp/tmp.dQoIXBCebw/run-command.o
LINK /tmp/tmp.dQoIXBCebw/plugin_sched_switch.so
LINK /tmp/tmp.dQoIXBCebw/plugin_function.so
CC /tmp/tmp.dQoIXBCebw/builtin-annotate.o
LINK /tmp/tmp.dQoIXBCebw/plugin_xen.so
LINK /tmp/tmp.dQoIXBCebw/plugin_scsi.so
LINK /tmp/tmp.dQoIXBCebw/plugin_cfg80211.so
LINK /tmp/tmp.dQoIXBCebw/pmu-events/jevents
CC /tmp/tmp.dQoIXBCebw/sigchain.o
GEN /tmp/tmp.dQoIXBCebw/libtraceevent-dynamic-list
GEN /tmp/tmp.dQoIXBCebw/pmu-events/pmu-events.c
CC /tmp/tmp.dQoIXBCebw/subcmd-config.o
LD /tmp/tmp.dQoIXBCebw/libsubcmd-in.o
CC /tmp/tmp.dQoIXBCebw/pmu-events/pmu-events.o
AR /tmp/tmp.dQoIXBCebw/libsubcmd.a
CC /tmp/tmp.dQoIXBCebw/util/block-range.o
CC /tmp/tmp.dQoIXBCebw/builtin-config.o
CC /tmp/tmp.dQoIXBCebw/util/build-id.o
CC /tmp/tmp.dQoIXBCebw/util/config.o
CC /tmp/tmp.dQoIXBCebw/builtin-diff.o
LD /tmp/tmp.dQoIXBCebw/pmu-events/pmu-events-in.o
CC /tmp/tmp.dQoIXBCebw/builtin-evlist.o
CC /tmp/tmp.dQoIXBCebw/builtin-ftrace.o
CC /tmp/tmp.dQoIXBCebw/util/ctype.o
CC /tmp/tmp.dQoIXBCebw/util/db-export.o
CC /tmp/tmp.dQoIXBCebw/util/env.o
CC /tmp/tmp.dQoIXBCebw/builtin-help.o
CC /tmp/tmp.dQoIXBCebw/builtin-sched.o
CC /tmp/tmp.dQoIXBCebw/util/event.o
CC /tmp/tmp.dQoIXBCebw/util/evlist.o
CC /tmp/tmp.dQoIXBCebw/builtin-buildid-list.o
CC /tmp/tmp.dQoIXBCebw/builtin-buildid-cache.o
CC /tmp/tmp.dQoIXBCebw/builtin-kallsyms.o
CC /tmp/tmp.dQoIXBCebw/util/evsel.o
CC /tmp/tmp.dQoIXBCebw/builtin-list.o
CC /tmp/tmp.dQoIXBCebw/util/evsel_fprintf.o
CC /tmp/tmp.dQoIXBCebw/arch/common.o
CC /tmp/tmp.dQoIXBCebw/builtin-record.o
CC /tmp/tmp.dQoIXBCebw/util/find_bit.o
CC /tmp/tmp.dQoIXBCebw/util/kallsyms.o
MKDIR /tmp/tmp.dQoIXBCebw/arch/x86/util/
CC /tmp/tmp.dQoIXBCebw/arch/x86/util/header.o
CC /tmp/tmp.dQoIXBCebw/util/levenshtein.o
MKDIR /tmp/tmp.dQoIXBCebw/arch/x86/util/
CC /tmp/tmp.dQoIXBCebw/arch/x86/util/tsc.o
CC /tmp/tmp.dQoIXBCebw/util/llvm-utils.o
CC /tmp/tmp.dQoIXBCebw/arch/x86/util/pmu.o
CC /tmp/tmp.dQoIXBCebw/builtin-report.o
CC /tmp/tmp.dQoIXBCebw/arch/x86/util/kvm-stat.o
BISON /tmp/tmp.dQoIXBCebw/util/parse-events-bison.c
CC /tmp/tmp.dQoIXBCebw/util/perf_regs.o
CC /tmp/tmp.dQoIXBCebw/util/path.o
CC /tmp/tmp.dQoIXBCebw/util/rbtree.o
CC /tmp/tmp.dQoIXBCebw/util/libstring.o
CC /tmp/tmp.dQoIXBCebw/arch/x86/util/perf_regs.o
CC /tmp/tmp.dQoIXBCebw/util/bitmap.o
CC /tmp/tmp.dQoIXBCebw/util/hweight.o
CC /tmp/tmp.dQoIXBCebw/arch/x86/util/group.o
CC /tmp/tmp.dQoIXBCebw/util/quote.o
CC /tmp/tmp.dQoIXBCebw/builtin-stat.o
LD /tmp/tmp.dQoIXBCebw/arch/x86/util/libperf-in.o
MKDIR /tmp/tmp.dQoIXBCebw/ui/
CC /tmp/tmp.dQoIXBCebw/ui/setup.o
MKDIR /tmp/tmp.dQoIXBCebw/arch/x86/tests/
CC /tmp/tmp.dQoIXBCebw/arch/x86/tests/arch-tests.o
MKDIR /tmp/tmp.dQoIXBCebw/arch/x86/tests/
CC /tmp/tmp.dQoIXBCebw/arch/x86/tests/rdpmc.o
CC /tmp/tmp.dQoIXBCebw/util/strbuf.o
MKDIR /tmp/tmp.dQoIXBCebw/ui/
CC /tmp/tmp.dQoIXBCebw/ui/helpline.o
CC /tmp/tmp.dQoIXBCebw/arch/x86/tests/perf-time-to-tsc.o
CC /tmp/tmp.dQoIXBCebw/util/string.o
CC /tmp/tmp.dQoIXBCebw/ui/progress.o
CC /tmp/tmp.dQoIXBCebw/ui/util.o
CC /tmp/tmp.dQoIXBCebw/arch/x86/tests/intel-cqm.o
CC /tmp/tmp.dQoIXBCebw/ui/hist.o
CC /tmp/tmp.dQoIXBCebw/util/strlist.o
LD /tmp/tmp.dQoIXBCebw/arch/x86/tests/libperf-in.o
LD /tmp/tmp.dQoIXBCebw/arch/x86/libperf-in.o
LD /tmp/tmp.dQoIXBCebw/arch/libperf-in.o
MKDIR /tmp/tmp.dQoIXBCebw/scripts/
LD /tmp/tmp.dQoIXBCebw/scripts/libperf-in.o
CC /tmp/tmp.dQoIXBCebw/builtin-timechart.o
CC /tmp/tmp.dQoIXBCebw/util/strfilter.o
CC /tmp/tmp.dQoIXBCebw/builtin-top.o
CC /tmp/tmp.dQoIXBCebw/util/top.o
CC /tmp/tmp.dQoIXBCebw/util/usage.o
CC /tmp/tmp.dQoIXBCebw/util/dso.o
MKDIR /tmp/tmp.dQoIXBCebw/ui/stdio/
CC /tmp/tmp.dQoIXBCebw/ui/stdio/hist.o
CC /tmp/tmp.dQoIXBCebw/builtin-script.o
CC /tmp/tmp.dQoIXBCebw/builtin-kmem.o
LD /tmp/tmp.dQoIXBCebw/ui/libperf-in.o
CC /tmp/tmp.dQoIXBCebw/util/symbol.o
CC /tmp/tmp.dQoIXBCebw/builtin-lock.o
CC /tmp/tmp.dQoIXBCebw/util/symbol_fprintf.o
CC /tmp/tmp.dQoIXBCebw/util/color.o
CC /tmp/tmp.dQoIXBCebw/builtin-kvm.o
CC /tmp/tmp.dQoIXBCebw/util/header.o
CC /tmp/tmp.dQoIXBCebw/util/callchain.o
CC /tmp/tmp.dQoIXBCebw/util/values.o
CC /tmp/tmp.dQoIXBCebw/util/debug.o
CC /tmp/tmp.dQoIXBCebw/builtin-inject.o
CC /tmp/tmp.dQoIXBCebw/util/machine.o
CC /tmp/tmp.dQoIXBCebw/builtin-mem.o
CC /tmp/tmp.dQoIXBCebw/util/map.o
CC /tmp/tmp.dQoIXBCebw/builtin-data.o
CC /tmp/tmp.dQoIXBCebw/util/pstack.o
CC /tmp/tmp.dQoIXBCebw/builtin-version.o
CC /tmp/tmp.dQoIXBCebw/util/session.o
CC /tmp/tmp.dQoIXBCebw/builtin-c2c.o
CC /tmp/tmp.dQoIXBCebw/util/ordered-events.o
CC /tmp/tmp.dQoIXBCebw/util/namespaces.o
MKDIR /tmp/tmp.dQoIXBCebw/bench/
CC /tmp/tmp.dQoIXBCebw/bench/sched-messaging.o
CC /tmp/tmp.dQoIXBCebw/util/comm.o
MKDIR /tmp/tmp.dQoIXBCebw/bench/
CC /tmp/tmp.dQoIXBCebw/bench/sched-pipe.o
CC /tmp/tmp.dQoIXBCebw/util/thread.o
CC /tmp/tmp.dQoIXBCebw/bench/mem-functions.o
CC /tmp/tmp.dQoIXBCebw/util/thread_map.o
CC /tmp/tmp.dQoIXBCebw/util/trace-event-parse.o
MKDIR /tmp/tmp.dQoIXBCebw/tests/
CC /tmp/tmp.dQoIXBCebw/tests/builtin-test.o
CC /tmp/tmp.dQoIXBCebw/bench/futex-hash.o
CC /tmp/tmp.dQoIXBCebw/util/parse-events-bison.o
CC /tmp/tmp.dQoIXBCebw/bench/futex-wake.o
BISON /tmp/tmp.dQoIXBCebw/util/pmu-bison.c
CC /tmp/tmp.dQoIXBCebw/util/trace-event-read.o
MKDIR /tmp/tmp.dQoIXBCebw/tests/
CC /tmp/tmp.dQoIXBCebw/tests/parse-events.o
CC /tmp/tmp.dQoIXBCebw/bench/futex-wake-parallel.o
CC /tmp/tmp.dQoIXBCebw/util/trace-event-info.o
CC /tmp/tmp.dQoIXBCebw/bench/futex-requeue.o
CC /tmp/tmp.dQoIXBCebw/util/trace-event-scripting.o
CC /tmp/tmp.dQoIXBCebw/bench/futex-lock-pi.o
CC /tmp/tmp.dQoIXBCebw/util/trace-event.o
CC /tmp/tmp.dQoIXBCebw/bench/mem-memcpy-x86-64-asm.o
CC /tmp/tmp.dQoIXBCebw/bench/mem-memset-x86-64-asm.o
CC /tmp/tmp.dQoIXBCebw/util/svghelper.o
LD /tmp/tmp.dQoIXBCebw/bench/perf-in.o
CC /tmp/tmp.dQoIXBCebw/perf.o
CC /tmp/tmp.dQoIXBCebw/util/sort.o
CC /tmp/tmp.dQoIXBCebw/tests/dso-data.o
CC /tmp/tmp.dQoIXBCebw/tests/attr.o
CC /tmp/tmp.dQoIXBCebw/util/hist.o
CC /tmp/tmp.dQoIXBCebw/tests/vmlinux-kallsyms.o
CC /tmp/tmp.dQoIXBCebw/tests/openat-syscall.o
CC /tmp/tmp.dQoIXBCebw/tests/openat-syscall-all-cpus.o
CC /tmp/tmp.dQoIXBCebw/tests/openat-syscall-tp-fields.o
CC /tmp/tmp.dQoIXBCebw/tests/mmap-basic.o
CC /tmp/tmp.dQoIXBCebw/tests/perf-record.o
CC /tmp/tmp.dQoIXBCebw/util/util.o
CC /tmp/tmp.dQoIXBCebw/tests/evsel-roundtrip-name.o
CC /tmp/tmp.dQoIXBCebw/tests/evsel-tp-sched.o
CC /tmp/tmp.dQoIXBCebw/tests/fdarray.o
CC /tmp/tmp.dQoIXBCebw/util/xyarray.o
CC /tmp/tmp.dQoIXBCebw/tests/pmu.o
CC /tmp/tmp.dQoIXBCebw/util/cpumap.o
CC /tmp/tmp.dQoIXBCebw/tests/hists_common.o
CC /tmp/tmp.dQoIXBCebw/util/cgroup.o
CC /tmp/tmp.dQoIXBCebw/tests/hists_link.o
CC /tmp/tmp.dQoIXBCebw/tests/hists_filter.o
CC /tmp/tmp.dQoIXBCebw/util/target.o
CC /tmp/tmp.dQoIXBCebw/tests/hists_output.o
CC /tmp/tmp.dQoIXBCebw/util/rblist.o
CC /tmp/tmp.dQoIXBCebw/util/intlist.o
CC /tmp/tmp.dQoIXBCebw/tests/hists_cumulate.o
CC /tmp/tmp.dQoIXBCebw/util/vdso.o
CC /tmp/tmp.dQoIXBCebw/util/counts.o
CC /tmp/tmp.dQoIXBCebw/util/stat.o
CC /tmp/tmp.dQoIXBCebw/util/stat-shadow.o
CC /tmp/tmp.dQoIXBCebw/tests/python-use.o
CC /tmp/tmp.dQoIXBCebw/tests/bp_signal.o
CC /tmp/tmp.dQoIXBCebw/tests/bp_signal_overflow.o
CC /tmp/tmp.dQoIXBCebw/util/record.o
CC /tmp/tmp.dQoIXBCebw/tests/task-exit.o
CC /tmp/tmp.dQoIXBCebw/tests/sw-clock.o
CC /tmp/tmp.dQoIXBCebw/util/srcline.o
CC /tmp/tmp.dQoIXBCebw/tests/mmap-thread-lookup.o
CC /tmp/tmp.dQoIXBCebw/util/data.o
CC /tmp/tmp.dQoIXBCebw/tests/thread-mg-share.o
CC /tmp/tmp.dQoIXBCebw/util/tsc.o
CC /tmp/tmp.dQoIXBCebw/tests/switch-tracking.o
CC /tmp/tmp.dQoIXBCebw/util/cloexec.o
CC /tmp/tmp.dQoIXBCebw/tests/keep-tracking.o
CC /tmp/tmp.dQoIXBCebw/util/call-path.o
CC /tmp/tmp.dQoIXBCebw/util/thread-stack.o
CC /tmp/tmp.dQoIXBCebw/util/parse-branch-options.o
CC /tmp/tmp.dQoIXBCebw/tests/code-reading.o
CC /tmp/tmp.dQoIXBCebw/tests/sample-parsing.o
CC /tmp/tmp.dQoIXBCebw/util/dump-insn.o
CC /tmp/tmp.dQoIXBCebw/util/parse-regs-options.o
CC /tmp/tmp.dQoIXBCebw/util/term.o
CC /tmp/tmp.dQoIXBCebw/tests/parse-no-sample-id-all.o
CC /tmp/tmp.dQoIXBCebw/util/help-unknown-cmd.o
CC /tmp/tmp.dQoIXBCebw/tests/kmod-path.o
CC /tmp/tmp.dQoIXBCebw/util/mem-events.o
CC /tmp/tmp.dQoIXBCebw/tests/thread-map.o
CC /tmp/tmp.dQoIXBCebw/util/vsprintf.o
CC /tmp/tmp.dQoIXBCebw/util/drv_configs.o
CC /tmp/tmp.dQoIXBCebw/tests/llvm.o
CC /tmp/tmp.dQoIXBCebw/util/time-utils.o
CC /tmp/tmp.dQoIXBCebw/tests/bpf.o
CC /tmp/tmp.dQoIXBCebw/tests/topology.o
BISON /tmp/tmp.dQoIXBCebw/util/expr-bison.c
CC /tmp/tmp.dQoIXBCebw/util/symbol-minimal.o
MKDIR /tmp/tmp.dQoIXBCebw/util/scripting-engines/
LD /tmp/tmp.dQoIXBCebw/util/scripting-engines/libperf-in.o
CC /tmp/tmp.dQoIXBCebw/util/zlib.o
CC /tmp/tmp.dQoIXBCebw/tests/cpumap.o
CC /tmp/tmp.dQoIXBCebw/util/lzma.o
CC /tmp/tmp.dQoIXBCebw/tests/stat.o
CC /tmp/tmp.dQoIXBCebw/tests/event_update.o
CC /tmp/tmp.dQoIXBCebw/util/demangle-java.o
CC /tmp/tmp.dQoIXBCebw/tests/event-times.o
CC /tmp/tmp.dQoIXBCebw/util/demangle-rust.o
CC /tmp/tmp.dQoIXBCebw/tests/expr.o
CC /tmp/tmp.dQoIXBCebw/util/perf-hooks.o
CC /tmp/tmp.dQoIXBCebw/tests/backward-ring-buffer.o
CC /tmp/tmp.dQoIXBCebw/tests/sdt.o
CC /tmp/tmp.dQoIXBCebw/tests/is_printable_array.o
FLEX /tmp/tmp.dQoIXBCebw/util/parse-events-flex.c
FLEX /tmp/tmp.dQoIXBCebw/util/pmu-flex.c
CC /tmp/tmp.dQoIXBCebw/util/pmu-bison.o
CC /tmp/tmp.dQoIXBCebw/tests/bitmap.o
CC /tmp/tmp.dQoIXBCebw/tests/perf-hooks.o
CC /tmp/tmp.dQoIXBCebw/tests/clang.o
CC /tmp/tmp.dQoIXBCebw/util/expr-bison.o
CC /tmp/tmp.dQoIXBCebw/tests/unit_number__scnprintf.o
CC /tmp/tmp.dQoIXBCebw/tests/llvm-src-base.o
CC /tmp/tmp.dQoIXBCebw/tests/llvm-src-kbuild.o
CC /tmp/tmp.dQoIXBCebw/tests/llvm-src-prologue.o
CC /tmp/tmp.dQoIXBCebw/tests/llvm-src-relocation.o
LD /tmp/tmp.dQoIXBCebw/tests/perf-in.o
CC /tmp/tmp.dQoIXBCebw/util/parse-events.o
CC /tmp/tmp.dQoIXBCebw/util/pmu.o
CC /tmp/tmp.dQoIXBCebw/util/parse-events-flex.o
LD /tmp/tmp.dQoIXBCebw/perf-in.o
CC /tmp/tmp.dQoIXBCebw/util/pmu-flex.o
LD /tmp/tmp.dQoIXBCebw/util/libperf-in.o
LD /tmp/tmp.dQoIXBCebw/libperf-in.o
AR /tmp/tmp.dQoIXBCebw/libperf.a
LINK /tmp/tmp.dQoIXBCebw/perf
/tmp/tmp.dQoIXBCebw/libperf.a(libperf-in.o): In function `inline_list__append':
/home/acme/git/linux/tools/perf/util/srcline.c:47: undefined reference to `dso__demangle_sym'
collect2: error: ld returned 1 exit status
Makefile.perf:420: recipe for target '/tmp/tmp.dQoIXBCebw/perf' failed
make[4]: *** [/tmp/tmp.dQoIXBCebw/perf] Error 1
Makefile.perf:204: recipe for target 'sub-make' failed
make[3]: *** [sub-make] Error 2
Makefile:68: recipe for target 'all' failed
make[2]: *** [all] Error 2
tests/make:296: recipe for target 'make_minimal_O' failed
make[1]: *** [make_minimal_O] Error 1
Makefile:102: recipe for target 'build-test' failed
make: *** [build-test] Error 2
make: Leaving directory '/home/acme/git/linux/tools/perf'
[acme@jouet linux]$

That said, Jin, here are some observations that could be improved in the
future (I don't think any of these should hold back merging this feature now):

For the following example code build with "-O2 -g" and recorded with "--call-
graph dwarf" I observe some output combinations that could potentially be
improved in the future:

~~~~~~~~~~~~~~~~~~~~
#include <complex>
#include <cmath>
#include <random>
#include <iostream>

using namespace std;

int main()
{
uniform_real_distribution<double> uniform(-1E5, 1E5);
default_random_engine engine;
double s = 0;
for (int i = 0; i < 10000000; ++i) {
s += norm(complex<double>(uniform(engine), uniform(engine)));
}
cout << s << '\n';
return 0;
}
~~~~~~~~~~~~~~~~

#1 duplicated entries when grouping by function:

~~~~~~~~~~~~~~~~
perf report --inline --stdio
...
--35.34%--_start
__libc_start_main
main
main (inline)
std::uniform_real_distribution<double>::operator()<std::linear_congruential_engine<unsigned
long, 16807ul, 0ul, 2147483647ul> > (inline)
std::uniform_real_distribution<double>::operator()<std::linear_congruential_engine<unsigned
long, 16807ul, 0ul, 2147483647ul> > (inline)
std::__detail::_Adaptor<std::linear_congruential_engine<unsigned
long, 16807ul, 0ul, 2147483647ul>, double>::operator() (inline)
~~~~~~~~~~~~~~~~

Here, we see main twice, once for the "real" frame, and once for an inlined
one? Then we see the same function twice as inlined frame, which is also odd.

~~~~~~~~~~~~~~~~
perf report --inline --stdio --no-children
...
59.81% cpp-inlining libm-2.25.so [.] __hypot_finite
|
---__hypot_finite
hypot
main
std::norm<double> (inline)
main (inline)
__libc_start_main
_start
~~~~~~~~~~~~~~~~

Here we see a confusing output. The first "main" frame below "hypot" is
actually code form cpp's complex header which got inlined into main. That
associates the wrong function name to this frame, i.e. "main" instead of
std::norm". When the inline stack is shown below we actually see what happens,
i.e. we eventually end up in main again, but of course this output is not the
best as-is.

But, again: I think these are minor issues, and the feature itself is already
extremely useful and I hope to see it finally merged.

Thanks again Jin for your good work!

Cheers

--
Milian Wolff | milian.wolff@xxxxxxxx | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts