tools build: Add test for presence of __get_cpuid() gcc builtin

The auxtrace code needed by Intel PT uses the __get_cpuid() gcc builtin,
that is not present in old systems, breaking the build.

Add a test to check for that builtin and disable AUXTRACE in those
systems.

  [acme@rhel5 linux]$  make NO_LIBPERL=1 -C tools/perf O=/tmp/build/perf install-bin
  make: Entering directory `/home/acme/git/linux/tools/perf'
    BUILD:   Doing 'make -j2' parallel build

  Auto-detecting system features:
  <SNIP>
  ...                          lzma: [ on  ]
  ...                     get_cpuid: [ OFF ]
  <SNIP>
  config/Makefile:630: Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc
    MKDIR    /tmp/build/perf/util/
  <SNIP>

This fixes the build on old systems such as RHEL/CentOS 5.11.

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@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Victor Kamensky <victor.kamensky@linaro.org>
Cc: Vinson Lee <vlee@twopensource.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-d4puslul0jltoodzpx9r4sje@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Arnaldo Carvalho de Melo 2015-09-17 12:54:30 -03:00
parent f8ac8606fd
commit b0063dbfb0
5 changed files with 28 additions and 5 deletions

View File

@ -52,7 +52,8 @@ FEATURE_TESTS ?= \
timerfd \ timerfd \
libdw-dwarf-unwind \ libdw-dwarf-unwind \
zlib \ zlib \
lzma lzma \
get_cpuid
FEATURE_DISPLAY ?= \ FEATURE_DISPLAY ?= \
dwarf \ dwarf \
@ -69,7 +70,8 @@ FEATURE_DISPLAY ?= \
libunwind \ libunwind \
libdw-dwarf-unwind \ libdw-dwarf-unwind \
zlib \ zlib \
lzma lzma \
get_cpuid
# Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features. # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
# If in the future we need per-feature checks/flags for features not # If in the future we need per-feature checks/flags for features not

View File

@ -35,7 +35,8 @@ FILES= \
test-compile-x32.bin \ test-compile-x32.bin \
test-zlib.bin \ test-zlib.bin \
test-lzma.bin \ test-lzma.bin \
test-bpf.bin test-bpf.bin \
test-get_cpuid.bin
CC := $(CROSS_COMPILE)gcc -MD CC := $(CROSS_COMPILE)gcc -MD
PKG_CONFIG := $(CROSS_COMPILE)pkg-config PKG_CONFIG := $(CROSS_COMPILE)pkg-config
@ -166,6 +167,9 @@ test-zlib.bin:
test-lzma.bin: test-lzma.bin:
$(BUILD) -llzma $(BUILD) -llzma
test-get_cpuid.bin:
$(BUILD)
test-bpf.bin: test-bpf.bin:
$(BUILD) $(BUILD)

View File

@ -121,6 +121,10 @@
# include "test-lzma.c" # include "test-lzma.c"
#undef main #undef main
#define main main_test_get_cpuid
# include "test-get_cpuid.c"
#undef main
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
main_test_libpython(); main_test_libpython();
@ -148,6 +152,7 @@ int main(int argc, char *argv[])
main_test_zlib(); main_test_zlib();
main_test_pthread_attr_setaffinity_np(); main_test_pthread_attr_setaffinity_np();
main_test_lzma(); main_test_lzma();
main_test_get_cpuid();
return 0; return 0;
} }

View File

@ -0,0 +1,7 @@
#include <cpuid.h>
int main(void)
{
unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0;
return __get_cpuid(0x15, &eax, &ebx, &ecx, &edx);
}

View File

@ -626,8 +626,13 @@ ifdef LIBBABELTRACE
endif endif
ifndef NO_AUXTRACE ifndef NO_AUXTRACE
$(call detected,CONFIG_AUXTRACE) ifeq ($(feature-get_cpuid), 0)
CFLAGS += -DHAVE_AUXTRACE_SUPPORT msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
NO_AUXTRACE := 1
else
$(call detected,CONFIG_AUXTRACE)
CFLAGS += -DHAVE_AUXTRACE_SUPPORT
endif
endif endif
# Among the variables below, these: # Among the variables below, these: