aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-08-08 04:05:17 -0400
committerIngo Molnar <mingo@kernel.org>2015-08-08 04:05:17 -0400
commitf1d800bf615b84ca253af372d2dac8cdef743a20 (patch)
tree0ba71f573541cf42609230d8d96bc5e4c295536c
parent1354ac6ad84395660f551d0614a6ca39e5bfe8e3 (diff)
parent9bc898c7019383b6aa2ae6cb2928c4ca926449f0 (diff)
Merge tag 'perf-ebpf-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/ebpf library + llvm/clang infrastructure changes from Arnaldo Carvalho de Melo: Infrastructure changes: - Add library for interfacing with the kernel eBPF infrastructure, with tools/perf/ targeted as a first user. (Wang Nan) - Add llvm/clang infrastructure for building BPF object files from C source code. (Wang Nan) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--tools/build/feature/Makefile6
-rw-r--r--tools/build/feature/test-bpf.c18
-rw-r--r--tools/lib/bpf/.gitignore2
-rw-r--r--tools/lib/bpf/Build1
-rw-r--r--tools/lib/bpf/Makefile195
-rw-r--r--tools/lib/bpf/bpf.c85
-rw-r--r--tools/lib/bpf/bpf.h23
-rw-r--r--tools/lib/bpf/libbpf.c1037
-rw-r--r--tools/lib/bpf/libbpf.h81
-rw-r--r--tools/perf/MANIFEST1
-rw-r--r--tools/perf/tests/Build1
-rw-r--r--tools/perf/tests/builtin-test.c4
-rw-r--r--tools/perf/tests/llvm.c98
-rw-r--r--tools/perf/tests/tests.h1
-rw-r--r--tools/perf/util/Build1
-rw-r--r--tools/perf/util/config.c4
-rw-r--r--tools/perf/util/llvm-utils.c408
-rw-r--r--tools/perf/util/llvm-utils.h49
18 files changed, 2014 insertions, 1 deletions
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 463ed8f2a267..1c0d69f44552 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -33,7 +33,8 @@ FILES= \
33 test-compile-32.bin \ 33 test-compile-32.bin \
34 test-compile-x32.bin \ 34 test-compile-x32.bin \
35 test-zlib.bin \ 35 test-zlib.bin \
36 test-lzma.bin 36 test-lzma.bin \
37 test-bpf.bin
37 38
38CC := $(CROSS_COMPILE)gcc -MD 39CC := $(CROSS_COMPILE)gcc -MD
39PKG_CONFIG := $(CROSS_COMPILE)pkg-config 40PKG_CONFIG := $(CROSS_COMPILE)pkg-config
@@ -156,6 +157,9 @@ test-zlib.bin:
156test-lzma.bin: 157test-lzma.bin:
157 $(BUILD) -llzma 158 $(BUILD) -llzma
158 159
160test-bpf.bin:
161 $(BUILD)
162
159-include *.d 163-include *.d
160 164
161############################### 165###############################
diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c
new file mode 100644
index 000000000000..062bac811af9
--- /dev/null
+++ b/tools/build/feature/test-bpf.c
@@ -0,0 +1,18 @@
1#include <linux/bpf.h>
2
3int main(void)
4{
5 union bpf_attr attr;
6
7 attr.prog_type = BPF_PROG_TYPE_KPROBE;
8 attr.insn_cnt = 0;
9 attr.insns = 0;
10 attr.license = 0;
11 attr.log_buf = 0;
12 attr.log_size = 0;
13 attr.log_level = 0;
14 attr.kern_version = 0;
15
16 attr = attr;
17 return 0;
18}
diff --git a/tools/lib/bpf/.gitignore b/tools/lib/bpf/.gitignore
new file mode 100644
index 000000000000..812aeedaea38
--- /dev/null
+++ b/tools/lib/bpf/.gitignore
@@ -0,0 +1,2 @@
1libbpf_version.h
2FEATURE-DUMP
diff --git a/tools/lib/bpf/Build b/tools/lib/bpf/Build
new file mode 100644
index 000000000000..d8749756352d
--- /dev/null
+++ b/tools/lib/bpf/Build
@@ -0,0 +1 @@
libbpf-y := libbpf.o bpf.o
diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
new file mode 100644
index 000000000000..f68d23a0b487
--- /dev/null
+++ b/tools/lib/bpf/Makefile
@@ -0,0 +1,195 @@
1# Most of this file is copied from tools/lib/traceevent/Makefile
2
3BPF_VERSION = 0
4BPF_PATCHLEVEL = 0
5BPF_EXTRAVERSION = 1
6
7MAKEFLAGS += --no-print-directory
8
9
10# Makefiles suck: This macro sets a default value of $(2) for the
11# variable named by $(1), unless the variable has been set by
12# environment or command line. This is necessary for CC and AR
13# because make sets default values, so the simpler ?= approach
14# won't work as expected.
15define allow-override
16 $(if $(or $(findstring environment,$(origin $(1))),\
17 $(findstring command line,$(origin $(1)))),,\
18 $(eval $(1) = $(2)))
19endef
20
21# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
22$(call allow-override,CC,$(CROSS_COMPILE)gcc)
23$(call allow-override,AR,$(CROSS_COMPILE)ar)
24
25INSTALL = install
26
27# Use DESTDIR for installing into a different root directory.
28# This is useful for building a package. The program will be
29# installed in this directory as if it was the root directory.
30# Then the build tool can move it later.
31DESTDIR ?=
32DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
33
34LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
35ifeq ($(LP64), 1)
36 libdir_relative = lib64
37else
38 libdir_relative = lib
39endif
40
41prefix ?= /usr/local
42libdir = $(prefix)/$(libdir_relative)
43man_dir = $(prefix)/share/man
44man_dir_SQ = '$(subst ','\'',$(man_dir))'
45
46export man_dir man_dir_SQ INSTALL
47export DESTDIR DESTDIR_SQ
48
49include ../../scripts/Makefile.include
50
51# copy a bit from Linux kbuild
52
53ifeq ("$(origin V)", "command line")
54 VERBOSE = $(V)
55endif
56ifndef VERBOSE
57 VERBOSE = 0
58endif
59
60ifeq ($(srctree),)
61srctree := $(patsubst %/,%,$(dir $(shell pwd)))
62srctree := $(patsubst %/,%,$(dir $(srctree)))
63srctree := $(patsubst %/,%,$(dir $(srctree)))
64#$(info Determined 'srctree' to be $(srctree))
65endif
66
67FEATURE_DISPLAY = libelf libelf-getphdrnum libelf-mmap bpf
68FEATURE_TESTS = libelf bpf
69
70INCLUDES = -I. -I$(srctree)/tools/include -I$(srctree)/arch/$(ARCH)/include/uapi -I$(srctree)/include/uapi
71FEATURE_CHECK_CFLAGS-bpf = $(INCLUDES)
72
73include $(srctree)/tools/build/Makefile.feature
74
75export prefix libdir src obj
76
77# Shell quotes
78libdir_SQ = $(subst ','\'',$(libdir))
79libdir_relative_SQ = $(subst ','\'',$(libdir_relative))
80plugin_dir_SQ = $(subst ','\'',$(plugin_dir))
81
82LIB_FILE = libbpf.a libbpf.so
83
84VERSION = $(BPF_VERSION)
85PATCHLEVEL = $(BPF_PATCHLEVEL)
86EXTRAVERSION = $(BPF_EXTRAVERSION)
87
88OBJ = $@
89N =
90
91LIBBPF_VERSION = $(BPF_VERSION).$(BPF_PATCHLEVEL).$(BPF_EXTRAVERSION)
92
93# Set compile option CFLAGS
94ifdef EXTRA_CFLAGS
95 CFLAGS := $(EXTRA_CFLAGS)
96else
97 CFLAGS := -g -Wall
98endif
99
100ifeq ($(feature-libelf-mmap), 1)
101 override CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
102endif
103
104ifeq ($(feature-libelf-getphdrnum), 1)
105 override CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
106endif
107
108# Append required CFLAGS
109override CFLAGS += $(EXTRA_WARNINGS)
110override CFLAGS += -Werror -Wall
111override CFLAGS += -fPIC
112override CFLAGS += $(INCLUDES)
113
114ifeq ($(VERBOSE),1)
115 Q =
116else
117 Q = @
118endif
119
120# Disable command line variables (CFLAGS) overide from top
121# level Makefile (perf), otherwise build Makefile will get
122# the same command line setup.
123MAKEOVERRIDES=
124
125export srctree OUTPUT CC LD CFLAGS V
126build := -f $(srctree)/tools/build/Makefile.build dir=. obj
127
128BPF_IN := $(OUTPUT)libbpf-in.o
129LIB_FILE := $(addprefix $(OUTPUT),$(LIB_FILE))
130
131CMD_TARGETS = $(LIB_FILE)
132
133TARGETS = $(CMD_TARGETS)
134
135all: $(VERSION_FILES) all_cmd
136
137all_cmd: $(CMD_TARGETS)
138