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

From: Arnaldo Carvalho de Melo
Date: Fri Mar 24 2017 - 15:24:32 EST


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
>
>