mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-26 22:24:09 +08:00
a074865e60
Perf hooks allow hooking user code at perf events. They can be used for manipulation of BPF maps, taking snapshot and reporting results. In this patch two perf hook points are introduced: record_start and record_end. To avoid buggy user actions, a SIGSEGV signal handler is introduced into 'perf record'. It turns off perf hook if it causes a segfault and report an error to help debugging. A test case for perf hook is introduced. Test result: $ ./buildperf/perf test -v hook 50: Test perf hooks : --- start --- test child forked, pid 10311 SIGSEGV is observed as expected, try to recover. Fatal error (SEGFAULT) in perf hook 'test' test child finished with 0 ---- end ---- Test perf hooks: Ok Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Alexei Starovoitov <ast@fb.com> Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Joe Stringer <joe@ovn.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/20161126070354.141764-5-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
190 lines
5.7 KiB
Plaintext
190 lines
5.7 KiB
Plaintext
libperf-y += alias.o
|
|
libperf-y += annotate.o
|
|
libperf-y += block-range.o
|
|
libperf-y += build-id.o
|
|
libperf-y += config.o
|
|
libperf-y += ctype.o
|
|
libperf-y += db-export.o
|
|
libperf-y += env.o
|
|
libperf-y += event.o
|
|
libperf-y += evlist.o
|
|
libperf-y += evsel.o
|
|
libperf-y += evsel_fprintf.o
|
|
libperf-y += find_bit.o
|
|
libperf-y += kallsyms.o
|
|
libperf-y += levenshtein.o
|
|
libperf-y += llvm-utils.o
|
|
libperf-y += parse-events.o
|
|
libperf-y += perf_regs.o
|
|
libperf-y += path.o
|
|
libperf-y += rbtree.o
|
|
libperf-y += libstring.o
|
|
libperf-y += bitmap.o
|
|
libperf-y += hweight.o
|
|
libperf-y += quote.o
|
|
libperf-y += strbuf.o
|
|
libperf-y += string.o
|
|
libperf-y += strlist.o
|
|
libperf-y += strfilter.o
|
|
libperf-y += top.o
|
|
libperf-y += usage.o
|
|
libperf-y += dso.o
|
|
libperf-y += symbol.o
|
|
libperf-y += symbol_fprintf.o
|
|
libperf-y += color.o
|
|
libperf-y += header.o
|
|
libperf-y += callchain.o
|
|
libperf-y += values.o
|
|
libperf-y += debug.o
|
|
libperf-y += machine.o
|
|
libperf-y += map.o
|
|
libperf-y += pstack.o
|
|
libperf-y += session.o
|
|
libperf-$(CONFIG_AUDIT) += syscalltbl.o
|
|
libperf-y += ordered-events.o
|
|
libperf-y += comm.o
|
|
libperf-y += thread.o
|
|
libperf-y += thread_map.o
|
|
libperf-y += trace-event-parse.o
|
|
libperf-y += parse-events-flex.o
|
|
libperf-y += parse-events-bison.o
|
|
libperf-y += pmu.o
|
|
libperf-y += pmu-flex.o
|
|
libperf-y += pmu-bison.o
|
|
libperf-y += trace-event-read.o
|
|
libperf-y += trace-event-info.o
|
|
libperf-y += trace-event-scripting.o
|
|
libperf-y += trace-event.o
|
|
libperf-y += svghelper.o
|
|
libperf-y += sort.o
|
|
libperf-y += hist.o
|
|
libperf-y += util.o
|
|
libperf-y += xyarray.o
|
|
libperf-y += cpumap.o
|
|
libperf-y += cgroup.o
|
|
libperf-y += target.o
|
|
libperf-y += rblist.o
|
|
libperf-y += intlist.o
|
|
libperf-y += vdso.o
|
|
libperf-y += counts.o
|
|
libperf-y += stat.o
|
|
libperf-y += stat-shadow.o
|
|
libperf-y += record.o
|
|
libperf-y += srcline.o
|
|
libperf-y += data.o
|
|
libperf-y += tsc.o
|
|
libperf-y += cloexec.o
|
|
libperf-y += call-path.o
|
|
libperf-y += thread-stack.o
|
|
libperf-$(CONFIG_AUXTRACE) += auxtrace.o
|
|
libperf-$(CONFIG_AUXTRACE) += intel-pt-decoder/
|
|
libperf-$(CONFIG_AUXTRACE) += intel-pt.o
|
|
libperf-$(CONFIG_AUXTRACE) += intel-bts.o
|
|
libperf-y += parse-branch-options.o
|
|
libperf-y += parse-regs-options.o
|
|
libperf-y += term.o
|
|
libperf-y += help-unknown-cmd.o
|
|
libperf-y += mem-events.o
|
|
libperf-y += vsprintf.o
|
|
libperf-y += drv_configs.o
|
|
|
|
libperf-$(CONFIG_LIBBPF) += bpf-loader.o
|
|
libperf-$(CONFIG_BPF_PROLOGUE) += bpf-prologue.o
|
|
libperf-$(CONFIG_LIBELF) += symbol-elf.o
|
|
libperf-$(CONFIG_LIBELF) += probe-file.o
|
|
libperf-$(CONFIG_LIBELF) += probe-event.o
|
|
|
|
ifndef CONFIG_LIBELF
|
|
libperf-y += symbol-minimal.o
|
|
endif
|
|
|
|
libperf-$(CONFIG_DWARF) += probe-finder.o
|
|
libperf-$(CONFIG_DWARF) += dwarf-aux.o
|
|
libperf-$(CONFIG_DWARF) += dwarf-regs.o
|
|
|
|
libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
|
|
libperf-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind-local.o
|
|
libperf-$(CONFIG_LIBUNWIND) += unwind-libunwind.o
|
|
libperf-$(CONFIG_LIBUNWIND_X86) += libunwind/x86_32.o
|
|
libperf-$(CONFIG_LIBUNWIND_AARCH64) += libunwind/arm64.o
|
|
|
|
libperf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
|
|
|
|
libperf-y += scripting-engines/
|
|
|
|
libperf-$(CONFIG_ZLIB) += zlib.o
|
|
libperf-$(CONFIG_LZMA) += lzma.o
|
|
libperf-y += demangle-java.o
|
|
libperf-y += demangle-rust.o
|
|
|
|
ifdef CONFIG_JITDUMP
|
|
libperf-$(CONFIG_LIBELF) += jitdump.o
|
|
libperf-$(CONFIG_LIBELF) += genelf.o
|
|
libperf-$(CONFIG_DWARF) += genelf_debug.o
|
|
endif
|
|
|
|
libperf-y += perf-hooks.o
|
|
|
|
CFLAGS_config.o += -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
# avoid compiler warnings in 32-bit mode
|
|
CFLAGS_genelf_debug.o += -Wno-packed
|
|
|
|
$(OUTPUT)util/parse-events-flex.c: util/parse-events.l $(OUTPUT)util/parse-events-bison.c
|
|
$(call rule_mkdir)
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $@ --header-file=$(OUTPUT)util/parse-events-flex.h $(PARSER_DEBUG_FLEX) util/parse-events.l
|
|
|
|
$(OUTPUT)util/parse-events-bison.c: util/parse-events.y
|
|
$(call rule_mkdir)
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v util/parse-events.y -d $(PARSER_DEBUG_BISON) -o $@ -p parse_events_
|
|
|
|
$(OUTPUT)util/pmu-flex.c: util/pmu.l $(OUTPUT)util/pmu-bison.c
|
|
$(call rule_mkdir)
|
|
$(Q)$(call echo-cmd,flex)$(FLEX) -o $@ --header-file=$(OUTPUT)util/pmu-flex.h util/pmu.l
|
|
|
|
$(OUTPUT)util/pmu-bison.c: util/pmu.y
|
|
$(call rule_mkdir)
|
|
$(Q)$(call echo-cmd,bison)$(BISON) -v util/pmu.y -d -o $@ -p perf_pmu_
|
|
|
|
CFLAGS_parse-events-flex.o += -w
|
|
CFLAGS_pmu-flex.o += -w
|
|
CFLAGS_parse-events-bison.o += -DYYENABLE_NLS=0 -w
|
|
CFLAGS_pmu-bison.o += -DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=0 -w
|
|
|
|
$(OUTPUT)util/parse-events.o: $(OUTPUT)util/parse-events-flex.c $(OUTPUT)util/parse-events-bison.c
|
|
$(OUTPUT)util/pmu.o: $(OUTPUT)util/pmu-flex.c $(OUTPUT)util/pmu-bison.c
|
|
|
|
CFLAGS_bitmap.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
CFLAGS_find_bit.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
CFLAGS_rbtree.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
CFLAGS_libstring.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
CFLAGS_hweight.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
|
|
CFLAGS_parse-events.o += -Wno-redundant-decls
|
|
|
|
$(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
$(OUTPUT)util/bitmap.o: ../lib/bitmap.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
$(OUTPUT)util/find_bit.o: ../lib/find_bit.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
$(OUTPUT)util/rbtree.o: ../lib/rbtree.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
$(OUTPUT)util/libstring.o: ../lib/string.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
$(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|
|
|
|
$(OUTPUT)util/vsprintf.o: ../lib/vsprintf.c FORCE
|
|
$(call rule_mkdir)
|
|
$(call if_changed_dep,cc_o_c)
|