mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	tools build: Add capability-related feature detection
Add utilities to help checking capabilities of the running procss.  Make
perf link with libcap, if it is available. If no libcap-dev[el], assume
no capabilities.
Committer testing:
  $ make O=/tmp/build/perf -C tools/perf install-bin
  make: Entering directory '/home/acme/git/perf/tools/perf'
    BUILD:   Doing 'make -j8' parallel build
  Auto-detecting system features:
  <SNIP>
  ...                        libbfd: [ on  ]
  ...                        libcap: [ OFF ]
  ...                        libelf: [ on  ]
  <SNIP>
  Makefile.config:833: No libcap found, disables capability support, please install libcap-devel/libcap-dev
  <SNIP>
  $ grep libcap /tmp/build/perf/FEATURE-DUMP
  feature-libcap=0
  $ cat /tmp/build/perf/feature/test-libcap.make.output
  test-libcap.c:2:10: fatal error: sys/capability.h: No such file or directory
      2 | #include <sys/capability.h>
        |          ^~~~~~~~~~~~~~~~~~
  compilation terminated.
  $
Now install libcap-devel and try again:
  $ make O=/tmp/build/perf -C tools/perf install-bin
  make: Entering directory '/home/acme/git/perf/tools/perf'
    BUILD:   Doing 'make -j8' parallel build
  Warning: Kernel ABI header at 'tools/include/linux/bits.h' differs from latest version at 'include/linux/bits.h'
  diff -u tools/include/linux/bits.h include/linux/bits.h
  Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
  diff -u tools/arch/x86/include/asm/cpufeatures.h arch/x86/include/asm/cpufeatures.h
  Auto-detecting system features:
  <SNIP>
  ...                        libbfd: [ on  ]
  ...                        libcap: [ on  ]
  ...                        libelf: [ on  ]
  <SNIP>>
    CC       /tmp/build/perf/jvmti/libjvmti.o
  <SNIP>>
  $ grep libcap /tmp/build/perf/FEATURE-DUMP
  feature-libcap=1
  $ cat /tmp/build/perf/feature/test-libcap.make.output
  $ ldd /tmp/build/perf/feature/test-libcap.make.bin
  ldd: /tmp/build/perf/feature/test-libcap.make.bin: No such file or directory
  $ ldd /tmp/build/perf/feature/test-libcap.bin
  	linux-vdso.so.1 (0x00007ffc35bfe000)
  	libcap.so.2 => /lib64/libcap.so.2 (0x00007ff9c62ff000)
  	libc.so.6 => /lib64/libc.so.6 (0x00007ff9c6139000)
  	/lib64/ld-linux-x86-64.so.2 (0x00007ff9c6326000)
  $
Signed-off-by: Igor Lubashev <ilubashe@akamai.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: James Morris <jmorris@namei.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
[ split from a larger patch ]
Link: http://lkml.kernel.org/r/8a1e76cf5c7c9796d0d4d240fbaa85305298aafa.1565188228.git.ilubashe@akamai.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									40d81772da
								
							
						
					
					
						commit
						74d5f3d06f
					
				
					 5 changed files with 39 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -42,6 +42,7 @@ FEATURE_TESTS_BASIC :=                  \
 | 
			
		|||
        gtk2-infobar                    \
 | 
			
		||||
        libaudit                        \
 | 
			
		||||
        libbfd                          \
 | 
			
		||||
        libcap                          \
 | 
			
		||||
        libelf                          \
 | 
			
		||||
        libelf-getphdrnum               \
 | 
			
		||||
        libelf-gelf_getnote             \
 | 
			
		||||
| 
						 | 
				
			
			@ -110,6 +111,7 @@ FEATURE_DISPLAY ?=              \
 | 
			
		|||
         gtk2                   \
 | 
			
		||||
         libaudit               \
 | 
			
		||||
         libbfd                 \
 | 
			
		||||
         libcap                 \
 | 
			
		||||
         libelf                 \
 | 
			
		||||
         libnuma                \
 | 
			
		||||
         numa_num_possible_cpus \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ FILES=                                          \
 | 
			
		|||
         test-libbfd-liberty.bin                \
 | 
			
		||||
         test-libbfd-liberty-z.bin              \
 | 
			
		||||
         test-cplus-demangle.bin                \
 | 
			
		||||
         test-libcap.bin			\
 | 
			
		||||
         test-libelf.bin                        \
 | 
			
		||||
         test-libelf-getphdrnum.bin             \
 | 
			
		||||
         test-libelf-gelf_getnote.bin           \
 | 
			
		||||
| 
						 | 
				
			
			@ -105,6 +106,9 @@ $(OUTPUT)test-fortify-source.bin:
 | 
			
		|||
$(OUTPUT)test-bionic.bin:
 | 
			
		||||
	$(BUILD)
 | 
			
		||||
 | 
			
		||||
$(OUTPUT)test-libcap.bin:
 | 
			
		||||
	$(BUILD) -lcap
 | 
			
		||||
 | 
			
		||||
$(OUTPUT)test-libelf.bin:
 | 
			
		||||
	$(BUILD) -lelf
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										20
									
								
								tools/build/feature/test-libcap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								tools/build/feature/test-libcap.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
// SPDX-License-Identifier: GPL-2.0
 | 
			
		||||
#include <sys/capability.h>
 | 
			
		||||
#include <linux/capability.h>
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	cap_flag_value_t val;
 | 
			
		||||
	cap_t caps = cap_get_proc();
 | 
			
		||||
 | 
			
		||||
	if (!caps)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	if (cap_get_flag(caps, CAP_SYS_ADMIN, CAP_EFFECTIVE, &val) != 0)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	if (cap_free(caps) != 0)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -824,6 +824,17 @@ ifndef NO_LIBZSTD
 | 
			
		|||
  endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef NO_LIBCAP
 | 
			
		||||
  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
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef NO_BACKTRACE
 | 
			
		||||
  ifeq ($(feature-backtrace), 1)
 | 
			
		||||
    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,6 +88,8 @@ include ../scripts/utilities.mak
 | 
			
		|||
#
 | 
			
		||||
# Define NO_LIBBPF if you do not want BPF support
 | 
			
		||||
#
 | 
			
		||||
# Define NO_LIBCAP if you do not want process capabilities considered by perf
 | 
			
		||||
#
 | 
			
		||||
# Define NO_SDT if you do not want to define SDT event in perf tools,
 | 
			
		||||
# note that it doesn't disable SDT scanning support.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue