2019-05-19 12:07:45 +00:00
# SPDX-License-Identifier: GPL-2.0-only
2013-03-15 15:28:49 +00:00
2014-01-03 14:32:32 +00:00
i f e q ( $( src -perf ) , )
src-perf := $( srctree) /tools/perf
e n d i f
2013-03-15 15:28:49 +00:00
2014-01-03 14:32:32 +00:00
i f e q ( $( obj -perf ) , )
obj-perf := $( OUTPUT)
2013-03-15 15:28:49 +00:00
e n d i f
2014-01-03 14:32:32 +00:00
i f n e q ( $( obj -perf ) , )
obj-perf := $( abspath $( obj-perf) ) /
e n d i f
2015-07-19 09:30:05 +00:00
$( shell printf "" > $ ( OUTPUT ) .config -detected )
2015-07-01 11:54:42 +00:00
detected = $( shell echo " $( 1) =y " >> $( OUTPUT) .config-detected)
detected_var = $( shell echo " $( 1) = $( $( 1) ) " >> $( OUTPUT) .config-detected)
2014-12-31 16:37:00 +00:00
2020-10-09 12:25:23 +00:00
CFLAGS := $( EXTRA_CFLAGS) $( filter-out -Wnested-externs,$( EXTRA_WARNINGS) )
2021-10-29 16:30:41 +00:00
HOSTCFLAGS := $( filter-out -Wnested-externs,$( EXTRA_WARNINGS) )
2014-01-03 14:32:32 +00:00
2016-01-11 13:47:58 +00:00
i n c l u d e $( srctree ) / t o o l s / s c r i p t s / M a k e f i l e . a r c h
2014-01-03 14:32:32 +00:00
2017-04-10 03:02:37 +00:00
$( call detected_var ,SRCARCH )
2014-12-29 14:03:09 +00:00
2014-01-03 14:32:32 +00:00
NO_PERF_REGS := 1
2020-05-28 14:47:24 +00:00
2020-05-28 15:03:40 +00:00
i f n e q ( $( NO_SYSCALL_TABLE ) , 1 )
NO_SYSCALL_TABLE := 1
ifeq ( $( SRCARCH) ,x86)
ifeq ( ${ IS_64_BIT } , 1)
NO_SYSCALL_TABLE := 0
endif
else
2021-02-04 03:35:24 +00:00
ifeq ( $( SRCARCH) ,$( filter $( SRCARCH) ,powerpc arm64 s390 mips) )
2020-05-28 15:03:40 +00:00
NO_SYSCALL_TABLE := 0
endif
2020-05-28 14:47:24 +00:00
endif
2020-05-28 15:03:40 +00:00
ifneq ( $( NO_SYSCALL_TABLE) ,1)
CFLAGS += -DHAVE_SYSCALL_TABLE_SUPPORT
endif
2020-05-28 14:47:24 +00:00
e n d i f
2016-02-20 05:02:47 +00:00
# Additional ARCH settings for ppc
2017-04-10 03:02:37 +00:00
i f e q ( $( SRCARCH ) , p o w e r p c )
2016-02-20 05:02:47 +00:00
NO_PERF_REGS := 0
2018-01-29 08:34:17 +00:00
CFLAGS += -I$( OUTPUT) arch/powerpc/include/generated
2016-04-28 09:31:09 +00:00
LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
2016-02-20 05:02:47 +00:00
e n d i f
2014-01-03 14:32:32 +00:00
# Additional ARCH settings for x86
2017-04-10 03:02:37 +00:00
i f e q ( $( SRCARCH ) , x 8 6 )
2014-12-29 14:03:09 +00:00
$( call detected,CONFIG_X86)
2015-01-12 02:20:55 +00:00
ifeq ( ${ IS_64_BIT } , 1)
2017-12-07 08:27:59 +00:00
CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -I$( OUTPUT) arch/x86/include/generated
2013-04-15 02:06:58 +00:00
ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
2017-08-20 11:39:32 +00:00
LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
2014-12-29 12:52:36 +00:00
$( call detected,CONFIG_X86_64)
2013-11-01 13:51:32 +00:00
else
2015-05-19 13:05:43 +00:00
LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
2013-04-15 02:06:58 +00:00
endif
NO_PERF_REGS := 0
2013-03-15 15:28:49 +00:00
e n d i f
2014-04-28 12:32:33 +00:00
2017-04-10 03:02:37 +00:00
i f e q ( $( SRCARCH ) , a r m )
2013-09-26 11:36:36 +00:00
NO_PERF_REGS := 0
LIBUNWIND_LIBS = -lunwind -lunwind-arm
e n d i f
2013-03-15 15:28:49 +00:00
2017-04-10 03:02:37 +00:00
i f e q ( $( SRCARCH ) , a r m 6 4 )
2014-04-28 12:32:33 +00:00
NO_PERF_REGS := 0
2018-07-06 21:34:54 +00:00
CFLAGS += -I$( OUTPUT) arch/arm64/include/generated
2014-04-28 12:32:33 +00:00
LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
e n d i f
2019-09-05 03:46:36 +00:00
i f e q ( $( SRCARCH ) , r i s c v )
NO_PERF_REGS := 0
e n d i f
2019-04-15 09:17:30 +00:00
i f e q ( $( SRCARCH ) , c s k y )
NO_PERF_REGS := 0
e n d i f
2016-01-19 10:23:38 +00:00
i f e q ( $( ARCH ) , s 3 9 0 )
NO_PERF_REGS := 0
2017-12-13 20:46:54 +00:00
CFLAGS += -fPIC -I$( OUTPUT) arch/s390/include/generated
2016-01-19 10:23:38 +00:00
e n d i f
2021-02-04 03:35:23 +00:00
i f e q ( $( ARCH ) , m i p s )
NO_PERF_REGS := 0
2021-02-04 03:35:24 +00:00
CFLAGS += -I$( OUTPUT) arch/mips/include/generated
2021-02-04 03:35:23 +00:00
LIBUNWIND_LIBS = -lunwind -lunwind-mips
e n d i f
2014-12-30 12:30:04 +00:00
i f e q ( $( NO_PERF_REGS ) , 0 )
$( call detected,CONFIG_PERF_REGS)
e n d i f
2014-05-16 08:41:11 +00:00
# So far there's only x86 and arm libdw unwind support merged in perf.
2014-04-20 08:50:00 +00:00
# Disable it on all other architectures in case libdw unwind
# support is detected in system. Add supported architectures
# to the check.
2019-09-05 03:46:36 +00:00
i f n e q ( $( SRCARCH ) , $( filter $ ( SRCARCH ) ,x 86 arm arm 64 powerpc s 390 csky riscv ) )
2014-04-20 08:50:00 +00:00
NO_LIBDW_DWARF_UNWIND := 1
e n d i f
2013-12-10 12:24:04 +00:00
i f e q ( $( LIBUNWIND_LIBS ) , )
NO_LIBUNWIND := 1
e n d i f
2016-01-29 05:57:30 +00:00
#
# For linking with debug library, run like:
#
# make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
#
2016-06-03 03:33:10 +00:00
libunwind_arch_set_flags = $( eval $( libunwind_arch_set_flags_code) )
d e f i n e l i b u n w i n d _ a r c h _ s e t _ f l a g s _ c o d e
FEATURE_CHECK_CFLAGS-libunwind-$( 1) = -I$( LIBUNWIND_DIR) /include
FEATURE_CHECK_LDFLAGS-libunwind-$( 1) = -L$( LIBUNWIND_DIR) /lib
e n d e f
2016-01-29 05:57:30 +00:00
i f d e f L I B U N W I N D _ D I R
LIBUNWIND_CFLAGS = -I$( LIBUNWIND_DIR) /include
LIBUNWIND_LDFLAGS = -L$( LIBUNWIND_DIR) /lib
2016-06-03 03:33:10 +00:00
LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64
$( foreach libunwind_arch,$( LIBUNWIND_ARCHS) ,$( call libunwind_arch_set_flags,$( libunwind_arch) ) )
2016-01-29 05:57:30 +00:00
e n d i f
# Set per-feature check compilation flags
FEATURE_CHECK_CFLAGS-libunwind = $( LIBUNWIND_CFLAGS)
2016-06-03 03:33:14 +00:00
FEATURE_CHECK_LDFLAGS-libunwind = $( LIBUNWIND_LDFLAGS) $( LIBUNWIND_LIBS)
2016-01-29 05:57:30 +00:00
FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $( LIBUNWIND_CFLAGS)
2016-06-03 03:33:14 +00:00
FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $( LIBUNWIND_LDFLAGS) $( LIBUNWIND_LIBS)
2013-12-10 12:24:04 +00:00
perf unwind: Do not overwrite FEATURE_CHECK_LDFLAGS-libunwind-{x86,aarch64}
When setting LIBUNWIND_DIR, we first set
FEATURE_CHECK_LDFLAGS-libunwind-{aarch64,x86} = -L$(LIBUNWIND_DIR)/lib.
<committer note>
This happens a bit before, the overwritting, in:
libunwind_arch_set_flags = $(eval $(libunwind_arch_set_flags_code))
define libunwind_arch_set_flags_code
FEATURE_CHECK_CFLAGS-libunwind-$(1) = -I$(LIBUNWIND_DIR)/include
FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib
endef
ifdef LIBUNWIND_DIR
LIBUNWIND_CFLAGS = -I$(LIBUNWIND_DIR)/include
LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64
$(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
endif
Look at that 'foreach' on all the LIBUNWIND_ARCHS.
</>
After commit 5c4d7c82c0dc ("perf unwind: Do not put libunwind-{x86,aarch64}
in FEATURE_TESTS_BASIC"), FEATURE_CHECK_LDFLAGS-libunwind-{x86,aarch64} is
overwritten. As a result, the remote libunwind libraries cannot be searched
from $(LIBUNWIND_DIR)/lib directory during feature check tests. Fix it with
variable appending.
Before this patch:
perf$ make VF=1 LIBUNWIND_DIR=/opt/libunwind_aarch64
BUILD: Doing 'make -j16' parallel build
<SNIP>
...
... libopencsd: [ OFF ]
... libunwind-x86: [ OFF ]
... libunwind-x86_64: [ OFF ]
... libunwind-arm: [ OFF ]
... libunwind-aarch64: [ OFF ]
... libunwind-debug-frame: [ OFF ]
... libunwind-debug-frame-arm: [ OFF ]
... libunwind-debug-frame-aarch64: [ OFF ]
... cxx: [ OFF ]
<SNIP>
perf$ cat ../build/feature/test-libunwind-aarch64.make.output
/usr/bin/ld: cannot find -lunwind-aarch64
/usr/bin/ld: cannot find -lunwind-aarch64
collect2: error: ld returned 1 exit status
After this patch:
perf$ make VF=1 LIBUNWIND_DIR=/opt/libunwind_aarch64
BUILD: Doing 'make -j16' parallel build
<SNIP>
... libopencsd: [ OFF ]
... libunwind-x86: [ OFF ]
... libunwind-x86_64: [ OFF ]
... libunwind-arm: [ OFF ]
... libunwind-aarch64: [ on ]
... libunwind-debug-frame: [ OFF ]
... libunwind-debug-frame-arm: [ OFF ]
... libunwind-debug-frame-aarch64: [ OFF ]
... cxx: [ OFF ]
<SNIP>
perf$ cat ../build/feature/test-libunwind-aarch64.make.output
perf$ ldd ./perf
linux-vdso.so.1 (0x00007ffdf07da000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f30953dc000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f30951d4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3094e36000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3094c32000)
libelf.so.1 => /usr/lib/x86_64-linux-gnu/libelf.so.1 (0x00007f3094a18000)
libdw.so.1 => /usr/lib/x86_64-linux-gnu/libdw.so.1 (0x00007f30947cc000)
libunwind-x86_64.so.8 => /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8 (0x00007f30945ad000)
libunwind.so.8 => /usr/lib/x86_64-linux-gnu/libunwind.so.8 (0x00007f3094392000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f309416c000)
libunwind-aarch64.so.8 => not found
libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007f3093c8a000)
libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00007f309386b000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f309364e000)
libnuma.so.1 => /usr/lib/x86_64-linux-gnu/libnuma.so.1 (0x00007f3093443000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3093052000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3096097000)
libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f3092e42000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f3092c3f000)
Fixes: 5c4d7c82c0dceccf ("perf unwind: Do not put libunwind-{x86,aarch64} in FEATURE_TESTS_BASIC")
Signed-off-by: Li Huafei <lihuafei1@huawei.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Zhang Jinhao <zhangjinhao2@huawei.com>
Link: http://lore.kernel.org/lkml/20210823134340.60955-1-lihuafei1@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-08-23 13:43:40 +00:00
FEATURE_CHECK_LDFLAGS-libunwind-arm += -lunwind -lunwind-arm
FEATURE_CHECK_LDFLAGS-libunwind-aarch64 += -lunwind -lunwind-aarch64
FEATURE_CHECK_LDFLAGS-libunwind-x86 += -lunwind -llzma -lunwind-x86
FEATURE_CHECK_LDFLAGS-libunwind-x86_64 += -lunwind -llzma -lunwind-x86_64
2019-02-12 19:34:32 +00:00
2019-02-12 19:19:45 +00:00
FEATURE_CHECK_LDFLAGS-libcrypto = -lcrypto
2018-01-17 17:52:10 +00:00
i f d e f C S I N C L U D E S
LIBOPENCSD_CFLAGS := -I$( CSINCLUDES)
e n d i f
2021-12-03 21:05:44 +00:00
OPENCSDLIBS := -lopencsd_c_api
i f e q ( $( findstring -static ,$ {LDFLAGS }) , - s t a t i c )
OPENCSDLIBS += -lopencsd -lstdc++
e n d i f
2018-01-17 17:52:10 +00:00
i f d e f C S L I B S
LIBOPENCSD_LDFLAGS := -L$( CSLIBS)
e n d i f
FEATURE_CHECK_CFLAGS-libopencsd := $( LIBOPENCSD_CFLAGS)
FEATURE_CHECK_LDFLAGS-libopencsd := $( LIBOPENCSD_LDFLAGS) $( OPENCSDLIBS)
2013-03-15 15:28:49 +00:00
i f e q ( $( NO_PERF_REGS ) , 0 )
2013-09-30 10:07:11 +00:00
CFLAGS += -DHAVE_PERF_REGS_SUPPORT
2013-03-15 15:28:49 +00:00
e n d i f
2013-03-24 23:32:01 +00:00
2016-01-29 05:57:30 +00:00
# for linking with debug library, run like:
# make DEBUG=1 LIBDW_DIR=/opt/libdw/
i f d e f L I B D W _ D I R
LIBDW_CFLAGS := -I$( LIBDW_DIR) /include
LIBDW_LDFLAGS := -L$( LIBDW_DIR) /lib
2014-02-19 15:52:56 +00:00
e n d i f
2017-08-20 11:39:27 +00:00
DWARFLIBS := -ldw
i f e q ( $( findstring -static ,$ {LDFLAGS }) , - s t a t i c )
DWARFLIBS += -lelf -lebl -ldl -lz -llzma -lbz2
e n d i f
2016-01-29 05:57:30 +00:00
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $( LIBDW_CFLAGS)
2017-08-20 11:39:27 +00:00
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $( LIBDW_LDFLAGS) $( DWARFLIBS)
2014-02-19 15:52:56 +00:00
2016-01-29 05:57:30 +00:00
# for linking with debug library, run like:
# make DEBUG=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/
i f d e f L I B B A B E L T R A C E _ D I R
LIBBABELTRACE_CFLAGS := -I$( LIBBABELTRACE_DIR) /include
LIBBABELTRACE_LDFLAGS := -L$( LIBBABELTRACE_DIR) /lib
2015-02-20 22:16:58 +00:00
e n d i f
2016-01-29 05:57:30 +00:00
FEATURE_CHECK_CFLAGS-libbabeltrace := $( LIBBABELTRACE_CFLAGS)
FEATURE_CHECK_LDFLAGS-libbabeltrace := $( LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
2015-02-20 22:16:58 +00:00
2019-03-18 17:39:49 +00:00
i f d e f L I B Z S T D _ D I R
LIBZSTD_CFLAGS := -I$( LIBZSTD_DIR) /lib
LIBZSTD_LDFLAGS := -L$( LIBZSTD_DIR) /lib
e n d i f
FEATURE_CHECK_CFLAGS-libzstd := $( LIBZSTD_CFLAGS)
FEATURE_CHECK_LDFLAGS-libzstd := $( LIBZSTD_LDFLAGS)
2017-04-10 03:02:37 +00:00
FEATURE_CHECK_CFLAGS-bpf = -I. -I$( srctree) /tools/include -I$( srctree) /tools/arch/$( SRCARCH) /include/uapi -I$( srctree) /tools/include/uapi
2013-05-24 12:35:23 +00:00
# include ARCH specific config
2017-04-10 03:02:37 +00:00
- i n c l u d e $( src -perf ) / a r c h / $( SRCARCH ) / M a k e f i l e
2013-05-24 12:35:23 +00:00
2015-09-15 02:02:49 +00:00
i f d e f P E R F _ H A V E _ A R C H _ R E G S _ Q U E R Y _ R E G I S T E R _ O F F S E T
CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
e n d i f
2016-03-18 16:57:20 +00:00
i n c l u d e $( srctree ) / t o o l s / s c r i p t s / u t i l i t i e s . m a k
2013-03-24 23:32:01 +00:00
i f e q ( $( call get -executable ,$ ( FLEX ) ) , )
2013-04-15 02:06:58 +00:00
dummy := $( error Error: $( FLEX) is missing on this system, please install it)
2013-03-24 23:32:01 +00:00
e n d i f
i f e q ( $( call get -executable ,$ ( BISON ) ) , )
2013-04-15 02:06:58 +00:00
dummy := $( error Error: $( BISON) is missing on this system, please install it)
2013-03-24 23:32:01 +00:00
e n d i f
2013-03-24 23:40:48 +00:00
2021-05-24 11:15:14 +00:00
i f n e q ( $( OUTPUT ) , )
ifeq ( $( shell expr $( shell $( BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g' ) \> \= 371) , 1)
BISON_FILE_PREFIX_MAP := --file-prefix-map= $( OUTPUT) =
endif
e n d i f
2013-03-24 23:40:48 +00:00
# Treat warnings as errors unless directed not to
i f n e q ( $( WERROR ) , 0 )
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -Werror
2016-11-26 07:03:33 +00:00
CXXFLAGS += -Werror
2021-10-29 16:30:41 +00:00
HOSTCFLAGS += -Werror
2013-03-24 23:40:48 +00:00
e n d i f
2013-10-22 07:34:05 +00:00
i f n d e f D E B U G
DEBUG := 0
e n d i f
2013-10-10 06:05:25 +00:00
i f e q ( $( DEBUG ) , 0 )
2017-08-27 07:54:40 +00:00
i f e q ( $( CC_NO_CLANG ) , 0 )
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -O3
2017-02-14 13:55:27 +00:00
e l s e
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -O6
2013-03-24 23:40:48 +00:00
e n d i f
2017-02-14 13:55:27 +00:00
e n d i f
2013-03-24 23:40:48 +00:00
i f d e f P A R S E R _ D E B U G
2013-04-15 02:06:58 +00:00
PARSER_DEBUG_BISON := -t
PARSER_DEBUG_FLEX := -d
CFLAGS += -DPARSER_DEBUG
2014-12-29 16:42:46 +00:00
$( call detected_var,PARSER_DEBUG_BISON)
$( call detected_var,PARSER_DEBUG_FLEX)
2013-03-24 23:40:48 +00:00
e n d i f
2016-01-29 05:57:30 +00:00
# Try different combinations to accommodate systems that only have
2022-03-09 19:43:13 +00:00
# python[2][3]-config in weird combinations in the following order of
# priority from lowest to highest:
# * python3-config
# * python-config
# * python2-config as per pep-0394.
# * $(PYTHON)-config (If PYTHON is user supplied but PYTHON_CONFIG isn't)
#
PYTHON_AUTO := python-config
PYTHON_AUTO := $( if $( call get-executable,python3-config) ,python3-config,$( PYTHON_AUTO) )
PYTHON_AUTO := $( if $( call get-executable,python-config) ,python-config,$( PYTHON_AUTO) )
PYTHON_AUTO := $( if $( call get-executable,python2-config) ,python2-config,$( PYTHON_AUTO) )
# If PYTHON is defined but PYTHON_CONFIG isn't, then take $(PYTHON)-config as if it was the user
# supplied value for PYTHON_CONFIG. Because it's "user supplied", error out if it doesn't exist.
i f d e f P Y T H O N
ifndef PYTHON_CONFIG
PYTHON_CONFIG_AUTO := $( call get-executable,$( PYTHON) -config)
PYTHON_CONFIG := $( if $( PYTHON_CONFIG_AUTO) ,$( PYTHON_CONFIG_AUTO) ,\
$( call $( error $( PYTHON) -config not found) ) )
endif
e n d i f
# Select either auto detected python and python-config or use user supplied values if they are
# defined. get-executable-or-default fails with an error if the first argument is supplied but
# doesn't exist.
override PYTHON_CONFIG : = $( call get -executable -or -default ,PYTHON_CONFIG ,$ ( PYTHON_AUTO ) )
override PYTHON : = $( call get -executable -or -default ,PYTHON ,$ ( subst -config ,,$ ( PYTHON_AUTO ) ) )
2014-07-29 06:57:19 +00:00
2017-04-12 06:49:13 +00:00
grep-libs = $( filter -l%,$( 1) )
strip-libs = $( filter-out -l%,$( 1) )
2014-07-29 06:57:19 +00:00
2017-04-12 06:49:13 +00:00
PYTHON_CONFIG_SQ := $( call shell-sq,$( PYTHON_CONFIG) )
2014-07-29 06:57:19 +00:00
2020-01-31 18:11:23 +00:00
# Python 3.8 changed the output of `python-config --ldflags` to not include the
# '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
# libpython fails if that flag is not included in LDFLAGS
i f e q ( $( shell $ ( PYTHON_CONFIG_SQ ) --ldflags --embed 2>&1 1>/dev /null ; echo $ $ ?) , 0 )
PYTHON_CONFIG_LDFLAGS := --ldflags --embed
e l s e
PYTHON_CONFIG_LDFLAGS := --ldflags
e n d i f
2017-04-12 06:49:13 +00:00
i f d e f P Y T H O N _ C O N F I G
2020-01-31 18:11:23 +00:00
PYTHON_EMBED_LDOPTS := $( shell $( PYTHON_CONFIG_SQ) $( PYTHON_CONFIG_LDFLAGS) 2>/dev/null)
2017-04-12 06:49:13 +00:00
PYTHON_EMBED_LDFLAGS := $( call strip-libs,$( PYTHON_EMBED_LDOPTS) )
PYTHON_EMBED_LIBADD := $( call grep-libs,$( PYTHON_EMBED_LDOPTS) ) -lutil
2018-07-10 15:46:12 +00:00
PYTHON_EMBED_CCOPTS := $( shell $( PYTHON_CONFIG_SQ) --includes 2>/dev/null)
2017-04-12 06:49:13 +00:00
FLAGS_PYTHON_EMBED := $( PYTHON_EMBED_CCOPTS) $( PYTHON_EMBED_LDOPTS)
2022-04-07 14:04:20 +00:00
ifeq ( $( CC_NO_CLANG) , 0)
PYTHON_EMBED_CCOPTS := $( filter-out -ffat-lto-objects, $( PYTHON_EMBED_CCOPTS) )
endif
2017-02-16 00:31:40 +00:00
e n d i f
2016-01-29 05:57:30 +00:00
FEATURE_CHECK_CFLAGS-libpython := $( PYTHON_EMBED_CCOPTS)
FEATURE_CHECK_LDFLAGS-libpython := $( PYTHON_EMBED_LDOPTS)
2014-07-29 06:57:19 +00:00
2019-02-12 14:20:56 +00:00
FEATURE_CHECK_LDFLAGS-libaio = -lrt
2019-05-01 20:27:00 +00:00
FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
2019-03-12 05:30:48 +00:00
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -fno-omit-frame-pointer
CORE_CFLAGS += -ggdb3
CORE_CFLAGS += -funwind-tables
CORE_CFLAGS += -Wall
CORE_CFLAGS += -Wextra
CORE_CFLAGS += -std= gnu99
2013-03-21 10:30:54 +00:00
2021-10-12 02:13:20 +00:00
CXXFLAGS += -std= gnu++14 -fno-exceptions -fno-rtti
2016-11-26 07:03:33 +00:00
CXXFLAGS += -Wall
CXXFLAGS += -fno-omit-frame-pointer
CXXFLAGS += -ggdb3
CXXFLAGS += -funwind-tables
CXXFLAGS += -Wno-strict-aliasing
2021-10-29 16:30:41 +00:00
HOSTCFLAGS += -Wall
HOSTCFLAGS += -Wextra
2014-04-27 16:51:05 +00:00
# Enforce a non-executable stack, as we may regress (again) in the future by
# adding assembler files missing the .GNU-stack linker note.
LDFLAGS += -Wl,-z,noexecstack
2014-11-07 05:20:06 +00:00
EXTLIBS = -lpthread -lrt -lm -ldl
2013-03-24 23:40:48 +00:00
2019-10-13 15:14:25 +00:00
i f n e q ( $( TCMALLOC ) , )
CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
EXTLIBS += -ltcmalloc
e n d i f
2016-01-15 04:00:18 +00:00
i f e q ( $( FEATURES_DUMP ) , )
2021-04-26 18:47:39 +00:00
# We will display at the end of this Makefile.config, using $(call feature_display_entries)
# As we may retry some feature detection here, see the disassembler-four-args case, for instance
FEATURE_DISPLAY_DEFERRED := 1
2015-03-01 20:19:44 +00:00
i n c l u d e $( srctree ) / t o o l s / b u i l d / M a k e f i l e . f e a t u r e
2016-01-15 04:00:18 +00:00
e l s e
i n c l u d e $( FEATURES_DUMP )
e n d i f
2013-10-01 12:14:31 +00:00
2013-09-30 11:48:44 +00:00
i f e q ( $( feature -stackprotector -all ) , 1 )
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -fstack-protector-all
2013-03-24 23:40:48 +00:00
e n d i f
2013-10-10 06:05:25 +00:00
i f e q ( $( DEBUG ) , 0 )
2013-10-07 07:38:28 +00:00
ifeq ( $( feature-fortify-source) , 1)
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -D_FORTIFY_SOURCE= 2
2013-04-15 02:06:58 +00:00
endif
2013-03-24 23:40:48 +00:00
e n d i f
2019-12-06 21:06:11 +00:00
INC_FLAGS += -I$( srctree) /tools/lib/perf/include
2016-11-26 07:03:37 +00:00
INC_FLAGS += -I$( src-perf) /util/include
2017-04-10 03:02:37 +00:00
INC_FLAGS += -I$( src-perf) /arch/$( SRCARCH) /include
2016-11-26 07:03:37 +00:00
INC_FLAGS += -I$( srctree) /tools/include/
2017-04-10 03:02:37 +00:00
INC_FLAGS += -I$( srctree) /tools/arch/$( SRCARCH) /include/uapi
2019-08-19 14:11:30 +00:00
INC_FLAGS += -I$( srctree) /tools/include/uapi
2017-04-10 03:02:37 +00:00
INC_FLAGS += -I$( srctree) /tools/arch/$( SRCARCH) /include/
INC_FLAGS += -I$( srctree) /tools/arch/$( SRCARCH) /
2013-05-24 12:35:23 +00:00
# $(obj-perf) for generated common-cmds.h
# $(obj-perf)/util for generated bison/flex headers
i f n e q ( $( OUTPUT ) , )
2016-11-26 07:03:37 +00:00
INC_FLAGS += -I$( obj-perf) /util
INC_FLAGS += -I$( obj-perf)
2013-05-24 12:35:23 +00:00
e n d i f
2016-11-26 07:03:37 +00:00
INC_FLAGS += -I$( src-perf) /util
INC_FLAGS += -I$( src-perf)
INC_FLAGS += -I$( srctree) /tools/lib/
2019-10-11 12:21:55 +00:00
CORE_CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS= 64 -D_GNU_SOURCE
CFLAGS += $( CORE_CFLAGS) $( INC_FLAGS)
2016-11-26 07:03:37 +00:00
CXXFLAGS += $( INC_FLAGS)
2013-05-24 12:35:23 +00:00
2019-10-11 12:21:55 +00:00
LIBPERF_CFLAGS := $( CORE_CFLAGS) $( EXTRA_CFLAGS)
2013-03-24 23:40:48 +00:00
2015-01-13 13:43:24 +00:00
i f e q ( $( feature -pthread -attr -setaffinity -np ) , 1 )
CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
e n d i f
2017-12-05 13:14:42 +00:00
i f e q ( $( feature -pthread -barrier ) , 1 )
CFLAGS += -DHAVE_PTHREAD_BARRIER
e n d i f
2013-05-24 12:35:24 +00:00
i f n d e f N O _ B I O N I C
2013-10-29 16:43:15 +00:00
$( call feature_check,bionic)
2013-09-30 12:11:46 +00:00
ifeq ( $( feature-bionic) , 1)
BIONIC := 1
2018-12-11 18:48:47 +00:00
CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
2018-12-11 19:31:19 +00:00
CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
2013-09-30 12:11:46 +00:00
EXTLIBS := $( filter-out -lrt,$( EXTLIBS) )
EXTLIBS := $( filter-out -lpthread,$( EXTLIBS) )
endif
2013-03-24 23:40:48 +00:00
e n d i f
2013-03-24 23:45:08 +00:00
2018-11-21 20:42:00 +00:00
i f e q ( $( feature -eventfd ) , 1 )
2020-05-20 15:21:07 +00:00
CFLAGS += -DHAVE_EVENTFD_SUPPORT
2018-11-21 20:42:00 +00:00
e n d i f
2018-11-19 19:56:22 +00:00
i f e q ( $( feature -get_current_dir_name ) , 1 )
CFLAGS += -DHAVE_GET_CURRENT_DIR_NAME
e n d i f
2019-06-13 15:04:19 +00:00
i f e q ( $( feature -gettid ) , 1 )
CFLAGS += -DHAVE_GETTID
e n d i f
2020-04-02 01:52:49 +00:00
i f e q ( $( feature -file -handle ) , 1 )
CFLAGS += -DHAVE_FILE_HANDLE
e n d i f
2013-03-24 23:45:08 +00:00
i f d e f N O _ L I B E L F
2013-04-15 02:06:58 +00:00
NO_DWARF := 1
NO_DEMANGLE := 1
NO_LIBUNWIND := 1
2014-02-19 15:52:57 +00:00
NO_LIBDW_DWARF_UNWIND := 1
2015-10-14 12:41:12 +00:00
NO_LIBBPF := 1
2017-04-12 17:07:45 +00:00
NO_JVMTI := 1
2013-03-24 23:45:08 +00:00
e l s e
2013-09-30 12:20:25 +00:00
ifeq ( $( feature-libelf) , 0)
2013-10-07 08:34:20 +00:00
ifeq ( $( feature-glibc) , 1)
2013-09-30 12:11:16 +00:00
LIBC_SUPPORT := 1
endif
ifeq ( $( BIONIC) ,1)
LIBC_SUPPORT := 1
endif
ifeq ( $( LIBC_SUPPORT) ,1)
2017-04-12 17:07:45 +00:00
msg := $( warning No libelf found. Disables 'probe' tool, jvmti and BPF support in 'perf record' . Please install libelf-dev, libelf-devel or elfutils-libelf-devel) ;
2013-09-30 12:11:16 +00:00
NO_LIBELF := 1
NO_DWARF := 1
NO_DEMANGLE := 1
2014-03-25 12:35:11 +00:00
NO_LIBUNWIND := 1
NO_LIBDW_DWARF_UNWIND := 1
2015-10-14 12:41:12 +00:00
NO_LIBBPF := 1
2017-04-12 17:07:45 +00:00
NO_JVMTI := 1
2013-09-30 12:11:16 +00:00
else
2020-06-18 02:06:01 +00:00
ifneq ( $( filter s% -fsanitize= address%,$( EXTRA_CFLAGS) ,) ,)
ifneq ( $( shell ldconfig -p | grep libasan >/dev/null 2>& 1; echo $$ ?) , 0)
msg := $( error No libasan found, please install libasan) ;
endif
endif
ifneq ( $( filter s% -fsanitize= undefined%,$( EXTRA_CFLAGS) ,) ,)
ifneq ( $( shell ldconfig -p | grep libubsan >/dev/null 2>& 1; echo $$ ?) , 0)
msg := $( error No libubsan found, please install libubsan) ;
endif
endif
2014-06-05 15:46:04 +00:00
ifneq ( $( filter s% -static%,$( LDFLAGS) ,) ,)
msg := $( error No static glibc found, please install glibc-static) ;
else
msg := $( error No gnu/libc-version.h found, please install glibc-dev[ el] ) ;
endif
2013-09-30 12:11:16 +00:00
endif
2013-04-15 02:06:58 +00:00
else
2014-02-19 15:52:58 +00:00
ifndef NO_LIBDW_DWARF_UNWIND
ifneq ( $( feature-libdw-dwarf-unwind) ,1)
NO_LIBDW_DWARF_UNWIND := 1
msg := $( warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR) ;
endif
endif
2013-10-07 08:35:39 +00:00
ifneq ( $( feature-dwarf) , 1)
2017-01-12 21:01:59 +00:00
ifndef NO_DWARF
msg := $( warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev) ;
NO_DWARF := 1
endif
2016-04-05 14:33:41 +00:00
else
ifneq ( $( feature-dwarf_getlocations) , 1)
msg := $( warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157) ;
else
2018-03-30 09:27:13 +00:00
CFLAGS += -DHAVE_DWARF_GETLOCATIONS_SUPPORT
2016-04-05 14:33:41 +00:00
endif # dwarf_getlocations
2013-09-30 12:11:16 +00:00
endif # Dwarf support
2013-10-02 13:30:35 +00:00
endif # libelf support
2013-03-24 23:45:08 +00:00
e n d i f # NO_LIBELF
2018-03-30 09:27:12 +00:00
i f e q ( $( feature -glibc ) , 1 )
CFLAGS += -DHAVE_GLIBC_SUPPORT
e n d i f
2018-11-06 09:03:35 +00:00
i f e q ( $( feature -libaio ) , 1 )
ifndef NO_AIO
CFLAGS += -DHAVE_AIO_SUPPORT
endif
e n d i f
2015-04-29 11:15:31 +00:00
i f d e f N O _ D W A R F
NO_LIBDW_DWARF_UNWIND := 1
e n d i f
2017-03-02 15:55:49 +00:00
i f e q ( $( feature -sched_getcpu ) , 1 )
CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
e n d i f
2017-07-18 20:15:29 +00:00
i f e q ( $( feature -setns ) , 1 )
CFLAGS += -DHAVE_SETNS_SUPPORT
$( call detected,CONFIG_SETNS)
e n d i f
2019-02-12 17:37:15 +00:00
i f d e f C O R E S I G H T
$( call feature_check,libopencsd)
2018-01-17 17:52:10 +00:00
ifeq ( $( feature-libopencsd) , 1)
CFLAGS += -DHAVE_CSTRACE_SUPPORT $( LIBOPENCSD_CFLAGS)
2019-05-24 17:35:05 +00:00
ifeq ( $( feature-reallocarray) , 0)
CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
endif
2018-01-17 17:52:10 +00:00
LDFLAGS += $( LIBOPENCSD_LDFLAGS)
EXTLIBS += $( OPENCSDLIBS)
$( call detected,CONFIG_LIBOPENCSD)
ifdef CSTRACE_RAW
CFLAGS += -DCS_DEBUG_RAW
ifeq ( ${ CSTRACE_RAW } , packed)
CFLAGS += -DCS_RAW_PACKED
endif
endif
2021-09-02 08:18:00 +00:00
else
dummy := $( error Error: No libopencsd library found or the version is not up-to-date. Please install recent libopencsd to build with CORESIGHT = 1)
2018-01-17 17:52:10 +00:00
endif
e n d i f
2013-03-24 23:45:08 +00:00
i f n d e f N O _ L I B E L F
2013-10-07 08:05:51 +00:00
CFLAGS += -DHAVE_LIBELF_SUPPORT
2014-11-07 05:20:06 +00:00
EXTLIBS += -lelf
2014-12-29 22:52:25 +00:00
$( call detected,CONFIG_LIBELF)
2013-03-24 23:48:14 +00:00
2013-09-30 12:35:27 +00:00
ifeq ( $( feature-libelf-getphdrnum) , 1)
2013-10-07 08:05:51 +00:00
CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
endif
2016-07-12 15:19:09 +00:00
ifeq ( $( feature-libelf-gelf_getnote) , 1)
CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
else
msg := $( warning gelf_getnote( ) not found on libelf, SDT support disabled) ;
endif
2016-07-04 22:35:47 +00:00
ifeq ( $( feature-libelf-getshdrstrndx) , 1)
CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
endif
2020-08-13 08:22:04 +00:00
ifndef NO_LIBDEBUGINFOD
$( call feature_check,libdebuginfod)
ifeq ( $( feature-libdebuginfod) , 1)
CFLAGS += -DHAVE_DEBUGINFOD_SUPPORT
EXTLIBS += -ldebuginfod
endif
endif
2013-10-07 08:05:51 +00:00
ifndef NO_DWARF
ifeq ( $( origin PERF_HAVE_DWARF_REGS) , undefined)
2017-04-10 03:02:37 +00:00
msg := $( warning DWARF register mappings have not been defined for architecture $( SRCARCH) , DWARF support disabled) ;
2013-10-07 08:05:51 +00:00
NO_DWARF := 1
else
CFLAGS += -DHAVE_DWARF_SUPPORT $( LIBDW_CFLAGS)
LDFLAGS += $( LIBDW_LDFLAGS)
2015-08-12 22:48:37 +00:00
EXTLIBS += ${ DWARFLIBS }
2014-12-29 23:06:25 +00:00
$( call detected,CONFIG_DWARF)
2013-10-07 08:05:51 +00:00
endif # PERF_HAVE_DWARF_REGS
endif # NO_DWARF
2015-10-14 12:41:12 +00:00
ifndef NO_LIBBPF
ifeq ( $( feature-bpf) , 1)
CFLAGS += -DHAVE_LIBBPF_SUPPORT
$( call detected,CONFIG_LIBBPF)
2019-11-26 12:12:53 +00:00
# detecting libbpf without LIBBPF_DYNAMIC, so make VF=1 shows libbpf detection status
$( call feature_check,libbpf)
ifdef LIBBPF_DYNAMIC
ifeq ( $( feature-libbpf) , 1)
EXTLIBS += -lbpf
2021-05-08 20:50:20 +00:00
$( call detected,CONFIG_LIBBPF_DYNAMIC)
perf build: Fix check for btf__load_from_kernel_by_id() in libbpf
Avi Kivity reported a problem where the __weak
btf__load_from_kernel_by_id() in tools/perf/util/bpf-event.c was being
used and it called btf__get_from_id() in tools/lib/bpf/btf.c that in
turn called back to btf__load_from_kernel_by_id(), resulting in an
endless loop.
Fix this by adding a feature test to check if
btf__load_from_kernel_by_id() is available when building perf with
LIBBPF_DYNAMIC=1, and if not then provide the fallback to the old
btf__get_from_id(), that doesn't call back to btf__load_from_kernel_by_id()
since at that time it didn't exist at all.
Tested on Fedora 35 where we have libbpf-devel 0.4.0 with LIBBPF_DYNAMIC
where we don't have btf__load_from_kernel_by_id() and thus its feature
test fail, not defining HAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID:
$ cat /tmp/build/perf-urgent/feature/test-libbpf-btf__load_from_kernel_by_id.make.output
test-libbpf-btf__load_from_kernel_by_id.c: In function ‘main’:
test-libbpf-btf__load_from_kernel_by_id.c:6:16: error: implicit declaration of function ‘btf__load_from_kernel_by_id’ [-Werror=implicit-function-declaration]
6 | return btf__load_from_kernel_by_id(20151128, NULL);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
$
$ nm /tmp/build/perf-urgent/perf | grep btf__load_from_kernel_by_id
00000000005ba180 T btf__load_from_kernel_by_id
$
$ objdump --disassemble=btf__load_from_kernel_by_id -S /tmp/build/perf-urgent/perf
/tmp/build/perf-urgent/perf: file format elf64-x86-64
<SNIP>
00000000005ba180 <btf__load_from_kernel_by_id>:
#include "record.h"
#include "util/synthetic-events.h"
#ifndef HAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID
struct btf *btf__load_from_kernel_by_id(__u32 id)
{
5ba180: 55 push %rbp
5ba181: 48 89 e5 mov %rsp,%rbp
5ba184: 48 83 ec 10 sub $0x10,%rsp
5ba188: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5ba18f: 00 00
5ba191: 48 89 45 f8 mov %rax,-0x8(%rbp)
5ba195: 31 c0 xor %eax,%eax
struct btf *btf;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
int err = btf__get_from_id(id, &btf);
5ba197: 48 8d 75 f0 lea -0x10(%rbp),%rsi
5ba19b: e8 a0 57 e5 ff call 40f940 <btf__get_from_id@plt>
5ba1a0: 89 c2 mov %eax,%edx
#pragma GCC diagnostic pop
return err ? ERR_PTR(err) : btf;
5ba1a2: 48 98 cltq
5ba1a4: 85 d2 test %edx,%edx
5ba1a6: 48 0f 44 45 f0 cmove -0x10(%rbp),%rax
}
<SNIP>
Fixes: 218e7b775d368f38 ("perf bpf: Provide a weak btf__load_from_kernel_by_id() for older libbpf versions")
Reported-by: Avi Kivity <avi@scylladb.com>
Link: https://lore.kernel.org/linux-perf-users/f0add43b-3de5-20c5-22c4-70aff4af959f@scylladb.com
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/linux-perf-users/YobjjFOblY4Xvwo7@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-05-20 00:25:12 +00:00
$( call feature_check,libbpf-btf__load_from_kernel_by_id)
ifeq ( $( feature-libbpf-btf__load_from_kernel_by_id) , 1)
CFLAGS += -DHAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID
endif
perf build: Stop using __weak bpf_prog_load() to handle older libbpf versions
By adding a feature test for bpf_prog_load() and providing a fallback if
it isn't present in older versions of libbpf.
Committer testing:
$ rpm -q libbpf-devel
libbpf-devel-0.4.0-2.fc35.x86_64
$ make -C tools/perf LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
$ cat /tmp/build/perf/feature/test-libbpf-bpf_prog_load.make.output
test-libbpf-bpf_prog_load.c: In function ‘main’:
test-libbpf-bpf_prog_load.c:6:16: error: implicit declaration of function ‘bpf_prog_load’ [-Werror=implicit-function-declaration]
6 | return bpf_prog_load(0 /* prog_type */, NULL /* prog_name */,
| ^~~~~~~~~~~~~
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_prog_load>:' -A20
00000000005b2d70 <bpf_prog_load>:
{
5b2d70: 55 push %rbp
5b2d71: 48 89 ce mov %rcx,%rsi
5b2d74: 4c 89 c8 mov %r9,%rax
5b2d77: 49 89 d2 mov %rdx,%r10
5b2d7a: 4c 89 c2 mov %r8,%rdx
5b2d7d: 48 89 e5 mov %rsp,%rbp
5b2d80: 48 83 ec 18 sub $0x18,%rsp
5b2d84: 64 48 8b 0c 25 28 00 mov %fs:0x28,%rcx
5b2d8b: 00 00
5b2d8d: 48 89 4d f8 mov %rcx,-0x8(%rbp)
5b2d91: 31 c9 xor %ecx,%ecx
return bpf_load_program(prog_type, insns, insn_cnt, license,
5b2d93: 41 8b 49 5c mov 0x5c(%r9),%ecx
5b2d97: 51 push %rcx
5b2d98: 4d 8b 49 60 mov 0x60(%r9),%r9
5b2d9c: 4c 89 d1 mov %r10,%rcx
5b2d9f: 44 8b 40 1c mov 0x1c(%rax),%r8d
5b2da3: e8 f8 aa e5 ff call 40d8a0 <bpf_load_program@plt>
}
$
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Link: http://lore.kernel.org/linux-perf-users/YozLKby7ITEtchC9@krava
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-05-24 11:04:43 +00:00
$( call feature_check,libbpf-bpf_prog_load)
ifeq ( $( feature-libbpf-bpf_prog_load) , 1)
CFLAGS += -DHAVE_LIBBPF_BPF_PROG_LOAD
endif
2019-11-26 12:12:53 +00:00
else
dummy := $( error Error: No libbpf devel library found, please install libbpf-devel) ;
endif
perf build: Fix check for btf__load_from_kernel_by_id() in libbpf
Avi Kivity reported a problem where the __weak
btf__load_from_kernel_by_id() in tools/perf/util/bpf-event.c was being
used and it called btf__get_from_id() in tools/lib/bpf/btf.c that in
turn called back to btf__load_from_kernel_by_id(), resulting in an
endless loop.
Fix this by adding a feature test to check if
btf__load_from_kernel_by_id() is available when building perf with
LIBBPF_DYNAMIC=1, and if not then provide the fallback to the old
btf__get_from_id(), that doesn't call back to btf__load_from_kernel_by_id()
since at that time it didn't exist at all.
Tested on Fedora 35 where we have libbpf-devel 0.4.0 with LIBBPF_DYNAMIC
where we don't have btf__load_from_kernel_by_id() and thus its feature
test fail, not defining HAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID:
$ cat /tmp/build/perf-urgent/feature/test-libbpf-btf__load_from_kernel_by_id.make.output
test-libbpf-btf__load_from_kernel_by_id.c: In function ‘main’:
test-libbpf-btf__load_from_kernel_by_id.c:6:16: error: implicit declaration of function ‘btf__load_from_kernel_by_id’ [-Werror=implicit-function-declaration]
6 | return btf__load_from_kernel_by_id(20151128, NULL);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
$
$ nm /tmp/build/perf-urgent/perf | grep btf__load_from_kernel_by_id
00000000005ba180 T btf__load_from_kernel_by_id
$
$ objdump --disassemble=btf__load_from_kernel_by_id -S /tmp/build/perf-urgent/perf
/tmp/build/perf-urgent/perf: file format elf64-x86-64
<SNIP>
00000000005ba180 <btf__load_from_kernel_by_id>:
#include "record.h"
#include "util/synthetic-events.h"
#ifndef HAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID
struct btf *btf__load_from_kernel_by_id(__u32 id)
{
5ba180: 55 push %rbp
5ba181: 48 89 e5 mov %rsp,%rbp
5ba184: 48 83 ec 10 sub $0x10,%rsp
5ba188: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5ba18f: 00 00
5ba191: 48 89 45 f8 mov %rax,-0x8(%rbp)
5ba195: 31 c0 xor %eax,%eax
struct btf *btf;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
int err = btf__get_from_id(id, &btf);
5ba197: 48 8d 75 f0 lea -0x10(%rbp),%rsi
5ba19b: e8 a0 57 e5 ff call 40f940 <btf__get_from_id@plt>
5ba1a0: 89 c2 mov %eax,%edx
#pragma GCC diagnostic pop
return err ? ERR_PTR(err) : btf;
5ba1a2: 48 98 cltq
5ba1a4: 85 d2 test %edx,%edx
5ba1a6: 48 0f 44 45 f0 cmove -0x10(%rbp),%rax
}
<SNIP>
Fixes: 218e7b775d368f38 ("perf bpf: Provide a weak btf__load_from_kernel_by_id() for older libbpf versions")
Reported-by: Avi Kivity <avi@scylladb.com>
Link: https://lore.kernel.org/linux-perf-users/f0add43b-3de5-20c5-22c4-70aff4af959f@scylladb.com
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/linux-perf-users/YobjjFOblY4Xvwo7@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-05-20 00:25:12 +00:00
else
CFLAGS += -DHAVE_LIBBPF_BTF__LOAD_FROM_KERNEL_BY_ID
perf build: Stop using __weak bpf_prog_load() to handle older libbpf versions
By adding a feature test for bpf_prog_load() and providing a fallback if
it isn't present in older versions of libbpf.
Committer testing:
$ rpm -q libbpf-devel
libbpf-devel-0.4.0-2.fc35.x86_64
$ make -C tools/perf LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
$ cat /tmp/build/perf/feature/test-libbpf-bpf_prog_load.make.output
test-libbpf-bpf_prog_load.c: In function ‘main’:
test-libbpf-bpf_prog_load.c:6:16: error: implicit declaration of function ‘bpf_prog_load’ [-Werror=implicit-function-declaration]
6 | return bpf_prog_load(0 /* prog_type */, NULL /* prog_name */,
| ^~~~~~~~~~~~~
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_prog_load>:' -A20
00000000005b2d70 <bpf_prog_load>:
{
5b2d70: 55 push %rbp
5b2d71: 48 89 ce mov %rcx,%rsi
5b2d74: 4c 89 c8 mov %r9,%rax
5b2d77: 49 89 d2 mov %rdx,%r10
5b2d7a: 4c 89 c2 mov %r8,%rdx
5b2d7d: 48 89 e5 mov %rsp,%rbp
5b2d80: 48 83 ec 18 sub $0x18,%rsp
5b2d84: 64 48 8b 0c 25 28 00 mov %fs:0x28,%rcx
5b2d8b: 00 00
5b2d8d: 48 89 4d f8 mov %rcx,-0x8(%rbp)
5b2d91: 31 c9 xor %ecx,%ecx
return bpf_load_program(prog_type, insns, insn_cnt, license,
5b2d93: 41 8b 49 5c mov 0x5c(%r9),%ecx
5b2d97: 51 push %rcx
5b2d98: 4d 8b 49 60 mov 0x60(%r9),%r9
5b2d9c: 4c 89 d1 mov %r10,%rcx
5b2d9f: 44 8b 40 1c mov 0x1c(%rax),%r8d
5b2da3: e8 f8 aa e5 ff call 40d8a0 <bpf_load_program@plt>
}
$
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Link: http://lore.kernel.org/linux-perf-users/YozLKby7ITEtchC9@krava
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-05-24 11:04:43 +00:00
CFLAGS += -DHAVE_LIBBPF_BPF_PROG_LOAD
2019-11-26 12:12:53 +00:00
endif
2015-10-14 12:41:12 +00:00
endif
2015-11-16 12:10:10 +00:00
ifndef NO_DWARF
ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
CFLAGS += -DHAVE_BPF_PROLOGUE
$( call detected,CONFIG_BPF_PROLOGUE)
else
2017-04-10 03:02:37 +00:00
msg := $( warning BPF prologue is not supported by architecture $( SRCARCH) , missing regs_query_register_offset( ) ) ;
2015-11-16 12:10:10 +00:00
endif
else
msg := $( warning DWARF support is off, BPF prologue is disabled) ;
endif
2015-10-14 12:41:12 +00:00
endif # NO_LIBBPF
2013-03-24 23:45:08 +00:00
e n d i f # NO_LIBELF
2013-03-24 23:53:03 +00:00
2016-07-12 10:05:56 +00:00
i f n d e f N O _ S D T
ifneq ( $( feature-sdt) , 1)
msg := $( warning No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev) ;
NO_SDT := 1;
else
CFLAGS += -DHAVE_SDT_EVENT
$( call detected,CONFIG_SDT_EVENT)
endif
e n d i f
2016-03-10 16:41:13 +00:00
i f d e f P E R F _ H A V E _ J I T D U M P
2016-10-13 10:59:36 +00:00
ifndef NO_LIBELF
2016-03-10 16:41:13 +00:00
$( call detected,CONFIG_JITDUMP)
CFLAGS += -DHAVE_JITDUMP
endif
e n d i f
2017-04-10 03:02:37 +00:00
i f e q ( $( SRCARCH ) , p o w e r p c )
2014-08-25 08:25:06 +00:00
ifndef NO_DWARF
CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
endif
e n d i f
2013-03-24 23:53:03 +00:00
i f n d e f N O _ L I B U N W I N D
2016-06-03 03:33:15 +00:00
have_libunwind :=
2016-06-03 03:33:22 +00:00
2019-02-12 19:34:32 +00:00
$( call feature_check,libunwind-x86)
2016-06-03 03:33:22 +00:00
ifeq ( $( feature-libunwind-x86) , 1)
$( call detected,CONFIG_LIBUNWIND_X86)
CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
LDFLAGS += -lunwind-x86
2016-06-15 11:03:56 +00:00
EXTLIBS_LIBUNWIND += -lunwind-x86
2016-06-03 03:33:22 +00:00
have_libunwind = 1
endif
2019-02-12 19:34:32 +00:00
$( call feature_check,libunwind-aarch64)
2016-06-03 03:33:23 +00:00
ifeq ( $( feature-libunwind-aarch64) , 1)
$( call detected,CONFIG_LIBUNWIND_AARCH64)
CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
LDFLAGS += -lunwind-aarch64
2016-06-15 11:03:56 +00:00
EXTLIBS_LIBUNWIND += -lunwind-aarch64
2016-06-03 03:33:23 +00:00
have_libunwind = 1
$( call feature_check,libunwind-debug-frame-aarch64)
ifneq ( $( feature-libunwind-debug-frame-aarch64) , 1)
msg := $( warning No debug_frame support found in libunwind-aarch64) ;
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
endif
endif
2013-09-30 12:45:44 +00:00
ifneq ( $( feature-libunwind) , 1)
2014-02-19 15:52:58 +00:00
msg := $( warning No libunwind found. Please install libunwind-dev[ el] >= 1.1 and/or set LIBUNWIND_DIR) ;
2016-06-03 03:33:15 +00:00
NO_LOCAL_LIBUNWIND := 1
else
have_libunwind := 1
$( call detected,CONFIG_LOCAL_LIBUNWIND)
endif
ifneq ( $( have_libunwind) , 1)
2013-10-07 08:30:47 +00:00
NO_LIBUNWIND := 1
2014-02-19 15:52:58 +00:00
endif
2016-06-03 03:33:15 +00:00
e l s e
NO_LOCAL_LIBUNWIND := 1
2014-02-19 15:52:58 +00:00
e n d i f
2015-10-14 12:41:12 +00:00
i f n d e f N O _ L I B B P F
ifneq ( $( feature-bpf) , 1)
msg := $( warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
NO_LIBBPF := 1
endif
e n d i f
2020-12-29 21:42:13 +00:00
i f d e f B U I L D _ B P F _ S K E L
$( call feature_check,clang-bpf-co-re)
ifeq ( $( feature-clang-bpf-co-re) , 0)
2021-05-10 06:49:17 +00:00
dummy := $( error Error: clang too old/not installed. Please install recent clang to build with BUILD_BPF_SKEL)
2020-12-29 21:42:13 +00:00
endif
2022-05-20 21:18:26 +00:00
ifeq ( $( filter -DHAVE_LIBBPF_SUPPORT, $( CFLAGS) ) ,)
dummy := $( error Error: BPF skeleton support requires libbpf)
endif
2020-12-29 21:42:13 +00:00
$( call detected,CONFIG_PERF_BPF_SKEL)
CFLAGS += -DHAVE_BPF_SKEL
e n d i f
2014-02-19 15:52:58 +00:00
dwarf-post-unwind := 1
dwarf-post-unwind-text := BUG
# setup DWARF post unwinder
i f d e f N O _ L I B U N W I N D
ifdef NO_LIBDW_DWARF_UNWIND
msg := $( warning Disabling post unwind, no support found.) ;
dwarf-post-unwind := 0
Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM updates from Russell King:
"Included in this series are:
1. BE8 (modern big endian) changes for ARM from Ben Dooks
2. big.Little support from Nicolas Pitre and Dave Martin
3. support for LPAE systems with all system memory above 4GB
4. Perf updates from Will Deacon
5. Additional prefetching and other performance improvements from Will.
6. Neon-optimised AES implementation fro Ard.
7. A number of smaller fixes scattered around the place.
There is a rather horrid merge conflict in tools/perf - I was never
notified of the conflict because it originally occurred between Will's
tree and other stuff. Consequently I have a resolution which Will
forwarded me, which I'll forward on immediately after sending this
mail.
The other notable thing is I'm expecting some build breakage in the
crypto stuff on ARM only with Ard's AES patches. These were merged
into a stable git branch which others had already pulled, so there's
little I can do about this. The problem is caused because these
patches have a dependency on some code in the crypto git tree - I
tried requesting a branch I can pull to resolve these, and all I got
each time from the crypto people was "we'll revert our patches then"
which would only make things worse since I still don't have the
dependent patches. I've no idea what's going on there or how to
resolve that, and since I can't split these patches from the rest of
this pull request, I'm rather stuck with pushing this as-is or
reverting Ard's patches.
Since it should "come out in the wash" I've left them in - the only
build problems they seem to cause at the moment are with randconfigs,
and since it's a new feature anyway. However, if by -rc1 the
dependencies aren't in, I think it'd be best to revert Ard's patches"
I resolved the perf conflict roughly as per the patch sent by Russell,
but there may be some differences. Any errors are likely mine. Let's
see how the crypto issues work out..
* 'for-linus' of git://git.linaro.org/people/rmk/linux-arm: (110 commits)
ARM: 7868/1: arm/arm64: remove atomic_clear_mask() in "include/asm/atomic.h"
ARM: 7867/1: include: asm: use 'int' instead of 'unsigned long' for 'oldval' in atomic_cmpxchg().
ARM: 7866/1: include: asm: use 'long long' instead of 'u64' within atomic.h
ARM: 7871/1: amba: Extend number of IRQS
ARM: 7887/1: Don't smp_cross_call() on UP devices in arch_irq_work_raise()
ARM: 7872/1: Support arch_irq_work_raise() via self IPIs
ARM: 7880/1: Clear the IT state independent of the Thumb-2 mode
ARM: 7878/1: nommu: Implement dummy early_paging_init()
ARM: 7876/1: clear Thumb-2 IT state on exception handling
ARM: 7874/2: bL_switcher: Remove cpu_hotplug_driver_{lock,unlock}()
ARM: footbridge: fix build warnings for netwinder
ARM: 7873/1: vfp: clear vfp_current_hw_state for dying cpu
ARM: fix misplaced arch_virt_to_idmap()
ARM: 7848/1: mcpm: Implement cpu_kill() to synchronise on powerdown
ARM: 7847/1: mcpm: Factor out logical-to-physical CPU translation
ARM: 7869/1: remove unused XSCALE_PMU Kconfig param
ARM: 7864/1: Handle 64-bit memory in case of 32-bit phys_addr_t
ARM: 7863/1: Let arm_add_memory() always use 64-bit arguments
ARM: 7862/1: pcpu: replace __get_cpu_var_uses
ARM: 7861/1: cacheflush: consolidate single-CPU ARMv7 cache disabling code
...
2013-11-13 23:51:29 +00:00
else
2014-02-19 15:52:58 +00:00
dwarf-post-unwind-text := libdw
2014-12-29 23:11:11 +00:00
$( call detected,CONFIG_LIBDW_DWARF_UNWIND)
2014-02-19 15:52:58 +00:00
endif
e l s e
dwarf-post-unwind-text := libunwind
2014-12-29 23:11:11 +00:00
$( call detected,CONFIG_LIBUNWIND)
2014-02-19 15:52:58 +00:00
# Enable libunwind support by default.
ifndef NO_LIBDW_DWARF_UNWIND
NO_LIBDW_DWARF_UNWIND := 1
endif
e n d i f
i f e q ( $( dwarf -post -unwind ) , 1 )
CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
2014-12-29 14:03:09 +00:00
$( call detected,CONFIG_DWARF_UNWIND)
2014-02-19 15:52:58 +00:00
e l s e
NO_DWARF_UNWIND := 1
e n d i f
2016-06-03 03:33:15 +00:00
i f n d e f N O _ L O C A L _ L I B U N W I N D
2017-04-10 03:02:37 +00:00
ifeq ( $( SRCARCH) ,$( filter $( SRCARCH) ,arm arm64) )
2014-02-19 15:52:58 +00:00
$( call feature_check,libunwind-debug-frame)
ifneq ( $( feature-libunwind-debug-frame) , 1)
msg := $( warning No debug_frame support found in libunwind) ;
Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM updates from Russell King:
"Included in this series are:
1. BE8 (modern big endian) changes for ARM from Ben Dooks
2. big.Little support from Nicolas Pitre and Dave Martin
3. support for LPAE systems with all system memory above 4GB
4. Perf updates from Will Deacon
5. Additional prefetching and other performance improvements from Will.
6. Neon-optimised AES implementation fro Ard.
7. A number of smaller fixes scattered around the place.
There is a rather horrid merge conflict in tools/perf - I was never
notified of the conflict because it originally occurred between Will's
tree and other stuff. Consequently I have a resolution which Will
forwarded me, which I'll forward on immediately after sending this
mail.
The other notable thing is I'm expecting some build breakage in the
crypto stuff on ARM only with Ard's AES patches. These were merged
into a stable git branch which others had already pulled, so there's
little I can do about this. The problem is caused because these
patches have a dependency on some code in the crypto git tree - I
tried requesting a branch I can pull to resolve these, and all I got
each time from the crypto people was "we'll revert our patches then"
which would only make things worse since I still don't have the
dependent patches. I've no idea what's going on there or how to
resolve that, and since I can't split these patches from the rest of
this pull request, I'm rather stuck with pushing this as-is or
reverting Ard's patches.
Since it should "come out in the wash" I've left them in - the only
build problems they seem to cause at the moment are with randconfigs,
and since it's a new feature anyway. However, if by -rc1 the
dependencies aren't in, I think it'd be best to revert Ard's patches"
I resolved the perf conflict roughly as per the patch sent by Russell,
but there may be some differences. Any errors are likely mine. Let's
see how the crypto issues work out..
* 'for-linus' of git://git.linaro.org/people/rmk/linux-arm: (110 commits)
ARM: 7868/1: arm/arm64: remove atomic_clear_mask() in "include/asm/atomic.h"
ARM: 7867/1: include: asm: use 'int' instead of 'unsigned long' for 'oldval' in atomic_cmpxchg().
ARM: 7866/1: include: asm: use 'long long' instead of 'u64' within atomic.h
ARM: 7871/1: amba: Extend number of IRQS
ARM: 7887/1: Don't smp_cross_call() on UP devices in arch_irq_work_raise()
ARM: 7872/1: Support arch_irq_work_raise() via self IPIs
ARM: 7880/1: Clear the IT state independent of the Thumb-2 mode
ARM: 7878/1: nommu: Implement dummy early_paging_init()
ARM: 7876/1: clear Thumb-2 IT state on exception handling
ARM: 7874/2: bL_switcher: Remove cpu_hotplug_driver_{lock,unlock}()
ARM: footbridge: fix build warnings for netwinder
ARM: 7873/1: vfp: clear vfp_current_hw_state for dying cpu
ARM: fix misplaced arch_virt_to_idmap()
ARM: 7848/1: mcpm: Implement cpu_kill() to synchronise on powerdown
ARM: 7847/1: mcpm: Factor out logical-to-physical CPU translation
ARM: 7869/1: remove unused XSCALE_PMU Kconfig param
ARM: 7864/1: Handle 64-bit memory in case of 32-bit phys_addr_t
ARM: 7863/1: Let arm_add_memory() always use 64-bit arguments
ARM: 7862/1: pcpu: replace __get_cpu_var_uses
ARM: 7861/1: cacheflush: consolidate single-CPU ARMv7 cache disabling code
...
2013-11-13 23:51:29 +00:00
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
2014-02-19 15:52:58 +00:00
else
# non-ARM has no dwarf_find_debug_frame() function:
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
EXTLIBS += $( LIBUNWIND_LIBS)
2016-06-03 03:33:15 +00:00
LDFLAGS += $( LIBUNWIND_LIBS)
e n d i f
2017-08-20 11:39:32 +00:00
i f e q ( $( findstring -static ,$ {LDFLAGS }) , - s t a t i c )
# gcc -static links libgcc_eh which contans piece of libunwind
LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
e n d i f
2016-06-03 03:33:15 +00:00
i f n d e f N O _ L I B U N W I N D
CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
2014-02-19 15:52:58 +00:00
CFLAGS += $( LIBUNWIND_CFLAGS)
LDFLAGS += $( LIBUNWIND_LDFLAGS)
2016-06-15 11:03:56 +00:00
EXTLIBS += $( EXTLIBS_LIBUNWIND)
2013-09-30 12:45:44 +00:00
e n d i f
2013-03-24 23:54:36 +00:00
2018-01-19 08:56:17 +00:00
i f e q ( $( NO_SYSCALL_TABLE ) , 0 )
$( call detected,CONFIG_TRACE)
e l s e
ifndef NO_LIBAUDIT
perf build: Remove libaudit from the default feature checks
Ingo reported that the libaudit was always appearing as OFF:
Auto-detecting system features:
... dwarf: [ on ]
... dwarf_getlocations: [ on ]
... glibc: [ on ]
... gtk2: [ on ]
... libaudit: [ OFF ]
And everything seemed to work, i.e. we were checking for a feature that
we don't use, causing confusion for people building perf, so work to
remove that nuisance while making sure that it works when an arch
doesn't provide the alternative method to generate the syscall id/name
conversion tables.
Longer explanation of the new modus operandi:
$ make -C tools/perf O=/tmp/build/perf NO_SYSCALL_TABLE=1
<SNIP>
Auto-detecting system features:
... dwarf: [ on ]
... dwarf_getlocations: [ on ]
... glibc: [ on ]
... gtk2: [ on ]
... libbfd: [ on ]
... libcap: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libcrypto: [ on ]
... libunwind: [ on ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... get_cpuid: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
... disassembler-four-args: [ on ]
Makefile.config:665: No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev
GEN /tmp/build/perf/common-cmds.h
MKDIR /tmp/build/perf/fd/
MKDIR /tmp/build/perf/fs/
<SNIP>
$
The libaudit test is forced and it fails when audit-libs-devel isn't available:
$ cat /tmp/build/perf/feature/test-libaudit.make.output
test-libaudit.c:2:10: fatal error: libaudit.h: No such file or directory
2 | #include <libaudit.h>
| ^~~~~~~~~~~~
compilation terminated.
$
If we install audit-libs-devel and rebuild it continues not to be shown as OFF
in the main auto-detection summary, but again gets tested and this time:
$ rpm -q audit-libs-devel
audit-libs-devel-3.0-0.15.20191104git1c2f876.fc31.x86_64
$
The make output for the feature detection comes clean:
$ cat /tmp/build/perf/feature/test-libaudit.make.output
And the feature detection binary is successfully built and is dynamicly linked
with libaudit:
$ ldd /tmp/build/perf/feature/test-libaudit.bin | grep audit
libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f5bf5177000)
$
As well as the resulting perf binary:
$ ldd /tmp/build/perf/perf | grep audit
libaudit.so.1 => /lib64/libaudit.so.1 (0x00007fad511c7000)
$
And 'perf trace' works using the libaudit method:
$ sudo /tmp/build/perf/perf trace -e nanosleep sleep 1
0.000 (1000.067 ms): sleep/281872 nanosleep(rqtp: 0x7ffedbbe69d0) = 0
$
If we leave audit-libs-devel installed but don't disable the use of the best
method, the one using SYSCALL_TABLE, the default for architectures that provide
the script to build the syscall id/name mapping using the .tbl files copied
from the kernel sources, we get:
$ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf
$ make -C tools/perf O=/tmp/build/perf
Auto-detecting system features:
... dwarf: [ on ]
... dwarf_getlocations: [ on ]
... glibc: [ on ]
... gtk2: [ on ]
... libbfd: [ on ]
... libcap: [ on ]
... libelf: [ on ]
... libnuma: [ on ]
... numa_num_possible_cpus: [ on ]
... libperl: [ on ]
... libpython: [ on ]
... libcrypto: [ on ]
... libunwind: [ on ]
... libdw-dwarf-unwind: [ on ]
... zlib: [ on ]
... lzma: [ on ]
... get_cpuid: [ on ]
... bpf: [ on ]
... libaio: [ on ]
... libzstd: [ on ]
... disassembler-four-args: [ on ]
GEN /tmp/build/perf/common-cmds.h
<SNIP>
$
Again, no mention of libaudit being on or OFF and:
$ cat /tmp/build/perf/feature/test-libaudit.make.output
cat: /tmp/build/perf/feature/test-libaudit.make.output: No such file or directory
$
We didn't even bother checking for its availability, slightly speeding up the
build process and:
$ ldd /tmp/build/perf/perf | grep libaudit
$
We don't link with it, also:
$ sudo /tmp/build/perf/perf trace -e nanosleep sleep 1
0.000 (1000.053 ms): sleep/299125 nanosleep(rqtp: 0x7ffc24611b50) = 0
$
And globs become available:
$ sudo /tmp/build/perf/perf trace -e *sleep sleep 1
0.000 (1000.072 ms): sleep/299136 nanosleep(rqtp: 0x7ffe7a3c4ff0) = 0
$
Reported-by: Ingo Molnar <mingo@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-05-29 14:11:59 +00:00
$( call feature_check,libaudit)
2018-01-19 08:56:17 +00:00
ifneq ( $( feature-libaudit) , 1)
msg := $( warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev) ;
NO_LIBAUDIT := 1
else
CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
EXTLIBS += -laudit
$( call detected,CONFIG_TRACE)
endif
2013-04-15 02:06:58 +00:00
endif
2013-03-24 23:54:36 +00:00
e n d i f
2013-03-24 23:56:08 +00:00
2015-11-30 09:02:21 +00:00
i f n d e f N O _ L I B C R Y P T O
ifneq ( $( feature-libcrypto) , 1)
2018-11-29 23:41:54 +00:00
msg := $( warning No libcrypto.h found, disables jitted code injection, please install openssl-devel or libssl-dev) ;
2015-11-30 09:02:21 +00:00
NO_LIBCRYPTO := 1
else
CFLAGS += -DHAVE_LIBCRYPTO_SUPPORT
EXTLIBS += -lcrypto
$( call detected,CONFIG_CRYPTO)
endif
e n d i f
2013-03-24 23:56:08 +00:00
i f d e f N O _ N E W T
2013-04-15 02:06:58 +00:00
NO_SLANG = 1
2013-03-24 23:56:08 +00:00
e n d i f
i f n d e f N O _ S L A N G
2013-09-30 12:57:54 +00:00
ifneq ( $( feature-libslang) , 1)
2019-06-18 20:48:12 +00:00
ifneq ( $( feature-libslang-include-subdir) , 1)
msg := $( warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev) ;
NO_SLANG := 1
else
CFLAGS += -DHAVE_SLANG_INCLUDE_SUBDIR
endif
endif
ifndef NO_SLANG
2013-04-15 02:06:58 +00:00
# Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
2013-09-30 10:07:11 +00:00
CFLAGS += -DHAVE_SLANG_SUPPORT
2013-04-15 02:06:58 +00:00
EXTLIBS += -lslang
2014-12-29 23:27:52 +00:00
$( call detected,CONFIG_SLANG)
2013-04-15 02:06:58 +00:00
endif
2013-03-24 23:56:08 +00:00
e n d i f
2013-03-17 23:09:24 +00:00
2020-09-04 20:11:59 +00:00
i f d e f G T K 2
2014-01-15 10:44:08 +00:00
FLAGS_GTK2 = $( CFLAGS) $( LDFLAGS) $( EXTLIBS) $( shell $( PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
2020-09-04 20:11:59 +00:00
$( call feature_check,gtk2)
2013-09-30 13:01:56 +00:00
ifneq ( $( feature-gtk2) , 1)
2013-04-15 02:06:58 +00:00
msg := $( warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev) ;
NO_GTK2 := 1
else
2020-09-04 20:11:59 +00:00
$( call feature_check,gtk2-infobar)
2013-09-30 13:08:30 +00:00
ifeq ( $( feature-gtk2-infobar) , 1)
2013-09-13 06:27:43 +00:00
GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
2013-04-15 02:06:58 +00:00
endif
2013-09-30 10:07:11 +00:00
CFLAGS += -DHAVE_GTK2_SUPPORT
2014-01-15 10:44:08 +00:00
GTK_CFLAGS += $( shell $( PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
GTK_LIBS := $( shell $( PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
2013-09-26 18:55:54 +00:00
EXTLIBS += -ldl
2013-04-15 02:06:58 +00:00
endif
2013-03-17 23:09:24 +00:00
e n d i f
2013-03-17 23:19:44 +00:00
i f d e f N O _ L I B P E R L
2013-04-15 02:06:58 +00:00
CFLAGS += -DNO_LIBPERL
2013-03-17 23:19:44 +00:00
e l s e
2013-04-15 02:06:58 +00:00
PERL_EMBED_LDOPTS = $( shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
PERL_EMBED_LDFLAGS = $( call strip-libs,$( PERL_EMBED_LDOPTS) )
PERL_EMBED_LIBADD = $( call grep-libs,$( PERL_EMBED_LDOPTS) )
2017-11-08 10:27:37 +00:00
PERL_EMBED_CCOPTS = $( shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
2017-12-04 15:23:08 +00:00
PERL_EMBED_CCOPTS := $( filter-out -specs= %,$( PERL_EMBED_CCOPTS) )
2020-10-28 16:59:00 +00:00
PERL_EMBED_CCOPTS := $( filter-out -flto= auto -ffat-lto-objects, $( PERL_EMBED_CCOPTS) )
2017-12-04 15:23:08 +00:00
PERL_EMBED_LDOPTS := $( filter-out -specs= %,$( PERL_EMBED_LDOPTS) )
2013-04-15 02:06:58 +00:00
FLAGS_PERL_EMBED = $( PERL_EMBED_CCOPTS) $( PERL_EMBED_LDOPTS)
2013-09-30 13:15:36 +00:00
ifneq ( $( feature-libperl) , 1)
2013-04-15 02:06:58 +00:00
CFLAGS += -DNO_LIBPERL
NO_LIBPERL := 1
2015-02-28 08:39:09 +00:00
msg := $( warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev) ;
2013-04-15 02:06:58 +00:00
else
LDFLAGS += $( PERL_EMBED_LDFLAGS)
EXTLIBS += $( PERL_EMBED_LIBADD)
2018-03-30 09:27:12 +00:00
CFLAGS += -DHAVE_LIBPERL_SUPPORT
tools build: Filter out options and warnings not supported by clang
These make the feature check fail when using clang, so remove them just
like is done in tools/perf/Makefile.config to build perf itself.
Adding -Wno-compound-token-split-by-macro to tools/perf/Makefile.config
when building with clang is also necessary to avoid these warnings
turned into errors (-Werror):
CC /tmp/build/perf/util/scripting-engines/trace-event-perl.o
In file included from util/scripting-engines/trace-event-perl.c:35:
In file included from /usr/lib64/perl5/CORE/perl.h:4085:
In file included from /usr/lib64/perl5/CORE/hv.h:659:
In file included from /usr/lib64/perl5/CORE/hv_func.h:34:
In file included from /usr/lib64/perl5/CORE/sbox32_hash.h:4:
/usr/lib64/perl5/CORE/zaphod32_hash.h:150:5: error: '(' and '{' tokens introducing statement expression appear in different macro expansion contexts [-Werror,-Wcompound-token-split-by-macro]
ZAPHOD32_SCRAMBLE32(state[0],0x9fade23b);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/perl5/CORE/zaphod32_hash.h:80:38: note: expanded from macro 'ZAPHOD32_SCRAMBLE32'
#define ZAPHOD32_SCRAMBLE32(v,prime) STMT_START { \
^~~~~~~~~~
/usr/lib64/perl5/CORE/perl.h:737:29: note: expanded from macro 'STMT_START'
# define STMT_START (void)( /* gcc supports "({ STATEMENTS; })" */
^
/usr/lib64/perl5/CORE/zaphod32_hash.h:150:5: note: '{' token is here
ZAPHOD32_SCRAMBLE32(state[0],0x9fade23b);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/perl5/CORE/zaphod32_hash.h:80:49: note: expanded from macro 'ZAPHOD32_SCRAMBLE32'
#define ZAPHOD32_SCRAMBLE32(v,prime) STMT_START { \
^
/usr/lib64/perl5/CORE/zaphod32_hash.h:150:5: error: '}' and ')' tokens terminating statement expression appear in different macro expansion contexts [-Werror,-Wcompound-token-split-by-macro]
ZAPHOD32_SCRAMBLE32(state[0],0x9fade23b);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/perl5/CORE/zaphod32_hash.h:87:41: note: expanded from macro 'ZAPHOD32_SCRAMBLE32'
v ^= (v>>23); \
^
/usr/lib64/perl5/CORE/zaphod32_hash.h:150:5: note: ')' token is here
ZAPHOD32_SCRAMBLE32(state[0],0x9fade23b);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/perl5/CORE/zaphod32_hash.h:88:3: note: expanded from macro 'ZAPHOD32_SCRAMBLE32'
} STMT_END
^~~~~~~~
/usr/lib64/perl5/CORE/perl.h:738:21: note: expanded from macro 'STMT_END'
# define STMT_END )
^
Please refer to the discussion on the Link: tag below, where Nathan
clarifies the situation:
<quote>
acme> And then get to the problems at the end of this message, which seem
acme> similar to the problem described here:
acme>
acme> From Nathan Chancellor <>
acme> Subject [PATCH] mwifiex: Remove unnecessary braces from HostCmd_SET_SEQ_NO_BSS_INFO
acme>
acme> https://lkml.org/lkml/2020/9/1/135
acme>
acme> So perhaps in this case its better to disable that
acme> -Werror,-Wcompound-token-split-by-macro when building with clang?
Yes, I think that is probably the best solution. As far as I can tell,
at least in this file and context, the warning appears harmless, as the
"create a GNU C statement expression from two different macros" is very
much intentional, based on the presence of PERL_USE_GCC_BRACE_GROUPS.
The warning is fixed in upstream Perl by just avoiding creating GNU C
statement expressions using STMT_START and STMT_END:
https://github.com/Perl/perl5/issues/18780
https://github.com/Perl/perl5/pull/18984
If I am reading the source code correctly, an alternative to disabling
the warning would be specifying -DPERL_GCC_BRACE_GROUPS_FORBIDDEN but it
seems like that might end up impacting more than just this site,
according to the issue discussion above.
</quote>
Based-on-a-patch-by: Sedat Dilek <sedat.dilek@gmail.com>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # Debian/Selfmade LLVM-14 (x86-64)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Fangrui Song <maskray@google.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Keeping <john@metanate.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Link: http://lore.kernel.org/lkml/YkxWcYzph5pC1EK8@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-04-05 13:33:21 +00:00
ifeq ( $( CC_NO_CLANG) , 0)
CFLAGS += -Wno-compound-token-split-by-macro
endif
2014-12-30 12:11:32 +00:00
$( call detected,CONFIG_LIBPERL)
2013-04-15 02:06:58 +00:00
endif
2013-03-17 23:19:44 +00:00
e n d i f
2013-03-17 23:35:32 +00:00
2013-10-29 16:43:16 +00:00
i f e q ( $( feature -timerfd ) , 1 )
CFLAGS += -DHAVE_TIMERFD_SUPPORT
e l s e
msg := $( warning No timerfd support. Disables 'perf kvm stat live' ) ;
e n d i f
2013-03-17 23:35:32 +00:00
disable-python = $( eval $( disable-python_code) )
d e f i n e d i s a b l e - p y t h o n _ c o d e
2013-03-21 10:30:54 +00:00
CFLAGS += -DNO_LIBPYTHON
2015-02-28 08:33:45 +00:00
$( warning $1 )
2013-03-17 23:35:32 +00:00
NO_LIBPYTHON := 1
e n d e f
2014-07-29 06:57:19 +00:00
i f d e f N O _ L I B P Y T H O N
2015-02-28 08:33:45 +00:00
$( call disable-python,Python support disabled by user)
2013-03-17 23:35:32 +00:00
e l s e
2014-07-29 06:57:19 +00:00
ifndef PYTHON
2015-02-28 08:33:45 +00:00
$( call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
2013-03-17 23:35:32 +00:00
else
2014-07-29 06:57:19 +00:00
PYTHON_WORD := $( call shell-wordify,$( PYTHON) )
2013-03-17 23:35:32 +00:00
ifndef PYTHON_CONFIG
2015-02-28 08:33:45 +00:00
$( call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
2013-03-17 23:35:32 +00:00
else
2013-09-30 13:18:37 +00:00
ifneq ( $( feature-libpython) , 1)
2015-02-28 08:33:45 +00:00
$( call disable-python,No 'Python.h' ( for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
2013-03-17 23:35:32 +00:00
else
perf tools: Add Python 3 support
Added Python 3 support while keeping Python 2.7 compatibility.
Committer notes:
This doesn't make it to auto detect python 3, one has to explicitely ask
it to build with python 3 devel files, here are the instructions
provided by Jaroslav:
---
$ cp -a tools/perf tools/python3-perf
$ make V=1 prefix=/usr -C tools/perf PYTHON=/usr/bin/python2 all
$ make V=1 prefix=/usr -C tools/python3-perf PYTHON=/usr/bin/python3 all
$ make V=1 prefix=/usr -C tools/python3-perf PYTHON=/usr/bin/python3 DESTDIR=%{buildroot} install-python_ext
$ make V=1 prefix=/usr -C tools/perf PYTHON=/usr/bin/python2 DESTDIR=%{buildroot} install-python_ext
---
We need to make this automatic, just like the existing tests for checking if
the python2 devel files are in place, allowing the build with python3 if
available, fallbacking to python2 and then just disabling it if none are
available.
So, using the PYTHON variable to build it using O= we get:
Before this patch:
$ rpm -q python3 python3-devel
python3-3.6.4-7.fc27.x86_64
python3-devel-3.6.4-7.fc27.x86_64
$ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make O=/tmp/build/perf PYTHON=/usr/bin/python3 -C tools/perf install-bin
make: Entering directory '/home/acme/git/linux/tools/perf'
<SNIP>
Makefile.config:670: Python 3 is not yet supported; please set
Makefile.config:671: PYTHON and/or PYTHON_CONFIG appropriately.
Makefile.config:672: If you also have Python 2 installed, then
Makefile.config:673: try something like:
Makefile.config:674:
Makefile.config:675: make PYTHON=python2
Makefile.config:676:
Makefile.config:677: Otherwise, disable Python support entirely:
Makefile.config:678:
Makefile.config:679: make NO_LIBPYTHON=1
Makefile.config:680:
Makefile.config:681: *** . Stop.
make[1]: *** [Makefile.perf:212: sub-make] Error 2
make: *** [Makefile:110: install-bin] Error 2
make: Leaving directory '/home/acme/git/linux/tools/perf'
$
After:
$ make O=/tmp/build/perf PYTHON=python3 -C tools/perf install-bin
$ ldd ~/bin/perf | grep python
libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007f58a31e8000)
$ rpm -qf /lib64/libpython3.6m.so.1.0
python3-libs-3.6.4-7.fc27.x86_64
$
Now verify that when using the binding the right ELF file is loaded,
using perf trace:
$ perf trace -e open* perf test python
0.051 ( 0.016 ms): perf/3927 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC ) = 3
<SNIP>
18: 'import perf' in python :
8.849 ( 0.013 ms): sh/3929 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC ) = 3
<SNIP>
25.572 ( 0.008 ms): python3/3931 openat(dfd: CWD, filename: /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so, flags: CLOEXEC) = 3
<SNIP>
Ok
<SNIP>
$
And using tools/perf/python/twatch.py, to show PERF_RECORD_ metaevents:
$ python3 tools/perf/python/twatch.py
cpu: 3, pid: 16060, tid: 16060 { type: fork, pid: 5207, ppid: 16060, tid: 5207, ptid: 16060, time: 10798513015459}
cpu: 3, pid: 16060, tid: 16060 { type: fork, pid: 5208, ppid: 16060, tid: 5208, ptid: 16060, time: 10798513562503}
cpu: 0, pid: 5208, tid: 5208 { type: comm, pid: 5208, tid: 5208, comm: grep }
cpu: 2, pid: 5207, tid: 5207 { type: comm, pid: 5207, tid: 5207, comm: ps }
cpu: 2, pid: 5207, tid: 5207 { type: exit, pid: 5207, ppid: 5207, tid: 5207, ptid: 5207, time: 10798551337484}
cpu: 3, pid: 5208, tid: 5208 { type: exit, pid: 5208, ppid: 5208, tid: 5208, ptid: 5208, time: 10798551292153}
cpu: 3, pid: 601, tid: 601 { type: fork, pid: 5209, ppid: 601, tid: 5209, ptid: 601, time: 10801779977324}
^CTraceback (most recent call last):
File "tools/perf/python/twatch.py", line 68, in <module>
main()
File "tools/perf/python/twatch.py", line 40, in main
evlist.poll(timeout = -1)
KeyboardInterrupt
$
# ps ax|grep twatch
5197 pts/8 S+ 0:00 python3 tools/perf/python/twatch.py
# ls -la /proc/5197/smaps
-r--r--r--. 1 acme acme 0 Feb 19 13:14 /proc/5197/smaps
# grep python /proc/5197/smaps
558111307000-558111309000 r-xp 00000000 fd:00 3151710 /usr/bin/python3.6
558111508000-558111509000 r--p 00001000 fd:00 3151710 /usr/bin/python3.6
558111509000-55811150a000 rw-p 00002000 fd:00 3151710 /usr/bin/python3.6
7ffad6fc1000-7ffad7008000 r-xp 00000000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffad7008000-7ffad7207000 ---p 00047000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffad7207000-7ffad7208000 r--p 00046000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffad7208000-7ffad7215000 rw-p 00047000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffadea77000-7ffaded3d000 r-xp 00000000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
7ffaded3d000-7ffadef3c000 ---p 002c6000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
7ffadef3c000-7ffadef42000 r--p 002c5000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
7ffadef42000-7ffadefa5000 rw-p 002cb000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
#
And with this patch, but building normally, without specifying the
PYTHON=python3 part, which will make it use python2 if its devel files are
available, like in this test:
$ make O=/tmp/build/perf -C tools/perf install-bin
$ ldd ~/bin/perf | grep python
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f6a44410000)
$ ldd /tmp/build/perf/python_ext_build/lib/perf.so | grep python
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007fed28a2c000)
$
[acme@jouet perf]$ tools/perf/python/twatch.py
cpu: 0, pid: 2817, tid: 2817 { type: fork, pid: 2817, ppid: 2817, tid: 8910, ptid: 2817, time: 11126454335306}
cpu: 0, pid: 2817, tid: 2817 { type: comm, pid: 2817, tid: 8910, comm: worker }
$ ps ax | grep twatch.py
8909 pts/8 S+ 0:00 /usr/bin/python tools/perf/python/twatch.py
$ grep python /proc/8909/smaps
5579de658000-5579de659000 r-xp 00000000 fd:00 3156044 /usr/bin/python2.7
5579de858000-5579de859000 r--p 00000000 fd:00 3156044 /usr/bin/python2.7
5579de859000-5579de85a000 rw-p 00001000 fd:00 3156044 /usr/bin/python2.7
7f0de01f7000-7f0de023e000 r-xp 00000000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de023e000-7f0de043d000 ---p 00047000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de043d000-7f0de043e000 r--p 00046000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de043e000-7f0de044b000 rw-p 00047000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de6f0f000-7f0de6f13000 r-xp 00000000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de6f13000-7f0de7113000 ---p 00004000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de7113000-7f0de7114000 r--p 00004000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de7114000-7f0de7115000 rw-p 00005000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de7e73000-7f0de8052000 r-xp 00000000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
7f0de8052000-7f0de8251000 ---p 001df000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
7f0de8251000-7f0de8255000 r--p 001de000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
7f0de8255000-7f0de8291000 rw-p 001e2000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
$
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
LPU-Reference: 20180119205641.24242-1-jskarvad@redhat.com
Link: https://lkml.kernel.org/n/tip-8d7dt9kqp83vsz25hagug8fu@git.kernel.org
[ Removed explicit check for python version, allowing it to really build with python3 ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-01-19 20:56:41 +00:00
LDFLAGS += $( PYTHON_EMBED_LDFLAGS)
EXTLIBS += $( PYTHON_EMBED_LIBADD)
LANG_BINDINGS += $( obj-perf) python/perf.so
2018-03-30 09:27:12 +00:00
CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
perf tools: Add Python 3 support
Added Python 3 support while keeping Python 2.7 compatibility.
Committer notes:
This doesn't make it to auto detect python 3, one has to explicitely ask
it to build with python 3 devel files, here are the instructions
provided by Jaroslav:
---
$ cp -a tools/perf tools/python3-perf
$ make V=1 prefix=/usr -C tools/perf PYTHON=/usr/bin/python2 all
$ make V=1 prefix=/usr -C tools/python3-perf PYTHON=/usr/bin/python3 all
$ make V=1 prefix=/usr -C tools/python3-perf PYTHON=/usr/bin/python3 DESTDIR=%{buildroot} install-python_ext
$ make V=1 prefix=/usr -C tools/perf PYTHON=/usr/bin/python2 DESTDIR=%{buildroot} install-python_ext
---
We need to make this automatic, just like the existing tests for checking if
the python2 devel files are in place, allowing the build with python3 if
available, fallbacking to python2 and then just disabling it if none are
available.
So, using the PYTHON variable to build it using O= we get:
Before this patch:
$ rpm -q python3 python3-devel
python3-3.6.4-7.fc27.x86_64
python3-devel-3.6.4-7.fc27.x86_64
$ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make O=/tmp/build/perf PYTHON=/usr/bin/python3 -C tools/perf install-bin
make: Entering directory '/home/acme/git/linux/tools/perf'
<SNIP>
Makefile.config:670: Python 3 is not yet supported; please set
Makefile.config:671: PYTHON and/or PYTHON_CONFIG appropriately.
Makefile.config:672: If you also have Python 2 installed, then
Makefile.config:673: try something like:
Makefile.config:674:
Makefile.config:675: make PYTHON=python2
Makefile.config:676:
Makefile.config:677: Otherwise, disable Python support entirely:
Makefile.config:678:
Makefile.config:679: make NO_LIBPYTHON=1
Makefile.config:680:
Makefile.config:681: *** . Stop.
make[1]: *** [Makefile.perf:212: sub-make] Error 2
make: *** [Makefile:110: install-bin] Error 2
make: Leaving directory '/home/acme/git/linux/tools/perf'
$
After:
$ make O=/tmp/build/perf PYTHON=python3 -C tools/perf install-bin
$ ldd ~/bin/perf | grep python
libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007f58a31e8000)
$ rpm -qf /lib64/libpython3.6m.so.1.0
python3-libs-3.6.4-7.fc27.x86_64
$
Now verify that when using the binding the right ELF file is loaded,
using perf trace:
$ perf trace -e open* perf test python
0.051 ( 0.016 ms): perf/3927 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC ) = 3
<SNIP>
18: 'import perf' in python :
8.849 ( 0.013 ms): sh/3929 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC ) = 3
<SNIP>
25.572 ( 0.008 ms): python3/3931 openat(dfd: CWD, filename: /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so, flags: CLOEXEC) = 3
<SNIP>
Ok
<SNIP>
$
And using tools/perf/python/twatch.py, to show PERF_RECORD_ metaevents:
$ python3 tools/perf/python/twatch.py
cpu: 3, pid: 16060, tid: 16060 { type: fork, pid: 5207, ppid: 16060, tid: 5207, ptid: 16060, time: 10798513015459}
cpu: 3, pid: 16060, tid: 16060 { type: fork, pid: 5208, ppid: 16060, tid: 5208, ptid: 16060, time: 10798513562503}
cpu: 0, pid: 5208, tid: 5208 { type: comm, pid: 5208, tid: 5208, comm: grep }
cpu: 2, pid: 5207, tid: 5207 { type: comm, pid: 5207, tid: 5207, comm: ps }
cpu: 2, pid: 5207, tid: 5207 { type: exit, pid: 5207, ppid: 5207, tid: 5207, ptid: 5207, time: 10798551337484}
cpu: 3, pid: 5208, tid: 5208 { type: exit, pid: 5208, ppid: 5208, tid: 5208, ptid: 5208, time: 10798551292153}
cpu: 3, pid: 601, tid: 601 { type: fork, pid: 5209, ppid: 601, tid: 5209, ptid: 601, time: 10801779977324}
^CTraceback (most recent call last):
File "tools/perf/python/twatch.py", line 68, in <module>
main()
File "tools/perf/python/twatch.py", line 40, in main
evlist.poll(timeout = -1)
KeyboardInterrupt
$
# ps ax|grep twatch
5197 pts/8 S+ 0:00 python3 tools/perf/python/twatch.py
# ls -la /proc/5197/smaps
-r--r--r--. 1 acme acme 0 Feb 19 13:14 /proc/5197/smaps
# grep python /proc/5197/smaps
558111307000-558111309000 r-xp 00000000 fd:00 3151710 /usr/bin/python3.6
558111508000-558111509000 r--p 00001000 fd:00 3151710 /usr/bin/python3.6
558111509000-55811150a000 rw-p 00002000 fd:00 3151710 /usr/bin/python3.6
7ffad6fc1000-7ffad7008000 r-xp 00000000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffad7008000-7ffad7207000 ---p 00047000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffad7207000-7ffad7208000 r--p 00046000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffad7208000-7ffad7215000 rw-p 00047000 00:2d 220196 /tmp/build/perf/python/perf.cpython-36m-x86_64-linux-gnu.so
7ffadea77000-7ffaded3d000 r-xp 00000000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
7ffaded3d000-7ffadef3c000 ---p 002c6000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
7ffadef3c000-7ffadef42000 r--p 002c5000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
7ffadef42000-7ffadefa5000 rw-p 002cb000 fd:00 3151795 /usr/lib64/libpython3.6m.so.1.0
#
And with this patch, but building normally, without specifying the
PYTHON=python3 part, which will make it use python2 if its devel files are
available, like in this test:
$ make O=/tmp/build/perf -C tools/perf install-bin
$ ldd ~/bin/perf | grep python
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f6a44410000)
$ ldd /tmp/build/perf/python_ext_build/lib/perf.so | grep python
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007fed28a2c000)
$
[acme@jouet perf]$ tools/perf/python/twatch.py
cpu: 0, pid: 2817, tid: 2817 { type: fork, pid: 2817, ppid: 2817, tid: 8910, ptid: 2817, time: 11126454335306}
cpu: 0, pid: 2817, tid: 2817 { type: comm, pid: 2817, tid: 8910, comm: worker }
$ ps ax | grep twatch.py
8909 pts/8 S+ 0:00 /usr/bin/python tools/perf/python/twatch.py
$ grep python /proc/8909/smaps
5579de658000-5579de659000 r-xp 00000000 fd:00 3156044 /usr/bin/python2.7
5579de858000-5579de859000 r--p 00000000 fd:00 3156044 /usr/bin/python2.7
5579de859000-5579de85a000 rw-p 00001000 fd:00 3156044 /usr/bin/python2.7
7f0de01f7000-7f0de023e000 r-xp 00000000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de023e000-7f0de043d000 ---p 00047000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de043d000-7f0de043e000 r--p 00046000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de043e000-7f0de044b000 rw-p 00047000 00:2d 230695 /tmp/build/perf/python/perf.so
7f0de6f0f000-7f0de6f13000 r-xp 00000000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de6f13000-7f0de7113000 ---p 00004000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de7113000-7f0de7114000 r--p 00004000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de7114000-7f0de7115000 rw-p 00005000 fd:00 134975 /usr/lib64/python2.7/lib-dynload/_localemodule.so
7f0de7e73000-7f0de8052000 r-xp 00000000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
7f0de8052000-7f0de8251000 ---p 001df000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
7f0de8251000-7f0de8255000 r--p 001de000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
7f0de8255000-7f0de8291000 rw-p 001e2000 fd:00 3173292 /usr/lib64/libpython2.7.so.1.0
$
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
LPU-Reference: 20180119205641.24242-1-jskarvad@redhat.com
Link: https://lkml.kernel.org/n/tip-8d7dt9kqp83vsz25hagug8fu@git.kernel.org
[ Removed explicit check for python version, allowing it to really build with python3 ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-01-19 20:56:41 +00:00
$( call detected,CONFIG_LIBPYTHON)
2013-03-17 23:35:32 +00:00
endif
endif
endif
e n d i f
2013-03-17 23:38:16 +00:00
2014-04-23 14:53:25 +00:00
2021-09-10 22:57:56 +00:00
i f n d e f N O _ L I B B F D
ifeq ( $( feature-libbfd) , 1)
EXTLIBS += -lbfd -lopcodes
2014-04-23 14:53:25 +00:00
else
2021-09-10 22:57:56 +00:00
# we are on a system that requires -liberty and (maybe) -lz
# to link against -lbfd; test each case individually here
# call all detections now so we get correct
# status in VF output
$( call feature_check,libbfd-liberty)
$( call feature_check,libbfd-liberty-z)
ifeq ( $( feature-libbfd-liberty) , 1)
EXTLIBS += -lbfd -lopcodes -liberty
FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
else
ifeq ( $( feature-libbfd-liberty-z) , 1)
EXTLIBS += -lbfd -lopcodes -liberty -lz
FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
endif
2014-04-23 14:53:25 +00:00
endif
2021-09-10 22:57:56 +00:00
$( call feature_check,disassembler-four-args)
2014-04-23 14:53:25 +00:00
endif
2013-10-10 20:24:00 +00:00
2021-09-10 22:57:56 +00:00
ifeq ( $( feature-libbfd-buildid) , 1)
CFLAGS += -DHAVE_LIBBFD_BUILDID_SUPPORT
else
msg := $( warning Old version of libbfd/binutils things like PE executable profiling will not be available) ;
endif
2020-09-03 16:44:39 +00:00
e n d i f
2013-03-17 23:38:16 +00:00
i f d e f N O _ D E M A N G L E
2013-04-15 02:06:58 +00:00
CFLAGS += -DNO_DEMANGLE
2013-03-17 23:38:16 +00:00
e l s e
2013-09-30 10:07:11 +00:00
ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
2013-04-15 02:06:58 +00:00
EXTLIBS += -liberty
else
2018-11-16 00:32:01 +00:00
ifeq ( $( filter -liberty,$( EXTLIBS) ) ,)
$( call feature_check,cplus-demangle)
# we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
# or any of 'bfd iberty z' trinity
ifeq ( $( feature-cplus-demangle) , 1)
EXTLIBS += -liberty
else
msg := $( warning No bfd.h/libbfd found, please install binutils-dev[ el] /zlib-static/libiberty-dev to gain symbol demangling)
CFLAGS += -DNO_DEMANGLE
2013-04-15 02:06:58 +00:00
endif
endif
endif
2018-11-16 00:32:01 +00:00
ifneq ( $( filter -liberty,$( EXTLIBS) ) ,)
CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
endif
2013-03-17 23:38:16 +00:00
e n d i f
2013-03-17 23:41:04 +00:00
2013-10-10 20:24:00 +00:00
i f n e q ( $( filter -lbfd ,$ ( EXTLIBS ) ) , )
CFLAGS += -DHAVE_LIBBFD_SUPPORT
e n d i f
perf tools: Add gzip decompression support for kernel module
Now my Archlinux box shows module symbols correctly.
Before:
$ perf report --stdio
Failed to open /tmp/perf-3477.map, continuing without symbols
no symbols found in /usr/bin/date, maybe install a debug package?
No kallsyms or vmlinux with build-id 7b4ea0a49ae2111925857099aaf05c3246ff33e0 was found
[drm] with build id 7b4ea0a49ae2111925857099aaf05c3246ff33e0 not found, continuing without symbols
No kallsyms or vmlinux with build-id edd931629094b660ca9dec09a1b635c8d87aa2ee was found
[jbd2] with build id edd931629094b660ca9dec09a1b635c8d87aa2ee not found, continuing without symbols
No kallsyms or vmlinux with build-id a7b1eada671c34933e5610bb920b2ca4945a82c3 was found
[ext4] with build id a7b1eada671c34933e5610bb920b2ca4945a82c3 not found, continuing without symbols
No kallsyms or vmlinux with build-id d69511fa3e5840e770336ef45b06c83fef8d74e3 was found
[scsi_mod] with build id d69511fa3e5840e770336ef45b06c83fef8d74e3 not found, continuing without symbols
No kallsyms or vmlinux with build-id af0430af13461af058770ee9b87afc07922c2e77 was found
[libata] with build id af0430af13461af058770ee9b87afc07922c2e77 not found, continuing without symbols
No kallsyms or vmlinux with build-id aaeedff8160ce631a5f0333591c6ff291201d29f was found
[libahci] with build id aaeedff8160ce631a5f0333591c6ff291201d29f not found, continuing without symbols
No kallsyms or vmlinux with build-id c57907712becaf662dc4981824bb372c0441d605 was found
[mac80211] with build id c57907712becaf662dc4981824bb372c0441d605 not found, continuing without symbols
No kallsyms or vmlinux with build-id e0589077cc0ec8c3e4c40eb9f2d9e69d236bee8f was found
[iwldvm] with build id e0589077cc0ec8c3e4c40eb9f2d9e69d236bee8f not found, continuing without symbols
No kallsyms or vmlinux with build-id 2d86086bf136bf374a2f029cf85a48194f9b950b was found
[cfg80211] with build id 2d86086bf136bf374a2f029cf85a48194f9b950b not found, continuing without symbols
No kallsyms or vmlinux with build-id 4493c48599bdb3d91d0f8db5150e0be33fdd9221 was found
[iwlwifi] with build id 4493c48599bdb3d91d0f8db5150e0be33fdd9221 not found, continuing without symbols
...
#
# Overhead Command Shared Object Symbol
# ........ ............... ....................... ........................................................
#
0.03% swapper [ext4] [k] 0x000000000000fe2e
0.03% swapper [kernel.kallsyms] [k] account_entity_enqueue
0.03% swapper [ext4] [k] 0x000000000000fc2b
0.03% irq/50-iwlwifi [iwlwifi] [k] 0x000000000000200b
0.03% swapper [kernel.kallsyms] [k] ktime_add_safe
0.03% swapper [kernel.kallsyms] [k] elv_completed_request
0.03% swapper [libata] [k] 0x0000000000003997
0.03% swapper [libahci] [k] 0x0000000000001f25
0.03% swapper [kernel.kallsyms] [k] rb_next
0.03% swapper [kernel.kallsyms] [k] blk_finish_request
0.03% swapper [ext4] [k] 0x0000000000010248
0.00% perf [kernel.kallsyms] [k] native_write_msr_safe
After:
$ perf report --stdio
Failed to open /tmp/perf-3477.map, continuing without symbols
no symbols found in /usr/bin/tr, maybe install a debug package?
...
#
# Overhead Command Shared Object Symbol
# ........ ............... ........................... ......................................................
#
0.04% kworker/u16:3 [ext4] [k] ext4_read_block_bitmap
0.03% kworker/u16:0 [mac80211] [k] ieee80211_sta_reset_beacon_monitor
0.02% irq/50-iwlwifi [mac80211] [k] ieee80211_get_bssid
0.02% firefox [e1000e] [k] __ew32_prepare
0.02% swapper [libahci] [k] ahci_handle_port_interrupt
0.02% emacs libglib-2.0.so.0.4000.0 [.] g_mutex_unlock
0.02% swapper [e1000e] [k] e1000_clean_tx_irq
0.02% dwm [kernel.kallsyms] [k] __schedule
0.02% gnome-terminal- [vdso] [.] __vdso_clock_gettime
0.02% swapper [e1000e] [k] e1000_alloc_rx_buffers
0.02% irq/50-iwlwifi [mac80211] [k] ieee80211_rx
0.01% firefox [vdso] [.] __vdso_gettimeofday
0.01% irq/50-iwlwifi [iwlwifi] [k] iwl_pcie_rxq_restock.part.13
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/87h9yexshi.fsf@sejong.aot.lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2014-10-31 07:51:38 +00:00
i f n d e f N O _ Z L I B
ifeq ( $( feature-zlib) , 1)
CFLAGS += -DHAVE_ZLIB_SUPPORT
EXTLIBS += -lz
2014-12-30 12:31:12 +00:00
$( call detected,CONFIG_ZLIB)
perf tools: Add gzip decompression support for kernel module
Now my Archlinux box shows module symbols correctly.
Before:
$ perf report --stdio
Failed to open /tmp/perf-3477.map, continuing without symbols
no symbols found in /usr/bin/date, maybe install a debug package?
No kallsyms or vmlinux with build-id 7b4ea0a49ae2111925857099aaf05c3246ff33e0 was found
[drm] with build id 7b4ea0a49ae2111925857099aaf05c3246ff33e0 not found, continuing without symbols
No kallsyms or vmlinux with build-id edd931629094b660ca9dec09a1b635c8d87aa2ee was found
[jbd2] with build id edd931629094b660ca9dec09a1b635c8d87aa2ee not found, continuing without symbols
No kallsyms or vmlinux with build-id a7b1eada671c34933e5610bb920b2ca4945a82c3 was found
[ext4] with build id a7b1eada671c34933e5610bb920b2ca4945a82c3 not found, continuing without symbols
No kallsyms or vmlinux with build-id d69511fa3e5840e770336ef45b06c83fef8d74e3 was found
[scsi_mod] with build id d69511fa3e5840e770336ef45b06c83fef8d74e3 not found, continuing without symbols
No kallsyms or vmlinux with build-id af0430af13461af058770ee9b87afc07922c2e77 was found
[libata] with build id af0430af13461af058770ee9b87afc07922c2e77 not found, continuing without symbols
No kallsyms or vmlinux with build-id aaeedff8160ce631a5f0333591c6ff291201d29f was found
[libahci] with build id aaeedff8160ce631a5f0333591c6ff291201d29f not found, continuing without symbols
No kallsyms or vmlinux with build-id c57907712becaf662dc4981824bb372c0441d605 was found
[mac80211] with build id c57907712becaf662dc4981824bb372c0441d605 not found, continuing without symbols
No kallsyms or vmlinux with build-id e0589077cc0ec8c3e4c40eb9f2d9e69d236bee8f was found
[iwldvm] with build id e0589077cc0ec8c3e4c40eb9f2d9e69d236bee8f not found, continuing without symbols
No kallsyms or vmlinux with build-id 2d86086bf136bf374a2f029cf85a48194f9b950b was found
[cfg80211] with build id 2d86086bf136bf374a2f029cf85a48194f9b950b not found, continuing without symbols
No kallsyms or vmlinux with build-id 4493c48599bdb3d91d0f8db5150e0be33fdd9221 was found
[iwlwifi] with build id 4493c48599bdb3d91d0f8db5150e0be33fdd9221 not found, continuing without symbols
...
#
# Overhead Command Shared Object Symbol
# ........ ............... ....................... ........................................................
#
0.03% swapper [ext4] [k] 0x000000000000fe2e
0.03% swapper [kernel.kallsyms] [k] account_entity_enqueue
0.03% swapper [ext4] [k] 0x000000000000fc2b
0.03% irq/50-iwlwifi [iwlwifi] [k] 0x000000000000200b
0.03% swapper [kernel.kallsyms] [k] ktime_add_safe
0.03% swapper [kernel.kallsyms] [k] elv_completed_request
0.03% swapper [libata] [k] 0x0000000000003997
0.03% swapper [libahci] [k] 0x0000000000001f25
0.03% swapper [kernel.kallsyms] [k] rb_next
0.03% swapper [kernel.kallsyms] [k] blk_finish_request
0.03% swapper [ext4] [k] 0x0000000000010248
0.00% perf [kernel.kallsyms] [k] native_write_msr_safe
After:
$ perf report --stdio
Failed to open /tmp/perf-3477.map, continuing without symbols
no symbols found in /usr/bin/tr, maybe install a debug package?
...
#
# Overhead Command Shared Object Symbol
# ........ ............... ........................... ......................................................
#
0.04% kworker/u16:3 [ext4] [k] ext4_read_block_bitmap
0.03% kworker/u16:0 [mac80211] [k] ieee80211_sta_reset_beacon_monitor
0.02% irq/50-iwlwifi [mac80211] [k] ieee80211_get_bssid
0.02% firefox [e1000e] [k] __ew32_prepare
0.02% swapper [libahci] [k] ahci_handle_port_interrupt
0.02% emacs libglib-2.0.so.0.4000.0 [.] g_mutex_unlock
0.02% swapper [e1000e] [k] e1000_clean_tx_irq
0.02% dwm [kernel.kallsyms] [k] __schedule
0.02% gnome-terminal- [vdso] [.] __vdso_clock_gettime
0.02% swapper [e1000e] [k] e1000_alloc_rx_buffers
0.02% irq/50-iwlwifi [mac80211] [k] ieee80211_rx
0.01% firefox [vdso] [.] __vdso_gettimeofday
0.01% irq/50-iwlwifi [iwlwifi] [k] iwl_pcie_rxq_restock.part.13
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/87h9yexshi.fsf@sejong.aot.lge.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2014-10-31 07:51:38 +00:00
else
NO_ZLIB := 1
endif
e n d i f
2015-01-29 12:29:39 +00:00
i f n d e f N O _ L Z M A
ifeq ( $( feature-lzma) , 1)
CFLAGS += -DHAVE_LZMA_SUPPORT
EXTLIBS += -llzma
$( call detected,CONFIG_LZMA)
else
msg := $( warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev) ;
NO_LZMA := 1
endif
e n d i f
2019-03-18 17:39:49 +00:00
i f n d e f N O _ L I B Z S T D
ifeq ( $( feature-libzstd) , 1)
CFLAGS += -DHAVE_ZSTD_SUPPORT
CFLAGS += $( LIBZSTD_CFLAGS)
LDFLAGS += $( LIBZSTD_LDFLAGS)
EXTLIBS += -lzstd
$( call detected,CONFIG_ZSTD)
else
msg := $( warning No libzstd found, disables trace compression, please install libzstd-dev[ el] and/or set LIBZSTD_DIR) ;
NO_LIBZSTD := 1
endif
e n d i f
2019-08-07 14:44:14 +00:00
i f n d e f N O _ L I B C A P
ifeq ( $( feature-libcap) , 1)
CFLAGS += -DHAVE_LIBCAP_SUPPORT
EXTLIBS += -lcap
$( call detected,CONFIG_LIBCAP)
else
msg := $( warning No libcap found, disables capability support, please install libcap-devel/libcap-dev) ;
NO_LIBCAP := 1
endif
e n d i f
2013-03-17 23:41:04 +00:00
i f n d e f N O _ B A C K T R A C E
2013-09-30 14:49:38 +00:00
ifeq ( $( feature-backtrace) , 1)
2013-09-30 10:07:11 +00:00
CFLAGS += -DHAVE_BACKTRACE_SUPPORT
2013-04-15 02:06:58 +00:00
endif
2013-03-17 23:41:04 +00:00
e n d i f
2013-03-17 23:45:27 +00:00
i f n d e f N O _ L I B N U M A
2013-09-30 11:37:10 +00:00
ifeq ( $( feature-libnuma) , 0)
2013-12-02 15:26:48 +00:00
msg := $( warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev) ;
2013-04-15 02:06:58 +00:00
NO_LIBNUMA := 1
else
2015-09-17 15:20:28 +00:00
ifeq ( $( feature-numa_num_possible_cpus) , 0)
msg := $( warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8) ;
NO_LIBNUMA := 1
else
CFLAGS += -DHAVE_LIBNUMA_SUPPORT
EXTLIBS += -lnuma
$( call detected,CONFIG_NUMA)
endif
2013-04-15 02:06:58 +00:00
endif
2013-03-17 23:45:27 +00:00
e n d i f
2013-03-17 23:56:01 +00:00
2014-07-03 13:59:49 +00:00
i f d e f H A V E _ K V M _ S T A T _ S U P P O R T
CFLAGS += -DHAVE_KVM_STAT_SUPPORT
e n d i f
2019-03-12 05:30:48 +00:00
i f e q ( $( feature -disassembler -four -args ) , 1 )
CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
e n d i f
2014-10-23 21:16:03 +00:00
i f e q ( $ { I S _ 6 4 _ B I T } , 1 )
ifndef NO_PERF_READ_VDSO32
$( call feature_check,compile-32)
2014-10-23 10:45:24 +00:00
ifeq ( $( feature-compile-32) , 1)
CFLAGS += -DHAVE_PERF_READ_VDSO32
else
2014-10-23 21:16:03 +00:00
NO_PERF_READ_VDSO32 := 1
endif
endif
2017-04-10 03:02:37 +00:00
ifneq ( $( SRCARCH) , x86)
2014-10-23 21:16:03 +00:00
NO_PERF_READ_VDSOX32 := 1
endif
ifndef NO_PERF_READ_VDSOX32
$( call feature_check,compile-x32)
2014-10-23 10:45:24 +00:00
ifeq ( $( feature-compile-x32) , 1)
CFLAGS += -DHAVE_PERF_READ_VDSOX32
else
2014-10-23 21:16:03 +00:00
NO_PERF_READ_VDSOX32 := 1
endif
endif
e l s e
NO_PERF_READ_VDSO32 := 1
NO_PERF_READ_VDSOX32 := 1
e n d i f
2018-01-07 16:03:45 +00:00
i f n d e f N O _ L I B B A B E L T R A C E
2015-03-11 08:00:41 +00:00
$( call feature_check,libbabeltrace)
ifeq ( $( feature-libbabeltrace) , 1)
2015-02-20 22:16:58 +00:00
CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $( LIBBABELTRACE_CFLAGS)
LDFLAGS += $( LIBBABELTRACE_LDFLAGS)
EXTLIBS += -lbabeltrace-ctf
perf data: Add perf data to CTF conversion support
Adding 'perf data convert' to convert perf data file into different
format. This patch adds support for CTF format conversion.
To convert perf.data into CTF run:
$ perf data convert --to-ctf=./ctf-data/
[ perf data convert: Converted 'perf.data' into CTF data './ctf-data/' ]
[ perf data convert: Converted and wrote 11.268 MB (100230 samples) ]
The command will create CTF metadata out of perf.data file (or one
specified via -i option) and then convert all sample events into single
CTF stream.
Each sample_type bit is translated into separated CTF event field apart
from following exceptions:
PERF_SAMPLE_RAW - added in next patch
PERF_SAMPLE_READ - TODO
PERF_SAMPLE_CALLCHAIN - TODO
PERF_SAMPLE_BRANCH_STACK - TODO
PERF_SAMPLE_REGS_USER - TODO
PERF_SAMPLE_STACK_USER - TODO
$ perf --debug=data-convert=2 data convert ...
The converted CTF data could be analyzed by CTF tools, like babletrace
or tracecompass [1].
$ babeltrace ./ctf-data/
[03:19:13.962125533] (+?.?????????) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 1 }
[03:19:13.962130001] (+0.000004468) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 1 }
[03:19:13.962131936] (+0.000001935) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 8 }
[03:19:13.962133732] (+0.000001796) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 114 }
[03:19:13.962135557] (+0.000001825) cycles: { }, { ip = 0xFFFFFFFF8105443A, tid = 20714, pid = 20714, period = 2087 }
[03:19:13.962137627] (+0.000002070) cycles: { }, { ip = 0xFFFFFFFF81361938, tid = 20714, pid = 20714, period = 37582 }
[03:19:13.962161091] (+0.000023464) cycles: { }, { ip = 0xFFFFFFFF8124218F, tid = 20714, pid = 20714, period = 600246 }
[03:19:13.962517569] (+0.000356478) cycles: { }, { ip = 0xFFFFFFFF811A75DB, tid = 20714, pid = 20714, period = 1325731 }
[03:19:13.969518008] (+0.007000439) cycles: { }, { ip = 0x34080917B2, tid = 20714, pid = 20714, period = 1144298 }
The following members to the ctf-environment were decided to be added to
distinguish and specify perf CTF data:
- domain
It says "kernel" because it contains a kernel trace (not to be
confused with a user space like lttng-ust does)
- tracer_name
It says perf. This can be used to distinguish between lttng and perf
CTF based trace.
- version
The kernel version from stream. In addition to release, this is what
it looks like on a Debian kernel:
release = "3.14-1-amd64";
version = "3.14.0";
[1] http://projects.eclipse.org/projects/tools.tracecompass
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jeremie Galarneau <jgalar@efficios.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Tom Zanussi <tzanussi@gmail.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1424470628-5969-4-git-send-email-jolsa@kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-02-20 22:17:00 +00:00
$( call detected,CONFIG_LIBBABELTRACE)
2015-03-11 08:00:41 +00:00
else
msg := $( warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[ el] /libbabeltrace-ctf-dev) ;
2015-02-20 22:16:58 +00:00
endif
e n d i f
2015-04-30 14:37:27 +00:00
i f n d e f N O _ A U X T R A C E
2017-04-10 03:02:37 +00:00
ifeq ( $( SRCARCH) ,x86)
2016-09-16 15:49:58 +00:00
ifeq ( $( feature-get_cpuid) , 0)
msg := $( warning Your gcc lacks the __get_cpuid( ) builtin, disables support for auxtrace/Intel PT, please install a newer gcc) ;
NO_AUXTRACE := 1
endif
endif
ifndef NO_AUXTRACE
2015-09-17 15:54:30 +00:00
$( call detected,CONFIG_AUXTRACE)
CFLAGS += -DHAVE_AUXTRACE_SUPPORT
2021-11-16 17:44:17 +00:00
ifeq ( $( feature-reallocarray) , 0)
CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
endif
2015-09-17 15:54:30 +00:00
endif
2015-04-30 14:37:27 +00:00
e n d i f
2016-11-02 13:35:49 +00:00
i f n d e f N O _ J V M T I
ifneq ( ,$( wildcard /usr/sbin/update-java-alternatives) )
JDIR = $( shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}' )
else
ifneq ( ,$( wildcard /usr/sbin/alternatives) )
2019-09-09 11:41:16 +00:00
JDIR = $( shell /usr/sbin/alternatives --display java | tail -1 | cut -d' ' -f 5 | sed -e 's%/jre/bin/java.%%g' -e 's%/bin/java.%%g' )
2016-11-02 13:35:49 +00:00
endif
endif
ifndef JDIR
$( warning No alternatives command found, you need to set JDIR = to point to the root of your Java directory)
NO_JVMTI := 1
endif
e n d i f
i f n d e f N O _ J V M T I
FEATURE_CHECK_CFLAGS-jvmti := -I$( JDIR) /include -I$( JDIR) /include/linux
$( call feature_check,jvmti)
ifeq ( $( feature-jvmti) , 1)
$( call detected_var,JDIR)
2018-11-21 15:43:41 +00:00
ifndef NO_JVMTI_CMLR
FEATURE_CHECK_CFLAGS-jvmti-cmlr := $( FEATURE_CHECK_CFLAGS-jvmti)
$( call feature_check,jvmti-cmlr)
ifeq ( $( feature-jvmti-cmlr) , 1)
CFLAGS += -DHAVE_JVMTI_CMLR
endif
endif # NO_JVMTI_CMLR
2016-11-02 13:35:49 +00:00
else
2018-04-11 15:08:53 +00:00
$( warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel)
2016-11-02 13:35:49 +00:00
NO_JVMTI := 1
endif
e n d i f
2016-11-26 07:03:33 +00:00
USE_CXX = 0
USE_CLANGLLVM = 0
i f d e f L I B C L A N G L L V M
$( call feature_check,cxx)
ifneq ( $( feature-cxx) , 1)
msg := $( warning No g++ found, disable clang and llvm support. Please install g++)
else
$( call feature_check,llvm)
perf build: Check LLVM version in feature check
Cancel builtin llvm and clang support when LLVM version is less than
3.9.0: following commits uses newer API.
Since Clang/LLVM's API is not guaranteed to be stable, add a
test-llvm-version.cpp feature checker, issue warning if LLVM found in
compiling environment is not tested yet.
Committer Notes:
Testing it:
Environment:
$ cat /etc/fedora-release
Fedora release 25 (Twenty Five)
$ rpm -q llvm-devel clang-devel
llvm-devel-3.8.0-1.fc25.x86_64
clang-devel-3.8.0-2.fc25.x86_64
$
Before:
$ make -k LIBCLANGLLVM=1 O=/tmp/build/perf -C tools/perf install-bin
make: Entering directory '/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j4' parallel build
Warning: tools/include/uapi/linux/bpf.h differs from kernel
Warning: tools/arch/arm/include/uapi/asm/kvm.h differs from kernel
INSTALL GTK UI
LINK /tmp/build/perf/perf
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::createCompilerInvocation(llvm::SmallVector<char const*, 16u>, llvm::StringRef&, clang::DiagnosticsEngine&)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:56: undefined reference to `clang::tooling::newInvocation(clang::DiagnosticsEngine*, llvm::SmallVector<char const*, 16u> const&)'
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::getModuleFromSource(llvm::SmallVector<char const*, 16u>, llvm::StringRef, llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem>)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:68: undefined reference to `clang::CompilerInstance::CompilerInstance(std::shared_ptr<clang::PCHContainerOperations>, bool)'
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:69: undefined reference to `clang::CompilerInstance::createDiagnostics(clang::DiagnosticConsumer*, bool)'
<SNIP>
After:
Makefile.config:807: No suitable libLLVM found, disabling builtin clang and llvm support. Please install llvm-dev(el) (>= 3.9.0)
Updating the environment to a locally built LLVM 4.0 + clang 3.9 (forgot
to git pull, duh) combo, all works as expected, it is properly detected
and built into the resulting perf binary.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Reported-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.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/20161206072230.7651-1-wangnan0@huawei.com
[ Change the warning message a bit (add 'suitable' and 'builtin'), clarifying it, see committer notes above ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2016-12-06 07:22:30 +00:00
$( call feature_check,llvm-version)
2016-11-26 07:03:33 +00:00
ifneq ( $( feature-llvm) , 1)
perf build: Check LLVM version in feature check
Cancel builtin llvm and clang support when LLVM version is less than
3.9.0: following commits uses newer API.
Since Clang/LLVM's API is not guaranteed to be stable, add a
test-llvm-version.cpp feature checker, issue warning if LLVM found in
compiling environment is not tested yet.
Committer Notes:
Testing it:
Environment:
$ cat /etc/fedora-release
Fedora release 25 (Twenty Five)
$ rpm -q llvm-devel clang-devel
llvm-devel-3.8.0-1.fc25.x86_64
clang-devel-3.8.0-2.fc25.x86_64
$
Before:
$ make -k LIBCLANGLLVM=1 O=/tmp/build/perf -C tools/perf install-bin
make: Entering directory '/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j4' parallel build
Warning: tools/include/uapi/linux/bpf.h differs from kernel
Warning: tools/arch/arm/include/uapi/asm/kvm.h differs from kernel
INSTALL GTK UI
LINK /tmp/build/perf/perf
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::createCompilerInvocation(llvm::SmallVector<char const*, 16u>, llvm::StringRef&, clang::DiagnosticsEngine&)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:56: undefined reference to `clang::tooling::newInvocation(clang::DiagnosticsEngine*, llvm::SmallVector<char const*, 16u> const&)'
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::getModuleFromSource(llvm::SmallVector<char const*, 16u>, llvm::StringRef, llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem>)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:68: undefined reference to `clang::CompilerInstance::CompilerInstance(std::shared_ptr<clang::PCHContainerOperations>, bool)'
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:69: undefined reference to `clang::CompilerInstance::createDiagnostics(clang::DiagnosticConsumer*, bool)'
<SNIP>
After:
Makefile.config:807: No suitable libLLVM found, disabling builtin clang and llvm support. Please install llvm-dev(el) (>= 3.9.0)
Updating the environment to a locally built LLVM 4.0 + clang 3.9 (forgot
to git pull, duh) combo, all works as expected, it is properly detected
and built into the resulting perf binary.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Reported-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.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/20161206072230.7651-1-wangnan0@huawei.com
[ Change the warning message a bit (add 'suitable' and 'builtin'), clarifying it, see committer notes above ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2016-12-06 07:22:30 +00:00
msg := $( warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev( el) ( >= 3.9.0) )
2016-11-26 07:03:33 +00:00
else
$( call feature_check,clang)
ifneq ( $( feature-clang) , 1)
perf build: Check LLVM version in feature check
Cancel builtin llvm and clang support when LLVM version is less than
3.9.0: following commits uses newer API.
Since Clang/LLVM's API is not guaranteed to be stable, add a
test-llvm-version.cpp feature checker, issue warning if LLVM found in
compiling environment is not tested yet.
Committer Notes:
Testing it:
Environment:
$ cat /etc/fedora-release
Fedora release 25 (Twenty Five)
$ rpm -q llvm-devel clang-devel
llvm-devel-3.8.0-1.fc25.x86_64
clang-devel-3.8.0-2.fc25.x86_64
$
Before:
$ make -k LIBCLANGLLVM=1 O=/tmp/build/perf -C tools/perf install-bin
make: Entering directory '/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j4' parallel build
Warning: tools/include/uapi/linux/bpf.h differs from kernel
Warning: tools/arch/arm/include/uapi/asm/kvm.h differs from kernel
INSTALL GTK UI
LINK /tmp/build/perf/perf
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::createCompilerInvocation(llvm::SmallVector<char const*, 16u>, llvm::StringRef&, clang::DiagnosticsEngine&)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:56: undefined reference to `clang::tooling::newInvocation(clang::DiagnosticsEngine*, llvm::SmallVector<char const*, 16u> const&)'
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::getModuleFromSource(llvm::SmallVector<char const*, 16u>, llvm::StringRef, llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem>)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:68: undefined reference to `clang::CompilerInstance::CompilerInstance(std::shared_ptr<clang::PCHContainerOperations>, bool)'
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:69: undefined reference to `clang::CompilerInstance::createDiagnostics(clang::DiagnosticConsumer*, bool)'
<SNIP>
After:
Makefile.config:807: No suitable libLLVM found, disabling builtin clang and llvm support. Please install llvm-dev(el) (>= 3.9.0)
Updating the environment to a locally built LLVM 4.0 + clang 3.9 (forgot
to git pull, duh) combo, all works as expected, it is properly detected
and built into the resulting perf binary.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Reported-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.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/20161206072230.7651-1-wangnan0@huawei.com
[ Change the warning message a bit (add 'suitable' and 'builtin'), clarifying it, see committer notes above ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2016-12-06 07:22:30 +00:00
msg := $( warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev( el) ( >= 3.9.0) )
2016-11-26 07:03:33 +00:00
else
CFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT
CXXFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT -I$( shell $( LLVM_CONFIG) --includedir)
$( call detected,CONFIG_CXX)
$( call detected,CONFIG_CLANGLLVM)
USE_CXX = 1
USE_LLVM = 1
USE_CLANG = 1
perf build: Check LLVM version in feature check
Cancel builtin llvm and clang support when LLVM version is less than
3.9.0: following commits uses newer API.
Since Clang/LLVM's API is not guaranteed to be stable, add a
test-llvm-version.cpp feature checker, issue warning if LLVM found in
compiling environment is not tested yet.
Committer Notes:
Testing it:
Environment:
$ cat /etc/fedora-release
Fedora release 25 (Twenty Five)
$ rpm -q llvm-devel clang-devel
llvm-devel-3.8.0-1.fc25.x86_64
clang-devel-3.8.0-2.fc25.x86_64
$
Before:
$ make -k LIBCLANGLLVM=1 O=/tmp/build/perf -C tools/perf install-bin
make: Entering directory '/home/acme/git/linux/tools/perf'
BUILD: Doing 'make -j4' parallel build
Warning: tools/include/uapi/linux/bpf.h differs from kernel
Warning: tools/arch/arm/include/uapi/asm/kvm.h differs from kernel
INSTALL GTK UI
LINK /tmp/build/perf/perf
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::createCompilerInvocation(llvm::SmallVector<char const*, 16u>, llvm::StringRef&, clang::DiagnosticsEngine&)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:56: undefined reference to `clang::tooling::newInvocation(clang::DiagnosticsEngine*, llvm::SmallVector<char const*, 16u> const&)'
/tmp/build/perf/libperf.a(libperf-in.o): In function `perf::getModuleFromSource(llvm::SmallVector<char const*, 16u>, llvm::StringRef, llvm::IntrusiveRefCntPtr<clang::vfs::FileSystem>)':
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:68: undefined reference to `clang::CompilerInstance::CompilerInstance(std::shared_ptr<clang::PCHContainerOperations>, bool)'
/home/acme/git/linux/tools/perf/util/c++/clang.cpp:69: undefined reference to `clang::CompilerInstance::createDiagnostics(clang::DiagnosticConsumer*, bool)'
<SNIP>
After:
Makefile.config:807: No suitable libLLVM found, disabling builtin clang and llvm support. Please install llvm-dev(el) (>= 3.9.0)
Updating the environment to a locally built LLVM 4.0 + clang 3.9 (forgot
to git pull, duh) combo, all works as expected, it is properly detected
and built into the resulting perf binary.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Reported-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.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/20161206072230.7651-1-wangnan0@huawei.com
[ Change the warning message a bit (add 'suitable' and 'builtin'), clarifying it, see committer notes above ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2016-12-06 07:22:30 +00:00
ifneq ( $( feature-llvm-version) ,1)
msg := $( warning This version of LLVM is not tested. May cause build errors)
endif
2016-11-26 07:03:33 +00:00
endif
endif
endif
e n d i f
2020-05-05 18:29:43 +00:00
i f d e f L I B P F M 4
$( call feature_check,libpfm4)
ifeq ( $( feature-libpfm4) , 1)
CFLAGS += -DHAVE_LIBPFM
EXTLIBS += -lpfm
ASCIIDOC_EXTRA = -aHAVE_LIBPFM= 1
$( call detected,CONFIG_LIBPFM4)
else
msg := $( warning libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev) ;
NO_LIBPFM4 := 1
endif
e n d i f
2021-04-28 09:20:23 +00:00
i f d e f L I B T R A C E E V E N T _ D Y N A M I C
$( call feature_check,libtraceevent)
ifeq ( $( feature-libtraceevent) , 1)
EXTLIBS += -ltraceevent
2021-09-23 00:10:22 +00:00
LIBTRACEEVENT_VERSION := $( shell $( PKG_CONFIG) --modversion libtraceevent)
LIBTRACEEVENT_VERSION_1 := $( word 1, $( subst ., ,$( LIBTRACEEVENT_VERSION) ) )
LIBTRACEEVENT_VERSION_2 := $( word 2, $( subst ., ,$( LIBTRACEEVENT_VERSION) ) )
LIBTRACEEVENT_VERSION_3 := $( word 3, $( subst ., ,$( LIBTRACEEVENT_VERSION) ) )
LIBTRACEEVENT_VERSION_CPP := $( shell expr $( LIBTRACEEVENT_VERSION_1) \* 255 \* 255 + $( LIBTRACEEVENT_VERSION_2) \* 255 + $( LIBTRACEEVENT_VERSION_3) )
CFLAGS += -DLIBTRACEEVENT_VERSION= $( LIBTRACEEVENT_VERSION_CPP)
2021-04-28 09:20:23 +00:00
else
dummy := $( error Error: No libtraceevent devel library found, please install libtraceevent-devel) ;
endif
e n d i f
2021-09-23 00:10:21 +00:00
i f d e f L I B T R A C E F S _ D Y N A M I C
$( call feature_check,libtracefs)
ifeq ( $( feature-libtracefs) , 1)
EXTLIBS += -ltracefs
2021-09-23 00:10:23 +00:00
LIBTRACEFS_VERSION := $( shell $( PKG_CONFIG) --modversion libtracefs)
LIBTRACEFS_VERSION_1 := $( word 1, $( subst ., ,$( LIBTRACEFS_VERSION) ) )
LIBTRACEFS_VERSION_2 := $( word 2, $( subst ., ,$( LIBTRACEFS_VERSION) ) )
LIBTRACEFS_VERSION_3 := $( word 3, $( subst ., ,$( LIBTRACEFS_VERSION) ) )
LIBTRACEFS_VERSION_CPP := $( shell expr $( LIBTRACEFS_VERSION_1) \* 255 \* 255 + $( LIBTRACEFS_VERSION_2) \* 255 + $( LIBTRACEFS_VERSION_3) )
CFLAGS += -DLIBTRACEFS_VERSION= $( LIBTRACEFS_VERSION_CPP)
2021-09-23 00:10:21 +00:00
else
dummy := $( error Error: No libtracefs devel library found, please install libtracefs-dev) ;
endif
e n d i f
2013-03-17 23:56:01 +00:00
# Among the variables below, these:
# perfexecdir
2018-05-04 13:37:27 +00:00
# perf_include_dir
perf bpf: Add 'examples' directories
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-05-04 14:56:15 +00:00
# perf_examples_dir
2013-03-17 23:56:01 +00:00
# template_dir
# mandir
# infodir
# htmldir
# ETC_PERFCONFIG (but not sysconfdir)
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "perf" at
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.
# Make the path relative to DESTDIR, not to prefix
i f n d e f D E S T D I R
2014-06-02 16:44:34 +00:00
prefix ?= $( HOME)
2013-03-17 23:56:01 +00:00
e n d i f
bindir_relative = bin
2015-07-28 14:10:13 +00:00
bindir = $( abspath $( prefix) /$( bindir_relative) )
2021-06-27 13:18:13 +00:00
includedir_relative = include
includedir = $( abspath $( prefix) /$( includedir_relative) )
2013-03-17 23:56:01 +00:00
mandir = share/man
infodir = share/info
perfexecdir = libexec/perf-core
2018-07-31 07:32:54 +00:00
perf_include_dir = lib/perf/include
perf_examples_dir = lib/perf/examples
2013-03-17 23:56:01 +00:00
sharedir = $( prefix) /share
template_dir = share/perf-core/templates
perf trace: Support 'strace' syscall event groups
I.e.:
$ cat ~/share/perf-core/strace/groups/file
access
chmod
creat
execve
faccessat
getcwd
lstat
mkdir
open
openat
quotactl
readlink
rename
rmdir
stat
statfs
symlink
unlink
$
Then, on a quiet desktop, try running this and then moving your mouse to
see the deluge of mouse related activity:
# perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
#
# trace --ev probe:vfs_getname --filter-pids 2232 -e file
0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm")
0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme")
0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm")
0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14
0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side")
0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname +
raw_syscalls:sys_exit(open) sequence...
Now, if you're bored, please write some more syscall groups, like the ones
in 'strace' and send it our way :-)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-20 15:02:09 +00:00
STRACE_GROUPS_DIR = share/perf-core/strace/groups
2013-03-17 23:56:01 +00:00
htmldir = share/doc/perf-doc
2016-01-07 11:41:53 +00:00
tipdir = share/doc/perf-tip
2016-01-09 10:16:28 +00:00
srcdir = $( srctree) /tools/perf
2013-03-17 23:56:01 +00:00
i f e q ( $( prefix ) , / u s r )
sysconfdir = /etc
ETC_PERFCONFIG = $( sysconfdir) /perfconfig
e l s e
sysconfdir = $( prefix) /etc
ETC_PERFCONFIG = etc/perfconfig
e n d i f
2014-08-25 14:55:52 +00:00
i f n d e f l i b
2017-04-10 03:02:37 +00:00
i f e q ( $( SRCARCH ) $( IS_ 64_BIT ) , x 8 6 1 )
2013-09-13 06:27:43 +00:00
lib = lib64
e l s e
2013-03-17 23:56:01 +00:00
lib = lib
2013-09-13 06:27:43 +00:00
e n d i f
2014-08-25 14:55:52 +00:00
e n d i f # lib
2013-09-13 06:27:43 +00:00
libdir = $( prefix) /$( lib)
2013-03-17 23:56:01 +00:00
# Shell quote (do not use $(call) to accommodate ancient setups);
ETC_PERFCONFIG_SQ = $( subst ',' \' ' ,$( ETC_PERFCONFIG) )
perf trace: Support 'strace' syscall event groups
I.e.:
$ cat ~/share/perf-core/strace/groups/file
access
chmod
creat
execve
faccessat
getcwd
lstat
mkdir
open
openat
quotactl
readlink
rename
rmdir
stat
statfs
symlink
unlink
$
Then, on a quiet desktop, try running this and then moving your mouse to
see the deluge of mouse related activity:
# perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
#
# trace --ev probe:vfs_getname --filter-pids 2232 -e file
0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm")
0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme")
0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm")
0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14
0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side")
0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname +
raw_syscalls:sys_exit(open) sequence...
Now, if you're bored, please write some more syscall groups, like the ones
in 'strace' and send it our way :-)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-20 15:02:09 +00:00
STRACE_GROUPS_DIR_SQ = $( subst ',' \' ' ,$( STRACE_GROUPS_DIR) )
2013-03-17 23:56:01 +00:00
DESTDIR_SQ = $( subst ',' \' ' ,$( DESTDIR) )
bindir_SQ = $( subst ',' \' ' ,$( bindir) )
2021-06-27 13:18:13 +00:00
includedir_SQ = $( subst ',' \' ' ,$( includedir) )
2013-03-17 23:56:01 +00:00
mandir_SQ = $( subst ',' \' ' ,$( mandir) )
infodir_SQ = $( subst ',' \' ' ,$( infodir) )
perfexecdir_SQ = $( subst ',' \' ' ,$( perfexecdir) )
2018-05-04 13:37:27 +00:00
perf_include_dir_SQ = $( subst ',' \' ' ,$( perf_include_dir) )
perf bpf: Add 'examples' directories
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-05-04 14:56:15 +00:00
perf_examples_dir_SQ = $( subst ',' \' ' ,$( perf_examples_dir) )
2013-03-17 23:56:01 +00:00
template_dir_SQ = $( subst ',' \' ' ,$( template_dir) )
htmldir_SQ = $( subst ',' \' ' ,$( htmldir) )
2016-01-07 11:41:53 +00:00
tipdir_SQ = $( subst ',' \' ' ,$( tipdir) )
2013-03-17 23:56:01 +00:00
prefix_SQ = $( subst ',' \' ' ,$( prefix) )
sysconfdir_SQ = $( subst ',' \' ' ,$( sysconfdir) )
2013-09-13 06:27:43 +00:00
libdir_SQ = $( subst ',' \' ' ,$( libdir) )
2016-01-09 10:16:28 +00:00
srcdir_SQ = $( subst ',' \' ' ,$( srcdir) )
2013-03-17 23:56:01 +00:00
i f n e q ( $( filter /%,$ ( firstword $ ( perfexecdir ) ) ) , )
perfexec_instdir = $( perfexecdir)
2018-05-04 13:37:27 +00:00
perf_include_instdir = $( perf_include_dir)
perf bpf: Add 'examples' directories
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-05-04 14:56:15 +00:00
perf_examples_instdir = $( perf_examples_dir)
perf trace: Support 'strace' syscall event groups
I.e.:
$ cat ~/share/perf-core/strace/groups/file
access
chmod
creat
execve
faccessat
getcwd
lstat
mkdir
open
openat
quotactl
readlink
rename
rmdir
stat
statfs
symlink
unlink
$
Then, on a quiet desktop, try running this and then moving your mouse to
see the deluge of mouse related activity:
# perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
#
# trace --ev probe:vfs_getname --filter-pids 2232 -e file
0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm")
0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme")
0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm")
0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14
0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side")
0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname +
raw_syscalls:sys_exit(open) sequence...
Now, if you're bored, please write some more syscall groups, like the ones
in 'strace' and send it our way :-)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-20 15:02:09 +00:00
STRACE_GROUPS_INSTDIR = $( STRACE_GROUPS_DIR)
2016-01-07 11:41:53 +00:00
tip_instdir = $( tipdir)
2013-03-17 23:56:01 +00:00
e l s e
perfexec_instdir = $( prefix) /$( perfexecdir)
2018-05-04 13:37:27 +00:00
perf_include_instdir = $( prefix) /$( perf_include_dir)
perf bpf: Add 'examples' directories
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-05-04 14:56:15 +00:00
perf_examples_instdir = $( prefix) /$( perf_examples_dir)
perf trace: Support 'strace' syscall event groups
I.e.:
$ cat ~/share/perf-core/strace/groups/file
access
chmod
creat
execve
faccessat
getcwd
lstat
mkdir
open
openat
quotactl
readlink
rename
rmdir
stat
statfs
symlink
unlink
$
Then, on a quiet desktop, try running this and then moving your mouse to
see the deluge of mouse related activity:
# perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
#
# trace --ev probe:vfs_getname --filter-pids 2232 -e file
0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm")
0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme")
0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm")
0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14
0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side")
0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname +
raw_syscalls:sys_exit(open) sequence...
Now, if you're bored, please write some more syscall groups, like the ones
in 'strace' and send it our way :-)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-20 15:02:09 +00:00
STRACE_GROUPS_INSTDIR = $( prefix) /$( STRACE_GROUPS_DIR)
2016-01-07 11:41:53 +00:00
tip_instdir = $( prefix) /$( tipdir)
2013-03-17 23:56:01 +00:00
e n d i f
perfexec_instdir_SQ = $( subst ',' \' ' ,$( perfexec_instdir) )
2018-05-04 13:37:27 +00:00
perf_include_instdir_SQ = $( subst ',' \' ' ,$( perf_include_instdir) )
perf bpf: Add 'examples' directories
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-05-04 14:56:15 +00:00
perf_examples_instdir_SQ = $( subst ',' \' ' ,$( perf_examples_instdir) )
perf trace: Support 'strace' syscall event groups
I.e.:
$ cat ~/share/perf-core/strace/groups/file
access
chmod
creat
execve
faccessat
getcwd
lstat
mkdir
open
openat
quotactl
readlink
rename
rmdir
stat
statfs
symlink
unlink
$
Then, on a quiet desktop, try running this and then moving your mouse to
see the deluge of mouse related activity:
# perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
#
# trace --ev probe:vfs_getname --filter-pids 2232 -e file
0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm")
0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme")
0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm")
0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14
0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side")
0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname +
raw_syscalls:sys_exit(open) sequence...
Now, if you're bored, please write some more syscall groups, like the ones
in 'strace' and send it our way :-)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-20 15:02:09 +00:00
STRACE_GROUPS_INSTDIR_SQ = $( subst ',' \' ' ,$( STRACE_GROUPS_INSTDIR) )
2016-01-07 11:41:53 +00:00
tip_instdir_SQ = $( subst ',' \' ' ,$( tip_instdir) )
2013-12-03 13:09:21 +00:00
# If we install to $(HOME) we keep the traceevent default:
# $(HOME)/.traceevent/plugins
# Otherwise we install plugins into the global $(libdir).
i f d e f D E S T D I R
plugindir = $( libdir) /traceevent/plugins
2014-01-22 15:01:48 +00:00
plugindir_SQ = $( subst ',' \' ' ,$( plugindir) )
2013-12-03 13:09:21 +00:00
e n d i f
2014-02-19 15:52:54 +00:00
2015-03-02 12:30:30 +00:00
print_var = $( eval $( print_var_code) ) $( info $( MSG) )
d e f i n e p r i n t _ v a r _ c o d e
2014-02-19 15:52:55 +00:00
MSG = $( shell printf '...%30s: %s' $( 1) $( $( 1) ) )
e n d e f
2014-02-19 15:52:54 +00:00
i f e q ( $( VF ) , 1 )
2018-01-09 09:26:46 +00:00
# Display EXTRA features which are detected manualy
# from here with feature_check call and thus cannot
# be partof global state output.
$( foreach feat,$( FEATURE_TESTS_EXTRA) ,$( call feature_print_status,$( feat) ,) )
2015-03-02 12:30:30 +00:00
$( call print_var,prefix)
$( call print_var,bindir)
$( call print_var,libdir)
$( call print_var,sysconfdir)
$( call print_var,LIBUNWIND_DIR)
$( call print_var,LIBDW_DIR)
2016-11-02 13:35:49 +00:00
$( call print_var,JDIR)
2015-12-23 17:58:31 +00:00
ifeq ( $( dwarf-post-unwind) ,1)
$( call feature_print_text,"DWARF post unwind library" , $( dwarf-post-unwind-text) )
endif
2014-02-19 15:52:54 +00:00
$( info )
e n d i f
2014-12-29 14:03:09 +00:00
$( call detected_var ,bindir_SQ )
$( call detected_var ,PYTHON_WORD )
i f n e q ( $( OUTPUT ) , )
$( call detected_var ,OUTPUT )
e n d i f
2014-12-29 14:13:44 +00:00
$( call detected_var ,htmldir_SQ )
$( call detected_var ,infodir_SQ )
$( call detected_var ,mandir_SQ )
2014-12-29 16:42:46 +00:00
$( call detected_var ,ETC_PERFCONFIG_SQ )
perf trace: Support 'strace' syscall event groups
I.e.:
$ cat ~/share/perf-core/strace/groups/file
access
chmod
creat
execve
faccessat
getcwd
lstat
mkdir
open
openat
quotactl
readlink
rename
rmdir
stat
statfs
symlink
unlink
$
Then, on a quiet desktop, try running this and then moving your mouse to
see the deluge of mouse related activity:
# perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
Added new event:
probe:vfs_getname (on getname_flags:72 with pathname=filename:string)
You can now use it in all perf tools, such as:
perf record -e probe:vfs_getname -aR sleep 1
#
# trace --ev probe:vfs_getname --filter-pids 2232 -e file
0.042 (0.042 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.042 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/xterm")
0.100 (0.100 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.142 (0.018 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.142 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/index.theme")
0.192 (0.069 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
0.230 (0.017 ms): mousetweaks/2235 open(filename: 0x14c3c10, mode: 438 ) ...
0.230 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/usr/share/icons/Adwaita/cursors/xterm")
0.253 (0.041 ms): mousetweaks/2235 ... [continued]: open()) = 14
0.459 (0.008 ms): mousetweaks/2235 open(filename: 0x14e3910, mode: 438 ) ...
0.459 ( ): probe:vfs_getname:(ffffffff812230bc) pathname="/home/acme/.icons/Adwaita/cursors/left_side")
0.468 (0.017 ms): mousetweaks/2235 ... [continued]: open()) = -1 ENOENT No such file or directory
Need to combine that raw_syscalls:sys_enter(open) + probe:vfs_getname +
raw_syscalls:sys_exit(open) sequence...
Now, if you're bored, please write some more syscall groups, like the ones
in 'strace' and send it our way :-)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Milian Wolff <mail@milianw.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-a42xklu59lcbxp7bbnic74a8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-07-20 15:02:09 +00:00
$( call detected_var ,STRACE_GROUPS_DIR_SQ )
2014-12-29 16:42:46 +00:00
$( call detected_var ,prefix_SQ )
$( call detected_var ,perfexecdir_SQ )
2018-05-04 13:37:27 +00:00
$( call detected_var ,perf_include_dir_SQ )
perf bpf: Add 'examples' directories
The first one is the bare minimum that bpf infrastructure accepts before
it expects actual events to be set up:
$ cat tools/perf/examples/bpf/empty.c
char _license[] __attribute__((section("license"), used)) = "GPL";
int _version __attribute__((section("version"), used)) = LINUX_VERSION_CODE;
$
If you remove that "version" line, then it will be refused with:
# perf trace -e tools/perf/examples/bpf/empty.c
event syntax error: 'tools/perf/examples/bpf/empty.c'
\___ Failed to load tools/perf/examples/bpf/empty.c from source: 'version' section incorrect or lost
(add -v to see detail)
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
The next ones will, step by step, show simple filters, then the needs
for headers will be made clear, it will be put in place and tested with
new examples, rinse, repeat.
Back to using this first one to test the perf+bpf infrastructure:
If we run it will fail, as no functions are present connecting with,
say, a tracepoint or a function using the kprobes or uprobes
infrastructure:
# perf trace -e tools/perf/examples/bpf/empty.c
WARNING: event parser found nothing
invalid or unsupported event: 'tools/perf/examples/bpf/empty.c'
Run 'perf list' for a list of valid events
Usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
-e, --event <event> event/syscall selector. use 'perf list' to list available events
#
But, if we set things up to dump the generated object file to a file,
and do this after having run 'make install', still on the developer's
$HOME directory:
# cat ~/.perfconfig
[llvm]
dump-obj = true
#
# perf trace -e ~acme/lib/examples/perf/bpf/empty.c
LLVM: dumping /home/acme/lib/examples/perf/bpf/empty.o
WARNING: event parser found nothing
invalid or unsupported event: '/home/acme/lib/examples/perf/bpf/empty.c'
<SNIP>
#
We can look at the dumped object file:
# ls -la ~acme/lib/examples/perf/bpf/empty.o
-rw-r--r--. 1 root root 576 May 4 12:10 /home/acme/lib/examples/perf/bpf/empty.o
# file ~acme/lib/examples/perf/bpf/empty.o
/home/acme/lib/examples/perf/bpf/empty.o: ELF 64-bit LSB relocatable, *unknown arch 0xf7* version 1 (SYSV), not stripped
# readelf -sw ~acme/lib/examples/perf/bpf/empty.o
Symbol table '.symtab' contains 3 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 _license
2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 4 _version
#
# tools/bpf/bpftool/bpftool --pretty ~acme/lib/examples/perf/bpf/empty.o
null
#
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-y7dkhakejz3013o0w21n98xd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2018-05-04 14:56:15 +00:00
$( call detected_var ,perf_examples_dir_SQ )
2016-01-07 11:41:53 +00:00
$( call detected_var ,tipdir_SQ )
2016-01-09 10:16:28 +00:00
$( call detected_var ,srcdir_SQ )
2014-12-29 23:16:01 +00:00
$( call detected_var ,LIBDIR )
2014-12-29 23:34:23 +00:00
$( call detected_var ,GTK_CFLAGS )
2014-12-30 12:11:32 +00:00
$( call detected_var ,PERL_EMBED_CCOPTS )
$( call detected_var ,PYTHON_EMBED_CCOPTS )
2021-05-24 11:15:14 +00:00
i f n e q ( $( BISON_FILE_PREFIX_MAP ) , )
$( call detected_var ,BISON_FILE_PREFIX_MAP )
e n d i f
2021-04-26 18:27:32 +00:00
# re-generate FEATURE-DUMP as we may have called feature_check, found out
# extra libraries to add to LDFLAGS of some other test and then redo those
# tests, see the block about libbfd, disassembler-four-args, for instance.
$( shell rm -f $ ( FEATURE_DUMP_FILENAME ) )
$( foreach feat ,$ ( FEATURE_TESTS ) ,$ ( shell echo "$ ( call feature_assign ,$ ( feat ) ) " >> $ ( FEATURE_DUMP_FILENAME ) ) )
2021-04-26 18:47:39 +00:00
i f e q ( $( feature_display ) , 1 )
$( call feature_display_entries)
e n d i f