2014-12-29 22:03:09 +08:00
|
|
|
perf-y += builtin-test.o
|
|
|
|
perf-y += parse-events.o
|
|
|
|
perf-y += dso-data.o
|
|
|
|
perf-y += attr.o
|
|
|
|
perf-y += vmlinux-kallsyms.o
|
2015-05-29 23:36:11 +08:00
|
|
|
perf-y += openat-syscall.o
|
|
|
|
perf-y += openat-syscall-all-cpus.o
|
|
|
|
perf-y += openat-syscall-tp-fields.o
|
2014-12-29 22:03:09 +08:00
|
|
|
perf-y += mmap-basic.o
|
|
|
|
perf-y += perf-record.o
|
|
|
|
perf-y += evsel-roundtrip-name.o
|
|
|
|
perf-y += evsel-tp-sched.o
|
|
|
|
perf-y += fdarray.o
|
|
|
|
perf-y += pmu.o
|
|
|
|
perf-y += hists_common.o
|
|
|
|
perf-y += hists_link.o
|
|
|
|
perf-y += hists_filter.o
|
|
|
|
perf-y += hists_output.o
|
|
|
|
perf-y += hists_cumulate.o
|
|
|
|
perf-y += python-use.o
|
|
|
|
perf-y += bp_signal.o
|
|
|
|
perf-y += bp_signal_overflow.o
|
|
|
|
perf-y += task-exit.o
|
|
|
|
perf-y += sw-clock.o
|
|
|
|
perf-y += mmap-thread-lookup.o
|
|
|
|
perf-y += thread-mg-share.o
|
|
|
|
perf-y += switch-tracking.o
|
|
|
|
perf-y += keep-tracking.o
|
|
|
|
perf-y += code-reading.o
|
|
|
|
perf-y += sample-parsing.o
|
|
|
|
perf-y += parse-no-sample-id-all.o
|
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path
into several components.
The new kmod_path__parse function and few defines:
int __kmod_path__parse(struct kmod_path *m, const char *path,
bool alloc_name, bool alloc_ext);
#define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false)
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
parse kernel module @path and updates @m argument like:
@comp - true if @path contains supported compression suffix,
false otherwise
@kmod - true if @path contains '.ko' suffix in right position,
false otherwise
@name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name
of the kernel module without suffixes, otherwise strudup-ed
base name of @path
@ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string
the compression suffix
It returns 0 if there's no strdup error, -ENOMEM otherwise.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-9t6eqg8j610r94l743hkntiv@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-05 22:40:25 +08:00
|
|
|
perf-y += kmod-path.o
|
2015-06-26 17:29:08 +08:00
|
|
|
perf-y += thread-map.o
|
2015-11-06 21:49:42 +08:00
|
|
|
perf-y += llvm.o llvm-src-base.o llvm-src-kbuild.o
|
2015-09-04 16:58:31 +08:00
|
|
|
perf-y += topology.o
|
2014-12-29 22:03:09 +08:00
|
|
|
|
perf test: Enhance the LLVM test: update basic BPF test program
This patch replaces the original toy BPF program with the previously
introduced bpf-script-example.c. Dynamically embeddeding it into
'llvm-src-base.c'.
The newly introduced BPF program attaches a BPF program to
'sys_epoll_pwait()'. perf itself never use that syscall, so further test
can verify their result with it. The program would generate 1 sample in
every 2 calls of epoll_pwait() system call.
Since the resulting BPF object is useful per se for further tests,
test_llvm__fetch_bpf_obj() is introduced for creating BPF objects from
source. The LLVM test was rewritten to use it.
Committer note:
Running it:
[root@zoo wb]# perf test -v LLVM
35: Test LLVM searching and compiling :
--- start ---
test child forked, pid 17740
Kernel build dir is set to /lib/modules/4.3.0-rc1+/build
set env: KBUILD_DIR=/lib/modules/4.3.0-rc1+/build
unset env: KBUILD_OPTS
include option is set to -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.9.2/include -I/home/git/linux/arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -I/home/git/linux/include -Iinclude -I/home/git/linux/arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I/home/git/linux/include/uapi -Iinclude/generated/uapi -include /home/git/linux/include/linux/kconfig.h
set env: NR_CPUS=4
set env: LINUX_VERSION_CODE=0x40300
set env: CLANG_EXEC=/usr/libexec/icecc/bin/clang
set env: CLANG_OPTIONS=-xc
set env: KERNEL_INC_OPTIONS= -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.9.2/include -I/home/git/linux/arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -I/home/git/linux/include -Iinclude -I/home/git/linux/arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I/home/git/linux/include/uapi -Iinclude/generated/uapi -include /home/git/linux/include/linux/kconfig.h
set env: WORKING_DIR=/lib/modules/4.3.0-rc1+/build
set env: CLANG_SOURCE=-
llvm compiling command template: echo '/*
* bpf-script-example.c
* Test basic LLVM building
*/
#ifndef LINUX_VERSION_CODE
# error Need LINUX_VERSION_CODE
# error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig'
#endif
#define BPF_ANY 0
#define BPF_MAP_TYPE_ARRAY 2
#define BPF_FUNC_map_lookup_elem 1
#define BPF_FUNC_map_update_elem 2
static void *(*bpf_map_lookup_elem)(void *map, void *key) =
(void *) BPF_FUNC_map_lookup_elem;
static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) =
(void *) BPF_FUNC_map_update_elem;
struct bpf_map_def {
unsigned int type;
unsigned int key_size;
unsigned int value_size;
unsigned int max_entries;
};
#define SEC(NAME) __attribute__((section(NAME), used))
struct bpf_map_def SEC("maps") flip_table = {
.type = BPF_MAP_TYPE_ARRAY,
.key_size = sizeof(int),
.value_size = sizeof(int),
.max_entries = 1,
};
SEC("func=sys_epoll_pwait")
int bpf_func__sys_epoll_pwait(void *ctx)
{
int ind =0;
int *flag = bpf_map_lookup_elem(&flip_table, &ind);
int new_flag;
if (!flag)
return 0;
/* flip flag and store back */
new_flag = !*flag;
bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY);
return new_flag;
}
char _license[] SEC("license") = "GPL";
int _version SEC("version") = LINUX_VERSION_CODE;
' | $CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS -DLINUX_VERSION_CODE=$LINUX_VERSION_CODE $CLANG_OPTIONS $KERNEL_INC_OPTIONS -Wno-unused-value -Wno-pointer-sign -working-directory $WORKING_DIR -c "$CLANG_SOURCE" -target bpf -O2 -o -
test child finished with 0
---- end ----
Test LLVM searching and compiling: Ok
[root@zoo wb]#
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1446817783-86722-6-git-send-email-wangnan0@huawei.com
Signed-off-by: He Kuang <hekuang@huawei.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-11-06 21:49:41 +08:00
|
|
|
$(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(Q)echo '#include <tests/llvm.h>' > $@
|
|
|
|
$(Q)echo 'const char test_llvm__bpf_base_prog[] =' >> $@
|
|
|
|
$(Q)sed -e 's/"/\\"/g' -e 's/\(.*\)/"\1\\n"/g' $< >> $@
|
|
|
|
$(Q)echo ';' >> $@
|
|
|
|
|
2015-11-06 21:49:42 +08:00
|
|
|
$(OUTPUT)tests/llvm-src-kbuild.c: tests/bpf-script-test-kbuild.c
|
|
|
|
$(call rule_mkdir)
|
|
|
|
$(Q)echo '#include <tests/llvm.h>' > $@
|
|
|
|
$(Q)echo 'const char test_llvm__bpf_test_kbuild_prog[] =' >> $@
|
|
|
|
$(Q)sed -e 's/"/\\"/g' -e 's/\(.*\)/"\1\\n"/g' $< >> $@
|
|
|
|
$(Q)echo ';' >> $@
|
|
|
|
|
2015-03-27 21:08:01 +08:00
|
|
|
ifeq ($(ARCH),$(filter $(ARCH),x86 arm arm64))
|
2014-12-29 22:03:09 +08:00
|
|
|
perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
|
|
|
endif
|
|
|
|
|
|
|
|
CFLAGS_attr.o += -DBINDIR="BUILD_STR($(bindir_SQ))" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
|
|
|
CFLAGS_python-use.o += -DPYTHONPATH="BUILD_STR($(OUTPUT)python)" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
|
|
|
CFLAGS_dwarf-unwind.o += -fno-optimize-sibling-calls
|