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
2022-08-26 16:42:42 +00:00
# Enabled Wthread-safety analysis for clang builds.
i f e q ( $( CC_NO_CLANG ) , 0 )
CFLAGS += -Wthread-safety
e n d i f
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:
# * python2-config as per pep-0394.
2022-06-29 18:25:02 +00:00
# * python-config
# * python3-config
2022-03-09 19:43:13 +00:00
# * $(PYTHON)-config (If PYTHON is user supplied but PYTHON_CONFIG isn't)
#
PYTHON_AUTO := python-config
PYTHON_AUTO := $( if $( call get-executable,python2-config) ,python2-config,$( PYTHON_AUTO) )
2022-06-29 18:25:02 +00:00
PYTHON_AUTO := $( if $( call get-executable,python-config) ,python-config,$( PYTHON_AUTO) )
PYTHON_AUTO := $( if $( call get-executable,python3-config) ,python3-config,$( PYTHON_AUTO) )
2022-03-09 19:43:13 +00:00
# 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 ) )
2022-07-28 09:39:46 +00:00
override PYTHON : = $( call get -executable -or -default ,PYTHON ,$ ( subst -config ,,$ ( PYTHON_CONFIG ) ) )
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-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 ) , )
2022-07-19 17:05:54 +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.
2021-04-26 18:47:39 +00:00
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)
2022-07-20 16:21:45 +00:00
CORE_CFLAGS += -U_FORTIFY_SOURCE -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
perf build: Stop using __weak bpf_object__next_program() to handle older libbpf versions
By adding a feature test for bpf_object__next_program() 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_object__next_program.make.output
test-libbpf-bpf_object__next_program.c: In function ‘main’:
test-libbpf-bpf_object__next_program.c:6:9: error: implicit declaration of function ‘bpf_object__next_program’; did you mean ‘bpf_object__unpin_programs’? [-Werror=implicit-function-declaration]
6 | bpf_object__next_program(NULL /* obj */, NULL /* prev */);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| bpf_object__unpin_programs
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_object__next_program>:' -A20
00000000005b2dc0 <bpf_object__next_program>:
{
5b2dc0: 55 push %rbp
5b2dc1: 48 89 e5 mov %rsp,%rbp
5b2dc4: 48 83 ec 10 sub $0x10,%rsp
5b2dc8: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5b2dcf: 00 00
5b2dd1: 48 89 45 f8 mov %rax,-0x8(%rbp)
5b2dd5: 31 c0 xor %eax,%eax
return bpf_program__next(prev, obj);
5b2dd7: 48 8b 45 f8 mov -0x8(%rbp),%rax
5b2ddb: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
5b2de2: 00 00
5b2de4: 75 0f jne 5b2df5 <bpf_object__next_program+0x35>
}
5b2de6: c9 leave
5b2de7: 49 89 f8 mov %rdi,%r8
5b2dea: 48 89 f7 mov %rsi,%rdi
return bpf_program__next(prev, obj);
5b2ded: 4c 89 c6 mov %r8,%rsi
5b2df0: e9 3b b4 e5 ff jmp 40e230 <bpf_program__next@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:09:42 +00:00
$( call feature_check,libbpf-bpf_object__next_program)
ifeq ( $( feature-libbpf-bpf_object__next_program) , 1)
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_PROGRAM
endif
perf build: Stop using __weak bpf_object__next_map() to handle older libbpf versions
By adding a feature test for bpf_object__next_map() 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_object__next_map.make.output
test-libbpf-bpf_object__next_map.c: In function ‘main’:
test-libbpf-bpf_object__next_map.c:6:9: error: implicit declaration of function ‘bpf_object__next_map’; did you mean ‘bpf_object__next’? [-Werror=implicit-function-declaration]
6 | bpf_object__next_map(NULL /* obj */, NULL /* prev */);
| ^~~~~~~~~~~~~~~~~~~~
| bpf_object__next
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_object__next_map>:' -A20
00000000005b2e00 <bpf_object__next_map>:
{
5b2e00: 55 push %rbp
5b2e01: 48 89 e5 mov %rsp,%rbp
5b2e04: 48 83 ec 10 sub $0x10,%rsp
5b2e08: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5b2e0f: 00 00
5b2e11: 48 89 45 f8 mov %rax,-0x8(%rbp)
5b2e15: 31 c0 xor %eax,%eax
return bpf_map__next(prev, obj);
5b2e17: 48 8b 45 f8 mov -0x8(%rbp),%rax
5b2e1b: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
5b2e22: 00 00
5b2e24: 75 0f jne 5b2e35 <bpf_object__next_map+0x35>
}
5b2e26: c9 leave
5b2e27: 49 89 f8 mov %rdi,%r8
5b2e2a: 48 89 f7 mov %rsi,%rdi
return bpf_map__next(prev, obj);
5b2e2d: 4c 89 c6 mov %r8,%rsi
5b2e30: e9 cb b1 e5 ff jmp 40e000 <bpf_map__next@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:13:17 +00:00
$( call feature_check,libbpf-bpf_object__next_map)
ifeq ( $( feature-libbpf-bpf_object__next_map) , 1)
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_MAP
endif
perf build: Stop using __weak btf__raw_data() to handle older libbpf versions
By adding a feature test for btf__raw_data() 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-btf__raw_data.make.output
test-libbpf-btf__raw_data.c: In function ‘main’:
test-libbpf-btf__raw_data.c:6:9: error: implicit declaration of function ‘btf__raw_data’; did you mean ‘btf__get_raw_data’? [-Werror=implicit-function-declaration]
6 | btf__raw_data(NULL /* btf_ro */, NULL /* size */);
| ^~~~~~~~~~~~~
| btf__get_raw_data
cc1: all warnings being treated as errors
$ objdump -dS /tmp/build/perf/perf | grep '<btf__raw_data>:' -A20
00000000005b3050 <btf__raw_data>:
{
5b3050: 55 push %rbp
5b3051: 48 89 e5 mov %rsp,%rbp
5b3054: 48 83 ec 10 sub $0x10,%rsp
5b3058: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5b305f: 00 00
5b3061: 48 89 45 f8 mov %rax,-0x8(%rbp)
5b3065: 31 c0 xor %eax,%eax
return btf__get_raw_data(btf_ro, size);
5b3067: 48 8b 45 f8 mov -0x8(%rbp),%rax
5b306b: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
5b3072: 00 00
5b3074: 75 06 jne 5b307c <btf__raw_data+0x2c>
}
5b3076: c9 leave
return btf__get_raw_data(btf_ro, size);
5b3077: e9 14 99 e5 ff jmp 40c990 <btf__get_raw_data@plt>
5b307c: e8 af a7 e5 ff call 40d830 <__stack_chk_fail@plt>
5b3081: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
5b3088: 00 00 00 00
$
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:16:20 +00:00
$( call feature_check,libbpf-btf__raw_data)
ifeq ( $( feature-libbpf-btf__raw_data) , 1)
CFLAGS += -DHAVE_LIBBPF_BTF__RAW_DATA
endif
perf build: Stop using __weak bpf_map_create() to handle older libbpf versions
By adding a feature test for bpf_map_create() and providing a fallback if
it isn't present in older versions of libbpf.
This also fixes the build with torvalds/master at this point:
$ git log --oneline -5 torvalds/master
babf0bb978e3c9fc (torvalds/master) Merge tag 'xfs-5.19-for-linus' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
e375780b631a5fc2 Merge tag 'fsnotify_for_v5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
8b728edc5be16179 Merge tag 'fs_for_v5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
3f306ea2e18568f6 Merge tag 'dma-mapping-5.19-2022-05-25' of git://git.infradead.org/users/hch/dma-mapping
fbe86daca0ba878b Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
$
Coping with:
$ git log --oneline -2 d16495a982324f75
d16495a982324f75 libbpf: remove bpf_create_map*() APIs
e2371b1632b1c61c libbpf: start 1.0 development cycle
$
As the __weak function fails to build as it calls the now removed
bpf_create_map() API.
Testing:
$ rpm -q libbpf-devel
libbpf-devel-0.4.0-2.fc35.x86_64
$
$ make -C tools/perf BUILD_BPF_SKEL=1 LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
$ cat /tmp/build/perf/feature/test-libbpf-bpf_map_create.make.output
test-libbpf-bpf_map_create.c: In function ‘main’:
test-libbpf-bpf_map_create.c:6:16: error: implicit declaration of function ‘bpf_map_create’; did you mean ‘bpf_map_freeze’? [-Werror=implicit-function-declaration]
6 | return bpf_map_create(0 /* map_type */, NULL /* map_name */, 0, /* key_size */,
| ^~~~~~~~~~~~~~
| bpf_map_freeze
test-libbpf-bpf_map_create.c:6:87: error: expected expression before ‘,’ token
6 | return bpf_map_create(0 /* map_type */, NULL /* map_name */, 0, /* key_size */,
| ^
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_map_create>:' -A20
000000000058b290 <bpf_map_create>:
{
58b290: 55 push %rbp
58b291: 48 89 e5 mov %rsp,%rbp
58b294: 48 83 ec 10 sub $0x10,%rsp
58b298: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
58b29f: 00 00
58b2a1: 48 89 45 f8 mov %rax,-0x8(%rbp)
58b2a5: 31 c0 xor %eax,%eax
return bpf_create_map(map_type, key_size, value_size, max_entries, 0);
58b2a7: 48 8b 45 f8 mov -0x8(%rbp),%rax
58b2ab: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
58b2b2: 00 00
58b2b4: 75 10 jne 58b2c6 <bpf_map_create+0x36>
}
58b2b6: c9 leave
58b2b7: 89 d6 mov %edx,%esi
58b2b9: 89 ca mov %ecx,%edx
58b2bb: 44 89 c1 mov %r8d,%ecx
return bpf_create_map(map_type, key_size, value_size, max_entries, 0);
58b2be: 45 31 c0 xor %r8d,%r8d
$
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Song Liu <songliubraving@fb.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/Yo+XvQNKL4K5khl2@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-05-26 14:48:58 +00:00
$( call feature_check,libbpf-bpf_map_create)
ifeq ( $( feature-libbpf-bpf_map_create) , 1)
CFLAGS += -DHAVE_LIBBPF_BPF_MAP_CREATE
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
perf build: Stop using __weak bpf_object__next_program() to handle older libbpf versions
By adding a feature test for bpf_object__next_program() 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_object__next_program.make.output
test-libbpf-bpf_object__next_program.c: In function ‘main’:
test-libbpf-bpf_object__next_program.c:6:9: error: implicit declaration of function ‘bpf_object__next_program’; did you mean ‘bpf_object__unpin_programs’? [-Werror=implicit-function-declaration]
6 | bpf_object__next_program(NULL /* obj */, NULL /* prev */);
| ^~~~~~~~~~~~~~~~~~~~~~~~
| bpf_object__unpin_programs
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_object__next_program>:' -A20
00000000005b2dc0 <bpf_object__next_program>:
{
5b2dc0: 55 push %rbp
5b2dc1: 48 89 e5 mov %rsp,%rbp
5b2dc4: 48 83 ec 10 sub $0x10,%rsp
5b2dc8: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5b2dcf: 00 00
5b2dd1: 48 89 45 f8 mov %rax,-0x8(%rbp)
5b2dd5: 31 c0 xor %eax,%eax
return bpf_program__next(prev, obj);
5b2dd7: 48 8b 45 f8 mov -0x8(%rbp),%rax
5b2ddb: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
5b2de2: 00 00
5b2de4: 75 0f jne 5b2df5 <bpf_object__next_program+0x35>
}
5b2de6: c9 leave
5b2de7: 49 89 f8 mov %rdi,%r8
5b2dea: 48 89 f7 mov %rsi,%rdi
return bpf_program__next(prev, obj);
5b2ded: 4c 89 c6 mov %r8,%rsi
5b2df0: e9 3b b4 e5 ff jmp 40e230 <bpf_program__next@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:09:42 +00:00
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_PROGRAM
perf build: Stop using __weak bpf_object__next_map() to handle older libbpf versions
By adding a feature test for bpf_object__next_map() 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_object__next_map.make.output
test-libbpf-bpf_object__next_map.c: In function ‘main’:
test-libbpf-bpf_object__next_map.c:6:9: error: implicit declaration of function ‘bpf_object__next_map’; did you mean ‘bpf_object__next’? [-Werror=implicit-function-declaration]
6 | bpf_object__next_map(NULL /* obj */, NULL /* prev */);
| ^~~~~~~~~~~~~~~~~~~~
| bpf_object__next
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_object__next_map>:' -A20
00000000005b2e00 <bpf_object__next_map>:
{
5b2e00: 55 push %rbp
5b2e01: 48 89 e5 mov %rsp,%rbp
5b2e04: 48 83 ec 10 sub $0x10,%rsp
5b2e08: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5b2e0f: 00 00
5b2e11: 48 89 45 f8 mov %rax,-0x8(%rbp)
5b2e15: 31 c0 xor %eax,%eax
return bpf_map__next(prev, obj);
5b2e17: 48 8b 45 f8 mov -0x8(%rbp),%rax
5b2e1b: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
5b2e22: 00 00
5b2e24: 75 0f jne 5b2e35 <bpf_object__next_map+0x35>
}
5b2e26: c9 leave
5b2e27: 49 89 f8 mov %rdi,%r8
5b2e2a: 48 89 f7 mov %rsi,%rdi
return bpf_map__next(prev, obj);
5b2e2d: 4c 89 c6 mov %r8,%rsi
5b2e30: e9 cb b1 e5 ff jmp 40e000 <bpf_map__next@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:13:17 +00:00
CFLAGS += -DHAVE_LIBBPF_BPF_OBJECT__NEXT_MAP
perf build: Stop using __weak btf__raw_data() to handle older libbpf versions
By adding a feature test for btf__raw_data() 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-btf__raw_data.make.output
test-libbpf-btf__raw_data.c: In function ‘main’:
test-libbpf-btf__raw_data.c:6:9: error: implicit declaration of function ‘btf__raw_data’; did you mean ‘btf__get_raw_data’? [-Werror=implicit-function-declaration]
6 | btf__raw_data(NULL /* btf_ro */, NULL /* size */);
| ^~~~~~~~~~~~~
| btf__get_raw_data
cc1: all warnings being treated as errors
$ objdump -dS /tmp/build/perf/perf | grep '<btf__raw_data>:' -A20
00000000005b3050 <btf__raw_data>:
{
5b3050: 55 push %rbp
5b3051: 48 89 e5 mov %rsp,%rbp
5b3054: 48 83 ec 10 sub $0x10,%rsp
5b3058: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
5b305f: 00 00
5b3061: 48 89 45 f8 mov %rax,-0x8(%rbp)
5b3065: 31 c0 xor %eax,%eax
return btf__get_raw_data(btf_ro, size);
5b3067: 48 8b 45 f8 mov -0x8(%rbp),%rax
5b306b: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
5b3072: 00 00
5b3074: 75 06 jne 5b307c <btf__raw_data+0x2c>
}
5b3076: c9 leave
return btf__get_raw_data(btf_ro, size);
5b3077: e9 14 99 e5 ff jmp 40c990 <btf__get_raw_data@plt>
5b307c: e8 af a7 e5 ff call 40d830 <__stack_chk_fail@plt>
5b3081: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
5b3088: 00 00 00 00
$
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:16:20 +00:00
CFLAGS += -DHAVE_LIBBPF_BTF__RAW_DATA
perf build: Stop using __weak bpf_map_create() to handle older libbpf versions
By adding a feature test for bpf_map_create() and providing a fallback if
it isn't present in older versions of libbpf.
This also fixes the build with torvalds/master at this point:
$ git log --oneline -5 torvalds/master
babf0bb978e3c9fc (torvalds/master) Merge tag 'xfs-5.19-for-linus' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
e375780b631a5fc2 Merge tag 'fsnotify_for_v5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
8b728edc5be16179 Merge tag 'fs_for_v5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
3f306ea2e18568f6 Merge tag 'dma-mapping-5.19-2022-05-25' of git://git.infradead.org/users/hch/dma-mapping
fbe86daca0ba878b Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
$
Coping with:
$ git log --oneline -2 d16495a982324f75
d16495a982324f75 libbpf: remove bpf_create_map*() APIs
e2371b1632b1c61c libbpf: start 1.0 development cycle
$
As the __weak function fails to build as it calls the now removed
bpf_create_map() API.
Testing:
$ rpm -q libbpf-devel
libbpf-devel-0.4.0-2.fc35.x86_64
$
$ make -C tools/perf BUILD_BPF_SKEL=1 LIBBPF_DYNAMIC=1 O=/tmp/build/perf install-bin
$ cat /tmp/build/perf/feature/test-libbpf-bpf_map_create.make.output
test-libbpf-bpf_map_create.c: In function ‘main’:
test-libbpf-bpf_map_create.c:6:16: error: implicit declaration of function ‘bpf_map_create’; did you mean ‘bpf_map_freeze’? [-Werror=implicit-function-declaration]
6 | return bpf_map_create(0 /* map_type */, NULL /* map_name */, 0, /* key_size */,
| ^~~~~~~~~~~~~~
| bpf_map_freeze
test-libbpf-bpf_map_create.c:6:87: error: expected expression before ‘,’ token
6 | return bpf_map_create(0 /* map_type */, NULL /* map_name */, 0, /* key_size */,
| ^
cc1: all warnings being treated as errors
$
$ objdump -dS /tmp/build/perf/perf | grep '<bpf_map_create>:' -A20
000000000058b290 <bpf_map_create>:
{
58b290: 55 push %rbp
58b291: 48 89 e5 mov %rsp,%rbp
58b294: 48 83 ec 10 sub $0x10,%rsp
58b298: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
58b29f: 00 00
58b2a1: 48 89 45 f8 mov %rax,-0x8(%rbp)
58b2a5: 31 c0 xor %eax,%eax
return bpf_create_map(map_type, key_size, value_size, max_entries, 0);
58b2a7: 48 8b 45 f8 mov -0x8(%rbp),%rax
58b2ab: 64 48 2b 04 25 28 00 sub %fs:0x28,%rax
58b2b2: 00 00
58b2b4: 75 10 jne 58b2c6 <bpf_map_create+0x36>
}
58b2b6: c9 leave
58b2b7: 89 d6 mov %edx,%esi
58b2b9: 89 ca mov %ecx,%edx
58b2bb: 44 89 c1 mov %r8d,%ecx
return bpf_create_map(map_type, key_size, value_size, max_entries, 0);
58b2be: 45 31 c0 xor %r8d,%r8d
$
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Song Liu <songliubraving@fb.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/Yo+XvQNKL4K5khl2@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-05-26 14:48:58 +00:00
CFLAGS += -DHAVE_LIBBPF_BPF_MAP_CREATE
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
2022-06-29 18:25:04 +00:00
i f n e q ( $( NO_JEVENTS ) , 1 )
ifeq ( $( wildcard pmu-events/arch/$( SRCARCH) /mapfile.csv) ,)
NO_JEVENTS := 1
endif
e n d i f
i f n e q ( $( NO_JEVENTS ) , 1 )
NO_JEVENTS := 0
ifndef PYTHON
$( warning No python interpreter disabling jevent generation)
NO_JEVENTS := 1
else
# jevents.py uses f-strings present in Python 3.6 released in Dec. 2016.
JEVENTS_PYTHON_GOOD := $( shell $( PYTHON) -c 'import sys;print("1" if(sys.version_info.major >= 3 and sys.version_info.minor >= 6) else "0")' 2> /dev/null)
ifneq ( $( JEVENTS_PYTHON_GOOD) , 1)
$( warning Python interpreter too old ( older than 3.6) disabling jevent generation)
NO_JEVENTS := 1
endif
endif
e n d i f
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
else
ifeq ( $( feature-libbfd-liberty-z) , 1)
EXTLIBS += -lbfd -lopcodes -liberty -lz
endif
2014-04-23 14:53:25 +00:00
endif
2021-09-10 22:57:56 +00:00
$( call feature_check,disassembler-four-args)
tools perf: Fix compilation error with new binutils
binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/perf/util/annotate.c, e.g. on debian
unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
Wire up the feature test and switch to init_disassemble_info_compat(),
which were introduced in prior commits, fixing the compilation failure.
I verified that perf can still disassemble bpf programs by using bpftrace
under load, recording a perf trace, and then annotating the bpf "function"
with and without the changes. With old binutils there's no change in output
before/after this patch. When comparing the output from old binutils (2.35)
to new bintuils with the patch (upstream snapshot) there are a few output
differences, but they are unrelated to this patch. An example hunk is:
1.15 : 55:mov %rbp,%rdx
0.00 : 58:add $0xfffffffffffffff8,%rdx
0.00 : 5c:xor %ecx,%ecx
- 1.03 : 5e:callq 0xffffffffe12aca3c
+ 1.03 : 5e:call 0xffffffffe12aca3c
0.00 : 63:xor %eax,%eax
- 2.18 : 65:leaveq
- 2.82 : 66:retq
+ 2.18 : 65:leave
+ 2.82 : 66:ret
Signed-off-by: Andres Freund <andres@anarazel.de>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-5-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-08-01 01:38:30 +00:00
$( call feature_check,disassembler-init-styled)
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
tools perf: Fix compilation error with new binutils
binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/perf/util/annotate.c, e.g. on debian
unstable.
Relevant binutils commit:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
Wire up the feature test and switch to init_disassemble_info_compat(),
which were introduced in prior commits, fixing the compilation failure.
I verified that perf can still disassemble bpf programs by using bpftrace
under load, recording a perf trace, and then annotating the bpf "function"
with and without the changes. With old binutils there's no change in output
before/after this patch. When comparing the output from old binutils (2.35)
to new bintuils with the patch (upstream snapshot) there are a few output
differences, but they are unrelated to this patch. An example hunk is:
1.15 : 55:mov %rbp,%rdx
0.00 : 58:add $0xfffffffffffffff8,%rdx
0.00 : 5c:xor %ecx,%ecx
- 1.03 : 5e:callq 0xffffffffe12aca3c
+ 1.03 : 5e:call 0xffffffffe12aca3c
0.00 : 63:xor %eax,%eax
- 2.18 : 65:leaveq
- 2.82 : 66:retq
+ 2.18 : 65:leave
+ 2.82 : 66:ret
Signed-off-by: Andres Freund <andres@anarazel.de>
Acked-by: Quentin Monnet <quentin@isovalent.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Ben Hutchings <benh@debian.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Sedat Dilek <sedat.dilek@gmail.com>
Cc: bpf@vger.kernel.org
Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
Link: https://lore.kernel.org/r/20220801013834.156015-5-andres@anarazel.de
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-08-01 01:38:30 +00:00
i f e q ( $( feature -disassembler -init -styled ) , 1 )
CFLAGS += -DDISASM_INIT_STYLED
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
2022-08-18 12:09:56 +00:00
MSG = $( shell printf '...%40s: %s' $( 1) $( $( 1) ) )
2014-02-19 15:52:55 +00:00
e n d e f
tools build: Fix feature detection output due to eval expansion
As the first eval expansion is used only to generate Makefile statements,
messages should not be displayed at this stage, as for example conditional
expressions are not evaluated.
It can be seen for example in the output of feature detection for bpftool,
where the number of detected features does not change, despite turning on
the verbose mode (VF = 1) and there are additional features to display.
Fix this issue by escaping the $ before $(info) statements, to ensure that
messages are printed only when the function containing them is actually
executed, and not when it is expanded.
In addition, move the $(info) statement out of feature_print_status, due to
the fact that is called both inside and outside an eval context, and place
it to the caller so that the $ can be escaped when necessary. For symmetry,
move the $(info) statement also out of feature_print_text, and place it to
the caller.
Force the TMP variable evaluation in verbose mode, to display the features
in FEATURE_TESTS that are not in FEATURE_DISPLAY.
Reorder perf feature detection messages (first non-verbose, then verbose
ones) by moving the call to feature_display_entries earlier, before the VF
environment variable check.
Also, remove the newline from that function, as perf might display
additional messages. Move the newline to perf Makefile, and display another
one if displaying the detection result is not deferred as in the case of
bpftool.
Committer testing:
Collecting the output from:
$ make VF=1 -C tools/bpf/bpftool/ |& grep "Auto-detecting system features" -A20
$ diff -u before after
--- before 2022-08-18 09:59:55.460529231 -0300
+++ after 2022-08-18 10:01:11.182517282 -0300
@@ -4,3 +4,5 @@
... libbfd-liberty-z: [ on ]
... libcap: [ on ]
... clang-bpf-co-re: [ on ]
+... disassembler-four-args: [ on ]
+... disassembler-init-styled: [ OFF ]
$
Fixes: 0afc5cad387db560 ("perf build: Separate feature make support into config/Makefile.feature")
Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: bpf@vger.kernel.org
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/r/20220818120957.319995-1-roberto.sassu@huaweicloud.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-08-18 12:09:55 +00:00
i f e q ( $( feature_display ) , 1 )
$( call feature_display_entries)
e n d i 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.
tools build: Fix feature detection output due to eval expansion
As the first eval expansion is used only to generate Makefile statements,
messages should not be displayed at this stage, as for example conditional
expressions are not evaluated.
It can be seen for example in the output of feature detection for bpftool,
where the number of detected features does not change, despite turning on
the verbose mode (VF = 1) and there are additional features to display.
Fix this issue by escaping the $ before $(info) statements, to ensure that
messages are printed only when the function containing them is actually
executed, and not when it is expanded.
In addition, move the $(info) statement out of feature_print_status, due to
the fact that is called both inside and outside an eval context, and place
it to the caller so that the $ can be escaped when necessary. For symmetry,
move the $(info) statement also out of feature_print_text, and place it to
the caller.
Force the TMP variable evaluation in verbose mode, to display the features
in FEATURE_TESTS that are not in FEATURE_DISPLAY.
Reorder perf feature detection messages (first non-verbose, then verbose
ones) by moving the call to feature_display_entries earlier, before the VF
environment variable check.
Also, remove the newline from that function, as perf might display
additional messages. Move the newline to perf Makefile, and display another
one if displaying the detection result is not deferred as in the case of
bpftool.
Committer testing:
Collecting the output from:
$ make VF=1 -C tools/bpf/bpftool/ |& grep "Auto-detecting system features" -A20
$ diff -u before after
--- before 2022-08-18 09:59:55.460529231 -0300
+++ after 2022-08-18 10:01:11.182517282 -0300
@@ -4,3 +4,5 @@
... libbfd-liberty-z: [ on ]
... libcap: [ on ]
... clang-bpf-co-re: [ on ]
+... disassembler-four-args: [ on ]
+... disassembler-init-styled: [ OFF ]
$
Fixes: 0afc5cad387db560 ("perf build: Separate feature make support into config/Makefile.feature")
Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: bpf@vger.kernel.org
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/r/20220818120957.319995-1-roberto.sassu@huaweicloud.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-08-18 12:09:55 +00:00
$( foreach feat,$( FEATURE_TESTS_EXTRA) ,$( call feature_print_status,$( feat) ,) $( info $( MSG) ) )
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)
tools build: Fix feature detection output due to eval expansion
As the first eval expansion is used only to generate Makefile statements,
messages should not be displayed at this stage, as for example conditional
expressions are not evaluated.
It can be seen for example in the output of feature detection for bpftool,
where the number of detected features does not change, despite turning on
the verbose mode (VF = 1) and there are additional features to display.
Fix this issue by escaping the $ before $(info) statements, to ensure that
messages are printed only when the function containing them is actually
executed, and not when it is expanded.
In addition, move the $(info) statement out of feature_print_status, due to
the fact that is called both inside and outside an eval context, and place
it to the caller so that the $ can be escaped when necessary. For symmetry,
move the $(info) statement also out of feature_print_text, and place it to
the caller.
Force the TMP variable evaluation in verbose mode, to display the features
in FEATURE_TESTS that are not in FEATURE_DISPLAY.
Reorder perf feature detection messages (first non-verbose, then verbose
ones) by moving the call to feature_display_entries earlier, before the VF
environment variable check.
Also, remove the newline from that function, as perf might display
additional messages. Move the newline to perf Makefile, and display another
one if displaying the detection result is not deferred as in the case of
bpftool.
Committer testing:
Collecting the output from:
$ make VF=1 -C tools/bpf/bpftool/ |& grep "Auto-detecting system features" -A20
$ diff -u before after
--- before 2022-08-18 09:59:55.460529231 -0300
+++ after 2022-08-18 10:01:11.182517282 -0300
@@ -4,3 +4,5 @@
... libbfd-liberty-z: [ on ]
... libcap: [ on ]
... clang-bpf-co-re: [ on ]
+... disassembler-four-args: [ on ]
+... disassembler-init-styled: [ OFF ]
$
Fixes: 0afc5cad387db560 ("perf build: Separate feature make support into config/Makefile.feature")
Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: bpf@vger.kernel.org
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/r/20220818120957.319995-1-roberto.sassu@huaweicloud.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-08-18 12:09:55 +00:00
$( call feature_print_text,"DWARF post unwind library" , $( dwarf-post-unwind-text) ) $( info $( MSG) )
2015-12-23 17:58:31 +00:00
endif
2014-02-19 15:52:54 +00:00
e n d i f
2014-12-29 14:03:09 +00:00
tools build: Fix feature detection output due to eval expansion
As the first eval expansion is used only to generate Makefile statements,
messages should not be displayed at this stage, as for example conditional
expressions are not evaluated.
It can be seen for example in the output of feature detection for bpftool,
where the number of detected features does not change, despite turning on
the verbose mode (VF = 1) and there are additional features to display.
Fix this issue by escaping the $ before $(info) statements, to ensure that
messages are printed only when the function containing them is actually
executed, and not when it is expanded.
In addition, move the $(info) statement out of feature_print_status, due to
the fact that is called both inside and outside an eval context, and place
it to the caller so that the $ can be escaped when necessary. For symmetry,
move the $(info) statement also out of feature_print_text, and place it to
the caller.
Force the TMP variable evaluation in verbose mode, to display the features
in FEATURE_TESTS that are not in FEATURE_DISPLAY.
Reorder perf feature detection messages (first non-verbose, then verbose
ones) by moving the call to feature_display_entries earlier, before the VF
environment variable check.
Also, remove the newline from that function, as perf might display
additional messages. Move the newline to perf Makefile, and display another
one if displaying the detection result is not deferred as in the case of
bpftool.
Committer testing:
Collecting the output from:
$ make VF=1 -C tools/bpf/bpftool/ |& grep "Auto-detecting system features" -A20
$ diff -u before after
--- before 2022-08-18 09:59:55.460529231 -0300
+++ after 2022-08-18 10:01:11.182517282 -0300
@@ -4,3 +4,5 @@
... libbfd-liberty-z: [ on ]
... libcap: [ on ]
... clang-bpf-co-re: [ on ]
+... disassembler-four-args: [ on ]
+... disassembler-init-styled: [ OFF ]
$
Fixes: 0afc5cad387db560 ("perf build: Separate feature make support into config/Makefile.feature")
Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: bpf@vger.kernel.org
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Quentin Monnet <quentin@isovalent.com>
Link: https://lore.kernel.org/r/20220818120957.319995-1-roberto.sassu@huaweicloud.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2022-08-18 12:09:55 +00:00
$( info )
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
2022-07-19 17:05:54 +00:00
# tests.
2021-04-26 18:27:32 +00:00
$( shell rm -f $ ( FEATURE_DUMP_FILENAME ) )
$( foreach feat ,$ ( FEATURE_TESTS ) ,$ ( shell echo "$ ( call feature_assign ,$ ( feat ) ) " >> $ ( FEATURE_DUMP_FILENAME ) ) )